Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nano: drop frozen V10 config, make triggerObjectTable more easily customizable #40321

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Configuration/Eras/python/Era_Run3_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@
from Configuration.ProcessModifiers.dd4hep_cff import dd4hep
from Configuration.Eras.Modifier_run3_egamma_cff import run3_egamma
from Configuration.Eras.Modifier_run2_egamma_2018_cff import run2_egamma_2018
from Configuration.Eras.Modifier_run2_HLTconditions_2018_cff import run2_HLTconditions_2018
from Configuration.Eras.Modifier_run3_RPC_cff import run3_RPC

Run3 = cms.ModifierChain(Run2_2018.copyAndExclude([run2_GEM_2017, ctpps_2018, run2_egamma_2018]),
Run3 = cms.ModifierChain(Run2_2018.copyAndExclude([run2_GEM_2017, ctpps_2018, run2_egamma_2018, run2_HLTconditions_2018]),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@missirol @Martin-Grunewald could you please confirm that this is ok for HLT in Run3?

Copy link
Contributor

@missirol missirol Jan 10, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you please confirm that this is ok for HLT in Run3?

Yes, it is okay for HLT.

To my knowledge, nothing that concerns HLT directly depends on this modifier. It is used in the HLT Offline DQM (FYI: @cms-sw/dqm-l2 (@ckoraka)), e.g.
https://github.com/cms-sw/cmssw/blob/a9b836229a8b2869e3d342b70dd1332e45e0681a/DQMOffline/Trigger/python/TopMonitoring_cff.py

For reference, this change was already discussed in #39082 and #39084 (neither of which was merged, despite what the GitHub labels say).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, looking at the discussion in #39084 it looks like people actually wanted this change to be included then; not clear why it was reverted in #39119...

run3_common, run3_egamma, run3_GEM, run3_HB, run3_HFSL, stage2L1Trigger_2021, ctpps_2022, dd4hep, run3_RPC)

24 changes: 1 addition & 23 deletions Configuration/PyReleaseValidation/python/relval_nano.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,6 @@
##12.2 INPUT (mc only)
steps['TTbarMINIAOD12.2'] = {'INPUT':InputInfo(location='STD',
dataSet='/TTToSemiLeptonic_TuneCP5_13p6TeV-powheg-pythia8/Run3Winter22MiniAOD-FlatPU0to70_122X_mcRun3_2021_realistic_v9-v2/MINIAODSIM')}
steps['NANO_mc12.2_v10']=merge([{'--era':'Run3,run3_nanoAOD_122',
'--conditions':'auto:phase1_2022_realistic',
'-s':'NANO:PhysicsTools/NanoAOD/V10/nano_cff,DQM:@nanoAODDQM'},
_NANO_mc])
steps['NANO_mc12.2']=merge([{'--era':'Run3,run3_nanoAOD_122',
'--conditions':'auto:phase1_2022_realistic'},
_NANO_mc])
Expand All @@ -101,32 +97,20 @@
steps['TTbarMINIAOD12.4'] = {'INPUT':InputInfo(location='STD',
## to be updated as soon as some TTbar appears in a 12.4 campaign
dataSet='/RelValTTbar_14TeV/CMSSW_12_4_9_patch1-124X_mcRun3_2022_realistic_v10_BS2022-v1/MINIAODSIM')}
steps['NANO_mc12.4_v10']=merge([{'--era':'Run3,run3_nanoAOD_124',
'--conditions':'auto:phase1_2022_realistic',
'-s':'NANO:PhysicsTools/NanoAOD/V10/nano_cff,DQM:@nanoAODDQM'},
_NANO_mc])
steps['NANO_mc12.4']=merge([{'--era':'Run3,run3_nanoAOD_124',
'--conditions':'auto:phase1_2022_realistic'},
_NANO_mc])

steps['MuonEG2022MINIAOD12.4'] = {'INPUT':InputInfo(location='STD',ls=run3_lumis,
dataSet='/MuonEG/Run2022D-PromptReco-v2/MINIAOD')}
steps['NANO_data12.4_v10']=merge([{'--era':'Run3,run3_nanoAOD_124',
'--conditions':'auto:run3_data',
'-s':'NANO:PhysicsTools/NanoAOD/V10/nano_cff,DQM:@nanoAODDQM'},
_NANO_data])
steps['NANO_data12.4']=merge([{'--era':'Run3,run3_nanoAOD_124',
'--conditions':'auto:run3_data'},
_NANO_data])

##12.6 workflows ("from scratch")
##12.6 workflows
steps['TTBarMINIAOD12.6'] = {'INPUT':InputInfo(location='STD',ls=run3_lumis,
## this is a dataset from the last pre-release: to be updated much too often IMO
dataSet='/RelValTTbar_14TeV/CMSSW_12_6_0_pre4-PU_125X_mcRun3_2022_realistic_v4-v1/MINIAODSIM')}
steps['NANO_mc12.6_v10']=merge([{'--era':'Run3',
'--conditions':'auto:phase1_2022_realistic',
'-s':'NANO:PhysicsTools/NanoAOD/V10/nano_cff,DQM:@nanoAODDQM'},
_NANO_mc])
steps['NANO_mc12.6']=merge([{'--era':'Run3',
'--conditions':'auto:phase1_2022_realistic'},
_NANO_mc])
Expand All @@ -144,22 +128,16 @@

################
#12.2 input
workflows[2500.4 ] = ['NANOmc122Xrun3_v10', ['TTbarMINIAOD12.2','NANO_mc12.2_v10', 'HRV_NANO_mc']]
workflows[2500.401] = ['NANOmc122Xrun3', ['TTbarMINIAOD12.2','NANO_mc12.2', 'HRV_NANO_mc']]

################
#12.4 input
## these are borken because of tau configuration in NANO ATM: they should be re-enabled when a fix gets in
workflows[2500.5 ] = ['NANOmc124Xrun3_v10', ['TTbarMINIAOD12.4','NANO_mc12.4_v10', 'HRV_NANO_mc']]
workflows[2500.501] = ['NANOmc124Xrun3', ['TTbarMINIAOD12.4','NANO_mc12.4', 'HRV_NANO_mc']]

workflows[2500.51 ] = ['NANOdata124Xrun3_v10', ['MuonEG2022MINIAOD12.4','NANO_data12.4_v10', 'HRV_NANO_data']]
workflows[2500.511] = ['NANOdata124Xrun3', ['MuonEG2022MINIAOD12.4','NANO_data12.4', 'HRV_NANO_data']]

################
#12.6 workflows
## these two workflows should be creating a sample "from scratch" instead of using a pre-release sample as input
workflows[2500.6 ] = ['NANOmc126X_v10', ['TTBarMINIAOD12.6','NANO_mc12.6_v10', 'HRV_NANO_mc']]
workflows[2500.601] = ['NANOmc126X', ['TTBarMINIAOD12.6','NANO_mc12.6', 'HRV_NANO_mc']]

################
93 changes: 44 additions & 49 deletions PhysicsTools/NanoAOD/plugins/TriggerObjectTableProducer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -34,17 +34,18 @@ class TriggerObjectTableProducer : public edm::stream::EDProducer<> {
l1Jet_(consumes<l1t::JetBxCollection>(iConfig.getParameter<edm::InputTag>("l1Jet"))),
l1Muon_(consumes<l1t::MuonBxCollection>(iConfig.getParameter<edm::InputTag>("l1Muon"))),
l1Tau_(consumes<l1t::TauBxCollection>(iConfig.getParameter<edm::InputTag>("l1Tau"))) {
std::vector<edm::ParameterSet> selPSets = iConfig.getParameter<std::vector<edm::ParameterSet>>("selections");
sels_.reserve(selPSets.size());
edm::ParameterSet selPSet = iConfig.getParameter<edm::ParameterSet>("selections");
const auto selNames = selPSet.getParameterNames();
std::stringstream idstr, qualitystr;
idstr << "ID of the object: ";
for (auto &pset : selPSets) {
sels_.emplace_back(pset);
idstr << sels_.back().id << " = " << sels_.back().name;
if (sels_.size() < selPSets.size())
for (const auto &name : selNames) {
sels_.emplace_back(selPSet.getParameter<edm::ParameterSet>(name));
const auto &sel = sels_.back();
idstr << sel.id << " = " << name + sel.doc;
if (sels_.size() < selNames.size())
idstr << ", ";
if (!sels_.back().qualityBitsDoc.empty()) {
qualitystr << sels_.back().qualityBitsDoc << " for " << sels_.back().name << "; ";
if (!sel.qualityBitsDoc.empty()) {
qualitystr << sel.qualityBitsDoc << " for " << name << "; ";
}
}
idDoc_ = idstr.str();
Expand All @@ -71,7 +72,7 @@ class TriggerObjectTableProducer : public edm::stream::EDProducer<> {
edm::EDGetTokenT<l1t::TauBxCollection> l1Tau_;

struct SelectedObject {
std::string name;
std::string doc;
int id;
StringCutObjectSelector<pat::TriggerObjectStandAlone> cut;
StringCutObjectSelector<pat::TriggerObjectStandAlone> l1cut, l1cut_2, l2cut;
Expand All @@ -81,7 +82,7 @@ class TriggerObjectTableProducer : public edm::stream::EDProducer<> {
std::string qualityBitsDoc;

SelectedObject(const edm::ParameterSet &pset)
: name(pset.getParameter<std::string>("name")),
: doc(pset.getParameter<std::string>("doc")),
id(pset.getParameter<int>("id")),
cut(pset.getParameter<std::string>("sel")),
l1cut(""),
Expand All @@ -94,34 +95,32 @@ class TriggerObjectTableProducer : public edm::stream::EDProducer<> {
qualityBits("0"), //will be overwritten from configuration
qualityBitsDoc("") //will be created from configuration
{
if (pset.existsAs<std::string>("qualityBits")) {
qualityBits = StringObjectFunction<pat::TriggerObjectStandAlone>(pset.getParameter<std::string>("qualityBits"));
qualityBitsDoc = pset.getParameter<std::string>("qualityBitsDoc");
} else {
std::vector<edm::ParameterSet> qualityBitsConfig =
pset.getParameter<std::vector<edm::ParameterSet>>("qualityBits");
std::stringstream qualityBitsFunc;
std::vector<bool> bits(qualityBitsConfig.size(), false);
for (size_t i = 0; i != qualityBitsConfig.size(); ++i) {
if (i != 0) {
qualityBitsFunc << " + ";
qualityBitsDoc += ", ";
}
unsigned int bit = i;
if (qualityBitsConfig[i].existsAs<unsigned int>("bit"))
bit = qualityBitsConfig[i].getParameter<unsigned int>("bit");
assert(!bits[bit] && "a quality bit was inserted twice"); // the bit should not have been set already
assert(bit < 31 && "quality bits are store on 32 bit");
bits[bit] = true;
qualityBitsFunc << std::to_string(int(pow(2, bit))) << "*("
<< qualityBitsConfig[i].getParameter<std::string>("selection") << ")";
qualityBitsDoc += std::to_string(bit) + " => " + qualityBitsConfig[i].getParameter<std::string>("doc");
}
if (!qualityBitsFunc.str().empty()) {
//std::cout << "The quality bit string is :" << qualityBitsFunc.str() << std::endl;
//std::cout << "The quality bit documentation is :" << qualityBitsDoc << std::endl;
qualityBits = StringObjectFunction<pat::TriggerObjectStandAlone>(qualityBitsFunc.str());
if (!doc.empty()) {
doc = "(" + doc + ")";
}
std::vector<edm::ParameterSet> qualityBitsConfig =
pset.getParameter<std::vector<edm::ParameterSet>>("qualityBits");
std::stringstream qualityBitsFunc;
std::vector<bool> bits(qualityBitsConfig.size(), false);
for (size_t i = 0; i != qualityBitsConfig.size(); ++i) {
if (i != 0) {
qualityBitsFunc << " + ";
qualityBitsDoc += ", ";
}
unsigned int bit = i;
if (qualityBitsConfig[i].existsAs<unsigned int>("bit"))
bit = qualityBitsConfig[i].getParameter<unsigned int>("bit");
assert(!bits[bit] && "a quality bit was inserted twice"); // the bit should not have been set already
assert(bit < 31 && "quality bits are store on 32 bit");
bits[bit] = true;
qualityBitsFunc << std::to_string(int(pow(2, bit))) << "*("
<< qualityBitsConfig[i].getParameter<std::string>("selection") << ")";
qualityBitsDoc += std::to_string(bit) + " => " + qualityBitsConfig[i].getParameter<std::string>("doc");
}
if (!qualityBitsFunc.str().empty()) {
//std::cout << "The quality bit string is :" << qualityBitsFunc.str() << std::endl;
//std::cout << "The quality bit documentation is :" << qualityBitsDoc << std::endl;
qualityBits = StringObjectFunction<pat::TriggerObjectStandAlone>(qualityBitsFunc.str());
}
if (pset.existsAs<std::string>("l1seed")) {
l1cut = StringCutObjectSelector<pat::TriggerObjectStandAlone>(pset.getParameter<std::string>("l1seed"));
Expand Down Expand Up @@ -339,26 +338,18 @@ void TriggerObjectTableProducer::fillDescriptions(edm::ConfigurationDescriptions

edm::ParameterSetDescription selection;
selection.setComment("a parameterset to define a trigger collection in flat table");
selection.add<std::string>("name")->setComment("name of the leaf in the flat table");
selection.add<std::string>("doc", "")->setComment(
"optional additional info to be added to the table doc for that object");
selection.add<int>("id")->setComment("identifier of the trigger collection in the flat table");
selection.add<std::string>("sel")->setComment("function to selection on pat::TriggerObjectStandAlone");
selection.add<bool>("skipObjectsNotPassingQualityBits")->setComment("flag to skip object on quality bit");

edm::ParameterDescription<std::string> oldSelection(
"qualityBits", "0", true, edm::Comment("function on pat::TriggerObjectStandAlone to define quality bits"));
edm::ParameterDescription<std::string> oldDoc(
"qualityBitsDoc", "", true, edm::Comment("documentation of the quality bits"));
edm::ParameterSetDescription bit;
bit.add<std::string>("selection")->setComment("function on pat::TriggerObjectStandAlone to define quality bit");
bit.add<std::string>("doc")->setComment("definition of the quality bit");
bit.addOptional<uint>("bit")->setComment("value of the bit, if not the order in the VPset");
bit.setComment("parameter set to define quality bit of matching object");

//selection.addVPSet("qualityBits", bit); // non-backqard compatible
edm::ParameterDescription<std::vector<edm::ParameterSet>> bits(
"qualityBits", bit, true, std::vector<edm::ParameterSet>());
//allow for backward compatible configuration with qualityBits and qualityBitsDoc as strings
selection.addNode(bits xor (oldSelection and oldDoc));
selection.addVPSet("qualityBits", bit);

selection.ifExists(edm::ParameterDescription<std::string>("l1seed", "selection on pat::TriggerObjectStandAlone"),
edm::ParameterDescription<double>(
Expand All @@ -369,7 +360,11 @@ void TriggerObjectTableProducer::fillDescriptions(edm::ConfigurationDescriptions
selection.ifExists(edm::ParameterDescription<std::string>("l2seed", "selection on pat::TriggerObjectStandAlone"),
edm::ParameterDescription<double>(
"l2deltaR", "deltaR criteria to match pat::TriggerObjectStandAlone to 'L2' primitive"));
desc.addVPSet("selections", selection);

edm::ParameterWildcard<edm::ParameterSetDescription> selectionsNode("*", edm::RequireAtLeastOne, true, selection);
edm::ParameterSetDescription selections;
selections.addNode(selectionsNode);
desc.add<edm::ParameterSetDescription>("selections", selections);

descriptions.addWithDefaultLabel(desc);
}
Expand Down
Loading