CMS 3D CMS Logo

nanojmeDQM_cff.py
Go to the documentation of this file.
1 import FWCore.ParameterSet.Config as cms
2 import copy
3 
4 from PhysicsTools.NanoAOD.nanoDQM_cfi import nanoDQM
7 
8 nanojmeDQM = nanoDQM.clone()
9 
10 #============================================
11 #
12 # Add more variables for AK4 Puppi jets
13 #
14 #============================================
15 _ak4puppiplots = cms.VPSet(
16  Count1D('_size', 20, -0.5, 19.5, 'AK4 PF Puppi jets with JECs applied.')
17 )
18 for plot in nanojmeDQM.vplots.Jet.plots:
19  if plot.name.value()=="_size": continue
20  _ak4puppiplots.append(plot)
21 
22 _ak4puppiplots.extend([
23  Plot1D('nConstChHads','nConstChHads', 10, 0, 40,'number of charged hadrons in the jet'),
24  Plot1D('nConstNeuHads','nConstNeuHads', 10, 0, 40,'number of neutral hadrons in the jet'),
25  Plot1D('nConstPhotons','nConstPhotons', 10, 0, 40,'number of photons in the jet'),
26  Plot1D('nConstElecs','nConstElecs', 5, 0, 10,'number of electrons in the jet'),
27  Plot1D('nConstMuons','nConstMuons', 5, 0, 10,'number of muons in the jet'),
28  Plot1D('nConstHFEMs','nConstHFEMs', 5, 0, 10,'number of HF EMs in the jet'),
29  Plot1D('nConstHFHads','nConstHFHads', 5, 0, 10,'number of HF Hadrons in the jet'),
30  Plot1D('puId_dR2Mean','puId_dR2Mean',20, 0, 0.2,"pT^2-weighted average square distance of jet constituents from the jet axis (PileUp ID BDT input variable)"),
31  Plot1D('puId_majW','puId_majW',10, 0, 0.5, "major axis of jet ellipsoid in eta-phi plane (PileUp ID BDT input variable)"),
32  Plot1D('puId_minW','puId_minW',10, 0, 0.5, "minor axis of jet ellipsoid in eta-phi plane (PileUp ID BDT input variable)"),
33  Plot1D('puId_frac01','puId_frac01',10, 0, 1, "fraction of constituents' pT contained within dR <0.1 (PileUp ID BDT input variable)"),
34  Plot1D('puId_frac02','puId_frac02',10, 0, 1, "fraction of constituents' pT contained within 0.1< dR <0.2 (PileUp ID BDT input variable)"),
35  Plot1D('puId_frac03','puId_frac03',10, 0, 1, "fraction of constituents' pT contained within 0.2< dR <0.3 (PileUp ID BDT input variable)"),
36  Plot1D('puId_frac04','puId_frac04',10, 0, 1, "fraction of constituents' pT contained within 0.3< dR <0.4 (PileUp ID BDT input variable)"),
37  Plot1D('puId_ptD','puId_ptD',10, 0, 1, "pT-weighted average pT of constituents (PileUp ID BDT input variable)"),
38  Plot1D('puId_beta','puId_beta',10, 0, 1, "fraction of pT of charged constituents associated to PV (PileUp ID BDT input variable)"),
39  Plot1D('puId_pull','puId_pull',10, 0, 0.05, "magnitude of pull vector (PileUp ID BDT input variable)"),
40  Plot1D('puId_jetR','puId_jetR',10, 0, 1, "fraction of jet pT carried by the leading constituent (PileUp ID BDT input variable)"),
41  Plot1D('puId_jetRchg','puId_jetRchg',10, 0, 1, "fraction of jet pT carried by the leading charged constituent (PileUp ID BDT input variable)"),
42  Plot1D('puId_nCharged','puId_nCharged',10, 0, 40, "number of charged constituents (PileUp ID BDT input variable)"),
43  Plot1D('qgl_axis2','qgl_axis2',10, 0, 0.4, "ellipse minor jet axis (Quark vs Gluon likelihood input variable)"),
44  Plot1D('qgl_ptD','qgl_ptD',10, 0, 1, "pT-weighted average pT of constituents (Quark vs Gluon likelihood input variable)"),
45  Plot1D('qgl_mult','qgl_mult', 10, 0, 50, "PF candidates multiplicity (Quark vs Gluon likelihood input variable)"),
46  Plot1D('btagDeepFlavG','btagDeepFlavG',20, -1, 1, "DeepFlavour gluon tag raw score"),
47  Plot1D('btagDeepFlavUDS','btagDeepFlavUDS',20, -1, 1, "DeepFlavour uds tag raw score"),
48  Plot1D('particleNetAK4_B','particleNetAK4_B',20, -1, 1, "ParticleNetAK4 tagger b vs all (udsg, c) discriminator"),
49  Plot1D('particleNetAK4_CvsL','particleNetAK4_CvsL',20, -1, 1,"ParticleNetAK4 tagger c vs udsg discriminator"),
50  Plot1D('particleNetAK4_CvsB','particleNetAK4_CvsB',20, -1, 1,"ParticleNetAK4 tagger c vs b discriminator"),
51  Plot1D('particleNetAK4_QvsG','particleNetAK4_QvsG',20, -1, 1,"ParticleNetAK4 tagger uds vs g discriminator"),
52  Plot1D('particleNetAK4_G','particleNetAK4_G',20, -1, 1, "ParticleNetAK4 tagger g raw score"),
53  Plot1D('particleNetAK4_puIdDisc','particleNetAK4_puIdDisc',20, -1, 1,"ParticleNetAK4 tagger pileup jet discriminator"),
54  Plot1D('hfEmEF','hfEmEF', 20, 0, 1,'electromagnetic energy fraction in HF'),
55  Plot1D('hfHEF','hfHEF', 20, 0, 1,'hadronic energy fraction in HF'),
56 ])
57 
58 #============================================
59 #
60 # Setup for AK4 CHS jets
61 #
62 #============================================
63 _ak4chsplots = cms.VPSet(
64  Count1D('_size', 20, -0.5, 19.5, 'AK4 PF CHS jets with JECs applied.')
65 )
66 for plot in _ak4puppiplots:
67  if plot.name.value()=="_size": continue
68  _ak4chsplots.append(plot)
69  _ak4chsplots.extend([
70  Plot1D('chFPV1EF', 'chFPV1EF', 20, 0, 2, 'charged fromPV==1 Energy Fraction (component of the total charged Energy Fraction).'),
71  Plot1D('chFPV2EF', 'chFPV2EF', 20, 0, 2, 'charged fromPV==2 Energy Fraction (component of the total charged Energy Fraction).'),
72  Plot1D('chFPV3EF', 'chFPV3EF', 20, 0, 2, 'charged fromPV==3 Energy Fraction (component of the total charged Energy Fraction).'),
73  ])
74 
75 #============================================
76 #
77 # Setup all extra AK4 collections. Will remove
78 # collection depending on era.
79 #
80 #============================================
81 nanojmeDQM.vplots.Jet.plots = _ak4puppiplots #Puppi is default "Jet collection" for Run-3
82 nanojmeDQM.vplots.JetPuppi = cms.PSet( # This is for the Run-2 extra "JetPuppi" collection
83  sels = nanojmeDQM.vplots.Jet.sels,
84  plots = _ak4puppiplots
85 )
86 nanojmeDQM.vplots.JetCHS = cms.PSet( # This is for the Run-3 extra "JetCHS" collection
87  sels = nanojmeDQM.vplots.Jet.sels,
88  plots = _ak4chsplots
89 )
90 
91 
92 
93 #============================================
94 #
95 # Add more variables for AK8 Puppi jets
96 #
97 #============================================
98 nanojmeDQM.vplots.FatJet.plots.extend([
99  Plot1D('nConstChHads','nConstChHads',10,0,40,'number of charged hadrons in the jet'),
100  Plot1D('nConstNeuHads','nConstNeuHads',10,0,40,'number of neutral hadrons in the jet'),
101  Plot1D('nConstPhotons','nConstPhotons',10,0,40,'number of photons in the jet'),
102  Plot1D('nConstElecs','nConstElecs',5,0,10,'number of electrons in the jet'),
103  Plot1D('nConstMuons','nConstMuons',5,0,10,'number of muons in the jet'),
104  Plot1D('nConstHFEMs','nConstHFEMs',5,0,10,'number of HF EMs in the jet'),
105  Plot1D('nConstHFHads','nConstHFHads',5,0,10,'number of HF Hadrons in the jet'),
106  Plot1D('neEmEF','neEmEF',20, 0, 1,'neutral Electromagnetic Energy Fraction'),
107  Plot1D('neHEF','neHEF',20, 0, 1,'neutral Hadron Energy Fraction'),
108 ])
109 
110 #============================================
111 #
112 # Setup for AK8 Puppi jets for JEC studies
113 #
114 #============================================
115 nanojmeDQM.vplots.FatJetForJEC = cms.PSet(
116  sels = cms.PSet(
117  CentralPt30 = cms.string('abs(eta) < 2.4 && pt > 30'),
118  ForwardPt30 = cms.string('abs(eta) > 2.4 && pt > 30')
119  ),
120  plots = cms.VPSet(
121  Count1D('_size', 20, -0.5, 19.5, 'AK8 PF Puppi jets with JECs applied. Reclustered for JEC studies so only minimal info stored.'),
122  Plot1D('area', 'area', 20, 0.2, 0.8, 'jet catchment area, for JECs'),
123  Plot1D('eta', 'eta', 20, -6, 6, 'eta'),
124  Plot1D('jetId', 'jetId', 8, -0.5, 7.5, 'Jet ID flags bit1 is loose (always false in 2017 since it does not exist), bit2 is tight, bit3 is tightLepVeto'),
125  Plot1D('mass', 'mass', 20, 0, 200, 'mass'),
126  Plot1D('phi', 'phi', 20, -3.14159, 3.14159, 'phi'),
127  Plot1D('pt', 'pt', 20, 0, 400, 'pt'),
128  Plot1D('rawFactor', 'rawFactor', 20, -0.5, 0.5, '1 - Factor to get back to raw pT'),
129  Plot1D('nConstChHads','nConstChHads', 10, 0, 40,'number of charged hadrons in the jet'),
130  Plot1D('nConstNeuHads','nConstNeuHads', 10, 0, 40,'number of neutral hadrons in the jet'),
131  Plot1D('nConstPhotons','nConstPhotons', 10, 0, 40,'number of photons in the jet'),
132  Plot1D('nConstElecs','nConstElecs', 5, 0, 10,'number of electrons in the jet'),
133  Plot1D('nConstMuons','nConstMuons', 5, 0, 10,'number of muons in the jet'),
134  Plot1D('nConstHFEMs','nConstHFEMs', 5, 0, 10,'number of HF EMs in the jet'),
135  Plot1D('nConstHFHads','nConstHFHads', 5, 0, 10,'number of HF Hadrons in the jet'),
136  Plot1D('nElectrons', 'nElectrons', 5, -0.5, 4.5, 'number of electrons in the jet'),
137  Plot1D('nMuons', 'nMuons', 4, -0.5, 3.5, 'number of muons in the jet'),
138  Plot1D('hadronFlavour', 'hadronFlavour', 6, -0.5, 5.5, 'flavour from hadron ghost clustering'),
139  Plot1D('partonFlavour', 'partonFlavour', 40, -9.5, 30.5, 'flavour from parton matching'),
140  Plot1D('chEmEF', 'chEmEF', 20, 0, 1, 'charged Electromagnetic Energy Fraction'),
141  Plot1D('chHEF', 'chHEF', 20, 0, 2, 'charged Hadron Energy Fraction'),
142  Plot1D('neEmEF', 'neEmEF', 20, 0.3, 0.4, 'neutral Electromagnetic Energy Fraction'),
143  Plot1D('neHEF', 'neHEF', 20, 0.01, 0.2, 'neutral Hadron Energy Fraction'),
144  Plot1D('hfEmEF', 'hfEmEF', 20, 0, 1, 'electromagnetic energy fraction in HF'),
145  Plot1D('hfHEF', 'hfHEF', 20, 0, 1, 'hadronic energy fraction in HF'),
146  Plot1D('muEF', 'muEF', 20, -1, 1, 'muon Energy Fraction'),
147  NoPlot('genJetIdx'),
148  ),
149 )
150 
151 #============================================
152 #
153 # Setup for AK8 CHS jets
154 #
155 #============================================
156 _ak8chsplots = cms.VPSet(
157  Count1D('_size', 20, -0.5, 19.5, 'AK8 CHS jets with JECs applied.')
158 )
159 for plot in nanojmeDQM.vplots.FatJetForJEC.plots:
160  if plot.name.value()=="_size": continue
161  _ak8chsplots.append(plot)
162 
163 nanojmeDQM.vplots.FatJetCHS = cms.PSet(
164  sels = nanojmeDQM.vplots.FatJetForJEC.sels,
165  plots = _ak8chsplots,
166 )
167 
168 #============================================
169 #
170 # Setup for AK4 Calo jets
171 #
172 #============================================
173 nanojmeDQM.vplots.JetCalo = cms.PSet(
174  sels = cms.PSet(
175  CentralPt30 = cms.string('abs(eta) < 2.4 && pt > 30'),
176  ForwardPt30 = cms.string('abs(eta) > 2.4 && pt > 30')
177  ),
178  plots = cms.VPSet(
179  Count1D('_size', 20, -0.5, 19.5, 'AK4 Calo jets (slimmedCaloJets)'),
180  Plot1D('area', 'area', 20, 0.2, 0.8, 'jet catchment area'),
181  Plot1D('eta', 'eta', 20, -6, 6, 'eta'),
182  Plot1D('mass', 'mass', 20, 0, 200, 'mass'),
183  Plot1D('phi', 'phi', 20, -3.14159, 3.14159, 'phi'),
184  Plot1D('pt', 'pt', 20, 0, 400, 'pt'),
185  Plot1D('rawFactor', 'rawFactor', 20, -0.5, 0.5, '1 - Factor to get back to raw pT'),
186  Plot1D('emf', 'emf', 20, 0, 1, 'electromagnetic energy fraction'),
187  Plot1D('hadronFlavour', 'hadronFlavour', 6, -0.5, 5.5, 'flavour from hadron ghost clustering'),
188  Plot1D('partonFlavour', 'partonFlavour', 40, -9.5, 30.5, 'flavour from parton matching'),
189  NoPlot('genJetIdx'),
190  ),
191 )
192 
193 
194 nanojmeDQMMC = nanojmeDQM.clone()
195 #nanojmeDQMMC.vplots.Electron.sels.Prompt = cms.string("genPartFlav == 1")
196 nanojmeDQMMC.vplots.LowPtElectron.sels.Prompt = cms.string("genPartFlav == 1")
197 nanojmeDQMMC.vplots.Muon.sels.Prompt = cms.string("genPartFlav == 1")
198 nanojmeDQMMC.vplots.Photon.sels.Prompt = cms.string("genPartFlav == 1")
199 nanojmeDQMMC.vplots.Tau.sels.Prompt = cms.string("genPartFlav == 5")
200 nanojmeDQMMC.vplots.Jet.sels.Prompt = cms.string("genJetIdx != 1")
201 nanojmeDQMMC.vplots.Jet.sels.PromptB = cms.string("genJetIdx != 1 && hadronFlavour == 5")
202 
203 #============================================
204 #
205 # Era dependent customization
206 #
207 #============================================
208 #
209 # Run 3
210 #
211 (~run2_nanoAOD_ANY).toModify(
212  nanojmeDQM.vplots.Jet,
213  plots = _ak4puppiplots,
214 ).toModify(
215  nanojmeDQM.vplots,
216  JetPuppi = None # Remove "JetPuppi" from DQM
217 )
218 (~run2_nanoAOD_ANY).toModify(
219  nanojmeDQMMC.vplots.JetCHS.sels,
220  Prompt = nanojmeDQMMC.vplots.Jet.sels.Prompt,
221  PromptB = nanojmeDQMMC.vplots.Jet.sels.PromptB
222 )
223 #
224 # Run 2
225 #
226 run2_nanoAOD_ANY.toModify(
227  nanojmeDQM.vplots.Jet,
228  plots = _ak4chsplots, #
229 ).toModify(
230  nanojmeDQM.vplots,
231  JetCHS = None # Remove "JetCHS" from DQM
232 )
233 run2_nanoAOD_ANY.toModify(
234  nanojmeDQMMC.vplots.JetPuppi.sels,
235  Prompt = nanojmeDQMMC.vplots.Jet.sels.Prompt,
236  PromptB = nanojmeDQMMC.vplots.Jet.sels.PromptB
237 )
238 
239 from DQMServices.Core.DQMQualityTester import DQMQualityTester
240 nanoDQMQTester = DQMQualityTester(
241  qtList = cms.untracked.FileInPath('PhysicsTools/NanoAOD/test/dqmQualityTests.xml'),
242  prescaleFactor = cms.untracked.int32(1),
243  testInEventloop = cms.untracked.bool(False),
244  qtestOnEndLumi = cms.untracked.bool(False),
245  verboseQT = cms.untracked.bool(True)
246 )
247 
248 nanojmeHarvest = cms.Sequence( nanoDQMQTester )
def Count1D(name, nbins, xmin, xmax, title="")