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('chHadMultiplicity','chHadMultiplicity', 10, 0, 40,'(Puppi-weighted) number of charged hadrons in the jet'),
24  Plot1D('neHadMultiplicity','neHadMultiplicity', 10, 0, 40,'(Puppi-weighted) number of neutral hadrons in the jet'),
25  Plot1D('phoMultiplicity','phoMultiplicity', 10, 0, 40,'(Puppi-weighted) number of photons in the jet'),
26  Plot1D('elMultiplicity','elMultiplicity', 5, 0, 10,'(Puppi-weighted) number of electrons in the jet'),
27  Plot1D('muMultiplicity','muMultiplicity', 5, 0, 10,'(Puppi-weighted) number of muons in the jet'),
28  Plot1D('hfEMMultiplicity','hfEMMultiplicity', 5, 0, 10,'(Puppi-weighted) number of HF EMs in the jet'),
29  Plot1D('hfHadMultiplicity','hfHadMultiplicity', 5, 0, 10,'(Puppi-weighted) 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 ])
55 
56 #============================================
57 #
58 # Setup for AK4 CHS jets
59 #
60 #============================================
61 _ak4chsplots = cms.VPSet(
62  Count1D('_size', 20, -0.5, 19.5, 'AK4 PF CHS jets with JECs applied.')
63 )
64 for plot in _ak4puppiplots:
65  if plot.name.value()=="_size": continue
66  _ak4chsplots.append(plot)
67  _ak4chsplots.extend([
68  Plot1D('chFPV1EF', 'chFPV1EF', 20, 0, 2, 'charged fromPV==1 Energy Fraction (component of the total charged Energy Fraction).'),
69  Plot1D('chFPV2EF', 'chFPV2EF', 20, 0, 2, 'charged fromPV==2 Energy Fraction (component of the total charged Energy Fraction).'),
70  Plot1D('chFPV3EF', 'chFPV3EF', 20, 0, 2, 'charged fromPV==3 Energy Fraction (component of the total charged Energy Fraction).'),
71  ])
72 
73 #============================================
74 #
75 # Setup all extra AK4 collections. Will remove
76 # collection depending on era.
77 #
78 #============================================
79 nanojmeDQM.vplots.Jet.plots = _ak4puppiplots #Puppi is default "Jet collection" for Run-3
80 nanojmeDQM.vplots.JetPuppi = cms.PSet( # This is for the Run-2 extra "JetPuppi" collection
81  sels = nanojmeDQM.vplots.Jet.sels,
82  plots = _ak4puppiplots
83 )
84 nanojmeDQM.vplots.JetCHS = cms.PSet( # This is for the Run-3 extra "JetCHS" collection
85  sels = nanojmeDQM.vplots.Jet.sels,
86  plots = _ak4chsplots
87 )
88 
89 
90 
91 #============================================
92 #
93 # Add more variables for AK8 Puppi jets
94 #
95 #============================================
96 nanojmeDQM.vplots.FatJet.plots.extend([
97  Plot1D('chHadMultiplicity','chHadMultiplicity', 10, 0, 40,'(Puppi-weighted) number of charged hadrons in the jet'),
98  Plot1D('neHadMultiplicity','neHadMultiplicity', 10, 0, 40,'(Puppi-weighted) number of neutral hadrons in the jet'),
99  Plot1D('phoMultiplicity','phoMultiplicity', 10, 0, 40,'(Puppi-weighted) number of photons in the jet'),
100  Plot1D('elMultiplicity','elMultiplicity', 5, 0, 10,'(Puppi-weighted) number of electrons in the jet'),
101  Plot1D('muMultiplicity','muMultiplicity', 5, 0, 10,'(Puppi-weighted) number of muons in the jet'),
102  Plot1D('hfEMMultiplicity','hfEMMultiplicity', 5, 0, 10,'(Puppi-weighted) number of HF EMs in the jet'),
103  Plot1D('hfHadMultiplicity','hfHadMultiplicity', 5, 0, 10,'(Puppi-weighted) number of HF hadrons in the jet'),
104  Plot1D('neEmEF','neEmEF',20, 0, 1,'neutral Electromagnetic Energy Fraction'),
105  Plot1D('neHEF','neHEF',20, 0, 1,'neutral Hadron Energy Fraction'),
106 ])
107 
108 #============================================
109 #
110 # Setup for AK8 Puppi jets for JEC studies
111 #
112 #============================================
113 nanojmeDQM.vplots.FatJetForJEC = cms.PSet(
114  sels = cms.PSet(
115  CentralPt30 = cms.string('abs(eta) < 2.4 && pt > 30'),
116  ForwardPt30 = cms.string('abs(eta) > 2.4 && pt > 30')
117  ),
118  plots = cms.VPSet(
119  Count1D('_size', 20, -0.5, 19.5, 'AK8 PF Puppi jets with JECs applied. Reclustered for JEC studies so only minimal info stored.'),
120  Plot1D('area', 'area', 20, 0.2, 0.8, 'jet catchment area, for JECs'),
121  Plot1D('eta', 'eta', 20, -6, 6, 'eta'),
122  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'),
123  Plot1D('mass', 'mass', 20, 0, 200, 'mass'),
124  Plot1D('phi', 'phi', 20, -3.14159, 3.14159, 'phi'),
125  Plot1D('pt', 'pt', 20, 0, 400, 'pt'),
126  Plot1D('rawFactor', 'rawFactor', 20, -0.5, 0.5, '1 - Factor to get back to raw pT'),
127  Plot1D('chHadMultiplicity','chHadMultiplicity', 10, 0, 40,'(Puppi-weighted) number of charged hadrons in the jet'),
128  Plot1D('neHadMultiplicity','neHadMultiplicity', 10, 0, 40,'(Puppi-weighted) number of neutral hadrons in the jet'),
129  Plot1D('phoMultiplicity','phoMultiplicity', 10, 0, 40,'(Puppi-weighted) number of photons in the jet'),
130  Plot1D('elMultiplicity','elMultiplicity', 5, 0, 10,'(Puppi-weighted) number of electrons in the jet'),
131  Plot1D('muMultiplicity','muMultiplicity', 5, 0, 10,'(Puppi-weighted) number of muons in the jet'),
132  Plot1D('hfEMMultiplicity','hfEMMultiplicity', 5, 0, 10,'(Puppi-weighted) number of HF EMs in the jet'),
133  Plot1D('hfHadMultiplicity','hfHadMultiplicity', 5, 0, 10,'(Puppi-weighted) number of HF hadrons in the jet'),
134  Plot1D('nElectrons', 'nElectrons', 5, -0.5, 4.5, 'number of electrons in the jet'),
135  Plot1D('nMuons', 'nMuons', 4, -0.5, 3.5, 'number of muons in the jet'),
136  Plot1D('hadronFlavour', 'hadronFlavour', 6, -0.5, 5.5, 'flavour from hadron ghost clustering'),
137  Plot1D('partonFlavour', 'partonFlavour', 40, -9.5, 30.5, 'flavour from parton matching'),
138  Plot1D('chEmEF', 'chEmEF', 20, 0, 1, 'charged Electromagnetic Energy Fraction'),
139  Plot1D('chHEF', 'chHEF', 20, 0, 2, 'charged Hadron Energy Fraction'),
140  Plot1D('neEmEF', 'neEmEF', 20, 0.3, 0.4, 'neutral Electromagnetic Energy Fraction'),
141  Plot1D('neHEF', 'neHEF', 20, 0.01, 0.2, 'neutral Hadron Energy Fraction'),
142  Plot1D('hfEmEF', 'hfEmEF', 20, 0, 1, 'electromagnetic energy fraction in HF'),
143  Plot1D('hfHEF', 'hfHEF', 20, 0, 1, 'hadronic energy fraction in HF'),
144  Plot1D('muEF', 'muEF', 20, -1, 1, 'muon Energy Fraction'),
145  NoPlot('genJetIdx'),
146  ),
147 )
148 
149 #============================================
150 #
151 # Setup for AK4 Calo jets
152 #
153 #============================================
154 nanojmeDQM.vplots.JetCalo = cms.PSet(
155  sels = cms.PSet(
156  CentralPt30 = cms.string('abs(eta) < 2.4 && pt > 30'),
157  ForwardPt30 = cms.string('abs(eta) > 2.4 && pt > 30')
158  ),
159  plots = cms.VPSet(
160  Count1D('_size', 20, -0.5, 19.5, 'AK4 Calo jets (slimmedCaloJets)'),
161  Plot1D('area', 'area', 20, 0.2, 0.8, 'jet catchment area'),
162  Plot1D('eta', 'eta', 20, -6, 6, 'eta'),
163  Plot1D('mass', 'mass', 20, 0, 200, 'mass'),
164  Plot1D('phi', 'phi', 20, -3.14159, 3.14159, 'phi'),
165  Plot1D('pt', 'pt', 20, 0, 400, 'pt'),
166  Plot1D('rawFactor', 'rawFactor', 20, -0.5, 0.5, '1 - Factor to get back to raw pT'),
167  Plot1D('emf', 'emf', 20, 0, 1, 'electromagnetic energy fraction'),
168  Plot1D('hadronFlavour', 'hadronFlavour', 6, -0.5, 5.5, 'flavour from hadron ghost clustering'),
169  Plot1D('partonFlavour', 'partonFlavour', 40, -9.5, 30.5, 'flavour from parton matching'),
170  NoPlot('genJetIdx'),
171  ),
172 )
173 
174 
175 nanojmeDQMMC = nanojmeDQM.clone()
176 #nanojmeDQMMC.vplots.Electron.sels.Prompt = cms.string("genPartFlav == 1")
177 nanojmeDQMMC.vplots.LowPtElectron.sels.Prompt = cms.string("genPartFlav == 1")
178 nanojmeDQMMC.vplots.Muon.sels.Prompt = cms.string("genPartFlav == 1")
179 nanojmeDQMMC.vplots.Photon.sels.Prompt = cms.string("genPartFlav == 1")
180 nanojmeDQMMC.vplots.Tau.sels.Prompt = cms.string("genPartFlav == 5")
181 nanojmeDQMMC.vplots.Jet.sels.Prompt = cms.string("genJetIdx != 1")
182 nanojmeDQMMC.vplots.Jet.sels.PromptB = cms.string("genJetIdx != 1 && hadronFlavour == 5")
183 
184 #============================================
185 #
186 # Era dependent customization
187 #
188 #============================================
189 #
190 # Run 3
191 #
192 (~run2_nanoAOD_ANY).toModify(
193  nanojmeDQM.vplots.Jet,
194  plots = _ak4puppiplots,
195 ).toModify(
196  nanojmeDQM.vplots,
197  JetPuppi = None # Remove "JetPuppi" from DQM
198 )
199 (~run2_nanoAOD_ANY).toModify(
200  nanojmeDQMMC.vplots.JetCHS.sels,
201  Prompt = nanojmeDQMMC.vplots.Jet.sels.Prompt,
202  PromptB = nanojmeDQMMC.vplots.Jet.sels.PromptB
203 )
204 #
205 # Run 2
206 #
207 run2_nanoAOD_ANY.toModify(
208  nanojmeDQM.vplots.Jet,
209  plots = _ak4chsplots, #
210 ).toModify(
211  nanojmeDQM.vplots,
212  JetCHS = None # Remove "JetCHS" from DQM
213 )
214 run2_nanoAOD_ANY.toModify(
215  nanojmeDQMMC.vplots.JetPuppi.sels,
216  Prompt = nanojmeDQMMC.vplots.Jet.sels.Prompt,
217  PromptB = nanojmeDQMMC.vplots.Jet.sels.PromptB
218 )
219 
220 from DQMServices.Core.DQMQualityTester import DQMQualityTester
221 nanoDQMQTester = DQMQualityTester(
222  qtList = cms.untracked.FileInPath('PhysicsTools/NanoAOD/test/dqmQualityTests.xml'),
223  prescaleFactor = cms.untracked.int32(1),
224  testInEventloop = cms.untracked.bool(False),
225  qtestOnEndLumi = cms.untracked.bool(False),
226  verboseQT = cms.untracked.bool(True)
227 )
228 
229 nanojmeHarvest = cms.Sequence( nanoDQMQTester )
def Count1D(name, nbins, xmin, xmax, title="")