Skip to content

Commit 7c570bf

Browse files
authored
Merge pull request #47235 from elfontan/EF_dqm_CMSSW1502
Scouting Offline DQM for 2025 data-taking (EGM+MUO+autoDQM)
2 parents 1cd573e + 37cd45c commit 7c570bf

32 files changed

+3639
-4
lines changed

DQMOffline/Configuration/python/DQMOffline_SecondStep_cff.py

+4
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
from DQM.TrackingMonitorClient.TrackingClientConfig_Tier0_cff import *
8585
from DQMOffline.Muon.muonQualityTests_cff import *
8686
from DQMOffline.EGamma.egammaPostProcessing_cff import *
87+
from DQMOffline.HLTScouting.HLTScoutingPostProcessing_cff import *
8788
from DQMOffline.Trigger.DQMOffline_Trigger_Client_cff import *
8889
from DQMOffline.Trigger.DQMOffline_HLT_Client_cff import *
8990
from DQMOffline.RecoB.dqmCollector_cff import *
@@ -267,6 +268,9 @@
267268

268269
DQMHarvestBTag = cms.Sequence( bTagCollectorSequenceDATA )
269270

271+
# HLT Scouting trigger sequence
272+
DQMHarvestHLTScouting = cms.Sequence( hltScoutingPostProcessing )
273+
270274
from PhysicsTools.NanoAOD.nanoDQM_cff import *
271275
from Validation.RecoParticleFlow.DQMForPF_MiniAOD_cff import *
272276
from DQMOffline.RecoB.bTagMiniDQM_cff import *

DQMOffline/Configuration/python/DQMOffline_cff.py

+4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from DQMServices.Components.DQMProvInfo_cfi import *
55
from DQMServices.Components.DQMFastTimerService_cff import *
66

7+
from DQMOffline.HLTScouting.HLTScoutingDqmOffline_cff import *
78
from DQMOffline.L1Trigger.L1TriggerDqmOffline_cff import *
89
from DQMOffline.Ecal.ecal_dqm_source_offline_cff import *
910
from DQM.EcalPreshowerMonitorModule.es_dqm_source_offline_cff import *
@@ -28,6 +29,9 @@
2829
dqmProvInfo.dcsRecord = cms.untracked.InputTag("onlineMetaDataDigis")
2930
DQMOfflineDCS = cms.Sequence( dqmProvInfo )
3031

32+
# HLT Scouting trigger sequence
33+
DQMOfflineScouting = cms.Sequence( hltScoutingDqmOffline )
34+
3135
# L1 trigger sequences
3236
DQMOfflineL1T = cms.Sequence( l1TriggerDqmOffline ) # L1 emulator is run within this sequence for real data
3337

DQMOffline/Configuration/python/autoDQM.py

+12-4
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,13 @@
66
'PostDQMOffline',
77
'@dcs+@DQMMessageLogger+@hlt+@beam+@fed+dqmFastTimerServiceClient'],
88

9-
'common': ['@dcs+@DQMMessageLogger+@stripCommon+@pixel+@tracking+@hlt+@beam+@castor+@physics',
10-
'PostDQMOffline',
11-
'@dcs+@DQMMessageLogger+@stripCommon+@pixel+@tracking+@hlt+@beam+@fed+dqmFastTimerServiceClient'],
9+
'common': ['@dcs+@DQMMessageLogger+@stripCommon+@pixel+@tracking+@hlt+@beam+@castor+@physics',
10+
'PostDQMOffline',
11+
'@dcs+@DQMMessageLogger+@stripCommon+@pixel+@tracking+@hlt+@beam+@fed+dqmFastTimerServiceClient'],
12+
13+
'commonWithScouting': ['@dcs+@DQMMessageLogger+@stripCommon+@pixel+@tracking+@hlt+@beam+@castor+@physics+@hltScouting',
14+
'PostDQMOffline',
15+
'@dcs+@DQMMessageLogger+@stripCommon+@pixel+@tracking+@hlt+@beam+@fed+dqmFastTimerServiceClient'],
1216

1317
'commonFakeHLT': ['@dcs+@DQMMessageLogger+@stripCommon+@pixel+@tracking+@beam+@castor+@physics',
1418
'PostDQMOffline',
@@ -141,7 +145,7 @@
141145
'physics': ['DQMOfflinePhysics',
142146
'PostDQMOffline',
143147
'DQMNone'],
144-
148+
145149
'heavyFlavor': ['DQMOfflineHeavyFlavor',
146150
'PostDQMOffline',
147151
'DQMNone'],
@@ -219,6 +223,10 @@
219223
'PostDQMOffline',
220224
'dqmHarvesting'],
221225

226+
'hltScouting': ['DQMOfflineScouting',
227+
'PostDQMOffline',
228+
'DQMHarvestHLTScouting'],
229+
222230
'standardDQMExpress': ['DQMOfflineExpress',
223231
'PostDQMOffline',
224232
'dqmHarvestingExpress'],

DQMOffline/HLTScouting/BuildFile.xml

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<use name="CalibFormats/SiStripObjects"/>
2+
<use name="CalibTracker/Records"/>
3+
<use name="CommonTools/TriggerUtils"/>
4+
<use name="CondFormats/DTObjects"/>
5+
<use name="CondFormats/DataRecord"/>
6+
<use name="CondFormats/SiStripObjects"/>
7+
<use name="DQMServices/Core"/>
8+
<use name="DataFormats/CaloTowers"/>
9+
<use name="DataFormats/CSCDigi"/>
10+
<use name="DataFormats/CSCRecHit"/>
11+
<use name="DataFormats/DTRecHit"/>
12+
<use name="DataFormats/DetId"/>
13+
<use name="DataFormats/EcalDetId"/>
14+
<use name="DataFormats/EgammaCandidates"/>
15+
<use name="DataFormats/EgammaReco"/>
16+
<use name="DataFormats/FEDRawData"/>
17+
<use name="DataFormats/HcalDetId"/>
18+
<use name="DataFormats/HcalRecHit"/>
19+
<use name="DataFormats/JetReco"/>
20+
<use name="DataFormats/METReco"/>
21+
<use name="DataFormats/Math"/>
22+
<use name="DataFormats/MuonReco"/>
23+
<use name="DataFormats/PatCandidates"/>
24+
<use name="DataFormats/RecoCandidate"/>
25+
<use name="DataFormats/SiStripCluster"/>
26+
<use name="DataFormats/SiStripDetId"/>
27+
<use name="DataFormats/TrackReco"/>
28+
<use name="DataFormats/TrackerRecHit2D"/>
29+
<use name="DataFormats/TrackingRecHit"/>
30+
<use name="EventFilter/CSCRawToDigi"/>
31+
<use name="FWCore/Framework"/>
32+
<use name="FWCore/PluginManager"/>
33+
<use name="FWCore/Utilities"/>
34+
<use name="Geometry/CaloGeometry"/>
35+
<use name="Geometry/CSCGeometry"/>
36+
<use name="Geometry/HcalTowerAlgo"/>
37+
<use name="HLTrigger/HLTcore"/>
38+
<use name="HLTriggerOffline/Scouting"/>
39+
<use name="JetMETCorrections/JetCorrector"/>
40+
<use name="MagneticField/Engine"/>
41+
<use name="MagneticField/Records"/>
42+
<use name="RecoJets/JetAssociationAlgorithms"/>
43+
<use name="RecoJets/JetProducers"/>
44+
<use name="RecoMuon/TrackingTools"/>
45+
<use name="TrackingTools/Records"/>
46+
<use name="TrackingTools/TransientTrack"/>
47+
<flags EDM_PLUGIN="1"/>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
'''
2+
Scouting DQM sequences for offline DQM developed for 2025 pp data-taking
3+
and used by DQM GUI (DQMOffline/Configuration):
4+
currently running EGM and MUO monitoring modules.
5+
'''
6+
7+
import FWCore.ParameterSet.Config as cms
8+
from DQMServices.Core.DQMEDHarvester import DQMEDHarvester
9+
10+
from HLTriggerOffline.Scouting.ScoutingMuonTriggerAnalyzer_cfi import *
11+
from HLTriggerOffline.Scouting.ScoutingMuonTagProbeAnalyzer_cfi import *
12+
from HLTriggerOffline.Scouting.ScoutingMuonMonitoring_Client_cff import *
13+
14+
from HLTriggerOffline.Scouting.HLTScoutingEGammaDqmOffline_cff import *
15+
16+
hltScoutingMuonDqmOffline = cms.Sequence(scoutingMonitoringTagProbeMuonNoVtx
17+
* scoutingMonitoringTagProbeMuonVtx
18+
* scoutingMonitoringTriggerMuon
19+
)
20+
21+
hltScoutingDqmOffline = cms.Sequence(hltScoutingMuonDqmOffline + hltScoutingEGammaDqmOffline)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
'''
2+
Scouting DQM sequences for offline DQM developed for 2025 pp data-taking
3+
and used by DQM GUI (DQMOffline/Configuration):
4+
currently running EGM and MUO monitoring modules.
5+
'''
6+
7+
import FWCore.ParameterSet.Config as cms
8+
from DQMServices.Core.DQMEDHarvester import DQMEDHarvester
9+
from DQMOffline.HLTScouting.HLTScoutingDqmOffline_cff import *
10+
11+
from HLTriggerOffline.Scouting.ScoutingMuonMonitoring_Client_cff import *
12+
from HLTriggerOffline.Scouting.HLTScoutingEGammaPostProcessing_cff import *
13+
14+
hltScoutingMuonPostProcessing = cms.Sequence(muonEfficiencyNoVtx
15+
* muonEfficiencyVtx
16+
* muonTriggerEfficiency
17+
)
18+
19+
hltScoutingPostProcessing = cms.Sequence(hltScoutingMuonPostProcessing + hltScoutingEGammaPostProcessing)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<use name="FWCore/Framework"/>
2+
<use name="FWCore/PluginManager"/>
3+
<use name="FWCore/ParameterSet"/>
4+
<use name="DQMServices/Core"/>
5+
<use name="CLHEP"/>
6+
<use name="DataFormats/PatCandidates"/>
7+
<use name="DataFormats/Scouting"/>
8+
<use name="L1Trigger/L1TGlobal"/>
9+
<use name="DataFormats/L1TGlobal"/>
10+
<use name="FWCore/Utilities"/>
11+
<use name="TrackingTools/Records"/>
12+
<use name="HLTrigger/HLTcore"/>
13+
<use name="DataFormats/HLTReco"/>
14+
<flags EDM_PLUGIN="1"/>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
#include "ElectronEfficiencyPlotter.h"
2+
3+
// Framework
4+
#include <cmath>
5+
#include <string>
6+
7+
#include "DQMServices/Core/interface/DQMStore.h"
8+
#include "DataFormats/Common/interface/Handle.h"
9+
#include "FWCore/Framework/interface/ESHandle.h"
10+
#include "FWCore/Framework/interface/Event.h"
11+
#include "FWCore/Framework/interface/EventSetup.h"
12+
#include "FWCore/Framework/interface/MakerMacros.h"
13+
#include "FWCore/MessageLogger/interface/MessageLogger.h"
14+
#include "FWCore/ParameterSet/interface/ParameterSet.h"
15+
#include "TF1.h"
16+
#include "TH1F.h"
17+
18+
using namespace edm;
19+
using namespace std;
20+
21+
// Constructor
22+
ElectronEfficiencyPlotter::ElectronEfficiencyPlotter(const edm::ParameterSet &ps) {
23+
ptBin_ = ps.getParameter<int>("ptBin");
24+
ptMin_ = ps.getParameter<double>("ptMin");
25+
ptMax_ = ps.getParameter<double>("ptMax");
26+
27+
ID_ = ps.getParameter<string>("sctElectronID");
28+
theFolder_ = ps.getParameter<string>("folder");
29+
sourceFolder_ = ps.getParameter<string>("srcFolder");
30+
}
31+
32+
void ElectronEfficiencyPlotter::dqmEndJob(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter) {
33+
ibooker.setCurrentFolder(theFolder_);
34+
35+
h_eff_pt_EB_doubleEG_HLT =
36+
ibooker.book1D("Eff_pt_barrel_DSTdoubleEG", "DSTdoubleEG Eff. vs Pt (barrel)", ptBin_, ptMin_, ptMax_);
37+
h_eff_pt_EE_doubleEG_HLT =
38+
ibooker.book1D("Eff_pt_endcap_DSTdoubleEG", "DSTdoubleEG Eff. vs Pt (endcap)", ptBin_, ptMin_, ptMax_);
39+
h_eff_pt_EB_singlePhoton_HLT =
40+
ibooker.book1D("Eff_pt_barrel_DSTsinglePhoton", "DSTsinglePhoton Eff. vs Pt (barrel)", ptBin_, ptMin_, ptMax_);
41+
h_eff_pt_EE_singlePhoton_HLT =
42+
ibooker.book1D("Eff_pt_endcap_DSTsinglePhoton", "DSTsinglePhoton Eff. vs Pt (endcap)", ptBin_, ptMin_, ptMax_);
43+
44+
// Axis title
45+
h_eff_pt_EB_singlePhoton_HLT->setAxisTitle("p_{T} (GeV)", 1);
46+
h_eff_pt_EE_singlePhoton_HLT->setAxisTitle("p_{T} (GeV)", 1);
47+
h_eff_pt_EB_doubleEG_HLT->setAxisTitle("p_{T} (GeV)", 1);
48+
h_eff_pt_EE_doubleEG_HLT->setAxisTitle("p_{T} (GeV)", 1);
49+
50+
MonitorElement *Numerator_pt_barrel_doubleEG_hlt =
51+
igetter.get(sourceFolder_ +
52+
"/resonanceZ_Tag_pat_Probe_sctElectron_passDoubleEG_DST_"
53+
"fireTrigObj_Pt_Barrel");
54+
MonitorElement *Numerator_pt_endcap_doubleEG_hlt =
55+
igetter.get(sourceFolder_ +
56+
"/resonanceZ_Tag_pat_Probe_sctElectron_passDoubleEG_DST_"
57+
"fireTrigObj_Pt_Endcap");
58+
MonitorElement *Numerator_pt_barrel_singlePhoton_hlt =
59+
igetter.get(sourceFolder_ +
60+
"/resonanceZ_Tag_pat_Probe_sctElectron_passSinglePhoton_DST_"
61+
"fireTrigObj_Pt_Barrel");
62+
MonitorElement *Numerator_pt_endcap_singlePhoton_hlt =
63+
igetter.get(sourceFolder_ +
64+
"/resonanceZ_Tag_pat_Probe_sctElectron_passSinglePhoton_DST_"
65+
"fireTrigObj_Pt_Endcap");
66+
MonitorElement *Denominator_pt_barrel =
67+
igetter.get(sourceFolder_ + "/resonanceZ_Tag_pat_Probe_sctElectron_Pt_Barrel");
68+
MonitorElement *Denominator_pt_endcap =
69+
igetter.get(sourceFolder_ + "/resonanceZ_Tag_pat_Probe_sctElectron_Pt_Endcap");
70+
71+
if (Numerator_pt_barrel_doubleEG_hlt && Denominator_pt_barrel)
72+
calculateEfficiency(Numerator_pt_barrel_doubleEG_hlt, Denominator_pt_barrel, h_eff_pt_EB_doubleEG_HLT);
73+
if (Numerator_pt_endcap_doubleEG_hlt && Denominator_pt_endcap)
74+
calculateEfficiency(Numerator_pt_endcap_doubleEG_hlt, Denominator_pt_endcap, h_eff_pt_EE_doubleEG_HLT);
75+
if (Numerator_pt_barrel_singlePhoton_hlt && Denominator_pt_barrel)
76+
calculateEfficiency(Numerator_pt_barrel_singlePhoton_hlt, Denominator_pt_barrel, h_eff_pt_EB_singlePhoton_HLT);
77+
if (Numerator_pt_endcap_singlePhoton_hlt && Denominator_pt_endcap)
78+
calculateEfficiency(Numerator_pt_endcap_singlePhoton_hlt, Denominator_pt_endcap, h_eff_pt_EE_singlePhoton_HLT);
79+
}
80+
81+
void ElectronEfficiencyPlotter::calculateEfficiency(MonitorElement *Numerator,
82+
MonitorElement *Denominator,
83+
MonitorElement *Efficiency) {
84+
TH1F *h_numerator_pt = Numerator->getTH1F();
85+
TH1F *h_denominator_pt = Denominator->getTH1F();
86+
TH1F *h_eff_pt = Efficiency->getTH1F();
87+
if (h_eff_pt->GetSumw2N() == 0)
88+
h_eff_pt->Sumw2();
89+
90+
// ReBin
91+
int nBins = h_eff_pt->GetNbinsX();
92+
double *binEdges = new double[nBins + 1];
93+
for (int i = 0; i <= nBins; i++)
94+
binEdges[i] = h_eff_pt->GetBinLowEdge(i + 1);
95+
96+
TH1F *h_numerator_pt_rebin = (TH1F *)h_numerator_pt->Rebin(nBins, "num_pt_rebinned", binEdges);
97+
TH1F *h_denominator_pt_rebin = (TH1F *)h_denominator_pt->Rebin(nBins, "num_pt_rebinned", binEdges);
98+
h_eff_pt->Divide(h_numerator_pt_rebin, h_denominator_pt_rebin, 1., 1., "B");
99+
}
100+
101+
DEFINE_FWK_MODULE(ElectronEfficiencyPlotter);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#ifndef HLTriggerOffline_Scouting_ElectronEfficiencyPlotter_H
2+
#define HLTriggerOffline_Scouting_ElectronEfficiencyPlotter_H
3+
4+
#include "DQMServices/Core/interface/DQMEDHarvester.h"
5+
#include "DQMServices/Core/interface/DQMStore.h"
6+
#include "DataFormats/Common/interface/Handle.h"
7+
#include "FWCore/Framework/interface/ESHandle.h"
8+
#include "FWCore/Framework/interface/Event.h"
9+
#include "FWCore/Framework/interface/Frameworkfwd.h"
10+
#include "FWCore/Framework/interface/LuminosityBlock.h"
11+
#include "FWCore/Framework/interface/MakerMacros.h"
12+
#include "FWCore/ParameterSet/interface/ParameterSet.h"
13+
#include "FWCore/ServiceRegistry/interface/Service.h"
14+
15+
class ElectronEfficiencyPlotter : public DQMEDHarvester {
16+
public:
17+
// Constructor
18+
ElectronEfficiencyPlotter(const edm::ParameterSet& ps);
19+
// Destructor
20+
~ElectronEfficiencyPlotter() override = default;
21+
22+
protected:
23+
// DQM Client Diagnostic
24+
void dqmEndJob(DQMStore::IBooker&, DQMStore::IGetter&) override;
25+
26+
private:
27+
// counters
28+
29+
int ptBin_;
30+
double ptMin_;
31+
double ptMax_;
32+
33+
std::string ID_;
34+
35+
MonitorElement* h_eff_pt_EB_doubleEG_HLT;
36+
MonitorElement* h_eff_pt_EE_doubleEG_HLT;
37+
MonitorElement* h_eff_pt_EB_singlePhoton_HLT;
38+
MonitorElement* h_eff_pt_EE_singlePhoton_HLT;
39+
40+
std::string theFolder_;
41+
std::string sourceFolder_;
42+
void calculateEfficiency(MonitorElement* Numerator, MonitorElement* Denominator, MonitorElement* Efficiency);
43+
};
44+
45+
#endif

0 commit comments

Comments
 (0)