diff --git a/DQM/HLTEvF/python/ScoutingElectronMonitoring_cff.py b/DQM/HLTEvF/python/ScoutingElectronMonitoring_cff.py new file mode 100644 index 0000000000000..5b93ccfc0c6e9 --- /dev/null +++ b/DQM/HLTEvF/python/ScoutingElectronMonitoring_cff.py @@ -0,0 +1,5 @@ +import FWCore.ParameterSet.Config as cms +from HLTriggerOffline.Scouting.ScoutingEGammaCollectionMonitoring_cfi import * +from HLTriggerOffline.Scouting.ScoutingElectronTagProbeAnalyzer_cfi import * + +ScoutingElectronMonitoring = cms.Sequence(scoutingMonitoringEGMOnline + scoutingMonitoringTagProbeOnline) diff --git a/DQM/Integration/python/clients/scouting_dqm_sourceclient-live_cfg.py b/DQM/Integration/python/clients/scouting_dqm_sourceclient-live_cfg.py index 834d5763ab79b..05e474ab33f5b 100644 --- a/DQM/Integration/python/clients/scouting_dqm_sourceclient-live_cfg.py +++ b/DQM/Integration/python/clients/scouting_dqm_sourceclient-live_cfg.py @@ -52,7 +52,7 @@ process.load("DQM.HLTEvF.ScoutingMuonMonitoring_cff") process.load("DQM.HLTEvF.ScoutingJetMonitoring_cff") - +process.load("DQM.HLTEvF.ScoutingElectronMonitoring_cff") ## Run-1 L1TGT required by ScoutingJetMonitoring https://github.com/cms-sw/cmssw/blob/master/DQMOffline/JetMET/src/JetAnalyzer.cc#L2603-L2611 process.GlobalTag.toGet.append( cms.PSet( @@ -61,7 +61,7 @@ ) ) -process.p = cms.Path(process.dqmcommon * process.scoutingCollectionMonitor * process.ScoutingMuonMonitoring * process.ScoutingJetMonitoring) +process.p = cms.Path(process.dqmcommon * process.scoutingCollectionMonitor * process.ScoutingMuonMonitoring * process.ScoutingJetMonitoring * process.ScoutingElectronMonitoring) ### process customizations included here from DQM.Integration.config.online_customizations_cfi import * diff --git a/HLTriggerOffline/Scouting/plugins/ScoutingEGammaCollectionMonitoring.cc b/HLTriggerOffline/Scouting/plugins/ScoutingEGammaCollectionMonitoring.cc index 971a1fbac0375..6b3e7553237d0 100644 --- a/HLTriggerOffline/Scouting/plugins/ScoutingEGammaCollectionMonitoring.cc +++ b/HLTriggerOffline/Scouting/plugins/ScoutingEGammaCollectionMonitoring.cc @@ -112,6 +112,8 @@ class ScoutingEGammaCollectionMonitoring : public DQMEDAnalyzer { const edm::EDGetTokenT> scoutingElectronCollection_; const edm::EDGetTokenT> eleIdMapTightToken_; + const bool useOfflineObject_; + kHistogramsScoutingEGammaCollectionMonitoring histos; }; @@ -121,10 +123,11 @@ ScoutingEGammaCollectionMonitoring::ScoutingEGammaCollectionMonitoring(const edm algToken_{consumes>(iConfig.getParameter("AlgInputTag"))}, triggerResultsToken_(consumes(iConfig.getParameter("TriggerResultTag"))), electronCollection_( - consumes>(iConfig.getParameter("ElectronCollection"))), + mayConsume>(iConfig.getParameter("ElectronCollection"))), scoutingElectronCollection_(consumes>( iConfig.getParameter("ScoutingElectronCollection"))), - eleIdMapTightToken_(consumes>(iConfig.getParameter("eleIdMapTight"))) { + eleIdMapTightToken_(mayConsume>(iConfig.getParameter("eleIdMapTight"))), + useOfflineObject_(iConfig.getParameter("useOfflineObject")) { l1GtUtils_ = std::make_shared(iConfig, consumesCollector(), l1t::UseEventSetupIn::RunAndEvent); l1Seeds_ = iConfig.getParameter>("L1Seeds"); } @@ -136,11 +139,49 @@ void ScoutingEGammaCollectionMonitoring::analyze(edm::Event const& iEvent, edm:: // Get PAT / Scouting Electron Token // //////////////////////////////////////// - edm::Handle> patEls; - iEvent.getByToken(electronCollection_, patEls); - if (patEls.failedToGet()) { - edm::LogWarning("ScoutingEGammaCollectionMonitoring") << "pat::Electron collection not found."; - return; + if (useOfflineObject_) { + edm::Handle> patEls; + iEvent.getByToken(electronCollection_, patEls); + if (patEls.failedToGet()) { + edm::LogWarning("ScoutingEGammaCollectionMonitoring") << "pat::Electron collection not found."; + return; + } + edm::LogInfo("ScoutingEGammaCollectionMonitoring") << "Process pat::Electrons: " << patEls->size(); + edm::Handle> tight_ele_id_decisions; + iEvent.getByToken(eleIdMapTightToken_, tight_ele_id_decisions); + + // Fill pat::Electron histograms + histos.patElectron.h1N->Fill(patEls->size()); + std::vector tight_patElectron_index; + for (size_t i = 0; i < patEls->size(); ++i) { + const auto el = patEls->ptrAt(i); + histos.patElectron.electrons.h1Pt->Fill(el->pt()); + histos.patElectron.electrons.h1Eta->Fill(el->eta()); + histos.patElectron.electrons.h1Phi->Fill(el->phi()); + if (((*tight_ele_id_decisions)[el])) + tight_patElectron_index.push_back(i); + } + + // Expect pat electrons to be sorted by pt + if (!patEls->empty()) { + histos.patElectron.electron1.h1Pt->Fill(patEls->ptrAt(0)->pt()); + histos.patElectron.electron1.h1Eta->Fill(patEls->ptrAt(0)->eta()); + histos.patElectron.electron1.h1Phi->Fill(patEls->ptrAt(0)->phi()); + } + + if (patEls->size() >= 2) { + histos.patElectron.electron2.h1Pt->Fill(patEls->ptrAt(1)->pt()); + histos.patElectron.electron2.h1Eta->Fill(patEls->ptrAt(1)->eta()); + histos.patElectron.electron2.h1Phi->Fill(patEls->ptrAt(1)->phi()); + if (!tight_patElectron_index.empty()) { + histos.patElectron.h1InvMass12->Fill((patEls->ptrAt(0)->p4() + patEls->ptrAt(1)->p4()).mass()); + } + } + + if (tight_patElectron_index.size() == 2) { + histos.patElectron.h1InvMassID->Fill( + (patEls->ptrAt(tight_patElectron_index[0])->p4() + patEls->ptrAt(tight_patElectron_index[1])->p4()).mass()); + } } edm::Handle> sctEls; @@ -150,10 +191,6 @@ void ScoutingEGammaCollectionMonitoring::analyze(edm::Event const& iEvent, edm:: return; } - edm::Handle> tight_ele_id_decisions; - iEvent.getByToken(eleIdMapTightToken_, tight_ele_id_decisions); - - edm::LogInfo("ScoutingEGammaCollectionMonitoring") << "Process pat::Electrons: " << patEls->size(); edm::LogInfo("ScoutingEGammaCollectionMonitoring") << "Process Run3ScoutingElectrons: " << sctEls->size(); // Trigger @@ -179,51 +216,6 @@ void ScoutingEGammaCollectionMonitoring::analyze(edm::Event const& iEvent, edm:: } } - // Loop to verify the sorting of pat::Electron collection - REMOVE IN ONLINE - // DQM - for (size_t i = 1; i < patEls->size(); ++i) { - if (patEls->ptrAt(i - 1)->pt() < patEls->ptrAt(i)->pt()) { - edm::LogWarning("ScoutingEGammaCollectionMonitoring") - << "pat::Electron collection not sorted by PT in descending order" - << " will result in random histo filling. \n" - << "pat::Electron[" << i << "].pt() = " << patEls->ptrAt(i)->pt() << "\n" - << "pat::Electron[" << i + 1 << "].pt() = " << patEls->ptrAt(i + 1)->pt(); - } - } - - // Fill pat::Electron histograms - histos.patElectron.h1N->Fill(patEls->size()); - std::vector tight_patElectron_index; - for (size_t i = 0; i < patEls->size(); ++i) { - const auto el = patEls->ptrAt(i); - histos.patElectron.electrons.h1Pt->Fill(el->pt()); - histos.patElectron.electrons.h1Eta->Fill(el->eta()); - histos.patElectron.electrons.h1Phi->Fill(el->phi()); - if (((*tight_ele_id_decisions)[el])) - tight_patElectron_index.push_back(i); - } - - // Expect pat electrons to be sorted by pt - if (!patEls->empty()) { - histos.patElectron.electron1.h1Pt->Fill(patEls->ptrAt(0)->pt()); - histos.patElectron.electron1.h1Eta->Fill(patEls->ptrAt(0)->eta()); - histos.patElectron.electron1.h1Phi->Fill(patEls->ptrAt(0)->phi()); - } - - if (patEls->size() >= 2) { - histos.patElectron.electron2.h1Pt->Fill(patEls->ptrAt(1)->pt()); - histos.patElectron.electron2.h1Eta->Fill(patEls->ptrAt(1)->eta()); - histos.patElectron.electron2.h1Phi->Fill(patEls->ptrAt(1)->phi()); - if (!tight_patElectron_index.empty()) { - histos.patElectron.h1InvMass12->Fill((patEls->ptrAt(0)->p4() + patEls->ptrAt(1)->p4()).mass()); - } - } - - if (tight_patElectron_index.size() == 2) { - histos.patElectron.h1InvMassID->Fill( - (patEls->ptrAt(tight_patElectron_index[0])->p4() + patEls->ptrAt(tight_patElectron_index[1])->p4()).mass()); - } - // Fill the Run3ScoutingElectron histograms. No sorting assumed. histos.sctElectron.h1N->Fill(sctEls->size()); // unsigned int leadSctElIndx = 0, subleadSctElIndx = -1; @@ -468,6 +460,7 @@ void ScoutingEGammaCollectionMonitoring::fillDescriptions(edm::ConfigurationDesc desc.add("ScoutingElectronCollection", edm::InputTag("hltScoutingEgammaPacker")); desc.add("eleIdMapTight", edm::InputTag("egmGsfElectronIDs:cutBasedElectronID-RunIIIWinter22-V1-tight")); + desc.add("useOfflineObject", true); descriptions.addWithDefaultLabel(desc); } diff --git a/HLTriggerOffline/Scouting/plugins/ScoutingElectronTagProbeAnalyzer.cc b/HLTriggerOffline/Scouting/plugins/ScoutingElectronTagProbeAnalyzer.cc index ef76c7c8bf3fe..051619dc72b1c 100644 --- a/HLTriggerOffline/Scouting/plugins/ScoutingElectronTagProbeAnalyzer.cc +++ b/HLTriggerOffline/Scouting/plugins/ScoutingElectronTagProbeAnalyzer.cc @@ -136,6 +136,7 @@ class ScoutingElectronTagProbeAnalyzer : public DQMGlobalEDAnalyzer triggerObjects_; const edm::EDGetTokenT> scoutingElectronCollection_; + const bool useOfflineObject_; }; ScoutingElectronTagProbeAnalyzer::ScoutingElectronTagProbeAnalyzer(const edm::ParameterSet& iConfig) @@ -145,9 +146,10 @@ ScoutingElectronTagProbeAnalyzer::ScoutingElectronTagProbeAnalyzer(const edm::Pa filterToMatch_{iConfig.getParameter>("finalfilterSelection")}, triggerResultsToken_(consumes(iConfig.getParameter("TriggerResultTag"))), triggerObjects_( - consumes(iConfig.getParameter("TriggerObjects"))), + mayConsume(iConfig.getParameter("TriggerObjects"))), scoutingElectronCollection_(consumes>( - iConfig.getParameter("ScoutingElectronCollection"))) {} + iConfig.getParameter("ScoutingElectronCollection"))), + useOfflineObject_(iConfig.getParameter("useOfflineObject")) {} void ScoutingElectronTagProbeAnalyzer::dqmAnalyze(edm::Event const& iEvent, edm::EventSetup const& iSetup, @@ -161,9 +163,7 @@ void ScoutingElectronTagProbeAnalyzer::dqmAnalyze(edm::Event const& iEvent, // Trigger edm::Handle triggerResults; - edm::Handle triggerObjects; iEvent.getByToken(triggerResultsToken_, triggerResults); - iEvent.getByToken(triggerObjects_, triggerObjects); // Trigger result if (triggerResults.failedToGet()) { @@ -191,15 +191,19 @@ void ScoutingElectronTagProbeAnalyzer::dqmAnalyze(edm::Event const& iEvent, } } - // Trigger Object Matching + // Trigger Object Matching (HLTSCOUT don't have) size_t numberOfFilters = filterToMatch_.size(); trigger::TriggerObjectCollection* legObjects = new trigger::TriggerObjectCollection[numberOfFilters]; - for (size_t iteFilter = 0; iteFilter < filterToMatch_.size(); iteFilter++) { - std::string filterTag = filterToMatch_.at(iteFilter); - for (pat::TriggerObjectStandAlone obj : *triggerObjects) { - obj.unpackNamesAndLabels(iEvent, *triggerResults); - if (obj.hasFilterLabel(filterTag)) { - legObjects[iteFilter].push_back(obj); + if (useOfflineObject_) { + edm::Handle triggerObjects; + iEvent.getByToken(triggerObjects_, triggerObjects); + for (size_t iteFilter = 0; iteFilter < filterToMatch_.size(); iteFilter++) { + std::string filterTag = filterToMatch_.at(iteFilter); + for (pat::TriggerObjectStandAlone obj : *triggerObjects) { + obj.unpackNamesAndLabels(iEvent, *triggerResults); + if (obj.hasFilterLabel(filterTag)) { + legObjects[iteFilter].push_back(obj); + } } } } @@ -600,8 +604,8 @@ void ScoutingElectronTagProbeAnalyzer::fillDescriptions(edm::ConfigurationDescri desc.add>("finalfilterSelection", {}); desc.add("TriggerResultTag", edm::InputTag("TriggerResults", "", "HLT")); desc.add("TriggerObjects", edm::InputTag("slimmedPatTrigger")); - desc.add("ElectronCollection", edm::InputTag("slimmedElectrons")); desc.add("ScoutingElectronCollection", edm::InputTag("Run3ScoutingElectrons")); + desc.add("useOfflineObject", true); descriptions.addWithDefaultLabel(desc); } diff --git a/HLTriggerOffline/Scouting/python/HLTScoutingEGammaDqmOffline_cff.py b/HLTriggerOffline/Scouting/python/HLTScoutingEGammaDqmOffline_cff.py index c51fbb62fbed0..c99b24d9c78b2 100644 --- a/HLTriggerOffline/Scouting/python/HLTScoutingEGammaDqmOffline_cff.py +++ b/HLTriggerOffline/Scouting/python/HLTScoutingEGammaDqmOffline_cff.py @@ -1,5 +1,5 @@ import FWCore.ParameterSet.Config as cms -from HLTriggerOffline.Scouting. ScoutingEGammaCollectionMonitoring_cfi import * +from HLTriggerOffline.Scouting.ScoutingEGammaCollectionMonitoring_cfi import * from HLTriggerOffline.Scouting.ScoutingElectronTagProbeAnalyzer_cfi import * from HLTriggerOffline.Scouting.PatElectronTagProbeAnalyzer_cfi import * @@ -19,4 +19,4 @@ if hasattr(item,'idName') and hasattr(item,'cutFlow'): setupVIDSelection(egmGsfElectronIDsForScoutingDQM,item) -hltScoutingEGammaDqmOffline = cms.Sequence(egmGsfElectronIDsForScoutingDQM + scoutingMonitoringEGM + scoutingMonitoringTagProbe + scoutingMonitoringPatElectronTagProbe) +hltScoutingEGammaDqmOffline = cms.Sequence(egmGsfElectronIDsForScoutingDQM + scoutingMonitoringEGMOffline + scoutingMonitoringTagProbeOffline + scoutingMonitoringPatElectronTagProbe) diff --git a/HLTriggerOffline/Scouting/python/ScoutingEGammaCollectionMonitoring_cfi.py b/HLTriggerOffline/Scouting/python/ScoutingEGammaCollectionMonitoring_cfi.py index daddb39d7cc18..fcf9fc3068acf 100644 --- a/HLTriggerOffline/Scouting/python/ScoutingEGammaCollectionMonitoring_cfi.py +++ b/HLTriggerOffline/Scouting/python/ScoutingEGammaCollectionMonitoring_cfi.py @@ -39,7 +39,7 @@ 'L1_SingleIsoEG34er2p5' ] -ScoutingEGammaCollectionMonitoring = DQMEDAnalyzer('ScoutingEGammaCollectionMonitoring', +ScoutingEGammaCollectionMonitoringOffline = DQMEDAnalyzer('ScoutingEGammaCollectionMonitoring', OutputInternalPath = cms.string('/HLT/ScoutingOffline/EGamma/Collection'), TriggerResultTag = cms.InputTag("TriggerResults", "", "HLT"), AlgInputTag = cms.InputTag("gtStage2Digis"), @@ -50,7 +50,14 @@ L1Seeds = cms.vstring(DoubleEGL1 + SinglePhotonL1), ElectronCollection = cms.InputTag('slimmedElectrons'), ScoutingElectronCollection = cms.InputTag("hltScoutingEgammaPacker"), - eleIdMapTight = cms.InputTag('egmGsfElectronIDsForScoutingDQM:cutBasedElectronID-RunIIIWinter22-V1-loose') + eleIdMapTight = cms.InputTag('egmGsfElectronIDsForScoutingDQM:cutBasedElectronID-RunIIIWinter22-V1-loose'), + useOfflineObject = cms.bool(True) ) -scoutingMonitoringEGM = cms.Sequence(ScoutingEGammaCollectionMonitoring) +ScoutingEGammaCollectionMonitoringOnline = ScoutingEGammaCollectionMonitoringOffline.clone( + OutputInternalPath = '/HLT/ScoutingOnline/EGamma/Collection', + useOfflineObject = False + ) + +scoutingMonitoringEGMOffline= cms.Sequence(ScoutingEGammaCollectionMonitoringOffline) +scoutingMonitoringEGMOnline= cms.Sequence(ScoutingEGammaCollectionMonitoringOnline) diff --git a/HLTriggerOffline/Scouting/python/ScoutingElectronTagProbeAnalyzer_cfi.py b/HLTriggerOffline/Scouting/python/ScoutingElectronTagProbeAnalyzer_cfi.py index 3585fc0f29d01..27422ef2648b7 100644 --- a/HLTriggerOffline/Scouting/python/ScoutingElectronTagProbeAnalyzer_cfi.py +++ b/HLTriggerOffline/Scouting/python/ScoutingElectronTagProbeAnalyzer_cfi.py @@ -2,15 +2,21 @@ from DQMServices.Core.DQMEDAnalyzer import DQMEDAnalyzer from DQMServices.Core.DQMEDHarvester import DQMEDHarvester -ScoutingElectronTagProbeAnalysis = DQMEDAnalyzer('ScoutingElectronTagProbeAnalyzer', +ScoutingElectronTagProbeAnalysisOffline = DQMEDAnalyzer('ScoutingElectronTagProbeAnalyzer', OutputInternalPath = cms.string('/HLT/ScoutingOffline/EGamma/TnP/Tag_ScoutingElectron'), BaseTriggerSelection = cms.vstring(["DST_PFScouting_ZeroBias_v", "DST_PFScouting_SingleMuon_v", "DST_PFScouting_DoubleMuon_v", "DST_PFScouting_JetHT_v"]), triggerSelection = cms.vstring(["DST_PFScouting_DoubleEG_v", "DST_PFScouting_SinglePhotonEB_v"]), finalfilterSelection = cms.vstring(["hltDoubleEG11CaloIdLHEFilter", "hltEG30EBTightIDTightIsoTrackIsoFilter"]), # Must align with triggerSelection TriggerResultTag = cms.InputTag("TriggerResults", "", "HLT"), TriggerObjects = cms.InputTag("slimmedPatTrigger"), - ElectronCollection = cms.InputTag('slimmedElectrons'), - ScoutingElectronCollection = cms.InputTag('hltScoutingEgammaPacker') + ScoutingElectronCollection = cms.InputTag('hltScoutingEgammaPacker'), + useOfflineObject = cms.bool(True) ) -scoutingMonitoringTagProbe = cms.Sequence(ScoutingElectronTagProbeAnalysis) # * ScoutingElectronEfficiencySummary) +ScoutingElectronTagProbeAnalysisOnline = ScoutingElectronTagProbeAnalysisOffline.clone( + OutputInternalPath = '/HLT/ScoutingOnline/EGamma/TnP/Tag_ScoutingElectron', + useOfflineObject = False + ) + +scoutingMonitoringTagProbeOffline = cms.Sequence(ScoutingElectronTagProbeAnalysisOffline) +scoutingMonitoringTagProbeOnline = cms.Sequence(ScoutingElectronTagProbeAnalysisOnline)