1 import FWCore.ParameterSet.Config
as cms
4 from PhysicsTools.NanoAOD.simpleCandidateFlatTableProducer_cfi
import simpleCandidateFlatTableProducer
6 from RecoJets.JetProducers.hfJetShowerShape_cfi
import hfJetShowerShape
15 from PhysicsTools.PatAlgos.tools.jetCollectionTools
import GenJetAdder, RecoJetAdder
19 bTagCSVV2 = [
'pfCombinedInclusiveSecondaryVertexV2BJetTags']
20 bTagDeepCSV = [
'pfDeepCSVJetTags:probb',
'pfDeepCSVJetTags:probbb',
'pfDeepCSVJetTags:probc',
'pfDeepCSVJetTags:probudsg']
22 'pfDeepFlavourJetTags:probb',
'pfDeepFlavourJetTags:probbb',
'pfDeepFlavourJetTags:problepb',
23 'pfDeepFlavourJetTags:probc',
'pfDeepFlavourJetTags:probuds',
'pfDeepFlavourJetTags:probg' 26 from RecoBTag.ONNXRuntime.pfParticleNetFromMiniAODAK4_cff
import _pfParticleNetFromMiniAODAK4PuppiCentralJetTagsAll
27 from RecoBTag.ONNXRuntime.pfParticleNetFromMiniAODAK4_cff
import _pfParticleNetFromMiniAODAK4PuppiForwardJetTagsAll
29 bTagDiscriminatorsForAK4 = cms.PSet(foo = cms.vstring(
31 _pfParticleNetFromMiniAODAK4PuppiCentralJetTagsAll+_pfParticleNetFromMiniAODAK4PuppiForwardJetTagsAll+
32 _pfParticleTransformerAK4JetTagsAll
34 run2_nanoAOD_ANY.toModify(
35 bTagDiscriminatorsForAK4,
36 foo = bTagCSVV2+bTagDeepCSV+bTagDeepJet+_pfParticleNetAK4JetTagsAll
38 bTagDiscriminatorsForAK4 = bTagDiscriminatorsForAK4.foo.value()
43 btagHbb = [
'pfBoostedDoubleSecondaryVertexAK8BJetTags']
45 'pfDeepDoubleBvLJetTags:probHbb',
46 'pfDeepDoubleCvLJetTags:probHcc',
47 'pfDeepDoubleCvBJetTags:probHcc',
48 'pfMassIndependentDeepDoubleBvLJetTags:probHbb',
49 'pfMassIndependentDeepDoubleCvLJetTags:probHcc',
50 'pfMassIndependentDeepDoubleCvBJetTags:probHcc' 53 'pfMassIndependentDeepDoubleBvLV2JetTags:probHbb',
54 'pfMassIndependentDeepDoubleCvLV2JetTags:probHcc',
55 'pfMassIndependentDeepDoubleCvBV2JetTags:probHcc' 70 config_genjets = list(
filter(
lambda k: k[
'enabled'], config_genjets))
77 "doc" :
"AK6 Gen jets (made with visible genparticles) with pt > 3 GeV",
91 "inputCollection" :
"slimmedCaloJets",
92 "genJetsCollection":
"AK4GenJetsNoNu",
97 "inputCollection" :
"",
98 "genJetsCollection":
"AK4GenJetsNoNu",
104 "inputCollection" :
"",
105 "genJetsCollection":
"AK8GenJetsNoNu",
109 config_recojets = list(
filter(
lambda k: k[
'enabled'], config_recojets))
113 nanoInfo_recojets = {
116 "doc" :
"AK4 Calo jets (slimmedCaloJets)",
120 "doc" :
"AK4 PF jets",
125 "doc" :
"AK8 PF jets",
130 GENJETVARS = cms.PSet(P4Vars,
131 nConstituents = jetPuppiTable.variables.nConstituents,
133 PFJETVARS = cms.PSet(P4Vars,
134 rawFactor = jetPuppiTable.variables.rawFactor,
135 area = jetPuppiTable.variables.area,
136 chHEF = jetPuppiTable.variables.chHEF,
137 neHEF = jetPuppiTable.variables.neHEF,
138 chEmEF = jetPuppiTable.variables.chEmEF,
139 neEmEF = jetPuppiTable.variables.neEmEF,
140 muEF = jetPuppiTable.variables.muEF,
141 hfHEF =
Var(
"HFHadronEnergyFraction()",float,doc=
"hadronic Energy Fraction in HF",precision= 6),
142 hfEmEF =
Var(
"HFEMEnergyFraction()",float,doc=
"electromagnetic Energy Fraction in HF",precision= 6),
143 nMuons = jetPuppiTable.variables.nMuons,
144 nElectrons = jetPuppiTable.variables.nElectrons,
145 nConstituents = jetPuppiTable.variables.nConstituents,
146 chHadMultiplicity =
Var(
"chargedHadronMultiplicity()",
"int16",doc=
"(Puppi-weighted) number of charged hadrons in the jet"),
147 neHadMultiplicity =
Var(
"neutralHadronMultiplicity()",
"int16",doc=
"(Puppi-weighted) number of neutral hadrons in the jet"),
148 hfHadMultiplicity =
Var(
"HFHadronMultiplicity()",
"int16",doc=
"(Puppi-weighted) number of HF hadrons in the jet"),
149 hfEMMultiplicity =
Var(
"HFEMMultiplicity()",
"int16",doc=
"(Puppi-weighted) number of HF EMs in the jet"),
150 muMultiplicity =
Var(
"muonMultiplicity()",
"int16",doc=
"(Puppi-weighted) number of muons in the jet"),
151 elMultiplicity =
Var(
"electronMultiplicity()",
"int16",doc=
"(Puppi-weighted) number of electrons in the jet"),
152 phoMultiplicity =
Var(
"photonMultiplicity()",
"int16",doc=
"(Puppi-weighted) number of photons in the jet"),
155 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),
156 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),
157 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),
158 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),
159 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),
160 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),
161 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),
162 puId_ptD =
Var(
"?(pt>=10)?userFloat('puId_ptD'):-1",float,doc=
"pT-weighted average pT of constituents (PileUp ID BDT input variable)", precision=14),
163 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),
164 puId_pull =
Var(
"?(pt>=10)?userFloat('puId_pull'):-1",float,doc=
"magnitude of pull vector (PileUp ID BDT input variable)", precision=14),
165 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),
166 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),
167 puId_nCharged =
Var(
"?(pt>=10)?userInt('puId_nCharged'):-1",
"int16",doc=
"number of charged constituents (PileUp ID BDT input variable)"),
170 qgl_axis2 =
Var(
"?(pt>=10)?userFloat('qgl_axis2'):-1",float,doc=
"ellipse minor jet axis (Quark vs Gluon likelihood input variable)", precision=14),
171 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),
172 qgl_mult =
Var(
"?(pt>=10)?userInt('qgl_mult'):-1",
"int16",doc=
"PF candidates multiplicity (Quark vs Gluon likelihood input variable)"),
175 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),
176 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),
177 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),
179 DEEPJETVARS = cms.PSet(
180 btagDeepFlavB =
Var(
"?(pt>=15)?bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb'):-1",float,doc=
"DeepJet b+bb+lepb tag discriminator",precision=10),
181 btagDeepFlavC =
Var(
"?(pt>=15)?bDiscriminator('pfDeepFlavourJetTags:probc'):-1",float,doc=
"DeepFlavour charm tag raw score",precision=10),
182 btagDeepFlavG =
Var(
"?(pt>=15)?bDiscriminator('pfDeepFlavourJetTags:probg'):-1",float,doc=
"DeepFlavour gluon tag raw score",precision=10),
183 btagDeepFlavUDS =
Var(
"?(pt>=15)?bDiscriminator('pfDeepFlavourJetTags:probuds'):-1",float,doc=
"DeepFlavour uds tag raw score",precision=10),
184 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),
185 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),
186 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),
188 ROBUSTPARTAK4VARS = cms.PSet(
189 btagRobustParTAK4B =
Var(
"?(pt>=15)?bDiscriminator('pfParticleTransformerAK4JetTags:probb')+bDiscriminator('pfParticleTransformerAK4JetTags:probbb')+bDiscriminator('pfParticleTransformerAK4JetTags:problepb'):-1",float,doc=
"RobustParTAK4 b+bb+lepb tag discriminator",precision=10),
190 btagRobustParTAK4C =
Var(
"?(pt>=15)?bDiscriminator('pfParticleTransformerAK4JetTags:probc'):-1",float,doc=
"RobustParTAK4 charm tag raw score",precision=10),
191 btagRobustParTAK4G =
Var(
"?(pt>=15)?bDiscriminator('pfParticleTransformerAK4JetTags:probg'):-1",float,doc=
"RobustParTAK4 gluon tag raw score",precision=10),
192 btagRobustParTAK4UDS =
Var(
"?(pt>=15)?bDiscriminator('pfParticleTransformerAK4JetTags:probuds'):-1",float,doc=
"RobustParTAK4 uds tag raw score",precision=10),
193 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=
"RobustParTAK4 c vs uds+g discriminator",precision=10),
194 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=
"RobustParTAK4 c vs b+bb+lepb discriminator",precision=10),
195 btagRobustParTAK4QG =
Var(
"?(pt>=15)&&(bDiscriminator('pfParticleTransformerAK4JetTags:probg')+bDiscriminator('pfParticleTransformerAK4JetTags:probuds'))>0?bDiscriminator('pfParticleTransformerAK4JetTags:probg')/(bDiscriminator('pfParticleTransformerAK4JetTags:probg')+bDiscriminator('pfParticleTransformerAK4JetTags:probuds')):-1",float,doc=
"RobustParTAK4 g vs uds discriminator",precision=10),
197 PARTICLENETAK4VARS = cms.PSet(
198 particleNetAK4_B =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:BvsAll'):-1",float,doc=
"ParticleNetAK4 tagger b vs all (udsg, c) discriminator",precision=10),
199 particleNetAK4_CvsL =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:CvsL'):-1",float,doc=
"ParticleNetAK4 tagger c vs udsg discriminator",precision=10),
200 particleNetAK4_CvsB =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:CvsB'):-1",float,doc=
"ParticleNetAK4 tagger c vs b discriminator",precision=10),
201 particleNetAK4_QvsG =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:QvsG'):-1",float,doc=
"ParticleNetAK4 tagger uds vs g discriminator",precision=10),
202 particleNetAK4_G =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4JetTags:probg'):-1",float,doc=
"ParticleNetAK4 tagger g raw score",precision=10),
203 particleNetAK4_puIdDisc =
Var(
"?(pt>=15)?1-bDiscriminator('pfParticleNetAK4JetTags:probpu'):-1",float,doc=
"ParticleNetAK4 tagger pileup jet discriminator",precision=10),
206 CALOJETVARS = cms.PSet(P4Vars,
207 area = jetPuppiTable.variables.area,
208 rawFactor = jetPuppiTable.variables.rawFactor,
209 emf =
Var(
"emEnergyFraction()", float, doc =
"electromagnetic energy fraction", precision = 10),
220 def AddJetID(proc, jetName="", jetSrc="", jetTableName="", jetTaskName=""):
222 Setup modules to calculate PF jet ID 225 isPUPPIJet =
True if "PUPPI" in jetName.upper()
else False 227 looseJetId =
"looseJetId{}".
format(jetName)
228 setattr(proc, looseJetId, proc.looseJetId.clone(
230 filterParams = proc.looseJetId.filterParams.clone(
236 tightJetId =
"tightJetId{}".
format(jetName)
237 setattr(proc, tightJetId, proc.tightJetId.clone(
239 filterParams = proc.tightJetId.filterParams.clone(
240 version =
"RUN3WINTER22{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
245 tightJetIdLepVeto =
"tightJetIdLepVeto{}".
format(jetName)
246 setattr(proc, tightJetIdLepVeto, proc.tightJetIdLepVeto.clone(
248 filterParams = proc.tightJetIdLepVeto.filterParams.clone(
249 version =
"RUN3WINTER22{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
254 run3_jme_Winter22runsBCDEprompt.toModify(
255 getattr(proc, tightJetId).filterParams, version =
"RUN3WINTER22{}runsBCDEprompt".
format(
"PUPPI" if isPUPPIJet
else "CHS")
257 getattr(proc, tightJetIdLepVeto).filterParams, version =
"RUN3WINTER22{}runsBCDEprompt".
format(
"PUPPI" if isPUPPIJet
else "CHS")
260 (run2_jme_2017 | run2_jme_2018 | run3_nanoAOD_122 | run3_nanoAOD_124).toModify(
261 getattr(proc, tightJetId).filterParams, version =
"RUN2UL{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
263 getattr(proc, tightJetIdLepVeto).filterParams, version =
"RUN2UL{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
266 run2_jme_2016.toModify(
267 getattr(proc, tightJetId).filterParams, version =
"RUN2UL16{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
269 getattr(proc, tightJetIdLepVeto).filterParams, version =
"RUN2UL16{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
275 patJetWithUserData =
"{}WithUserData".
format(jetSrc)
276 getattr(proc, patJetWithUserData).userInts.tightId = cms.InputTag(tightJetId)
277 getattr(proc, patJetWithUserData).userInts.tightIdLepVeto = cms.InputTag(tightJetIdLepVeto)
282 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")
284 getattr(proc,jetTaskName).
add(getattr(proc, tightJetId))
285 getattr(proc,jetTaskName).
add(getattr(proc, tightJetIdLepVeto))
291 Setup modules to calculate pileup jet ID input variables for PF jet 297 puJetIdVarsCalculator =
"puJetIdCalculator{}".
format(jetName)
298 setattr(proc, puJetIdVarsCalculator, pileupJetIdCalculator.clone(
300 vertexes =
"offlineSlimmedPrimaryVertices",
301 inputIsCorrected =
True,
303 srcConstituentWeights =
"packedpuppi" if "PUPPI" in jetName.upper()
else "" 306 getattr(proc,jetTaskName).
add(getattr(proc, puJetIdVarsCalculator))
311 puJetIDVar =
"puJetIDVar{}".
format(jetName)
312 setattr(proc, puJetIDVar, cms.EDProducer(
"PileupJetIDVarProducer",
313 srcJet = cms.InputTag(jetSrc),
314 srcPileupJetId = cms.InputTag(puJetIdVarsCalculator)
317 getattr(proc,jetTaskName).
add(getattr(proc, puJetIDVar))
322 patJetWithUserData =
"{}WithUserData".
format(jetSrc)
323 getattr(proc,patJetWithUserData).userFloats.puId_dR2Mean = cms.InputTag(
"{}:dR2Mean".
format(puJetIDVar))
324 getattr(proc,patJetWithUserData).userFloats.puId_majW = cms.InputTag(
"{}:majW".
format(puJetIDVar))
325 getattr(proc,patJetWithUserData).userFloats.puId_minW = cms.InputTag(
"{}:minW".
format(puJetIDVar))
326 getattr(proc,patJetWithUserData).userFloats.puId_frac01 = cms.InputTag(
"{}:frac01".
format(puJetIDVar))
327 getattr(proc,patJetWithUserData).userFloats.puId_frac02 = cms.InputTag(
"{}:frac02".
format(puJetIDVar))
328 getattr(proc,patJetWithUserData).userFloats.puId_frac03 = cms.InputTag(
"{}:frac03".
format(puJetIDVar))
329 getattr(proc,patJetWithUserData).userFloats.puId_frac04 = cms.InputTag(
"{}:frac04".
format(puJetIDVar))
330 getattr(proc,patJetWithUserData).userFloats.puId_ptD = cms.InputTag(
"{}:ptD".
format(puJetIDVar))
331 getattr(proc,patJetWithUserData).userFloats.puId_beta = cms.InputTag(
"{}:beta".
format(puJetIDVar))
332 getattr(proc,patJetWithUserData).userFloats.puId_pull = cms.InputTag(
"{}:pull".
format(puJetIDVar))
333 getattr(proc,patJetWithUserData).userFloats.puId_jetR = cms.InputTag(
"{}:jetR".
format(puJetIDVar))
334 getattr(proc,patJetWithUserData).userFloats.puId_jetRchg = cms.InputTag(
"{}:jetRchg".
format(puJetIDVar))
335 getattr(proc,patJetWithUserData).userInts.puId_nCharged = cms.InputTag(
"{}:nCharged".
format(puJetIDVar))
340 getattr(proc,jetTableName).variables.puId_dR2Mean = PUIDVARS.puId_dR2Mean
341 getattr(proc,jetTableName).variables.puId_majW = PUIDVARS.puId_majW
342 getattr(proc,jetTableName).variables.puId_minW = PUIDVARS.puId_minW
343 getattr(proc,jetTableName).variables.puId_frac01 = PUIDVARS.puId_frac01
344 getattr(proc,jetTableName).variables.puId_frac02 = PUIDVARS.puId_frac02
345 getattr(proc,jetTableName).variables.puId_frac03 = PUIDVARS.puId_frac03
346 getattr(proc,jetTableName).variables.puId_frac04 = PUIDVARS.puId_frac04
347 getattr(proc,jetTableName).variables.puId_ptD = PUIDVARS.puId_ptD
348 getattr(proc,jetTableName).variables.puId_beta = PUIDVARS.puId_beta
349 getattr(proc,jetTableName).variables.puId_pull = PUIDVARS.puId_pull
350 getattr(proc,jetTableName).variables.puId_jetR = PUIDVARS.puId_jetR
351 getattr(proc,jetTableName).variables.puId_jetRchg = PUIDVARS.puId_jetRchg
352 getattr(proc,jetTableName).variables.puId_nCharged = PUIDVARS.puId_nCharged
356 def AddQGLTaggerVars(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="", calculateQGLVars=False):
358 Schedule the QGTagger module to calculate input variables to the QG likelihood 361 isPUPPIJet =
True if "PUPPI" in jetName.upper()
else False 363 QGLTagger=
"qgtagger{}".
format(jetName)
364 patJetWithUserData=
"{}WithUserData".
format(jetSrc)
367 setattr(proc, QGLTagger, qgtagger.clone(
369 computeLikelihood =
False,
373 getattr(proc,QGLTagger).srcConstituentWeights = cms.InputTag(
"packedpuppi")
378 getattr(proc,patJetWithUserData).userFloats.qgl_axis2 = cms.InputTag(QGLTagger+
":axis2")
379 getattr(proc,patJetWithUserData).userFloats.qgl_ptD = cms.InputTag(QGLTagger+
":ptD")
380 getattr(proc,patJetWithUserData).userInts.qgl_mult = cms.InputTag(QGLTagger+
":mult")
385 getattr(proc,jetTableName).variables.qgl_axis2 = QGLVARS.qgl_axis2
386 getattr(proc,jetTableName).variables.qgl_ptD = QGLVARS.qgl_ptD
387 getattr(proc,jetTableName).variables.qgl_mult = QGLVARS.qgl_mult
390 getattr(proc,jetTaskName).
add(getattr(proc, QGLTagger))
396 Store b-tagging scores from various algortihm 399 getattr(proc, jetTableName).variables.btagDeepFlavB = DEEPJETVARS.btagDeepFlavB
400 getattr(proc, jetTableName).variables.btagDeepFlavCvL = DEEPJETVARS.btagDeepFlavCvL
401 getattr(proc, jetTableName).variables.btagDeepFlavCvB = DEEPJETVARS.btagDeepFlavCvB
403 run2_nanoAOD_ANY.toModify(
404 getattr(proc, jetTableName).variables,
405 btagCSVV2 =
Var(
"bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",float,doc=
" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",precision=10),
406 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),
407 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),
408 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)
415 Store DeepJet raw score in jetTable for gluon and light quark 418 getattr(proc, jetTableName).variables.btagDeepFlavG = DEEPJETVARS.btagDeepFlavG
419 getattr(proc, jetTableName).variables.btagDeepFlavUDS = DEEPJETVARS.btagDeepFlavUDS
420 getattr(proc, jetTableName).variables.btagDeepFlavQG = DEEPJETVARS.btagDeepFlavQG
426 Store RobustParTAK4 scores in jetTable 429 getattr(proc, jetTableName).variables.btagRobustParTAK4B = ROBUSTPARTAK4VARS.btagRobustParTAK4B
430 getattr(proc, jetTableName).variables.btagRobustParTAK4CvL = ROBUSTPARTAK4VARS.btagRobustParTAK4CvL
431 getattr(proc, jetTableName).variables.btagRobustParTAK4CvB = ROBUSTPARTAK4VARS.btagRobustParTAK4CvB
437 Store ParticleNetAK4 scores in jetTable 440 getattr(proc, jetTableName).variables.particleNetAK4_B = PARTICLENETAK4VARS.particleNetAK4_B
441 getattr(proc, jetTableName).variables.particleNetAK4_CvsL = PARTICLENETAK4VARS.particleNetAK4_CvsL
442 getattr(proc, jetTableName).variables.particleNetAK4_CvsB = PARTICLENETAK4VARS.particleNetAK4_CvsB
443 getattr(proc, jetTableName).variables.particleNetAK4_QvsG = PARTICLENETAK4VARS.particleNetAK4_QvsG
444 getattr(proc, jetTableName).variables.particleNetAK4_G = PARTICLENETAK4VARS.particleNetAK4_G
445 getattr(proc, jetTableName).variables.particleNetAK4_puIdDisc = PARTICLENETAK4VARS.particleNetAK4_puIdDisc
451 Add patJet into custom nanoAOD 454 jetName = recoJetInfo.jetUpper
455 payload = recoJetInfo.jetCorrPayload
456 doPF = recoJetInfo.doPF
457 doCalo = recoJetInfo.doCalo
458 patJetFinalColl = recoJetInfo.patJetFinalCollection
460 nanoInfoForJet = nanoInfo_recojets[recoJetInfo.jet]
461 jetTablePrefix = nanoInfoForJet[
"name"]
462 jetTableDoc = nanoInfoForJet[
"doc"]
463 ptcut = nanoInfoForJet[
"ptcut"]
if "ptcut" in nanoInfoForJet
else 8
464 doPUIDVar = nanoInfoForJet[
"doPUIDVar"]
if "doPUIDVar" in nanoInfoForJet
else False 465 doQGL = nanoInfoForJet[
"doQGL"]
if "doQGL" in nanoInfoForJet
else False 466 doBTag = nanoInfoForJet[
"doBTag"]
if "doBTag" in nanoInfoForJet
else False 469 jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF, doCalo,
470 ptcut=ptcut, doPUIDVar=doPUIDVar, doQGL=doQGL, doBTag=doBTag, runOnMC=runOnMC
475 def SavePatJets(proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc,
476 doPF, doCalo, ptcut, doPUIDVar=False, doQGL=False, doBTag=False, runOnMC=False):
478 Schedule modules for a given patJet collection and save its variables into custom NanoAOD 484 jetCorrFactors =
"jetCorrFactorsNano{}".
format(jetName)
485 setattr(proc, jetCorrFactors, jetCorrFactorsNano.clone(
486 src = patJetFinalColl,
494 srcJets =
"updatedJets{}".
format(jetName)
495 setattr(proc, srcJets, updatedJets.clone(
496 jetSource = patJetFinalColl,
497 jetCorrFactorsSource = [jetCorrFactors],
504 srcJetsWithUserData =
"updatedJets{}WithUserData".
format(jetName)
505 setattr(proc, srcJetsWithUserData, cms.EDProducer(
"PATJetUserDataEmbedder",
506 src = cms.InputTag(srcJets),
507 userFloats = cms.PSet(),
508 userInts = cms.PSet(),
515 finalJetsCut =
"(pt >= {ptcut:.0f})".
format(ptcut=ptcut)
517 finalJetsCut =
"(pt >= {ptcut:.0f}) || ((pt < {ptcut:.0f}) && (genJetFwdRef().backRef().isNonnull()))".
format(ptcut=ptcut)
519 finalJetsForTable =
"finalJets{}".
format(jetName)
520 setattr(proc, finalJetsForTable, finalJets.clone(
521 src = srcJetsWithUserData,
529 tableContent = PFJETVARS
531 tableContent = CALOJETVARS
533 jetTableCutDefault =
"" 535 jetTableDocDefault = jetTableDoc +
" with JECs applied. Jets with pt >= {ptcut:.0f} GeV are stored.".
format(ptcut=ptcut)
537 jetTableDocDefault +=
"For jets with pt < {ptcut:.0f} GeV, only those matched to gen jets are stored.".
format(ptcut=ptcut)
540 jetTableDocDefault = jetTableDoc
542 jetTableName =
"jet{}Table".
format(jetName)
543 setattr(proc,jetTableName, simpleCandidateFlatTableProducer.clone(
544 src = cms.InputTag(finalJetsForTable),
545 cut = cms.string(jetTableCutDefault),
546 name = cms.string(jetTablePrefix),
547 doc = cms.string(jetTableDocDefault),
548 variables = cms.PSet(tableContent)
551 getattr(proc,jetTableName).variables.pt.precision=10
552 getattr(proc,jetTableName).variables.rawFactor.precision=10
557 jetMCTableName =
"jet{}MCTable".
format(jetName)
558 setattr(proc, jetMCTableName, simpleCandidateFlatTableProducer.clone(
559 src = cms.InputTag(finalJetsForTable),
560 cut = getattr(proc,jetTableName).cut,
561 name = cms.string(jetTablePrefix),
562 extension = cms.bool(
True),
563 variables = cms.PSet(
564 partonFlavour =
Var(
"partonFlavour()", int, doc=
"flavour from parton matching"),
565 hadronFlavour =
Var(
"hadronFlavour()", int, doc=
"flavour from hadron ghost clustering"),
566 genJetIdx =
Var(
"?genJetFwdRef().backRef().isNonnull()?genJetFwdRef().backRef().key():-1", int, doc=
"index of matched gen jet"),
574 jetTaskName =
"jet{}Task".
format(jetName)
575 setattr(proc, jetTaskName, cms.Task(
576 getattr(proc,jetCorrFactors),
577 getattr(proc,srcJets),
578 getattr(proc,srcJetsWithUserData),
579 getattr(proc,finalJetsForTable)
582 proc.nanoTableTaskCommon.add(getattr(proc,jetTaskName))
587 jetTableTaskName =
"jet{}TablesTask".
format(jetName)
588 setattr(proc, jetTableTaskName, cms.Task(getattr(proc,jetTableName)))
589 proc.nanoTableTaskCommon.add(getattr(proc,jetTableTaskName))
591 jetMCTableTaskName =
"jet{}MCTablesTask".
format(jetName)
592 setattr(proc, jetMCTableTaskName, cms.Task(getattr(proc,jetMCTableName)))
594 proc.nanoTableTaskFS.add(getattr(proc,jetMCTableTaskName))
600 proc =
AddJetID(proc, jetName=jetName, jetSrc=srcJets, jetTableName=jetTableName, jetTaskName=jetTaskName)
602 proc =
AddPileUpJetIDVars(proc, jetName=jetName, jetSrc=srcJets, jetTableName=jetTableName, jetTaskName=jetTaskName)
604 proc =
AddQGLTaggerVars(proc,jetName=jetName, jetSrc=srcJets, jetTableName=jetTableName, jetTaskName=jetTaskName, calculateQGLVars=
True)
621 Recluster AK4 Puppi jets and replace slimmedJetsPuppi 622 that is used as default to save AK4 Puppi jets in NanoAODs. 624 print(
"custom_jme_cff::ReclusterAK4PuppiJets: Recluster AK4 PF Puppi jets")
630 "jet" :
"ak4pfpuppi",
631 "inputCollection" :
"",
632 "genJetsCollection":
"AK4GenJetsNoNu",
633 "bTagDiscriminators": bTagDiscriminatorsForAK4,
636 recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
638 jetName = recoJetInfo.jetUpper
639 patJetFinalColl = recoJetInfo.patJetFinalCollection
644 run2_jme_2016.toModify(
645 proc.tightJetPuppiId.filterParams, version =
"RUN2UL16PUPPI" 647 proc.tightJetIdLepVeto.filterParams, version =
"RUN2UL16PUPPI" 654 proc.jetPuppiCorrFactorsNano.src=patJetFinalColl
655 proc.updatedJetsPuppi.jetSource=patJetFinalColl
660 finalJetsPuppiCut =
"" 662 finalJetsPuppiCut =
"(pt >= 8) || ((pt < 8) && (genJetFwdRef().backRef().isNonnull()))" 664 finalJetsPuppiCut =
"(pt >= 8)" 666 proc.finalJetsPuppi.cut = finalJetsPuppiCut
670 proc.corrT1METJetPuppiTable.cut =
"pt>=8 && pt<15 && abs(eta)<9.9" 676 run2_nanoAOD_ANY.toModify(
677 proc.jetTable, name =
"Jet" 682 src = cms.InputTag(
"finalJetsPuppi")
688 jetPuppiTableDoc =
"AK4 PF Puppi jets with JECs applied. Jets with pt >= 8 GeV are stored." 690 jetPuppiTableDoc +=
"For jets with pt < 8 GeV, only those matched to AK4 Gen jets are stored." 691 proc.jetPuppiTable.doc = jetPuppiTableDoc
693 proc.jetPuppiTable.variables.rawFactor.precision = 10
698 proc.jetPuppiTable.variables.chHadMultiplicity = PFJETVARS.chHadMultiplicity
699 proc.jetPuppiTable.variables.neHadMultiplicity = PFJETVARS.neHadMultiplicity
700 proc.jetPuppiTable.variables.hfHadMultiplicity = PFJETVARS.hfHadMultiplicity
701 proc.jetPuppiTable.variables.hfEMMultiplicity = PFJETVARS.hfEMMultiplicity
702 proc.jetPuppiTable.variables.muMultiplicity = PFJETVARS.muMultiplicity
703 proc.jetPuppiTable.variables.elMultiplicity = PFJETVARS.elMultiplicity
704 proc.jetPuppiTable.variables.phoMultiplicity = PFJETVARS.phoMultiplicity
712 jetSrc =
"updatedJetsPuppi",
713 jetTableName =
"jetPuppiTable",
714 jetTaskName =
"jetPuppiTask" 722 jetSrc =
"updatedJetsPuppi",
723 jetTableName =
"jetPuppiTable",
724 jetTaskName =
"jetPuppiTask",
725 calculateQGLVars=
True 730 proc.jetPuppiTable.variables.btagDeepFlavB = DEEPJETVARS.btagDeepFlavB
731 proc.jetPuppiTable.variables.btagDeepFlavCvL = DEEPJETVARS.btagDeepFlavCvL
732 proc.jetPuppiTable.variables.btagDeepFlavCvB = DEEPJETVARS.btagDeepFlavCvB
736 proc.jetPuppiTable.variables.btagDeepFlavG = DEEPJETVARS.btagDeepFlavG
737 proc.jetPuppiTable.variables.btagDeepFlavUDS = DEEPJETVARS.btagDeepFlavUDS
738 proc.jetPuppiTable.variables.btagDeepFlavQG = DEEPJETVARS.btagDeepFlavQG
742 proc.jetPuppiTable.variables.btagRobustParTAK4B = ROBUSTPARTAK4VARS.btagRobustParTAK4B
743 proc.jetPuppiTable.variables.btagRobustParTAK4CvL = ROBUSTPARTAK4VARS.btagRobustParTAK4CvL
744 proc.jetPuppiTable.variables.btagRobustParTAK4CvB = ROBUSTPARTAK4VARS.btagRobustParTAK4CvB
749 run2_nanoAOD_ANY.toReplaceWith(
750 proc.jetPuppiForMETTask,
751 proc.jetPuppiForMETTask.copyAndExclude([proc.corrT1METJetPuppiTable])
759 jetMCTableName =
"jet{}MCTable".
format(jetName)
760 setattr(proc, jetMCTableName, proc.jetMCTable.clone(
761 src = proc.jetPuppiTable.src,
762 name = proc.jetPuppiTable.name
765 jetMCTableTaskName =
"jet{}MCTablesTask".
format(jetName)
766 setattr(proc, jetMCTableTaskName, cms.Task(getattr(proc,jetMCTableName)))
768 run2_nanoAOD_ANY.toReplaceWith(
769 proc.nanoTableTaskFS,
770 proc.nanoTableTaskFS.copyAndAdd( getattr(proc,jetMCTableTaskName))
777 Recluster AK4 CHS jets and replace slimmedJets that is used as default to 778 save AK4 CHS jets in NanoAODs (for Run-2). 780 print(
"custom_jme_cff::ReclusterAK4CHSJets: Recluster AK4 PF CHS jets")
782 from RecoBTag.ONNXRuntime.pfParticleNetFromMiniAODAK4_cff
import _pfParticleNetFromMiniAODAK4CHSCentralJetTagsAll
783 from RecoBTag.ONNXRuntime.pfParticleNetFromMiniAODAK4_cff
import _pfParticleNetFromMiniAODAK4CHSForwardJetTagsAll
785 bTagDiscriminatorsForAK4CHS = cms.PSet(
786 foo = cms.vstring(_pfParticleNetFromMiniAODAK4CHSCentralJetTagsAll+_pfParticleNetFromMiniAODAK4CHSForwardJetTagsAll)
788 bTagDiscriminatorsForAK4CHS = bTagDiscriminatorsForAK4CHS.foo.value()
795 "inputCollection" :
"",
796 "genJetsCollection":
"AK4GenJetsNoNu",
797 "bTagDiscriminators": bTagDiscriminatorsForAK4CHS,
800 recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
802 jetName = recoJetInfo.jetUpper
803 patJetFinalColl = recoJetInfo.patJetFinalCollection
809 proc.jetCorrFactorsNano.src=patJetFinalColl
810 proc.updatedJets.jetSource=patJetFinalColl
817 finalJetsCut =
"(pt >= 10) || ((pt < 10) && (genJetFwdRef().backRef().isNonnull()))" 819 finalJetsCut =
"(pt >= 10)" 821 proc.finalJets.cut = finalJetsCut
825 proc.corrT1METJetTable.cut =
"pt>=10 && pt<15 && abs(eta)<9.9" 831 proc.jetTable.src = cms.InputTag(
"finalJets")
832 proc.jetTable.cut = jetTableCut
833 proc.jetMCTable.cut = jetTableCut
834 proc.jetTable.name =
"JetCHS" 839 run2_nanoAOD_ANY.toModify(
841 src = cms.InputTag(
"linkedObjects",
"jets"),
848 jetTableDoc =
"AK4 PF CHS jets with JECs applied. Jets with pt >= 10 GeV are stored." 850 jetTableDoc +=
"For jets with pt < 10 GeV, only those matched to AK4 Gen jets are stored." 851 proc.jetTable.doc = jetTableDoc
853 proc.jetTable.variables.rawFactor.precision = 10
858 proc.jetTable.variables.chHadMultiplicity = PFJETVARS.chHadMultiplicity
859 proc.jetTable.variables.neHadMultiplicity = PFJETVARS.neHadMultiplicity
860 proc.jetTable.variables.hfHadMultiplicity = PFJETVARS.hfHadMultiplicity
861 proc.jetTable.variables.hfEMMultiplicity = PFJETVARS.hfEMMultiplicity
862 proc.jetTable.variables.muMultiplicity = PFJETVARS.muMultiplicity
863 proc.jetTable.variables.elMultiplicity = PFJETVARS.elMultiplicity
864 proc.jetTable.variables.phoMultiplicity = PFJETVARS.phoMultiplicity
869 proc.updatedJetsWithUserData.userFloats.chFPV1EF = cms.InputTag(
"jercVars:chargedFromPV1EnergyFraction")
870 proc.updatedJetsWithUserData.userFloats.chFPV2EF = cms.InputTag(
"jercVars:chargedFromPV2EnergyFraction")
871 proc.updatedJetsWithUserData.userFloats.chFPV3EF = cms.InputTag(
"jercVars:chargedFromPV3EnergyFraction")
872 proc.jetTable.variables.chFPV1EF =
Var(
"userFloat('chFPV1EF')", float, doc=
"charged fromPV==1 Energy Fraction (component of the total charged Energy Fraction).", precision= 6)
873 proc.jetTable.variables.chFPV2EF =
Var(
"userFloat('chFPV2EF')", float, doc=
"charged fromPV==2 Energy Fraction (component of the total charged Energy Fraction).", precision= 6)
874 proc.jetTable.variables.chFPV3EF =
Var(
"userFloat('chFPV3EF')", float, doc=
"charged fromPV==3 Energy Fraction (component of the total charged Energy Fraction).", precision= 6)
880 for varNames
in proc.jetTable.variables.parameterNames_():
881 if "btagDeepFlav" in varNames
or "btagRobustParT" in varNames:
882 delattr(proc.jetTable.variables, varNames)
884 proc.jetTable.variables.btagPNetB =
Var(
"?pt>15 && bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:BvsAll')>0?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:BvsAll'):-1",float,precision=10,doc=
"ParticleNet b vs. udscg")
885 proc.jetTable.variables.btagPNetCvL =
Var(
"?pt>15 && bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:CvsL')>0?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:CvsL'):-1",float,precision=10,doc=
"ParticleNet c vs. udsg")
886 proc.jetTable.variables.btagPNetCvB =
Var(
"?pt>15 && bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:CvsB')>0?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:CvsB'):-1",float,precision=10,doc=
"ParticleNet c vs. b")
887 proc.jetTable.variables.btagPNetQvG =
Var(
"?pt>15 && abs(eta())<2.5?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:QvsG'):bDiscriminator('pfParticleNetFromMiniAODAK4CHSForwardDiscriminatorsJetTags:QvsG')",float,precision=10,doc=
"ParticleNet q (udsbc) vs. g")
888 proc.jetTable.variables.btagPNetTauVJet =
Var(
"?pt>15 && bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:TauVsJet')>0?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:TauVsJet'):-1",float,precision=10,doc=
"ParticleNet tau vs. jet")
889 proc.jetTable.variables.PNetRegPtRawCorr =
Var(
"?pt>15 && abs(eta())<2.5?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralJetTags:ptcorr'):bDiscriminator('pfParticleNetFromMiniAODAK4CHSForwardJetTags:ptcorr')",float,precision=10,doc=
"ParticleNet universal flavor-aware visible pT regression (no neutrinos), correction relative to raw jet pT")
890 proc.jetTable.variables.PNetRegPtRawCorrNeutrino =
Var(
"?pt>15 && abs(eta())<2.5?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralJetTags:ptnu'):bDiscriminator('pfParticleNetFromMiniAODAK4CHSForwardJetTags:ptnu')",float,precision=10,doc=
"ParticleNet universal flavor-aware pT regression neutrino correction, relative to visible. To apply full regression, multiply raw jet pT by both PNetRegPtRawCorr and PNetRegPtRawCorrNeutrino.")
891 proc.jetTable.variables.PNetRegPtRawRes =
Var(
"?pt>15 && abs(eta())<2.5?0.5*(bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralJetTags:ptreshigh')-bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralJetTags:ptreslow')):0.5*(bDiscriminator('pfParticleNetFromMiniAODAK4CHSForwardJetTags:ptreshigh')-bDiscriminator('pfParticleNetFromMiniAODAK4CHSForwardJetTags:ptreslow'))",float,precision=10,doc=
"ParticleNet universal flavor-aware jet pT resolution estimator, (q84 - q16)/2")
896 hfJetShowerShapeforCustomNanoAOD =
"hfJetShowerShapeforCustomNanoAOD" 897 setattr(proc, hfJetShowerShapeforCustomNanoAOD, hfJetShowerShape.clone(jets=
"updatedJets", vertices=
"offlineSlimmedPrimaryVertices") )
898 proc.jetUserDataTask.add(getattr(proc, hfJetShowerShapeforCustomNanoAOD))
899 proc.updatedJetsWithUserData.userFloats.hfsigmaEtaEta = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:sigmaEtaEta')
900 proc.updatedJetsWithUserData.userFloats.hfsigmaPhiPhi = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:sigmaPhiPhi')
901 proc.updatedJetsWithUserData.userInts.hfcentralEtaStripSize = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:centralEtaStripSize')
902 proc.updatedJetsWithUserData.userInts.hfadjacentEtaStripsSize = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:adjacentEtaStripsSize')
903 proc.jetTable.variables.hfsigmaEtaEta =
Var(
"userFloat('hfsigmaEtaEta')",float,doc=
"sigmaEtaEta for HF jets (noise discriminating variable)",precision=10)
904 proc.jetTable.variables.hfsigmaPhiPhi =
Var(
"userFloat('hfsigmaPhiPhi')",float,doc=
"sigmaPhiPhi for HF jets (noise discriminating variable)",precision=10)
905 proc.jetTable.variables.hfcentralEtaStripSize =
Var(
"userInt('hfcentralEtaStripSize')", int, doc=
"eta size of the central tower strip in HF (noise discriminating variable) ")
906 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) ")
912 (~run2_nanoAOD_ANY).toReplaceWith(
913 proc.jetUserDataTask,
914 proc.jetUserDataTask.copyAndExclude([proc.bJetVars])
917 proc.jetTablesTask.copyAndExclude([proc.bjetNN, proc.cjetNN])
918 ).toModify(proc.updatedJetsWithUserData.userFloats,
920 leptonPtRelv0 =
None,
921 leptonPtRelInvv0 =
None,
929 proc.updatedJetsWithUserData.userInts,
933 proc.jetTable, externalVariables = cms.PSet()
939 proc.jetForMETTask.copyAndExclude([proc.corrT1METJetTable])
946 jetMCTableName =
"jet{}MCTable".
format(jetName)
947 setattr(proc, jetMCTableName, proc.jetMCTable.clone(
948 src = proc.jetTable.src,
949 name = proc.jetTable.name
952 jetMCTableTaskName =
"jet{}MCTablesTask".
format(jetName)
953 setattr(proc, jetMCTableTaskName, cms.Task(getattr(proc,jetMCTableName)))
955 (~run2_nanoAOD_ANY).toReplaceWith(
956 proc.nanoTableTaskFS,
957 proc.nanoTableTaskFS.copyAndAdd(getattr(proc,jetMCTableTaskName))
964 Store a separate AK8 Puppi jet collection for JEC studies. 965 Only minimal info are stored 967 print(
"custom_jme_cff::AddNewAK8PuppiJetsForJEC: Make a new AK8 PF Puppi jet collection for JEC studies")
973 "jet" :
"ak8pfpuppi",
974 "inputCollection" :
"",
975 "genJetsCollection":
"AK8GenJetsNoNu",
978 recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
980 jetName = recoJetInfo.jetUpper
981 payload = recoJetInfo.jetCorrPayload
983 patJetFinalColl = recoJetInfo.patJetFinalCollection
984 jetTablePrefix =
"FatJetForJEC" 985 jetTableDoc =
"AK8 PF Puppi jets with JECs applied. Reclustered for JEC studies so only minimal info stored." 989 jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF=
True,
990 doCalo=
False, ptcut=ptcut, doPUIDVar=
False, doQGL=
False, doBTag=
False, runOnMC=runOnMC
997 Store an AK8 CHS jet collection for JEC studies. 999 print(
"custom_jme_cff::AddNewAK8CHSJets: Make a new AK8 PF CHS jet collection for JEC studies")
1006 "inputCollection" :
"",
1007 "genJetsCollection":
"AK8GenJetsNoNu",
1008 "minPtFastjet" : 0.,
1010 recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
1012 jetName = recoJetInfo.jetUpper
1013 payload = recoJetInfo.jetCorrPayload
1015 patJetFinalColl = recoJetInfo.patJetFinalCollection
1016 jetTablePrefix =
"FatJetCHS" 1017 jetTableDoc =
"AK8 PF CHS jets with JECs applied. Reclustered for JEC studies so only minimal info stored." 1021 jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF=
True,
1022 doCalo=
False, ptcut=ptcut, doPUIDVar=
False, doQGL=
False, doBTag=
False, runOnMC=runOnMC
1029 Add more variables for AK8 PFPUPPI jets 1032 proc.fatJetTable.variables.rawFactor.precision = 10
1038 proc.fatJetTable.variables.chHEF =
Var(
"?isPFJet()?chargedHadronEnergyFraction():-1", float, doc=
"charged Hadron Energy Fraction", precision = 6)
1039 proc.fatJetTable.variables.neHEF =
Var(
"?isPFJet()?neutralHadronEnergyFraction():-1", float, doc=
"neutral Hadron Energy Fraction", precision = 6)
1040 proc.fatJetTable.variables.chEmEF =
Var(
"?isPFJet()?chargedEmEnergyFraction():-1", float, doc=
"charged Electromagnetic Energy Fraction", precision = 6)
1041 proc.fatJetTable.variables.neEmEF =
Var(
"?isPFJet()?neutralEmEnergyFraction():-1", float, doc=
"neutral Electromagnetic Energy Fraction", precision = 6)
1042 proc.fatJetTable.variables.muEF =
Var(
"?isPFJet()?muonEnergyFraction():-1", float, doc=
"muon Energy Fraction", precision = 6)
1043 proc.fatJetTable.variables.hfHEF =
Var(
"?isPFJet()?HFHadronEnergyFraction():-1", float, doc=
"energy fraction in forward hadronic calorimeter", precision = 6)
1044 proc.fatJetTable.variables.hfEmEF =
Var(
"?isPFJet()?HFEMEnergyFraction():-1", float, doc=
"energy fraction in forward EM calorimeter", precision = 6)
1045 proc.fatJetTable.variables.chHadMultiplicity =
Var(
"?isPFJet()?chargedHadronMultiplicity():-1",
"int16", doc=
"(Puppi-weighted) number of charged hadrons in the jet")
1046 proc.fatJetTable.variables.neHadMultiplicity =
Var(
"?isPFJet()?neutralHadronMultiplicity():-1",
"int16", doc=
"(Puppi-weighted) number of neutral hadrons in the jet")
1047 proc.fatJetTable.variables.hfHadMultiplicity =
Var(
"?isPFJet()?HFHadronMultiplicity():-1",
"int16", doc=
"(Puppi-weighted) number of HF Hadrons in the jet")
1048 proc.fatJetTable.variables.hfEMMultiplicity =
Var(
"?isPFJet()?HFEMMultiplicity():-1",
"int16", doc=
"(Puppi-weighted) number of HF EMs in the jet")
1049 proc.fatJetTable.variables.muMultiplicity =
Var(
"?isPFJet()?muonMultiplicity():-1",
"int16", doc=
"(Puppi-weighted) number of muons in the jet")
1050 proc.fatJetTable.variables.elMultiplicity =
Var(
"?isPFJet()?electronMultiplicity():-1",
"int16", doc=
"(Puppi-weighted) number of electrons in the jet")
1051 proc.fatJetTable.variables.phoMultiplicity =
Var(
"?isPFJet()?photonMultiplicity():-1",
"int16", doc=
"(Puppi-weighted) number of photons in the jet")
1063 Add genJet into custom nanoAOD 1066 genJetName = genJetInfo.jetUpper
1067 genJetAlgo = genJetInfo.jetAlgo
1068 genJetSize = genJetInfo.jetSize
1069 genJetSizeNr = genJetInfo.jetSizeNr
1070 genJetFinalColl =
"{}{}{}".
format(genJetAlgo.upper(), genJetSize,
"GenJetsNoNu")
1071 genJetTablePrefix = nanoInfo_genjets[genJetInfo.jet][
"name"]
1072 genJetTableDoc = nanoInfo_genjets[genJetInfo.jet][
"doc"]
1074 SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=
False)
1078 def SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=False):
1080 Schedule modules for a given genJet collection and save its variables into custom NanoAOD 1083 genJetTableName =
"jet{}Table".
format(genJetName)
1084 setattr(proc, genJetTableName, genJetTable.clone(
1085 src = genJetFinalColl,
1087 name = genJetTablePrefix,
1088 doc = genJetTableDoc,
1089 variables = GENJETVARS
1093 genJetFlavourAssociationName =
"genJet{}FlavourAssociation".
format(genJetName)
1094 setattr(proc, genJetFlavourAssociationName, genJetFlavourAssociation.clone(
1095 jets = getattr(proc,genJetTableName).src,
1096 jetAlgorithm = supportedJetAlgos[genJetAlgo],
1097 rParam = genJetSizeNr,
1101 genJetFlavourTableName =
"genJet{}FlavourTable".
format(genJetName)
1102 setattr(proc, genJetFlavourTableName, genJetFlavourTable.clone(
1103 name = getattr(proc,genJetTableName).name,
1104 src = getattr(proc,genJetTableName).src,
1105 cut = getattr(proc,genJetTableName).cut,
1106 jetFlavourInfos = genJetFlavourAssociationName,
1110 genJetTaskName =
"genJet{}Task".
format(genJetName)
1111 setattr(proc, genJetTaskName, cms.Task(
1112 getattr(proc,genJetTableName),
1113 getattr(proc,genJetFlavourAssociationName),
1114 getattr(proc,genJetFlavourTableName)
1117 proc.jetMCTask.add(getattr(proc,genJetTaskName))
1123 Recluster AK4 Gen jets and replace 1124 slimmedGenJets that is used as default 1125 to save AK4 Gen jets in NanoAODs. 1127 print(
"custom_jme_cff::ReclusterAK4GenJets: Recluster AK4 Gen jets")
1136 genJetInfo = genJA.addGenJetCollection(proc, **cfg)
1138 genJetName = genJetInfo.jetUpper
1139 genJetAlgo = genJetInfo.jetAlgo
1140 genJetSize = genJetInfo.jetSize
1141 genJetSizeNr = genJetInfo.jetSizeNr
1142 selectedGenJets =
"{}{}{}".
format(genJetAlgo.upper(), genJetSize,
"GenJetsNoNu")
1148 proc.genJetTable.src = selectedGenJets
1149 proc.genJetTable.cut =
"" 1150 proc.genJetTable.doc =
"AK4 Gen jets (made with visible genparticles) with pt > 5 GeV" 1152 genJetFlavourAssociationName =
"genJet{}FlavourAssociation".
format(genJetName)
1153 setattr(proc, genJetFlavourAssociationName, genJetFlavourAssociation.clone(
1154 jets = proc.genJetTable.src,
1155 jetAlgorithm = supportedJetAlgos[genJetAlgo],
1156 rParam = genJetSizeNr,
1159 proc.jetMCTask.add(getattr(proc, genJetFlavourAssociationName))
1164 Make a separate AK8 Gen jet collection for JEC studies. 1166 print(
"custom_jme_cff::AddNewAK8GenJetsForJEC: Add new AK8 Gen jets for JEC studies")
1173 "minPtFastjet" : 10.
1175 genJetInfo = genJA.addGenJetCollection(proc, **cfg)
1177 genJetName = genJetInfo.jetUpper
1178 genJetAlgo = genJetInfo.jetAlgo
1179 genJetSize = genJetInfo.jetSize
1180 genJetSizeNr = genJetInfo.jetSizeNr
1181 genJetFinalColl =
"{}{}{}".
format(genJetAlgo.upper(), genJetSize,
"GenJetsNoNu")
1182 genJetTablePrefix =
"GenJetAK8ForJEC" 1183 genJetTableDoc =
"AK8 Gen jets (made with visible genparticles) with pt > 10 GeV. Reclustered for JEC studies." 1185 SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=
False)
1190 proc.genJetTable.variables.nConstituents = GENJETVARS.nConstituents
1194 proc.genJetAK8Table.variables.nConstituents = GENJETVARS.nConstituents
1204 Remove default pt cuts for all jets set in jets_cff.py 1207 proc.finalJets.cut =
"" 1208 proc.finalJetsPuppi.cut =
"" 1209 proc.finalJetsAK8.cut =
"" 1210 proc.genJetTable.cut =
"" 1211 proc.genJetFlavourTable.cut =
"" 1212 proc.genJetAK8Table.cut =
"" 1213 proc.genJetAK8FlavourTable.cut =
"" 1234 genJA = GenJetAdder()
1252 for jetConfig
in config_genjets:
1253 cfg = { k : v
for k, v
in jetConfig.items()
if k !=
"enabled"}
1254 genJetInfo = genJA.addGenJetCollection(process, **cfg)
1262 recoJA = RecoJetAdder(runOnMC=runOnMC)
1282 for jetConfig
in config_recojets:
1283 cfg = { k : v
for k, v
in jetConfig.items()
if k !=
"enabled"}
1284 recoJetInfo = recoJA.addRecoJetCollection(process, **cfg)
1292 def addAK4JetTasks(proc, addAK4CHSJetTasks, addAK4PuppiJetTasks):
1293 if addAK4CHSJetTasks:
1294 proc.nanoTableTaskCommon.add(proc.jetTask)
1295 proc.nanoTableTaskCommon.add(proc.jetTablesTask)
1296 proc.nanoTableTaskCommon.add(proc.jetForMETTask)
1297 if addAK4PuppiJetTasks:
1298 proc.nanoTableTaskCommon.add(proc.jetPuppiTask)
1299 proc.nanoTableTaskCommon.add(proc.jetPuppiTablesTask)
1300 proc.nanoTableTaskCommon.add(proc.jetPuppiForMETTask)
1303 jmeNano_addAK4JetTasks_switch = cms.PSet(
1304 jmeNano_addAK4CHS_switch = cms.untracked.bool(
True),
1305 jmeNano_addAK4Puppi_switch = cms.untracked.bool(
False)
1307 run2_nanoAOD_ANY.toModify(jmeNano_addAK4JetTasks_switch,
1308 jmeNano_addAK4CHS_switch =
False,
1309 jmeNano_addAK4Puppi_switch =
True 1311 process = addAK4JetTasks(process,
1312 addAK4CHSJetTasks = jmeNano_addAK4JetTasks_switch.jmeNano_addAK4CHS_switch,
1313 addAK4PuppiJetTasks = jmeNano_addAK4JetTasks_switch.jmeNano_addAK4Puppi_switch,
1320 process.puTable.savePtHatMax =
True 1326 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)