Skip to content

Commit 0f8e257

Browse files
committed
[OnlineDQM] Update OnlineDQM stream for EGM scouting
[config] reformat config to right dir [config] reformat config to right dir [code check] [update] fix for comments [update] fix for comments [update] for squash comment
1 parent 6786ff8 commit 0f8e257

File tree

7 files changed

+94
-79
lines changed

7 files changed

+94
-79
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import FWCore.ParameterSet.Config as cms
2+
from HLTriggerOffline.Scouting.ScoutingEGammaCollectionMonitoring_cfi import *
3+
from HLTriggerOffline.Scouting.ScoutingElectronTagProbeAnalyzer_cfi import *
4+
5+
ScoutingElectronMonitoring = cms.Sequence(scoutingMonitoringEGMOnline + scoutingMonitoringTagProbeOnline)

DQM/Integration/python/clients/scouting_dqm_sourceclient-live_cfg.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252

5353
process.load("DQM.HLTEvF.ScoutingMuonMonitoring_cff")
5454
process.load("DQM.HLTEvF.ScoutingJetMonitoring_cff")
55-
55+
process.load("DQM.HLTEvF.ScoutingElectronMonitoring_cff")
5656
## Run-1 L1TGT required by ScoutingJetMonitoring https://github.com/cms-sw/cmssw/blob/master/DQMOffline/JetMET/src/JetAnalyzer.cc#L2603-L2611
5757
process.GlobalTag.toGet.append(
5858
cms.PSet(
@@ -61,7 +61,7 @@
6161
)
6262
)
6363

64-
process.p = cms.Path(process.dqmcommon * process.scoutingCollectionMonitor * process.ScoutingMuonMonitoring * process.ScoutingJetMonitoring)
64+
process.p = cms.Path(process.dqmcommon * process.scoutingCollectionMonitor * process.ScoutingMuonMonitoring * process.ScoutingJetMonitoring * process.ScoutingElectronMonitoring)
6565

6666
### process customizations included here
6767
from DQM.Integration.config.online_customizations_cfi import *

HLTriggerOffline/Scouting/plugins/ScoutingEGammaCollectionMonitoring.cc

Lines changed: 49 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ class ScoutingEGammaCollectionMonitoring : public DQMEDAnalyzer {
112112
const edm::EDGetTokenT<std::vector<Run3ScoutingElectron>> scoutingElectronCollection_;
113113
const edm::EDGetTokenT<edm::ValueMap<bool>> eleIdMapTightToken_;
114114

115+
const bool useOfflineObject_;
116+
115117
kHistogramsScoutingEGammaCollectionMonitoring histos;
116118
};
117119

@@ -121,10 +123,11 @@ ScoutingEGammaCollectionMonitoring::ScoutingEGammaCollectionMonitoring(const edm
121123
algToken_{consumes<BXVector<GlobalAlgBlk>>(iConfig.getParameter<edm::InputTag>("AlgInputTag"))},
122124
triggerResultsToken_(consumes<edm::TriggerResults>(iConfig.getParameter<edm::InputTag>("TriggerResultTag"))),
123125
electronCollection_(
124-
consumes<edm::View<pat::Electron>>(iConfig.getParameter<edm::InputTag>("ElectronCollection"))),
126+
mayConsume<edm::View<pat::Electron>>(iConfig.getParameter<edm::InputTag>("ElectronCollection"))),
125127
scoutingElectronCollection_(consumes<std::vector<Run3ScoutingElectron>>(
126128
iConfig.getParameter<edm::InputTag>("ScoutingElectronCollection"))),
127-
eleIdMapTightToken_(consumes<edm::ValueMap<bool>>(iConfig.getParameter<edm::InputTag>("eleIdMapTight"))) {
129+
eleIdMapTightToken_(mayConsume<edm::ValueMap<bool>>(iConfig.getParameter<edm::InputTag>("eleIdMapTight"))),
130+
useOfflineObject_(iConfig.getParameter<bool>("useOfflineObject")) {
128131
l1GtUtils_ = std::make_shared<l1t::L1TGlobalUtil>(iConfig, consumesCollector(), l1t::UseEventSetupIn::RunAndEvent);
129132
l1Seeds_ = iConfig.getParameter<std::vector<std::string>>("L1Seeds");
130133
}
@@ -136,11 +139,49 @@ void ScoutingEGammaCollectionMonitoring::analyze(edm::Event const& iEvent, edm::
136139
// Get PAT / Scouting Electron Token //
137140
////////////////////////////////////////
138141

139-
edm::Handle<edm::View<pat::Electron>> patEls;
140-
iEvent.getByToken(electronCollection_, patEls);
141-
if (patEls.failedToGet()) {
142-
edm::LogWarning("ScoutingEGammaCollectionMonitoring") << "pat::Electron collection not found.";
143-
return;
142+
if (useOfflineObject_) {
143+
edm::Handle<edm::View<pat::Electron>> patEls;
144+
iEvent.getByToken(electronCollection_, patEls);
145+
if (patEls.failedToGet()) {
146+
edm::LogWarning("ScoutingEGammaCollectionMonitoring") << "pat::Electron collection not found.";
147+
return;
148+
}
149+
edm::LogInfo("ScoutingEGammaCollectionMonitoring") << "Process pat::Electrons: " << patEls->size();
150+
edm::Handle<edm::ValueMap<bool>> tight_ele_id_decisions;
151+
iEvent.getByToken(eleIdMapTightToken_, tight_ele_id_decisions);
152+
153+
// Fill pat::Electron histograms
154+
histos.patElectron.h1N->Fill(patEls->size());
155+
std::vector<int> tight_patElectron_index;
156+
for (size_t i = 0; i < patEls->size(); ++i) {
157+
const auto el = patEls->ptrAt(i);
158+
histos.patElectron.electrons.h1Pt->Fill(el->pt());
159+
histos.patElectron.electrons.h1Eta->Fill(el->eta());
160+
histos.patElectron.electrons.h1Phi->Fill(el->phi());
161+
if (((*tight_ele_id_decisions)[el]))
162+
tight_patElectron_index.push_back(i);
163+
}
164+
165+
// Expect pat electrons to be sorted by pt
166+
if (!patEls->empty()) {
167+
histos.patElectron.electron1.h1Pt->Fill(patEls->ptrAt(0)->pt());
168+
histos.patElectron.electron1.h1Eta->Fill(patEls->ptrAt(0)->eta());
169+
histos.patElectron.electron1.h1Phi->Fill(patEls->ptrAt(0)->phi());
170+
}
171+
172+
if (patEls->size() >= 2) {
173+
histos.patElectron.electron2.h1Pt->Fill(patEls->ptrAt(1)->pt());
174+
histos.patElectron.electron2.h1Eta->Fill(patEls->ptrAt(1)->eta());
175+
histos.patElectron.electron2.h1Phi->Fill(patEls->ptrAt(1)->phi());
176+
if (!tight_patElectron_index.empty()) {
177+
histos.patElectron.h1InvMass12->Fill((patEls->ptrAt(0)->p4() + patEls->ptrAt(1)->p4()).mass());
178+
}
179+
}
180+
181+
if (tight_patElectron_index.size() == 2) {
182+
histos.patElectron.h1InvMassID->Fill(
183+
(patEls->ptrAt(tight_patElectron_index[0])->p4() + patEls->ptrAt(tight_patElectron_index[1])->p4()).mass());
184+
}
144185
}
145186

146187
edm::Handle<std::vector<Run3ScoutingElectron>> sctEls;
@@ -150,10 +191,6 @@ void ScoutingEGammaCollectionMonitoring::analyze(edm::Event const& iEvent, edm::
150191
return;
151192
}
152193

153-
edm::Handle<edm::ValueMap<bool>> tight_ele_id_decisions;
154-
iEvent.getByToken(eleIdMapTightToken_, tight_ele_id_decisions);
155-
156-
edm::LogInfo("ScoutingEGammaCollectionMonitoring") << "Process pat::Electrons: " << patEls->size();
157194
edm::LogInfo("ScoutingEGammaCollectionMonitoring") << "Process Run3ScoutingElectrons: " << sctEls->size();
158195

159196
// Trigger
@@ -179,51 +216,6 @@ void ScoutingEGammaCollectionMonitoring::analyze(edm::Event const& iEvent, edm::
179216
}
180217
}
181218

182-
// Loop to verify the sorting of pat::Electron collection - REMOVE IN ONLINE
183-
// DQM
184-
for (size_t i = 1; i < patEls->size(); ++i) {
185-
if (patEls->ptrAt(i - 1)->pt() < patEls->ptrAt(i)->pt()) {
186-
edm::LogWarning("ScoutingEGammaCollectionMonitoring")
187-
<< "pat::Electron collection not sorted by PT in descending order"
188-
<< " will result in random histo filling. \n"
189-
<< "pat::Electron[" << i << "].pt() = " << patEls->ptrAt(i)->pt() << "\n"
190-
<< "pat::Electron[" << i + 1 << "].pt() = " << patEls->ptrAt(i + 1)->pt();
191-
}
192-
}
193-
194-
// Fill pat::Electron histograms
195-
histos.patElectron.h1N->Fill(patEls->size());
196-
std::vector<int> tight_patElectron_index;
197-
for (size_t i = 0; i < patEls->size(); ++i) {
198-
const auto el = patEls->ptrAt(i);
199-
histos.patElectron.electrons.h1Pt->Fill(el->pt());
200-
histos.patElectron.electrons.h1Eta->Fill(el->eta());
201-
histos.patElectron.electrons.h1Phi->Fill(el->phi());
202-
if (((*tight_ele_id_decisions)[el]))
203-
tight_patElectron_index.push_back(i);
204-
}
205-
206-
// Expect pat electrons to be sorted by pt
207-
if (!patEls->empty()) {
208-
histos.patElectron.electron1.h1Pt->Fill(patEls->ptrAt(0)->pt());
209-
histos.patElectron.electron1.h1Eta->Fill(patEls->ptrAt(0)->eta());
210-
histos.patElectron.electron1.h1Phi->Fill(patEls->ptrAt(0)->phi());
211-
}
212-
213-
if (patEls->size() >= 2) {
214-
histos.patElectron.electron2.h1Pt->Fill(patEls->ptrAt(1)->pt());
215-
histos.patElectron.electron2.h1Eta->Fill(patEls->ptrAt(1)->eta());
216-
histos.patElectron.electron2.h1Phi->Fill(patEls->ptrAt(1)->phi());
217-
if (!tight_patElectron_index.empty()) {
218-
histos.patElectron.h1InvMass12->Fill((patEls->ptrAt(0)->p4() + patEls->ptrAt(1)->p4()).mass());
219-
}
220-
}
221-
222-
if (tight_patElectron_index.size() == 2) {
223-
histos.patElectron.h1InvMassID->Fill(
224-
(patEls->ptrAt(tight_patElectron_index[0])->p4() + patEls->ptrAt(tight_patElectron_index[1])->p4()).mass());
225-
}
226-
227219
// Fill the Run3ScoutingElectron histograms. No sorting assumed.
228220
histos.sctElectron.h1N->Fill(sctEls->size());
229221
// unsigned int leadSctElIndx = 0, subleadSctElIndx = -1;
@@ -468,6 +460,7 @@ void ScoutingEGammaCollectionMonitoring::fillDescriptions(edm::ConfigurationDesc
468460
desc.add<edm::InputTag>("ScoutingElectronCollection", edm::InputTag("hltScoutingEgammaPacker"));
469461
desc.add<edm::InputTag>("eleIdMapTight",
470462
edm::InputTag("egmGsfElectronIDs:cutBasedElectronID-RunIIIWinter22-V1-tight"));
463+
desc.add<bool>("useOfflineObject", true);
471464
descriptions.addWithDefaultLabel(desc);
472465
}
473466

HLTriggerOffline/Scouting/plugins/ScoutingElectronTagProbeAnalyzer.cc

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ class ScoutingElectronTagProbeAnalyzer : public DQMGlobalEDAnalyzer<kSctTagProbe
136136
const edm::EDGetTokenT<pat::TriggerObjectStandAloneCollection> triggerObjects_;
137137

138138
const edm::EDGetTokenT<std::vector<Run3ScoutingElectron>> scoutingElectronCollection_;
139+
const bool useOfflineObject_;
139140
};
140141

141142
ScoutingElectronTagProbeAnalyzer::ScoutingElectronTagProbeAnalyzer(const edm::ParameterSet& iConfig)
@@ -145,9 +146,10 @@ ScoutingElectronTagProbeAnalyzer::ScoutingElectronTagProbeAnalyzer(const edm::Pa
145146
filterToMatch_{iConfig.getParameter<vector<string>>("finalfilterSelection")},
146147
triggerResultsToken_(consumes<edm::TriggerResults>(iConfig.getParameter<edm::InputTag>("TriggerResultTag"))),
147148
triggerObjects_(
148-
consumes<pat::TriggerObjectStandAloneCollection>(iConfig.getParameter<edm::InputTag>("TriggerObjects"))),
149+
mayConsume<pat::TriggerObjectStandAloneCollection>(iConfig.getParameter<edm::InputTag>("TriggerObjects"))),
149150
scoutingElectronCollection_(consumes<std::vector<Run3ScoutingElectron>>(
150-
iConfig.getParameter<edm::InputTag>("ScoutingElectronCollection"))) {}
151+
iConfig.getParameter<edm::InputTag>("ScoutingElectronCollection"))),
152+
useOfflineObject_(iConfig.getParameter<bool>("useOfflineObject")) {}
151153

152154
void ScoutingElectronTagProbeAnalyzer::dqmAnalyze(edm::Event const& iEvent,
153155
edm::EventSetup const& iSetup,
@@ -161,9 +163,7 @@ void ScoutingElectronTagProbeAnalyzer::dqmAnalyze(edm::Event const& iEvent,
161163

162164
// Trigger
163165
edm::Handle<edm::TriggerResults> triggerResults;
164-
edm::Handle<pat::TriggerObjectStandAloneCollection> triggerObjects;
165166
iEvent.getByToken(triggerResultsToken_, triggerResults);
166-
iEvent.getByToken(triggerObjects_, triggerObjects);
167167

168168
// Trigger result
169169
if (triggerResults.failedToGet()) {
@@ -191,15 +191,19 @@ void ScoutingElectronTagProbeAnalyzer::dqmAnalyze(edm::Event const& iEvent,
191191
}
192192
}
193193

194-
// Trigger Object Matching
194+
// Trigger Object Matching (HLTSCOUT don't have)
195195
size_t numberOfFilters = filterToMatch_.size();
196196
trigger::TriggerObjectCollection* legObjects = new trigger::TriggerObjectCollection[numberOfFilters];
197-
for (size_t iteFilter = 0; iteFilter < filterToMatch_.size(); iteFilter++) {
198-
std::string filterTag = filterToMatch_.at(iteFilter);
199-
for (pat::TriggerObjectStandAlone obj : *triggerObjects) {
200-
obj.unpackNamesAndLabels(iEvent, *triggerResults);
201-
if (obj.hasFilterLabel(filterTag)) {
202-
legObjects[iteFilter].push_back(obj);
197+
if (useOfflineObject_) {
198+
edm::Handle<pat::TriggerObjectStandAloneCollection> triggerObjects;
199+
iEvent.getByToken(triggerObjects_, triggerObjects);
200+
for (size_t iteFilter = 0; iteFilter < filterToMatch_.size(); iteFilter++) {
201+
std::string filterTag = filterToMatch_.at(iteFilter);
202+
for (pat::TriggerObjectStandAlone obj : *triggerObjects) {
203+
obj.unpackNamesAndLabels(iEvent, *triggerResults);
204+
if (obj.hasFilterLabel(filterTag)) {
205+
legObjects[iteFilter].push_back(obj);
206+
}
203207
}
204208
}
205209
}
@@ -600,8 +604,8 @@ void ScoutingElectronTagProbeAnalyzer::fillDescriptions(edm::ConfigurationDescri
600604
desc.add<vector<string>>("finalfilterSelection", {});
601605
desc.add<edm::InputTag>("TriggerResultTag", edm::InputTag("TriggerResults", "", "HLT"));
602606
desc.add<edm::InputTag>("TriggerObjects", edm::InputTag("slimmedPatTrigger"));
603-
desc.add<edm::InputTag>("ElectronCollection", edm::InputTag("slimmedElectrons"));
604607
desc.add<edm::InputTag>("ScoutingElectronCollection", edm::InputTag("Run3ScoutingElectrons"));
608+
desc.add<bool>("useOfflineObject", true);
605609
descriptions.addWithDefaultLabel(desc);
606610
}
607611

HLTriggerOffline/Scouting/python/HLTScoutingEGammaDqmOffline_cff.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import FWCore.ParameterSet.Config as cms
2-
from HLTriggerOffline.Scouting. ScoutingEGammaCollectionMonitoring_cfi import *
2+
from HLTriggerOffline.Scouting.ScoutingEGammaCollectionMonitoring_cfi import *
33
from HLTriggerOffline.Scouting.ScoutingElectronTagProbeAnalyzer_cfi import *
44
from HLTriggerOffline.Scouting.PatElectronTagProbeAnalyzer_cfi import *
55

@@ -19,4 +19,4 @@
1919
if hasattr(item,'idName') and hasattr(item,'cutFlow'):
2020
setupVIDSelection(egmGsfElectronIDsForScoutingDQM,item)
2121

22-
hltScoutingEGammaDqmOffline = cms.Sequence(egmGsfElectronIDsForScoutingDQM + scoutingMonitoringEGM + scoutingMonitoringTagProbe + scoutingMonitoringPatElectronTagProbe)
22+
hltScoutingEGammaDqmOffline = cms.Sequence(egmGsfElectronIDsForScoutingDQM + scoutingMonitoringEGMOffline + scoutingMonitoringTagProbeOffline + scoutingMonitoringPatElectronTagProbe)

HLTriggerOffline/Scouting/python/ScoutingEGammaCollectionMonitoring_cfi.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
'L1_SingleIsoEG34er2p5'
4040
]
4141

42-
ScoutingEGammaCollectionMonitoring = DQMEDAnalyzer('ScoutingEGammaCollectionMonitoring',
42+
ScoutingEGammaCollectionMonitoringOffline = DQMEDAnalyzer('ScoutingEGammaCollectionMonitoring',
4343
OutputInternalPath = cms.string('/HLT/ScoutingOffline/EGamma/Collection'),
4444
TriggerResultTag = cms.InputTag("TriggerResults", "", "HLT"),
4545
AlgInputTag = cms.InputTag("gtStage2Digis"),
@@ -50,7 +50,14 @@
5050
L1Seeds = cms.vstring(DoubleEGL1 + SinglePhotonL1),
5151
ElectronCollection = cms.InputTag('slimmedElectrons'),
5252
ScoutingElectronCollection = cms.InputTag("hltScoutingEgammaPacker"),
53-
eleIdMapTight = cms.InputTag('egmGsfElectronIDsForScoutingDQM:cutBasedElectronID-RunIIIWinter22-V1-loose')
53+
eleIdMapTight = cms.InputTag('egmGsfElectronIDsForScoutingDQM:cutBasedElectronID-RunIIIWinter22-V1-loose'),
54+
useOfflineObject = cms.bool(True)
5455
)
5556

56-
scoutingMonitoringEGM = cms.Sequence(ScoutingEGammaCollectionMonitoring)
57+
ScoutingEGammaCollectionMonitoringOnline = ScoutingEGammaCollectionMonitoringOffline.clone(
58+
OutputInternalPath = cms.string('/HLT/ScoutingOnline/EGamma/Collection'),
59+
useOfflineObject = cms.bool(False)
60+
)
61+
62+
scoutingMonitoringEGMOffline= cms.Sequence(ScoutingEGammaCollectionMonitoringOffline)
63+
scoutingMonitoringEGMOnline= cms.Sequence(ScoutingEGammaCollectionMonitoringOnline)

HLTriggerOffline/Scouting/python/ScoutingElectronTagProbeAnalyzer_cfi.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,21 @@
22
from DQMServices.Core.DQMEDAnalyzer import DQMEDAnalyzer
33
from DQMServices.Core.DQMEDHarvester import DQMEDHarvester
44

5-
ScoutingElectronTagProbeAnalysis = DQMEDAnalyzer('ScoutingElectronTagProbeAnalyzer',
5+
ScoutingElectronTagProbeAnalysisOffline = DQMEDAnalyzer('ScoutingElectronTagProbeAnalyzer',
66
OutputInternalPath = cms.string('/HLT/ScoutingOffline/EGamma/TnP/Tag_ScoutingElectron'),
77
BaseTriggerSelection = cms.vstring(["DST_PFScouting_ZeroBias_v", "DST_PFScouting_SingleMuon_v", "DST_PFScouting_DoubleMuon_v", "DST_PFScouting_JetHT_v"]),
88
triggerSelection = cms.vstring(["DST_PFScouting_DoubleEG_v", "DST_PFScouting_SinglePhotonEB_v"]),
99
finalfilterSelection = cms.vstring(["hltDoubleEG11CaloIdLHEFilter", "hltEG30EBTightIDTightIsoTrackIsoFilter"]), # Must align with triggerSelection
1010
TriggerResultTag = cms.InputTag("TriggerResults", "", "HLT"),
1111
TriggerObjects = cms.InputTag("slimmedPatTrigger"),
12-
ElectronCollection = cms.InputTag('slimmedElectrons'),
13-
ScoutingElectronCollection = cms.InputTag('hltScoutingEgammaPacker')
12+
ScoutingElectronCollection = cms.InputTag('hltScoutingEgammaPacker'),
13+
useOfflineObject = cms.bool(True)
1414
)
1515

16-
scoutingMonitoringTagProbe = cms.Sequence(ScoutingElectronTagProbeAnalysis) # * ScoutingElectronEfficiencySummary)
16+
ScoutingElectronTagProbeAnalysisOnline = ScoutingElectronTagProbeAnalysisOffline.clone(
17+
OutputInternalPath = cms.string('/HLT/ScoutingOnline/EGamma/TnP/Tag_ScoutingElectron'),
18+
useOfflineObject = cms.bool(False)
19+
)
20+
21+
scoutingMonitoringTagProbeOffline = cms.Sequence(ScoutingElectronTagProbeAnalysisOffline)
22+
scoutingMonitoringTagProbeOnline = cms.Sequence(ScoutingElectronTagProbeAnalysisOnline)

0 commit comments

Comments
 (0)