1 import FWCore.ParameterSet.Config
as cms
4 from PhysicsTools.NanoAOD.simpleCandidateFlatTableProducer_cfi
import simpleCandidateFlatTableProducer
8 from RecoJets.JetProducers.hfJetShowerShape_cfi
import hfJetShowerShape
17 from PhysicsTools.PatAlgos.tools.jetCollectionTools
import GenJetAdder, RecoJetAdder
21 bTagCSVV2 = [
'pfCombinedInclusiveSecondaryVertexV2BJetTags']
22 bTagDeepCSV = [
'pfDeepCSVJetTags:probb',
'pfDeepCSVJetTags:probbb',
'pfDeepCSVJetTags:probc',
'pfDeepCSVJetTags:probudsg']
24 'pfDeepFlavourJetTags:probb',
'pfDeepFlavourJetTags:probbb',
'pfDeepFlavourJetTags:problepb',
25 'pfDeepFlavourJetTags:probc',
'pfDeepFlavourJetTags:probuds',
'pfDeepFlavourJetTags:probg' 29 bTagDiscriminatorsForAK4 = cms.PSet(foo = cms.vstring(bTagDeepJet+_pfParticleNetAK4JetTagsAll+_pfParticleTransformerAK4JetTagsAll))
30 run2_nanoAOD_ANY.toModify(
31 bTagDiscriminatorsForAK4,
32 foo = bTagCSVV2+bTagDeepCSV+bTagDeepJet+_pfParticleNetAK4JetTagsAll
34 bTagDiscriminatorsForAK4 = bTagDiscriminatorsForAK4.foo.value()
39 btagHbb = [
'pfBoostedDoubleSecondaryVertexAK8BJetTags']
41 'pfDeepDoubleBvLJetTags:probHbb',
42 'pfDeepDoubleCvLJetTags:probHcc',
43 'pfDeepDoubleCvBJetTags:probHcc',
44 'pfMassIndependentDeepDoubleBvLJetTags:probHbb',
45 'pfMassIndependentDeepDoubleCvLJetTags:probHcc',
46 'pfMassIndependentDeepDoubleCvBJetTags:probHcc' 49 'pfMassIndependentDeepDoubleBvLV2JetTags:probHbb',
50 'pfMassIndependentDeepDoubleCvLV2JetTags:probHcc',
51 'pfMassIndependentDeepDoubleCvBV2JetTags:probHcc' 66 config_genjets = list(
filter(
lambda k: k[
'enabled'], config_genjets))
73 "doc" :
"AK6 Gen jets (made with visible genparticles) with pt > 3 GeV",
87 "inputCollection" :
"slimmedCaloJets",
88 "genJetsCollection":
"AK4GenJetsNoNu",
93 "inputCollection" :
"",
94 "genJetsCollection":
"AK4GenJetsNoNu",
100 "inputCollection" :
"",
101 "genJetsCollection":
"AK8GenJetsNoNu",
105 config_recojets = list(
filter(
lambda k: k[
'enabled'], config_recojets))
109 nanoInfo_recojets = {
112 "doc" :
"AK4 Calo jets (slimmedCaloJets)",
116 "doc" :
"AK4 PF jets",
121 "doc" :
"AK8 PF jets",
126 GENJETVARS = cms.PSet(P4Vars,
127 nConstituents = jetTable.variables.nConstituents,
129 PFJETVARS = cms.PSet(P4Vars,
130 rawFactor =
Var(
"1.-jecFactor('Uncorrected')",float,doc=
"1 - Factor to get back to raw pT",precision=6),
131 area = jetTable.variables.area,
132 chHEF = jetTable.variables.chHEF,
133 neHEF = jetTable.variables.neHEF,
134 chEmEF = jetTable.variables.chEmEF,
135 neEmEF = jetTable.variables.neEmEF,
136 muEF = jetTable.variables.muEF,
137 hfHEF =
Var(
"HFHadronEnergyFraction()",float,doc =
"hadronic energy fraction in HF",precision = 6),
138 hfEmEF =
Var(
"HFEMEnergyFraction()",float,doc =
"electromagnetic energy fraction in HF",precision = 6),
139 nMuons = jetTable.variables.nMuons,
140 nElectrons = jetTable.variables.nElectrons,
141 nConstituents = jetTable.variables.nConstituents,
142 nConstChHads =
Var(
"chargedHadronMultiplicity()",int,doc=
"number of charged hadrons in the jet"),
143 nConstNeuHads =
Var(
"neutralHadronMultiplicity()",int,doc=
"number of neutral hadrons in the jet"),
144 nConstHFHads =
Var(
"HFHadronMultiplicity()", int,doc=
"number of HF hadrons in the jet"),
145 nConstHFEMs =
Var(
"HFEMMultiplicity()",int,doc=
"number of HF EMs in the jet"),
146 nConstMuons =
Var(
"muonMultiplicity()",int,doc=
"number of muons in the jet"),
147 nConstElecs =
Var(
"electronMultiplicity()",int,doc=
"number of electrons in the jet"),
148 nConstPhotons =
Var(
"photonMultiplicity()",int,doc=
"number of photons in the jet"),
151 puId_dR2Mean =
Var(
"?(pt>=10)?userFloat('puId_dR2Mean'):-1",float,doc=
"pT^2-weighted average square distance of jet constituents from the jet axis (PileUp ID BDT input variable)", precision=14),
152 puId_majW =
Var(
"?(pt>=10)?userFloat('puId_majW'):-1",float,doc=
"major axis of jet ellipsoid in eta-phi plane (PileUp ID BDT input variable)", precision=14),
153 puId_minW =
Var(
"?(pt>=10)?userFloat('puId_minW'):-1",float,doc=
"minor axis of jet ellipsoid in eta-phi plane (PileUp ID BDT input variable)", precision=14),
154 puId_frac01 =
Var(
"?(pt>=10)?userFloat('puId_frac01'):-1",float,doc=
"fraction of constituents' pT contained within dR <0.1 (PileUp ID BDT input variable)", precision=14),
155 puId_frac02 =
Var(
"?(pt>=10)?userFloat('puId_frac02'):-1",float,doc=
"fraction of constituents' pT contained within 0.1< dR <0.2 (PileUp ID BDT input variable)", precision=14),
156 puId_frac03 =
Var(
"?(pt>=10)?userFloat('puId_frac03'):-1",float,doc=
"fraction of constituents' pT contained within 0.2< dR <0.3 (PileUp ID BDT input variable)", precision=14),
157 puId_frac04 =
Var(
"?(pt>=10)?userFloat('puId_frac04'):-1",float,doc=
"fraction of constituents' pT contained within 0.3< dR <0.4 (PileUp ID BDT input variable)", precision=14),
158 puId_ptD =
Var(
"?(pt>=10)?userFloat('puId_ptD'):-1",float,doc=
"pT-weighted average pT of constituents (PileUp ID BDT input variable)", precision=14),
159 puId_beta =
Var(
"?(pt>=10)?userFloat('puId_beta'):-1",float,doc=
"fraction of pT of charged constituents associated to PV (PileUp ID BDT input variable)", precision=14),
160 puId_pull =
Var(
"?(pt>=10)?userFloat('puId_pull'):-1",float,doc=
"magnitude of pull vector (PileUp ID BDT input variable)", precision=14),
161 puId_jetR =
Var(
"?(pt>=10)?userFloat('puId_jetR'):-1",float,doc=
"fraction of jet pT carried by the leading constituent (PileUp ID BDT input variable)", precision=14),
162 puId_jetRchg =
Var(
"?(pt>=10)?userFloat('puId_jetRchg'):-1",float,doc=
"fraction of jet pT carried by the leading charged constituent (PileUp ID BDT input variable)", precision=14),
163 puId_nCharged =
Var(
"?(pt>=10)?userInt('puId_nCharged'):-1",int,doc=
"number of charged constituents (PileUp ID BDT input variable)"),
166 qgl_axis2 =
Var(
"?(pt>=10)?userFloat('qgl_axis2'):-1",float,doc=
"ellipse minor jet axis (Quark vs Gluon likelihood input variable)", precision=14),
167 qgl_ptD =
Var(
"?(pt>=10)?userFloat('qgl_ptD'):-1",float,doc=
"pT-weighted average pT of constituents (Quark vs Gluon likelihood input variable)", precision=14),
168 qgl_mult =
Var(
"?(pt>=10)?userInt('qgl_mult'):-1", int,doc=
"PF candidates multiplicity (Quark vs Gluon likelihood input variable)"),
171 btagDeepB =
Var(
"?(pt>=15)&&((bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb'))>=0)?bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb'):-1",float,doc=
"DeepCSV b+bb tag discriminator",precision=10),
172 btagDeepCvL =
Var(
"?(pt>=15)&&(bDiscriminator('pfDeepCSVJetTags:probc')>=0)?bDiscriminator('pfDeepCSVJetTags:probc')/(bDiscriminator('pfDeepCSVJetTags:probc')+bDiscriminator('pfDeepCSVJetTags:probudsg')):-1", float,doc=
"DeepCSV c vs udsg discriminator",precision=10),
173 btagDeepCvB =
Var(
"?(pt>=15)&&bDiscriminator('pfDeepCSVJetTags:probc')>=0?bDiscriminator('pfDeepCSVJetTags:probc')/(bDiscriminator('pfDeepCSVJetTags:probc')+bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')):-1",float,doc=
"DeepCSV c vs b+bb discriminator",precision=10),
175 DEEPJETVARS = cms.PSet(
176 btagDeepFlavB =
Var(
"?(pt>=15)?bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb'):-1",float,doc=
"DeepJet b+bb+lepb tag discriminator",precision=10),
177 btagDeepFlavC =
Var(
"?(pt>=15)?bDiscriminator('pfDeepFlavourJetTags:probc'):-1",float,doc=
"DeepFlavour charm tag raw score",precision=10),
178 btagDeepFlavG =
Var(
"?(pt>=15)?bDiscriminator('pfDeepFlavourJetTags:probg'):-1",float,doc=
"DeepFlavour gluon tag raw score",precision=10),
179 btagDeepFlavUDS =
Var(
"?(pt>=15)?bDiscriminator('pfDeepFlavourJetTags:probuds'):-1",float,doc=
"DeepFlavour uds tag raw score",precision=10),
180 btagDeepFlavCvL =
Var(
"?(pt>=15)&&(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probuds')+bDiscriminator('pfDeepFlavourJetTags:probg'))>0?bDiscriminator('pfDeepFlavourJetTags:probc')/(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probuds')+bDiscriminator('pfDeepFlavourJetTags:probg')):-1",float,doc=
"DeepJet c vs uds+g discriminator",precision=10),
181 btagDeepFlavCvB =
Var(
"?(pt>=15)&&(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb'))>0?bDiscriminator('pfDeepFlavourJetTags:probc')/(bDiscriminator('pfDeepFlavourJetTags:probc')+bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb')):-1",float,doc=
"DeepJet c vs b+bb+lepb discriminator",precision=10),
182 btagDeepFlavQG =
Var(
"?(pt>=15)&&(bDiscriminator('pfDeepFlavourJetTags:probg')+bDiscriminator('pfDeepFlavourJetTags:probuds'))>0?bDiscriminator('pfDeepFlavourJetTags:probg')/(bDiscriminator('pfDeepFlavourJetTags:probg')+bDiscriminator('pfDeepFlavourJetTags:probuds')):-1",float,doc=
"DeepJet g vs uds discriminator",precision=10),
184 ROBUSTPARTAK4VARS = cms.PSet(
185 btagRobustParTAK4B =
Var(
"?(pt>=15)?bDiscriminator('pfParticleTransformerAK4Tags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb'):-1",float,doc=
"DeepJet b+bb+lepb tag discriminator",precision=10),
186 btagRobustParTAK4C =
Var(
"?(pt>=15)?bDiscriminator('pfParticleTransformerAK4Tags:probc'):-1",float,doc=
"DeepFlavour charm tag raw score",precision=10),
187 btagRobustParTAK4G =
Var(
"?(pt>=15)?bDiscriminator('pfParticleTransformerAK4Tags:probg'):-1",float,doc=
"DeepFlavour gluon tag raw score",precision=10),
188 btagRobustParTAK4UDS =
Var(
"?(pt>=15)?bDiscriminator('pfParticleTransformerAK4Tags:probuds'):-1",float,doc=
"DeepFlavour uds tag raw score",precision=10),
189 btagRobustParTAK4CvL =
Var(
"?(pt>=15)&&(bDiscriminator('pfParticleTransformerAK4JetTags:probc')+bDiscriminator('pfParticleTransformerAK4JetTags:probuds')+bDiscriminator('pfParticleTransformerAK4JetTags:probg'))>0?bDiscriminator('pfParticleTransformerAK4JetTags:probc')/(bDiscriminator('pfParticleTransformerAK4JetTags:probc')+bDiscriminator('pfParticleTransformerAK4JetTags:probuds')+bDiscriminator('pfParticleTransformerAK4JetTags:probg')):-1",float,doc=
"DeepJet c vs uds+g discriminator",precision=10),
190 btagRobustParTAK4CvB =
Var(
"?(pt>=15)&&(bDiscriminator('pfParticleTransformerAK4JetTags:probc')+bDiscriminator('pfParticleTransformerAK4JetTags:probb')+bDiscriminator('pfParticleTransformerAK4JetTags:probbb')+bDiscriminator('pfParticleTransformerAK4JetTags:problepb'))>0?bDiscriminator('pfParticleTransformerAK4JetTags:probc')/(bDiscriminator('pfParticleTransformerAK4JetTags:probc')+bDiscriminator('pfParticleTransformerAK4JetTags:probb')+bDiscriminator('pfParticleTransformerAK4JetTags:probbb')+bDiscriminator('pfParticleTransformerAK4JetTags:problepb')):-1",float,doc=
"DeepJet c vs b+bb+lepb discriminator",precision=10),
191 btagRobustParTAK4QG =
Var(
"?(pt>=15)&&(bDiscriminator('pfParticleTransformerAK4JetTags:probg')+bDiscriminator('pfParticleTransformerAK4JetTags:probuds'))>0?bDiscriminator('pfParticleTransformerAK4JetTags:probg')/(bDiscriminator('pfParticleTransformerAK4JetTags:probg')+bDiscriminator('pfParticleTransformerAK4JetTags:probuds')):-1",float,doc=
"DeepJet g vs uds discriminator",precision=10),
193 PARTICLENETAK4VARS = cms.PSet(
194 particleNetAK4_B =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:BvsAll'):-1",float,doc=
"ParticleNetAK4 tagger b vs all (udsg, c) discriminator",precision=10),
195 particleNetAK4_CvsL =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:CvsL'):-1",float,doc=
"ParticleNetAK4 tagger c vs udsg discriminator",precision=10),
196 particleNetAK4_CvsB =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:CvsB'):-1",float,doc=
"ParticleNetAK4 tagger c vs b discriminator",precision=10),
197 particleNetAK4_QvsG =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:QvsG'):-1",float,doc=
"ParticleNetAK4 tagger uds vs g discriminator",precision=10),
198 particleNetAK4_G =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4JetTags:probg'):-1",float,doc=
"ParticleNetAK4 tagger g raw score",precision=10),
199 particleNetAK4_puIdDisc =
Var(
"?(pt>=15)?1-bDiscriminator('pfParticleNetAK4JetTags:probpu'):-1",float,doc=
"ParticleNetAK4 tagger pileup jet discriminator",precision=10),
202 CALOJETVARS = cms.PSet(P4Vars,
203 area = jetTable.variables.area,
204 rawFactor = jetTable.variables.rawFactor,
205 emf =
Var(
"emEnergyFraction()", float, doc =
"electromagnetic energy fraction", precision = 10),
216 def AddJetID(proc, jetName="", jetSrc="", jetTableName="", jetTaskName=""):
218 Setup modules to calculate PF jet ID 221 isPUPPIJet =
True if "PUPPI" in jetName.upper()
else False 223 looseJetId =
"looseJetId{}".
format(jetName)
224 setattr(proc, looseJetId, proc.looseJetId.clone(
226 filterParams = proc.looseJetId.filterParams.clone(
232 tightJetId =
"tightJetId{}".
format(jetName)
233 setattr(proc, tightJetId, proc.tightJetId.clone(
235 filterParams = proc.tightJetId.filterParams.clone(
236 version =
"RUN2UL{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
241 tightJetIdLepVeto =
"tightJetIdLepVeto{}".
format(jetName)
242 setattr(proc, tightJetIdLepVeto, proc.tightJetIdLepVeto.clone(
244 filterParams = proc.tightJetIdLepVeto.filterParams.clone(
245 version =
"RUN2UL{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
250 run2_jme_2016.toModify(
251 getattr(proc, tightJetId).filterParams, version =
"RUN2UL16{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
253 getattr(proc, tightJetIdLepVeto).filterParams, version =
"RUN2UL16{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
259 patJetWithUserData =
"{}WithUserData".
format(jetSrc)
260 getattr(proc, patJetWithUserData).userInts.tightId = cms.InputTag(tightJetId)
261 getattr(proc, patJetWithUserData).userInts.tightIdLepVeto = cms.InputTag(tightJetIdLepVeto)
266 getattr(proc, jetTableName).variables.jetId =
Var(
"userInt('tightId')*2+4*userInt('tightIdLepVeto')",int,doc=
"Jet ID flags bit1 is loose (always false in 2017 since it does not exist), bit2 is tight, bit3 is tightLepVeto")
268 getattr(proc,jetTaskName).
add(getattr(proc, tightJetId))
269 getattr(proc,jetTaskName).
add(getattr(proc, tightJetIdLepVeto))
275 Setup modules to calculate pileup jet ID input variables for PF jet 281 puJetIdVarsCalculator =
"puJetIdCalculator{}".
format(jetName)
282 setattr(proc, puJetIdVarsCalculator, pileupJetIdCalculator.clone(
284 vertexes =
"offlineSlimmedPrimaryVertices",
285 inputIsCorrected =
True,
287 srcConstituentWeights =
"packedPFCandidatespuppi" if "PUPPI" in jetName.upper()
else "" 290 getattr(proc,jetTaskName).
add(getattr(proc, puJetIdVarsCalculator))
295 puJetIDVar =
"puJetIDVar{}".
format(jetName)
296 setattr(proc, puJetIDVar, cms.EDProducer(
"PileupJetIDVarProducer",
297 srcJet = cms.InputTag(jetSrc),
298 srcPileupJetId = cms.InputTag(puJetIdVarsCalculator)
301 getattr(proc,jetTaskName).
add(getattr(proc, puJetIDVar))
306 patJetWithUserData =
"{}WithUserData".
format(jetSrc)
307 getattr(proc,patJetWithUserData).userFloats.puId_dR2Mean = cms.InputTag(
"{}:dR2Mean".
format(puJetIDVar))
308 getattr(proc,patJetWithUserData).userFloats.puId_majW = cms.InputTag(
"{}:majW".
format(puJetIDVar))
309 getattr(proc,patJetWithUserData).userFloats.puId_minW = cms.InputTag(
"{}:minW".
format(puJetIDVar))
310 getattr(proc,patJetWithUserData).userFloats.puId_frac01 = cms.InputTag(
"{}:frac01".
format(puJetIDVar))
311 getattr(proc,patJetWithUserData).userFloats.puId_frac02 = cms.InputTag(
"{}:frac02".
format(puJetIDVar))
312 getattr(proc,patJetWithUserData).userFloats.puId_frac03 = cms.InputTag(
"{}:frac03".
format(puJetIDVar))
313 getattr(proc,patJetWithUserData).userFloats.puId_frac04 = cms.InputTag(
"{}:frac04".
format(puJetIDVar))
314 getattr(proc,patJetWithUserData).userFloats.puId_ptD = cms.InputTag(
"{}:ptD".
format(puJetIDVar))
315 getattr(proc,patJetWithUserData).userFloats.puId_beta = cms.InputTag(
"{}:beta".
format(puJetIDVar))
316 getattr(proc,patJetWithUserData).userFloats.puId_pull = cms.InputTag(
"{}:pull".
format(puJetIDVar))
317 getattr(proc,patJetWithUserData).userFloats.puId_jetR = cms.InputTag(
"{}:jetR".
format(puJetIDVar))
318 getattr(proc,patJetWithUserData).userFloats.puId_jetRchg = cms.InputTag(
"{}:jetRchg".
format(puJetIDVar))
319 getattr(proc,patJetWithUserData).userInts.puId_nCharged = cms.InputTag(
"{}:nCharged".
format(puJetIDVar))
324 getattr(proc,jetTableName).variables.puId_dR2Mean = PUIDVARS.puId_dR2Mean
325 getattr(proc,jetTableName).variables.puId_majW = PUIDVARS.puId_majW
326 getattr(proc,jetTableName).variables.puId_minW = PUIDVARS.puId_minW
327 getattr(proc,jetTableName).variables.puId_frac01 = PUIDVARS.puId_frac01
328 getattr(proc,jetTableName).variables.puId_frac02 = PUIDVARS.puId_frac02
329 getattr(proc,jetTableName).variables.puId_frac03 = PUIDVARS.puId_frac03
330 getattr(proc,jetTableName).variables.puId_frac04 = PUIDVARS.puId_frac04
331 getattr(proc,jetTableName).variables.puId_ptD = PUIDVARS.puId_ptD
332 getattr(proc,jetTableName).variables.puId_beta = PUIDVARS.puId_beta
333 getattr(proc,jetTableName).variables.puId_pull = PUIDVARS.puId_pull
334 getattr(proc,jetTableName).variables.puId_jetR = PUIDVARS.puId_jetR
335 getattr(proc,jetTableName).variables.puId_jetRchg = PUIDVARS.puId_jetRchg
336 getattr(proc,jetTableName).variables.puId_nCharged = PUIDVARS.puId_nCharged
340 def AddQGLTaggerVars(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="", calculateQGLVars=False):
342 Schedule the QGTagger module to calculate input variables to the QG likelihood 345 isPUPPIJet =
True if "PUPPI" in jetName.upper()
else False 347 QGLTagger=
"qgtagger{}".
format(jetName)
348 patJetWithUserData=
"{}WithUserData".
format(jetSrc)
351 setattr(proc, QGLTagger, qgtagger.clone(
353 computeLikelihood =
False,
357 getattr(proc,QGLTagger).srcConstituentWeights = cms.InputTag(
"packedPFCandidatespuppi")
362 getattr(proc,patJetWithUserData).userFloats.qgl_axis2 = cms.InputTag(QGLTagger+
":axis2")
363 getattr(proc,patJetWithUserData).userFloats.qgl_ptD = cms.InputTag(QGLTagger+
":ptD")
364 getattr(proc,patJetWithUserData).userInts.qgl_mult = cms.InputTag(QGLTagger+
":mult")
369 getattr(proc,jetTableName).variables.qgl_axis2 = QGLVARS.qgl_axis2
370 getattr(proc,jetTableName).variables.qgl_ptD = QGLVARS.qgl_ptD
371 getattr(proc,jetTableName).variables.qgl_mult = QGLVARS.qgl_mult
374 getattr(proc,jetTaskName).
add(getattr(proc, QGLTagger))
380 Store b-tagging scores from various algortihm 383 getattr(proc, jetTableName).variables.btagDeepFlavB = DEEPJETVARS.btagDeepFlavB
384 getattr(proc, jetTableName).variables.btagDeepFlavCvL = DEEPJETVARS.btagDeepFlavCvL
385 getattr(proc, jetTableName).variables.btagDeepFlavCvB = DEEPJETVARS.btagDeepFlavCvB
387 run2_nanoAOD_ANY.toModify(
388 getattr(proc, jetTableName).variables,
389 btagCSVV2 =
Var(
"bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",float,doc=
" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",precision=10),
390 btagDeepB =
Var(
"?(bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb'))>=0?bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb'):-1",float,doc=
"DeepCSV b+bb tag discriminator",precision=10),
391 btagDeepCvL =
Var(
"?bDiscriminator('pfDeepCSVJetTags:probc')>=0?bDiscriminator('pfDeepCSVJetTags:probc')/(bDiscriminator('pfDeepCSVJetTags:probc')+bDiscriminator('pfDeepCSVJetTags:probudsg')):-1", float,doc=
"DeepCSV c vs udsg discriminator",precision=10),
392 btagDeepCvB =
Var(
"?bDiscriminator('pfDeepCSVJetTags:probc')>=0?bDiscriminator('pfDeepCSVJetTags:probc')/(bDiscriminator('pfDeepCSVJetTags:probc')+bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')):-1",float,doc=
"DeepCSV c vs b+bb discriminator",precision=10)
399 Store DeepJet raw score in jetTable for gluon and light quark 402 getattr(proc, jetTableName).variables.btagDeepFlavG = DEEPJETVARS.btagDeepFlavG
403 getattr(proc, jetTableName).variables.btagDeepFlavUDS = DEEPJETVARS.btagDeepFlavUDS
404 getattr(proc, jetTableName).variables.btagDeepFlavQG = DEEPJETVARS.btagDeepFlavQG
410 Store RobustParTAK4 scores in jetTable 413 getattr(proc, jetTableName).variables.btagRobustParTAK4B = ROBUSTPARTAK4VARS.btagRobustParTAK4B
414 getattr(proc, jetTableName).variables.btagRobustParTAK4CvL = ROBUSTPARTAK4VARS.btagRobustParTAK4CvL
415 getattr(proc, jetTableName).variables.btagRobustParTAK4CvB = ROBUSTPARTAK4VARS.btagRobustParTAK4CvB
421 Store ParticleNetAK4 scores in jetTable 424 getattr(proc, jetTableName).variables.particleNetAK4_B = PARTICLENETAK4VARS.particleNetAK4_B
425 getattr(proc, jetTableName).variables.particleNetAK4_CvsL = PARTICLENETAK4VARS.particleNetAK4_CvsL
426 getattr(proc, jetTableName).variables.particleNetAK4_CvsB = PARTICLENETAK4VARS.particleNetAK4_CvsB
427 getattr(proc, jetTableName).variables.particleNetAK4_QvsG = PARTICLENETAK4VARS.particleNetAK4_QvsG
428 getattr(proc, jetTableName).variables.particleNetAK4_G = PARTICLENETAK4VARS.particleNetAK4_G
429 getattr(proc, jetTableName).variables.particleNetAK4_puIdDisc = PARTICLENETAK4VARS.particleNetAK4_puIdDisc
435 Add patJet into custom nanoAOD 438 jetName = recoJetInfo.jetUpper
439 payload = recoJetInfo.jetCorrPayload
440 doPF = recoJetInfo.doPF
441 doCalo = recoJetInfo.doCalo
442 patJetFinalColl = recoJetInfo.patJetFinalCollection
444 nanoInfoForJet = nanoInfo_recojets[recoJetInfo.jet]
445 jetTablePrefix = nanoInfoForJet[
"name"]
446 jetTableDoc = nanoInfoForJet[
"doc"]
447 ptcut = nanoInfoForJet[
"ptcut"]
if "ptcut" in nanoInfoForJet
else 8
448 doPUIDVar = nanoInfoForJet[
"doPUIDVar"]
if "doPUIDVar" in nanoInfoForJet
else False 449 doQGL = nanoInfoForJet[
"doQGL"]
if "doQGL" in nanoInfoForJet
else False 450 doBTag = nanoInfoForJet[
"doBTag"]
if "doBTag" in nanoInfoForJet
else False 453 jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF, doCalo,
454 ptcut=ptcut, doPUIDVar=doPUIDVar, doQGL=doQGL, doBTag=doBTag, runOnMC=runOnMC
459 def SavePatJets(proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc,
460 doPF, doCalo, ptcut, doPUIDVar=False, doQGL=False, doBTag=False, runOnMC=False):
462 Schedule modules for a given patJet collection and save its variables into custom NanoAOD 468 jetCorrFactors =
"jetCorrFactorsNano{}".
format(jetName)
469 setattr(proc, jetCorrFactors, jetCorrFactorsNano.clone(
470 src = patJetFinalColl,
478 srcJets =
"updatedJets{}".
format(jetName)
479 setattr(proc, srcJets, updatedJets.clone(
480 jetSource = patJetFinalColl,
481 jetCorrFactorsSource = [jetCorrFactors],
488 srcJetsWithUserData =
"updatedJets{}WithUserData".
format(jetName)
489 setattr(proc, srcJetsWithUserData, cms.EDProducer(
"PATJetUserDataEmbedder",
490 src = cms.InputTag(srcJets),
491 userFloats = cms.PSet(),
492 userInts = cms.PSet(),
499 finalJetsCut =
"(pt >= {ptcut:.0f})".
format(ptcut=ptcut)
501 finalJetsCut =
"(pt >= {ptcut:.0f}) || ((pt < {ptcut:.0f}) && (genJetFwdRef().backRef().isNonnull()))".
format(ptcut=ptcut)
503 finalJetsForTable =
"finalJets{}".
format(jetName)
504 setattr(proc, finalJetsForTable, finalJets.clone(
505 src = srcJetsWithUserData,
513 tableContent = PFJETVARS
515 tableContent = CALOJETVARS
517 jetTableCutDefault =
"" 519 jetTableDocDefault = jetTableDoc +
" with JECs applied. Jets with pt >= {ptcut:.0f} GeV are stored.".
format(ptcut=ptcut)
521 jetTableDocDefault +=
"For jets with pt < {ptcut:.0f} GeV, only those matched to gen jets are stored.".
format(ptcut=ptcut)
524 jetTableDocDefault = jetTableDoc
526 jetTableName =
"jet{}Table".
format(jetName)
527 setattr(proc,jetTableName, simpleCandidateFlatTableProducer.clone(
528 src = cms.InputTag(finalJetsForTable),
529 cut = cms.string(jetTableCutDefault),
530 name = cms.string(jetTablePrefix),
531 doc = cms.string(jetTableDocDefault),
532 variables = cms.PSet(tableContent)
535 getattr(proc,jetTableName).variables.pt.precision=10
536 getattr(proc,jetTableName).variables.rawFactor.precision=10
541 jetMCTableName =
"jet{}MCTable".
format(jetName)
542 setattr(proc, jetMCTableName, simpleCandidateFlatTableProducer.clone(
543 src = cms.InputTag(finalJetsForTable),
544 cut = getattr(proc,jetTableName).cut,
545 name = cms.string(jetTablePrefix),
546 extension = cms.bool(
True),
547 variables = cms.PSet(
548 partonFlavour =
Var(
"partonFlavour()", int, doc=
"flavour from parton matching"),
549 hadronFlavour =
Var(
"hadronFlavour()", int, doc=
"flavour from hadron ghost clustering"),
550 genJetIdx =
Var(
"?genJetFwdRef().backRef().isNonnull()?genJetFwdRef().backRef().key():-1", int, doc=
"index of matched gen jet"),
558 jetTaskName =
"jet{}Task".
format(jetName)
559 setattr(proc, jetTaskName, cms.Task(
560 getattr(proc,jetCorrFactors),
561 getattr(proc,srcJets),
562 getattr(proc,srcJetsWithUserData),
563 getattr(proc,finalJetsForTable)
566 proc.nanoTableTaskCommon.add(getattr(proc,jetTaskName))
571 jetTableTaskName =
"jet{}TablesTask".
format(jetName)
572 setattr(proc, jetTableTaskName, cms.Task(getattr(proc,jetTableName)))
573 proc.nanoTableTaskCommon.add(getattr(proc,jetTableTaskName))
575 jetMCTableTaskName =
"jet{}MCTablesTask".
format(jetName)
576 setattr(proc, jetMCTableTaskName, cms.Task(getattr(proc,jetMCTableName)))
578 proc.nanoTableTaskFS.add(getattr(proc,jetMCTableTaskName))
584 proc =
AddJetID(proc, jetName=jetName, jetSrc=srcJets, jetTableName=jetTableName, jetTaskName=jetTaskName)
586 proc =
AddPileUpJetIDVars(proc, jetName=jetName, jetSrc=srcJets, jetTableName=jetTableName, jetTaskName=jetTaskName)
588 proc =
AddQGLTaggerVars(proc,jetName=jetName, jetSrc=srcJets, jetTableName=jetTableName, jetTaskName=jetTaskName, calculateQGLVars=
True)
605 Recluster AK4 Puppi jets and replace slimmedJetsPuppi 606 that is used as default to save AK4 Puppi jets in NanoAODs. 608 print(
"custom_jme_cff::ReclusterAK4PuppiJets: Recluster AK4 PF Puppi jets")
614 "jet" :
"ak4pfpuppi",
615 "inputCollection" :
"",
616 "genJetsCollection":
"AK4GenJetsNoNu",
617 "bTagDiscriminators": bTagDiscriminatorsForAK4,
620 recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
622 jetName = recoJetInfo.jetUpper
623 patJetFinalColl = recoJetInfo.patJetFinalCollection
628 run2_jme_2016.toModify(
629 proc.tightJetPuppiId.filterParams, version =
"RUN2UL16PUPPI" 631 proc.tightJetIdLepVeto.filterParams, version =
"RUN2UL16PUPPI" 638 proc.jetPuppiCorrFactorsNano.src=patJetFinalColl
639 proc.updatedJetsPuppi.jetSource=patJetFinalColl
644 finalJetsPuppiCut =
"" 646 finalJetsPuppiCut =
"(pt >= 8) || ((pt < 8) && (genJetFwdRef().backRef().isNonnull()))" 648 finalJetsPuppiCut =
"(pt >= 8)" 650 proc.finalJetsPuppi.cut = finalJetsPuppiCut
654 proc.corrT1METJetPuppiTable.cut =
"pt>=8 && pt<15 && abs(eta)<9.9" 660 run2_nanoAOD_ANY.toModify(
661 proc.jetTable, name =
"Jet" 666 src = cms.InputTag(
"finalJetsPuppi")
672 jetPuppiTableDoc =
"AK4 PF Puppi jets with JECs applied. Jets with pt >= 8 GeV are stored." 674 jetPuppiTableDoc +=
"For jets with pt < 8 GeV, only those matched to AK4 Gen jets are stored." 675 proc.jetPuppiTable.doc = jetPuppiTableDoc
677 proc.jetPuppiTable.variables.rawFactor.precision = 10
682 proc.jetPuppiTable.variables.hfHEF = PFJETVARS.hfHEF
683 proc.jetPuppiTable.variables.hfEmEF = PFJETVARS.hfEmEF
684 proc.jetPuppiTable.variables.nConstChHads = PFJETVARS.nConstChHads
685 proc.jetPuppiTable.variables.nConstNeuHads = PFJETVARS.nConstNeuHads
686 proc.jetPuppiTable.variables.nConstHFHads = PFJETVARS.nConstHFHads
687 proc.jetPuppiTable.variables.nConstHFEMs = PFJETVARS.nConstHFEMs
688 proc.jetPuppiTable.variables.nConstMuons = PFJETVARS.nConstMuons
689 proc.jetPuppiTable.variables.nConstElecs = PFJETVARS.nConstElecs
690 proc.jetPuppiTable.variables.nConstPhotons = PFJETVARS.nConstPhotons
698 jetSrc =
"updatedJetsPuppi",
699 jetTableName =
"jetPuppiTable",
700 jetTaskName =
"jetPuppiTask" 708 jetSrc =
"updatedJetsPuppi",
709 jetTableName =
"jetPuppiTable",
710 jetTaskName =
"jetPuppiTask",
711 calculateQGLVars=
True 716 proc.jetPuppiTable.variables.btagDeepFlavB = DEEPJETVARS.btagDeepFlavB
717 proc.jetPuppiTable.variables.btagDeepFlavCvL = DEEPJETVARS.btagDeepFlavCvL
718 proc.jetPuppiTable.variables.btagDeepFlavCvB = DEEPJETVARS.btagDeepFlavCvB
722 proc.jetPuppiTable.variables.btagDeepFlavG = DEEPJETVARS.btagDeepFlavG
723 proc.jetPuppiTable.variables.btagDeepFlavUDS = DEEPJETVARS.btagDeepFlavUDS
724 proc.jetPuppiTable.variables.btagDeepFlavQG = DEEPJETVARS.btagDeepFlavQG
728 proc.jetPuppiTable.variables.btagRobustParTAK4B = ROBUSTPARTAK4VARS.btagRobustParTAK4B
729 proc.jetPuppiTable.variables.btagRobustParTAK4CvL = ROBUSTPARTAK4VARS.btagRobustParTAK4CvL
730 proc.jetPuppiTable.variables.btagRobustParTAK4CvB = ROBUSTPARTAK4VARS.btagRobustParTAK4CvB
734 proc.jetPuppiTable.variables.particleNetAK4_B = PARTICLENETAK4VARS.particleNetAK4_B
735 proc.jetPuppiTable.variables.particleNetAK4_CvsL = PARTICLENETAK4VARS.particleNetAK4_CvsL
736 proc.jetPuppiTable.variables.particleNetAK4_CvsB = PARTICLENETAK4VARS.particleNetAK4_CvsB
737 proc.jetPuppiTable.variables.particleNetAK4_QvsG = PARTICLENETAK4VARS.particleNetAK4_QvsG
738 proc.jetPuppiTable.variables.particleNetAK4_G = PARTICLENETAK4VARS.particleNetAK4_G
739 proc.jetPuppiTable.variables.particleNetAK4_puIdDisc = PARTICLENETAK4VARS.particleNetAK4_puIdDisc
744 run2_nanoAOD_ANY.toReplaceWith(
745 proc.jetPuppiForMETTask,
746 proc.jetPuppiForMETTask.copyAndExclude([proc.corrT1METJetPuppiTable])
754 jetMCTableName =
"jet{}MCTable".
format(jetName)
755 setattr(proc, jetMCTableName, proc.jetMCTable.clone(
756 src = proc.jetPuppiTable.src,
757 name = proc.jetPuppiTable.name
760 jetMCTableTaskName =
"jet{}MCTablesTask".
format(jetName)
761 setattr(proc, jetMCTableTaskName, cms.Task(getattr(proc,jetMCTableName)))
763 run2_nanoAOD_ANY.toReplaceWith(
764 proc.nanoTableTaskFS,
765 proc.nanoTableTaskFS.copyAndAdd( getattr(proc,jetMCTableTaskName))
772 Recluster AK4 CHS jets and replace slimmedJets that is used as default to 773 save AK4 CHS jets in NanoAODs (for Run-2). 775 print(
"custom_jme_cff::ReclusterAK4CHSJets: Recluster AK4 PF CHS jets")
782 "inputCollection" :
"",
783 "genJetsCollection":
"AK4GenJetsNoNu",
784 "bTagDiscriminators": bTagDiscriminatorsForAK4,
787 recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
789 jetName = recoJetInfo.jetUpper
790 patJetFinalColl = recoJetInfo.patJetFinalCollection
796 proc.jetCorrFactorsNano.src=patJetFinalColl
797 proc.updatedJets.jetSource=patJetFinalColl
804 finalJetsCut =
"(pt >= 8) || ((pt < 8) && (genJetFwdRef().backRef().isNonnull()))" 806 finalJetsCut =
"(pt >= 8)" 808 proc.finalJets.cut = finalJetsCut
812 proc.corrT1METJetTable.cut =
"pt>=8 && pt<15 && abs(eta)<9.9" 818 proc.jetTable.src = cms.InputTag(
"finalJets")
819 proc.jetTable.cut = jetTableCut
820 proc.jetMCTable.cut = jetTableCut
821 proc.jetTable.name =
"JetCHS" 826 run2_nanoAOD_ANY.toModify(
828 src = cms.InputTag(
"linkedObjects",
"jets"),
835 jetTableDoc =
"AK4 PF CHS jets with JECs applied. Jets with pt >= 8 GeV are stored." 837 jetTableDoc +=
"For jets with pt < 8 GeV, only those matched to AK4 Gen jets are stored." 838 proc.jetTable.doc = jetTableDoc
840 proc.jetTable.variables.rawFactor.precision = 10
845 proc.jetTable.variables.hfHEF = PFJETVARS.hfHEF
846 proc.jetTable.variables.hfEmEF = PFJETVARS.hfEmEF
847 proc.jetTable.variables.nConstChHads = PFJETVARS.nConstChHads
848 proc.jetTable.variables.nConstNeuHads = PFJETVARS.nConstNeuHads
849 proc.jetTable.variables.nConstHFHads = PFJETVARS.nConstHFHads
850 proc.jetTable.variables.nConstHFEMs = PFJETVARS.nConstHFEMs
851 proc.jetTable.variables.nConstMuons = PFJETVARS.nConstMuons
852 proc.jetTable.variables.nConstElecs = PFJETVARS.nConstElecs
853 proc.jetTable.variables.nConstPhotons = PFJETVARS.nConstPhotons
858 proc.updatedJetsWithUserData.userFloats.chFPV1EF = cms.InputTag(
"jercVars:chargedFromPV1EnergyFraction")
859 proc.updatedJetsWithUserData.userFloats.chFPV2EF = cms.InputTag(
"jercVars:chargedFromPV2EnergyFraction")
860 proc.updatedJetsWithUserData.userFloats.chFPV3EF = cms.InputTag(
"jercVars:chargedFromPV3EnergyFraction")
861 proc.jetTable.variables.chFPV1EF =
Var(
"userFloat('chFPV1EF')", float, doc=
"charged fromPV==1 Energy Fraction (component of the total charged Energy Fraction).", precision= 6)
862 proc.jetTable.variables.chFPV2EF =
Var(
"userFloat('chFPV2EF')", float, doc=
"charged fromPV==2 Energy Fraction (component of the total charged Energy Fraction).", precision= 6)
863 proc.jetTable.variables.chFPV3EF =
Var(
"userFloat('chFPV3EF')", float, doc=
"charged fromPV==3 Energy Fraction (component of the total charged Energy Fraction).", precision= 6)
870 jetSrc =
"updatedJets",
871 jetTableName =
"jetTable",
872 jetTaskName =
"jetTask" 878 proc.updatedJetsWithUserData.userFloats.qgl_axis2 = cms.InputTag(
"qgtagger:axis2")
879 proc.updatedJetsWithUserData.userFloats.qgl_ptD = cms.InputTag(
"qgtagger:ptD")
880 proc.updatedJetsWithUserData.userInts.qgl_mult = cms.InputTag(
"qgtagger:mult")
884 proc.jetTable.variables.qgl_axis2 = QGLVARS.qgl_axis2
885 proc.jetTable.variables.qgl_ptD = QGLVARS.qgl_ptD
886 proc.jetTable.variables.qgl_mult = QGLVARS.qgl_mult
890 proc.jetTable.variables.btagDeepB = BTAGVARS.btagDeepB
891 proc.jetTable.variables.btagDeepCvL = BTAGVARS.btagDeepCvL
892 proc.jetTable.variables.btagDeepCvB = BTAGVARS.btagDeepCvB
896 proc.jetTable.variables.btagDeepFlavB = DEEPJETVARS.btagDeepFlavB
897 proc.jetTable.variables.btagDeepFlavCvL = DEEPJETVARS.btagDeepFlavCvL
898 proc.jetTable.variables.btagDeepFlavCvB = DEEPJETVARS.btagDeepFlavCvB
902 proc.jetTable.variables.btagDeepFlavG = DEEPJETVARS.btagDeepFlavG
903 proc.jetTable.variables.btagDeepFlavUDS = DEEPJETVARS.btagDeepFlavUDS
904 proc.jetTable.variables.btagDeepFlavQG = DEEPJETVARS.btagDeepFlavQG
908 proc.jetTable.variables.btagRobustParTAK4B = ROBUSTPARTAK4VARS.btagRobustParTAK4B
909 proc.jetTable.variables.btagRobustParTAK4CvL = ROBUSTPARTAK4VARS.btagRobustParTAK4CvL
910 proc.jetTable.variables.btagRobustParTAK4CvB = ROBUSTPARTAK4VARS.btagRobustParTAK4CvB
914 proc.jetTable.variables.particleNetAK4_B = PARTICLENETAK4VARS.particleNetAK4_B
915 proc.jetTable.variables.particleNetAK4_CvsL = PARTICLENETAK4VARS.particleNetAK4_CvsL
916 proc.jetTable.variables.particleNetAK4_CvsB = PARTICLENETAK4VARS.particleNetAK4_CvsB
917 proc.jetTable.variables.particleNetAK4_QvsG = PARTICLENETAK4VARS.particleNetAK4_QvsG
918 proc.jetTable.variables.particleNetAK4_G = PARTICLENETAK4VARS.particleNetAK4_G
919 proc.jetTable.variables.particleNetAK4_puIdDisc = PARTICLENETAK4VARS.particleNetAK4_puIdDisc
923 hfJetShowerShapeforCustomNanoAOD =
"hfJetShowerShapeforCustomNanoAOD" 924 setattr(proc, hfJetShowerShapeforCustomNanoAOD, hfJetShowerShape.clone(jets=
"updatedJets", vertices=
"offlineSlimmedPrimaryVertices") )
925 proc.jetUserDataTask.add(getattr(proc, hfJetShowerShapeforCustomNanoAOD))
926 proc.updatedJetsWithUserData.userFloats.hfsigmaEtaEta = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:sigmaEtaEta')
927 proc.updatedJetsWithUserData.userFloats.hfsigmaPhiPhi = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:sigmaPhiPhi')
928 proc.updatedJetsWithUserData.userInts.hfcentralEtaStripSize = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:centralEtaStripSize')
929 proc.updatedJetsWithUserData.userInts.hfadjacentEtaStripsSize = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:adjacentEtaStripsSize')
930 proc.jetTable.variables.hfsigmaEtaEta =
Var(
"userFloat('hfsigmaEtaEta')",float,doc=
"sigmaEtaEta for HF jets (noise discriminating variable)",precision=10)
931 proc.jetTable.variables.hfsigmaPhiPhi =
Var(
"userFloat('hfsigmaPhiPhi')",float,doc=
"sigmaPhiPhi for HF jets (noise discriminating variable)",precision=10)
932 proc.jetTable.variables.hfcentralEtaStripSize =
Var(
"userInt('hfcentralEtaStripSize')", int, doc=
"eta size of the central tower strip in HF (noise discriminating variable) ")
933 proc.jetTable.variables.hfadjacentEtaStripsSize =
Var(
"userInt('hfadjacentEtaStripsSize')", int, doc=
"eta size of the strips next to the central tower strip in HF (noise discriminating variable) ")
939 (~run2_nanoAOD_ANY).toReplaceWith(
940 proc.jetUserDataTask,
941 proc.jetUserDataTask.copyAndExclude([proc.bJetVars])
944 proc.jetTablesTask.copyAndExclude([proc.bjetNN, proc.cjetNN])
945 ).toModify(proc.updatedJetsWithUserData.userFloats,
947 leptonPtRelv0 =
None,
948 leptonPtRelInvv0 =
None,
956 proc.updatedJetsWithUserData.userInts,
960 proc.jetTable, externalVariables = cms.PSet()
966 proc.jetForMETTask.copyAndExclude([proc.corrT1METJetTable])
973 jetMCTableName =
"jet{}MCTable".
format(jetName)
974 setattr(proc, jetMCTableName, proc.jetMCTable.clone(
975 src = proc.jetTable.src,
976 name = proc.jetTable.name
979 jetMCTableTaskName =
"jet{}MCTablesTask".
format(jetName)
980 setattr(proc, jetMCTableTaskName, cms.Task(getattr(proc,jetMCTableName)))
982 (~run2_nanoAOD_ANY).toReplaceWith(
983 proc.nanoTableTaskFS,
984 proc.nanoTableTaskFS.copyAndAdd(getattr(proc,jetMCTableTaskName))
991 Store a separate AK8 Puppi jet collection for JEC studies. 992 Only minimal info are stored 994 print(
"custom_jme_cff::AddNewAK8PuppiJetsForJEC: Make a new AK8 PF Puppi jet collection for JEC studies")
1000 "jet" :
"ak8pfpuppi",
1001 "inputCollection" :
"",
1002 "genJetsCollection":
"AK8GenJetsNoNu",
1003 "minPtFastjet" : 0.,
1005 recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
1007 jetName = recoJetInfo.jetUpper
1008 payload = recoJetInfo.jetCorrPayload
1010 patJetFinalColl = recoJetInfo.patJetFinalCollection
1011 jetTablePrefix =
"FatJetForJEC" 1012 jetTableDoc =
"AK8 PF Puppi jets with JECs applied. Reclustered for JEC studies so only minimal info stored." 1016 jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF=
True,
1017 doCalo=
False, ptcut=ptcut, doPUIDVar=
False, doQGL=
False, doBTag=
False, runOnMC=runOnMC
1024 Store an AK8 CHS jet collection for JEC studies. 1026 print(
"custom_jme_cff::AddNewAK8CHSJets: Make a new AK8 PF CHS jet collection for JEC studies")
1033 "inputCollection" :
"",
1034 "genJetsCollection":
"AK8GenJetsNoNu",
1035 "minPtFastjet" : 0.,
1037 recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
1039 jetName = recoJetInfo.jetUpper
1040 payload = recoJetInfo.jetCorrPayload
1042 patJetFinalColl = recoJetInfo.patJetFinalCollection
1043 jetTablePrefix =
"FatJetCHS" 1044 jetTableDoc =
"AK8 PF CHS jets with JECs applied. Reclustered for JEC studies so only minimal info stored." 1048 jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF=
True,
1049 doCalo=
False, ptcut=ptcut, doPUIDVar=
False, doQGL=
False, doBTag=
False, runOnMC=runOnMC
1056 Add more variables for AK8 PFPUPPI jets 1059 proc.fatJetTable.variables.rawFactor.precision = 10
1065 proc.fatJetTable.variables.chHEF =
Var(
"?isPFJet()?chargedHadronEnergyFraction():-1", float, doc=
"charged Hadron Energy Fraction", precision = 6)
1066 proc.fatJetTable.variables.neHEF =
Var(
"?isPFJet()?neutralHadronEnergyFraction():-1", float, doc=
"neutral Hadron Energy Fraction", precision = 6)
1067 proc.fatJetTable.variables.chEmEF =
Var(
"?isPFJet()?chargedEmEnergyFraction():-1", float, doc=
"charged Electromagnetic Energy Fraction", precision = 6)
1068 proc.fatJetTable.variables.neEmEF =
Var(
"?isPFJet()?neutralEmEnergyFraction():-1", float, doc=
"neutral Electromagnetic Energy Fraction", precision = 6)
1069 proc.fatJetTable.variables.muEF =
Var(
"?isPFJet()?muonEnergyFraction():-1", float, doc=
"muon Energy Fraction", precision = 6)
1070 proc.fatJetTable.variables.hfHEF =
Var(
"?isPFJet()?HFHadronEnergyFraction():-1", float, doc=
"energy fraction in forward hadronic calorimeter", precision = 6)
1071 proc.fatJetTable.variables.hfEmEF =
Var(
"?isPFJet()?HFEMEnergyFraction():-1", float, doc=
"energy fraction in forward EM calorimeter", precision = 6)
1072 proc.fatJetTable.variables.nConstChHads =
Var(
"?isPFJet()?chargedHadronMultiplicity():-1",int, doc=
"number of charged hadrons in the jet")
1073 proc.fatJetTable.variables.nConstNeuHads =
Var(
"?isPFJet()?neutralHadronMultiplicity():-1",int, doc=
"number of neutral hadrons in the jet")
1074 proc.fatJetTable.variables.nConstHFHads =
Var(
"?isPFJet()?HFHadronMultiplicity():-1", int, doc=
"number of HF Hadrons in the jet")
1075 proc.fatJetTable.variables.nConstHFEMs =
Var(
"?isPFJet()?HFEMMultiplicity():-1", int, doc=
"number of HF EMs in the jet")
1076 proc.fatJetTable.variables.nConstMuons =
Var(
"?isPFJet()?muonMultiplicity():-1", int, doc=
"number of muons in the jet")
1077 proc.fatJetTable.variables.nConstElecs =
Var(
"?isPFJet()?electronMultiplicity():-1", int, doc=
"number of electrons in the jet")
1078 proc.fatJetTable.variables.nConstPhotons =
Var(
"?isPFJet()?photonMultiplicity():-1", int, doc=
"number of photons in the jet")
1090 Add genJet into custom nanoAOD 1093 genJetName = genJetInfo.jetUpper
1094 genJetAlgo = genJetInfo.jetAlgo
1095 genJetSize = genJetInfo.jetSize
1096 genJetSizeNr = genJetInfo.jetSizeNr
1097 genJetFinalColl =
"{}{}{}".
format(genJetAlgo.upper(), genJetSize,
"GenJetsNoNu")
1098 genJetTablePrefix = nanoInfo_genjets[genJetInfo.jet][
"name"]
1099 genJetTableDoc = nanoInfo_genjets[genJetInfo.jet][
"doc"]
1101 SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=
False)
1105 def SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=False):
1107 Schedule modules for a given genJet collection and save its variables into custom NanoAOD 1110 genJetTableName =
"jet{}Table".
format(genJetName)
1111 setattr(proc, genJetTableName, genJetTable.clone(
1112 src = genJetFinalColl,
1114 name = genJetTablePrefix,
1115 doc = genJetTableDoc,
1116 variables = GENJETVARS
1120 genJetFlavourAssociationName =
"genJet{}FlavourAssociation".
format(genJetName)
1121 setattr(proc, genJetFlavourAssociationName, genJetFlavourAssociation.clone(
1122 jets = getattr(proc,genJetTableName).src,
1123 jetAlgorithm = supportedJetAlgos[genJetAlgo],
1124 rParam = genJetSizeNr,
1128 genJetFlavourTableName =
"genJet{}FlavourTable".
format(genJetName)
1129 setattr(proc, genJetFlavourTableName, genJetFlavourTable.clone(
1130 name = getattr(proc,genJetTableName).name,
1131 src = getattr(proc,genJetTableName).src,
1132 cut = getattr(proc,genJetTableName).cut,
1133 jetFlavourInfos = genJetFlavourAssociationName,
1137 genJetTaskName =
"genJet{}Task".
format(genJetName)
1138 setattr(proc, genJetTaskName, cms.Task(
1139 getattr(proc,genJetTableName),
1140 getattr(proc,genJetFlavourAssociationName),
1141 getattr(proc,genJetFlavourTableName)
1144 proc.jetMCTask.add(getattr(proc,genJetTaskName))
1150 Recluster AK4 Gen jets and replace 1151 slimmedGenJets that is used as default 1152 to save AK4 Gen jets in NanoAODs. 1154 print(
"custom_jme_cff::ReclusterAK4GenJets: Recluster AK4 Gen jets")
1162 genJetInfo = genJA.addGenJetCollection(proc, **cfg)
1164 genJetName = genJetInfo.jetUpper
1165 genJetAlgo = genJetInfo.jetAlgo
1166 genJetSize = genJetInfo.jetSize
1167 genJetSizeNr = genJetInfo.jetSizeNr
1168 selectedGenJets =
"{}{}{}".
format(genJetAlgo.upper(), genJetSize,
"GenJetsNoNu")
1174 proc.genJetTable.src = selectedGenJets
1175 proc.genJetTable.cut =
"" 1176 proc.genJetTable.doc =
"AK4 Gen jets (made with visible genparticles) with pt > 3 GeV" 1178 genJetFlavourAssociationName =
"genJet{}FlavourAssociation".
format(genJetName)
1179 setattr(proc, genJetFlavourAssociationName, genJetFlavourAssociation.clone(
1180 jets = proc.genJetTable.src,
1181 jetAlgorithm = supportedJetAlgos[genJetAlgo],
1182 rParam = genJetSizeNr,
1185 proc.jetMCTask.add(getattr(proc, genJetFlavourAssociationName))
1190 Make a separate AK8 Gen jet collection for JEC studies. 1192 print(
"custom_jme_cff::AddNewAK8GenJetsForJEC: Add new AK8 Gen jets for JEC studies")
1200 genJetInfo = genJA.addGenJetCollection(proc, **cfg)
1202 genJetName = genJetInfo.jetUpper
1203 genJetAlgo = genJetInfo.jetAlgo
1204 genJetSize = genJetInfo.jetSize
1205 genJetSizeNr = genJetInfo.jetSizeNr
1206 genJetFinalColl =
"{}{}{}".
format(genJetAlgo.upper(), genJetSize,
"GenJetsNoNu")
1207 genJetTablePrefix =
"GenJetAK8ForJEC" 1208 genJetTableDoc =
"AK8 Gen jets (made with visible genparticles) with pt > 3 GeV. Reclustered for JEC studies." 1210 SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=
False)
1215 proc.genJetTable.variables.nConstituents = GENJETVARS.nConstituents
1219 proc.genJetAK8Table.variables.nConstituents = GENJETVARS.nConstituents
1229 Remove default pt cuts for all jets set in jets_cff.py 1232 proc.finalJets.cut =
"" 1233 proc.finalJetsPuppi.cut =
"" 1234 proc.finalJetsAK8.cut =
"" 1235 proc.genJetTable.cut =
"" 1236 proc.genJetFlavourTable.cut =
"" 1237 proc.genJetAK8Table.cut =
"" 1238 proc.genJetAK8FlavourTable.cut =
"" 1259 genJA = GenJetAdder()
1277 for jetConfig
in config_genjets:
1278 cfg = { k : v
for k, v
in jetConfig.items()
if k !=
"enabled"}
1279 genJetInfo = genJA.addGenJetCollection(process, **cfg)
1287 recoJA = RecoJetAdder(runOnMC=runOnMC)
1311 for jetConfig
in config_recojets:
1312 cfg = { k : v
for k, v
in jetConfig.items()
if k !=
"enabled"}
1313 recoJetInfo = recoJA.addRecoJetCollection(process, **cfg)
1321 def addAK4JetTasks(proc, addAK4CHSJetTasks, addAK4PuppiJetTasks):
1322 if addAK4CHSJetTasks:
1323 proc.nanoTableTaskCommon.add(proc.jetTask)
1324 proc.nanoTableTaskCommon.add(proc.jetTablesTask)
1325 proc.nanoTableTaskCommon.add(proc.jetForMETTask)
1326 if addAK4PuppiJetTasks:
1327 proc.nanoTableTaskCommon.add(proc.jetPuppiTask)
1328 proc.nanoTableTaskCommon.add(proc.jetPuppiTablesTask)
1329 proc.nanoTableTaskCommon.add(proc.jetPuppiForMETTask)
1332 jmeNano_addAK4JetTasks_switch = cms.PSet(
1333 jmeNano_addAK4CHS_switch = cms.untracked.bool(
True),
1334 jmeNano_addAK4Puppi_switch = cms.untracked.bool(
False)
1336 run2_nanoAOD_ANY.toModify(jmeNano_addAK4JetTasks_switch,
1337 jmeNano_addAK4CHS_switch =
False,
1338 jmeNano_addAK4Puppi_switch =
True 1340 process = addAK4JetTasks(process,
1341 addAK4CHSJetTasks = jmeNano_addAK4JetTasks_switch.jmeNano_addAK4CHS_switch,
1342 addAK4PuppiJetTasks = jmeNano_addAK4JetTasks_switch.jmeNano_addAK4Puppi_switch,
1349 process.puTable.savePtHatMax =
True 1355 process.genWeightsTable.keepAllPSWeights =
True def AddBTaggingScores(proc, jetTableName="")
def ReclusterAK4CHSJets(proc, recoJA, runOnMC)
def AddQGLTaggerVars(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="", calculateQGLVars=False)
def RemoveAllJetPtCuts(proc)
def Var(expr, valtype, doc=None, precision=-1)
def PrepJMECustomNanoAOD(process, runOnMC)
def AddNewPatJets(proc, recoJetInfo, runOnMC)
def AddRobustParTAK4Scores(proc, jetTableName="")
def ReclusterAK4GenJets(proc, genJA)
def AddNewAK8CHSJets(proc, recoJA, runOnMC)
def AddNewAK8GenJetsForJEC(proc, genJA)
def SavePatJets(proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF, doCalo, ptcut, doPUIDVar=False, doQGL=False, doBTag=False, runOnMC=False)
def ReclusterAK4PuppiJets(proc, recoJA, runOnMC)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
def AddDeepJetGluonLQuarkScores(proc, jetTableName="")
def AddJetID(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="")
def AddNewAK8PuppiJetsForJEC(proc, recoJA, runOnMC)
def AddNewGenJets(proc, genJetInfo)
def SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=False)
def AddVariablesForAK4GenJets(proc)
def AddVariablesForAK8PuppiJets(proc)
def AddParticleNetAK4Scores(proc, jetTableName="")
void add(std::map< std::string, TH1 *> &h, TH1 *hist)
def AddVariablesForAK8GenJets(proc)
def PrepJMECustomNanoAOD_MC(process)
def AddPileUpJetIDVars(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="")
def PrepJMECustomNanoAOD_Data(process)