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"),
154 partonFlavour =
Var(
"partonFlavour()",
"int16", doc=
"flavour from parton matching"),
155 hadronFlavour =
Var(
"hadronFlavour()",
"uint8", doc=
"flavour from hadron ghost clustering"),
156 genJetIdx =
Var(
"?genJetFwdRef().backRef().isNonnull()?genJetFwdRef().backRef().key():-1",
"int16", doc=
"index of matched gen jet"),
159 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),
160 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),
161 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),
162 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),
163 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),
164 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),
165 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),
166 puId_ptD =
Var(
"?(pt>=10)?userFloat('puId_ptD'):-1",float,doc=
"pT-weighted average pT of constituents (PileUp ID BDT input variable)", precision=14),
167 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),
168 puId_pull =
Var(
"?(pt>=10)?userFloat('puId_pull'):-1",float,doc=
"magnitude of pull vector (PileUp ID BDT input variable)", precision=14),
169 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),
170 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),
171 puId_nCharged =
Var(
"?(pt>=10)?userInt('puId_nCharged'):-1",
"int16",doc=
"number of charged constituents (PileUp ID BDT input variable)"),
174 qgl_axis2 =
Var(
"?(pt>=10)?userFloat('qgl_axis2'):-1",float,doc=
"ellipse minor jet axis (Quark vs Gluon likelihood input variable)", precision=14),
175 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),
176 qgl_mult =
Var(
"?(pt>=10)?userInt('qgl_mult'):-1",
"int16",doc=
"PF candidates multiplicity (Quark vs Gluon likelihood input variable)"),
179 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),
180 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),
181 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),
183 DEEPJETVARS = cms.PSet(
184 btagDeepFlavB =
Var(
"?(pt>=15)?bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb'):-1",float,doc=
"DeepJet b+bb+lepb tag discriminator",precision=10),
185 btagDeepFlavC =
Var(
"?(pt>=15)?bDiscriminator('pfDeepFlavourJetTags:probc'):-1",float,doc=
"DeepFlavour charm tag raw score",precision=10),
186 btagDeepFlavG =
Var(
"?(pt>=15)?bDiscriminator('pfDeepFlavourJetTags:probg'):-1",float,doc=
"DeepFlavour gluon tag raw score",precision=10),
187 btagDeepFlavUDS =
Var(
"?(pt>=15)?bDiscriminator('pfDeepFlavourJetTags:probuds'):-1",float,doc=
"DeepFlavour uds tag raw score",precision=10),
188 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),
189 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),
190 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),
192 ROBUSTPARTAK4VARS = cms.PSet(
193 btagRobustParTAK4B =
Var(
"?(pt>=15)?bDiscriminator('pfParticleTransformerAK4JetTags:probb')+bDiscriminator('pfParticleTransformerAK4JetTags:probbb')+bDiscriminator('pfParticleTransformerAK4JetTags:problepb'):-1",float,doc=
"RobustParTAK4 b+bb+lepb tag discriminator",precision=10),
194 btagRobustParTAK4C =
Var(
"?(pt>=15)?bDiscriminator('pfParticleTransformerAK4JetTags:probc'):-1",float,doc=
"RobustParTAK4 charm tag raw score",precision=10),
195 btagRobustParTAK4G =
Var(
"?(pt>=15)?bDiscriminator('pfParticleTransformerAK4JetTags:probg'):-1",float,doc=
"RobustParTAK4 gluon tag raw score",precision=10),
196 btagRobustParTAK4UDS =
Var(
"?(pt>=15)?bDiscriminator('pfParticleTransformerAK4JetTags:probuds'):-1",float,doc=
"RobustParTAK4 uds tag raw score",precision=10),
197 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),
198 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),
199 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),
201 PARTICLENETAK4VARS = cms.PSet(
202 particleNetAK4_B =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:BvsAll'):-1",float,doc=
"ParticleNetAK4 tagger b vs all (udsg, c) discriminator",precision=10),
203 particleNetAK4_CvsL =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:CvsL'):-1",float,doc=
"ParticleNetAK4 tagger c vs udsg discriminator",precision=10),
204 particleNetAK4_CvsB =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:CvsB'):-1",float,doc=
"ParticleNetAK4 tagger c vs b discriminator",precision=10),
205 particleNetAK4_QvsG =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4DiscriminatorsJetTags:QvsG'):-1",float,doc=
"ParticleNetAK4 tagger uds vs g discriminator",precision=10),
206 particleNetAK4_G =
Var(
"?(pt>=15)?bDiscriminator('pfParticleNetAK4JetTags:probg'):-1",float,doc=
"ParticleNetAK4 tagger g raw score",precision=10),
207 particleNetAK4_puIdDisc =
Var(
"?(pt>=15)?1-bDiscriminator('pfParticleNetAK4JetTags:probpu'):-1",float,doc=
"ParticleNetAK4 tagger pileup jet discriminator",precision=10),
210 CALOJETVARS = cms.PSet(P4Vars,
211 area = jetPuppiTable.variables.area,
212 rawFactor = jetPuppiTable.variables.rawFactor,
213 emf =
Var(
"emEnergyFraction()", float, doc =
"electromagnetic energy fraction", precision = 10),
224 def AddJetID(proc, jetName="", jetSrc="", jetTableName="", jetTaskName=""):
226 Setup modules to calculate PF jet ID 229 isPUPPIJet =
True if "PUPPI" in jetName.upper()
else False 231 looseJetId =
"looseJetId{}".
format(jetName)
232 setattr(proc, looseJetId, proc.looseJetId.clone(
234 filterParams = proc.looseJetId.filterParams.clone(
240 tightJetId =
"tightJetId{}".
format(jetName)
241 setattr(proc, tightJetId, proc.tightJetId.clone(
243 filterParams = proc.tightJetId.filterParams.clone(
244 version =
"RUN3WINTER22{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
249 tightJetIdLepVeto =
"tightJetIdLepVeto{}".
format(jetName)
250 setattr(proc, tightJetIdLepVeto, proc.tightJetIdLepVeto.clone(
252 filterParams = proc.tightJetIdLepVeto.filterParams.clone(
253 version =
"RUN3WINTER22{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
258 run3_jme_Winter22runsBCDEprompt.toModify(
259 getattr(proc, tightJetId).filterParams, version =
"RUN3WINTER22{}runsBCDEprompt".
format(
"PUPPI" if isPUPPIJet
else "CHS")
261 getattr(proc, tightJetIdLepVeto).filterParams, version =
"RUN3WINTER22{}runsBCDEprompt".
format(
"PUPPI" if isPUPPIJet
else "CHS")
264 (run2_jme_2017 | run2_jme_2018 | run3_nanoAOD_122 | run3_nanoAOD_124).toModify(
265 getattr(proc, tightJetId).filterParams, version =
"RUN2UL{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
267 getattr(proc, tightJetIdLepVeto).filterParams, version =
"RUN2UL{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
270 run2_jme_2016.toModify(
271 getattr(proc, tightJetId).filterParams, version =
"RUN2UL16{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
273 getattr(proc, tightJetIdLepVeto).filterParams, version =
"RUN2UL16{}".
format(
"PUPPI" if isPUPPIJet
else "CHS")
279 patJetWithUserData =
"{}WithUserData".
format(jetSrc)
280 getattr(proc, patJetWithUserData).userInts.tightId = cms.InputTag(tightJetId)
281 getattr(proc, patJetWithUserData).userInts.tightIdLepVeto = cms.InputTag(tightJetIdLepVeto)
286 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")
288 getattr(proc,jetTaskName).
add(getattr(proc, tightJetId))
289 getattr(proc,jetTaskName).
add(getattr(proc, tightJetIdLepVeto))
295 Setup modules to calculate pileup jet ID input variables for PF jet 301 puJetIdVarsCalculator =
"puJetIdCalculator{}".
format(jetName)
302 setattr(proc, puJetIdVarsCalculator, pileupJetIdCalculator.clone(
304 vertexes =
"offlineSlimmedPrimaryVertices",
305 inputIsCorrected =
True,
307 srcConstituentWeights =
"packedpuppi" if "PUPPI" in jetName.upper()
else "" 310 getattr(proc,jetTaskName).
add(getattr(proc, puJetIdVarsCalculator))
315 puJetIDVar =
"puJetIDVar{}".
format(jetName)
316 setattr(proc, puJetIDVar, cms.EDProducer(
"PileupJetIDVarProducer",
317 srcJet = cms.InputTag(jetSrc),
318 srcPileupJetId = cms.InputTag(puJetIdVarsCalculator)
321 getattr(proc,jetTaskName).
add(getattr(proc, puJetIDVar))
326 patJetWithUserData =
"{}WithUserData".
format(jetSrc)
327 getattr(proc,patJetWithUserData).userFloats.puId_dR2Mean = cms.InputTag(
"{}:dR2Mean".
format(puJetIDVar))
328 getattr(proc,patJetWithUserData).userFloats.puId_majW = cms.InputTag(
"{}:majW".
format(puJetIDVar))
329 getattr(proc,patJetWithUserData).userFloats.puId_minW = cms.InputTag(
"{}:minW".
format(puJetIDVar))
330 getattr(proc,patJetWithUserData).userFloats.puId_frac01 = cms.InputTag(
"{}:frac01".
format(puJetIDVar))
331 getattr(proc,patJetWithUserData).userFloats.puId_frac02 = cms.InputTag(
"{}:frac02".
format(puJetIDVar))
332 getattr(proc,patJetWithUserData).userFloats.puId_frac03 = cms.InputTag(
"{}:frac03".
format(puJetIDVar))
333 getattr(proc,patJetWithUserData).userFloats.puId_frac04 = cms.InputTag(
"{}:frac04".
format(puJetIDVar))
334 getattr(proc,patJetWithUserData).userFloats.puId_ptD = cms.InputTag(
"{}:ptD".
format(puJetIDVar))
335 getattr(proc,patJetWithUserData).userFloats.puId_beta = cms.InputTag(
"{}:beta".
format(puJetIDVar))
336 getattr(proc,patJetWithUserData).userFloats.puId_pull = cms.InputTag(
"{}:pull".
format(puJetIDVar))
337 getattr(proc,patJetWithUserData).userFloats.puId_jetR = cms.InputTag(
"{}:jetR".
format(puJetIDVar))
338 getattr(proc,patJetWithUserData).userFloats.puId_jetRchg = cms.InputTag(
"{}:jetRchg".
format(puJetIDVar))
339 getattr(proc,patJetWithUserData).userInts.puId_nCharged = cms.InputTag(
"{}:nCharged".
format(puJetIDVar))
344 getattr(proc,jetTableName).variables.puId_dR2Mean = PUIDVARS.puId_dR2Mean
345 getattr(proc,jetTableName).variables.puId_majW = PUIDVARS.puId_majW
346 getattr(proc,jetTableName).variables.puId_minW = PUIDVARS.puId_minW
347 getattr(proc,jetTableName).variables.puId_frac01 = PUIDVARS.puId_frac01
348 getattr(proc,jetTableName).variables.puId_frac02 = PUIDVARS.puId_frac02
349 getattr(proc,jetTableName).variables.puId_frac03 = PUIDVARS.puId_frac03
350 getattr(proc,jetTableName).variables.puId_frac04 = PUIDVARS.puId_frac04
351 getattr(proc,jetTableName).variables.puId_ptD = PUIDVARS.puId_ptD
352 getattr(proc,jetTableName).variables.puId_beta = PUIDVARS.puId_beta
353 getattr(proc,jetTableName).variables.puId_pull = PUIDVARS.puId_pull
354 getattr(proc,jetTableName).variables.puId_jetR = PUIDVARS.puId_jetR
355 getattr(proc,jetTableName).variables.puId_jetRchg = PUIDVARS.puId_jetRchg
356 getattr(proc,jetTableName).variables.puId_nCharged = PUIDVARS.puId_nCharged
360 def AddQGLTaggerVars(proc, jetName="", jetSrc="", jetTableName="", jetTaskName="", calculateQGLVars=False):
362 Schedule the QGTagger module to calculate input variables to the QG likelihood 365 isPUPPIJet =
True if "PUPPI" in jetName.upper()
else False 367 QGLTagger=
"qgtagger{}".
format(jetName)
368 patJetWithUserData=
"{}WithUserData".
format(jetSrc)
371 setattr(proc, QGLTagger, qgtagger.clone(
373 computeLikelihood =
False,
377 getattr(proc,QGLTagger).srcConstituentWeights = cms.InputTag(
"packedpuppi")
382 getattr(proc,patJetWithUserData).userFloats.qgl_axis2 = cms.InputTag(QGLTagger+
":axis2")
383 getattr(proc,patJetWithUserData).userFloats.qgl_ptD = cms.InputTag(QGLTagger+
":ptD")
384 getattr(proc,patJetWithUserData).userInts.qgl_mult = cms.InputTag(QGLTagger+
":mult")
389 getattr(proc,jetTableName).variables.qgl_axis2 = QGLVARS.qgl_axis2
390 getattr(proc,jetTableName).variables.qgl_ptD = QGLVARS.qgl_ptD
391 getattr(proc,jetTableName).variables.qgl_mult = QGLVARS.qgl_mult
394 getattr(proc,jetTaskName).
add(getattr(proc, QGLTagger))
400 Store b-tagging scores from various algortihm 403 getattr(proc, jetTableName).variables.btagDeepFlavB = DEEPJETVARS.btagDeepFlavB
404 getattr(proc, jetTableName).variables.btagDeepFlavCvL = DEEPJETVARS.btagDeepFlavCvL
405 getattr(proc, jetTableName).variables.btagDeepFlavCvB = DEEPJETVARS.btagDeepFlavCvB
407 run2_nanoAOD_ANY.toModify(
408 getattr(proc, jetTableName).variables,
409 btagCSVV2 =
Var(
"bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",float,doc=
" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",precision=10),
410 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),
411 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),
412 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)
419 Store DeepJet raw score in jetTable for gluon and light quark 422 getattr(proc, jetTableName).variables.btagDeepFlavG = DEEPJETVARS.btagDeepFlavG
423 getattr(proc, jetTableName).variables.btagDeepFlavUDS = DEEPJETVARS.btagDeepFlavUDS
424 getattr(proc, jetTableName).variables.btagDeepFlavQG = DEEPJETVARS.btagDeepFlavQG
430 Store RobustParTAK4 scores in jetTable 433 getattr(proc, jetTableName).variables.btagRobustParTAK4B = ROBUSTPARTAK4VARS.btagRobustParTAK4B
434 getattr(proc, jetTableName).variables.btagRobustParTAK4CvL = ROBUSTPARTAK4VARS.btagRobustParTAK4CvL
435 getattr(proc, jetTableName).variables.btagRobustParTAK4CvB = ROBUSTPARTAK4VARS.btagRobustParTAK4CvB
441 Store ParticleNetAK4 scores in jetTable 444 getattr(proc, jetTableName).variables.particleNetAK4_B = PARTICLENETAK4VARS.particleNetAK4_B
445 getattr(proc, jetTableName).variables.particleNetAK4_CvsL = PARTICLENETAK4VARS.particleNetAK4_CvsL
446 getattr(proc, jetTableName).variables.particleNetAK4_CvsB = PARTICLENETAK4VARS.particleNetAK4_CvsB
447 getattr(proc, jetTableName).variables.particleNetAK4_QvsG = PARTICLENETAK4VARS.particleNetAK4_QvsG
448 getattr(proc, jetTableName).variables.particleNetAK4_G = PARTICLENETAK4VARS.particleNetAK4_G
449 getattr(proc, jetTableName).variables.particleNetAK4_puIdDisc = PARTICLENETAK4VARS.particleNetAK4_puIdDisc
455 Add patJet into custom nanoAOD 458 jetName = recoJetInfo.jetUpper
459 payload = recoJetInfo.jetCorrPayload
460 doPF = recoJetInfo.doPF
461 doCalo = recoJetInfo.doCalo
462 patJetFinalColl = recoJetInfo.patJetFinalCollection
464 nanoInfoForJet = nanoInfo_recojets[recoJetInfo.jet]
465 jetTablePrefix = nanoInfoForJet[
"name"]
466 jetTableDoc = nanoInfoForJet[
"doc"]
467 ptcut = nanoInfoForJet[
"ptcut"]
if "ptcut" in nanoInfoForJet
else 8
468 doPUIDVar = nanoInfoForJet[
"doPUIDVar"]
if "doPUIDVar" in nanoInfoForJet
else False 469 doQGL = nanoInfoForJet[
"doQGL"]
if "doQGL" in nanoInfoForJet
else False 470 doBTag = nanoInfoForJet[
"doBTag"]
if "doBTag" in nanoInfoForJet
else False 473 jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF, doCalo,
474 ptcut=ptcut, doPUIDVar=doPUIDVar, doQGL=doQGL, doBTag=doBTag, runOnMC=runOnMC
479 def SavePatJets(proc, jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc,
480 doPF, doCalo, ptcut, doPUIDVar=False, doQGL=False, doBTag=False, runOnMC=False):
482 Schedule modules for a given patJet collection and save its variables into custom NanoAOD 488 jetCorrFactors =
"jetCorrFactorsNano{}".
format(jetName)
489 setattr(proc, jetCorrFactors, jetCorrFactorsNano.clone(
490 src = patJetFinalColl,
498 srcJets =
"updatedJets{}".
format(jetName)
499 setattr(proc, srcJets, updatedJets.clone(
500 jetSource = patJetFinalColl,
501 jetCorrFactorsSource = [jetCorrFactors],
508 srcJetsWithUserData =
"updatedJets{}WithUserData".
format(jetName)
509 setattr(proc, srcJetsWithUserData, cms.EDProducer(
"PATJetUserDataEmbedder",
510 src = cms.InputTag(srcJets),
511 userFloats = cms.PSet(),
512 userInts = cms.PSet(),
519 finalJetsCut =
"(pt >= {ptcut:.0f})".
format(ptcut=ptcut)
521 finalJetsCut =
"(pt >= {ptcut:.0f}) || ((pt < {ptcut:.0f}) && (genJetFwdRef().backRef().isNonnull()))".
format(ptcut=ptcut)
523 finalJetsForTable =
"finalJets{}".
format(jetName)
524 setattr(proc, finalJetsForTable, finalJets.clone(
525 src = srcJetsWithUserData,
533 tableContent = PFJETVARS
535 tableContent = CALOJETVARS
537 jetTableCutDefault =
"" 539 jetTableDocDefault = jetTableDoc +
" with JECs applied. Jets with pt >= {ptcut:.0f} GeV are stored.".
format(ptcut=ptcut)
541 jetTableDocDefault +=
"For jets with pt < {ptcut:.0f} GeV, only those matched to gen jets are stored.".
format(ptcut=ptcut)
544 jetTableDocDefault = jetTableDoc
546 jetTableName =
"jet{}Table".
format(jetName)
547 setattr(proc,jetTableName, simpleCandidateFlatTableProducer.clone(
548 src = cms.InputTag(finalJetsForTable),
549 cut = cms.string(jetTableCutDefault),
550 name = cms.string(jetTablePrefix),
551 doc = cms.string(jetTableDocDefault),
552 variables = cms.PSet(tableContent)
555 getattr(proc,jetTableName).variables.pt.precision=10
556 getattr(proc,jetTableName).variables.rawFactor.precision=10
561 jetMCTableName =
"jet{}MCTable".
format(jetName)
562 setattr(proc, jetMCTableName, simpleCandidateFlatTableProducer.clone(
563 src = cms.InputTag(finalJetsForTable),
564 cut = getattr(proc,jetTableName).cut,
565 name = cms.string(jetTablePrefix),
566 extension = cms.bool(
True),
567 variables = cms.PSet(
568 partonFlavour = PFJETVARS.partonFlavour,
569 hadronFlavour = PFJETVARS.hadronFlavour,
570 genJetIdx = PFJETVARS.genJetIdx,
578 jetTaskName =
"jet{}Task".
format(jetName)
579 setattr(proc, jetTaskName, cms.Task(
580 getattr(proc,jetCorrFactors),
581 getattr(proc,srcJets),
582 getattr(proc,srcJetsWithUserData),
583 getattr(proc,finalJetsForTable)
586 proc.nanoTableTaskCommon.add(getattr(proc,jetTaskName))
591 jetTableTaskName =
"jet{}TablesTask".
format(jetName)
592 setattr(proc, jetTableTaskName, cms.Task(getattr(proc,jetTableName)))
593 proc.nanoTableTaskCommon.add(getattr(proc,jetTableTaskName))
595 jetMCTableTaskName =
"jet{}MCTablesTask".
format(jetName)
596 setattr(proc, jetMCTableTaskName, cms.Task(getattr(proc,jetMCTableName)))
598 proc.nanoTableTaskFS.add(getattr(proc,jetMCTableTaskName))
604 proc =
AddJetID(proc, jetName=jetName, jetSrc=srcJets, jetTableName=jetTableName, jetTaskName=jetTaskName)
606 proc =
AddPileUpJetIDVars(proc, jetName=jetName, jetSrc=srcJets, jetTableName=jetTableName, jetTaskName=jetTaskName)
608 proc =
AddQGLTaggerVars(proc,jetName=jetName, jetSrc=srcJets, jetTableName=jetTableName, jetTaskName=jetTaskName, calculateQGLVars=
True)
625 Recluster AK4 Puppi jets and replace slimmedJetsPuppi 626 that is used as default to save AK4 Puppi jets in NanoAODs. 628 print(
"custom_jme_cff::ReclusterAK4PuppiJets: Recluster AK4 PF Puppi jets")
634 "jet" :
"ak4pfpuppi",
635 "inputCollection" :
"",
636 "genJetsCollection":
"AK4GenJetsNoNu",
637 "bTagDiscriminators": bTagDiscriminatorsForAK4,
640 recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
642 jetName = recoJetInfo.jetUpper
643 patJetFinalColl = recoJetInfo.patJetFinalCollection
648 run2_jme_2016.toModify(
649 proc.tightJetPuppiId.filterParams, version =
"RUN2UL16PUPPI" 651 proc.tightJetIdLepVeto.filterParams, version =
"RUN2UL16PUPPI" 658 proc.jetPuppiCorrFactorsNano.src=patJetFinalColl
659 proc.updatedJetsPuppi.jetSource=patJetFinalColl
664 finalJetsPuppiCut =
"" 666 finalJetsPuppiCut =
"(pt >= 8) || ((pt < 8) && (genJetFwdRef().backRef().isNonnull()))" 668 finalJetsPuppiCut =
"(pt >= 8)" 670 proc.finalJetsPuppi.cut = finalJetsPuppiCut
674 proc.corrT1METJetPuppiTable.cut =
"pt>=8 && pt<15 && abs(eta)<9.9" 680 run2_nanoAOD_ANY.toModify(
681 proc.jetTable, name =
"Jet" 686 src = cms.InputTag(
"finalJetsPuppi")
692 jetPuppiTableDoc =
"AK4 PF Puppi jets with JECs applied. Jets with pt >= 8 GeV are stored." 694 jetPuppiTableDoc +=
"For jets with pt < 8 GeV, only those matched to AK4 Gen jets are stored." 695 proc.jetPuppiTable.doc = jetPuppiTableDoc
697 proc.jetPuppiTable.variables.rawFactor.precision = 10
702 proc.jetPuppiTable.variables.chHadMultiplicity = PFJETVARS.chHadMultiplicity
703 proc.jetPuppiTable.variables.neHadMultiplicity = PFJETVARS.neHadMultiplicity
704 proc.jetPuppiTable.variables.hfHadMultiplicity = PFJETVARS.hfHadMultiplicity
705 proc.jetPuppiTable.variables.hfEMMultiplicity = PFJETVARS.hfEMMultiplicity
706 proc.jetPuppiTable.variables.muMultiplicity = PFJETVARS.muMultiplicity
707 proc.jetPuppiTable.variables.elMultiplicity = PFJETVARS.elMultiplicity
708 proc.jetPuppiTable.variables.phoMultiplicity = PFJETVARS.phoMultiplicity
716 jetSrc =
"updatedJetsPuppi",
717 jetTableName =
"jetPuppiTable",
718 jetTaskName =
"jetPuppiTask" 726 jetSrc =
"updatedJetsPuppi",
727 jetTableName =
"jetPuppiTable",
728 jetTaskName =
"jetPuppiTask",
729 calculateQGLVars=
True 734 proc.jetPuppiTable.variables.btagDeepFlavB = DEEPJETVARS.btagDeepFlavB
735 proc.jetPuppiTable.variables.btagDeepFlavCvL = DEEPJETVARS.btagDeepFlavCvL
736 proc.jetPuppiTable.variables.btagDeepFlavCvB = DEEPJETVARS.btagDeepFlavCvB
740 proc.jetPuppiTable.variables.btagDeepFlavG = DEEPJETVARS.btagDeepFlavG
741 proc.jetPuppiTable.variables.btagDeepFlavUDS = DEEPJETVARS.btagDeepFlavUDS
742 proc.jetPuppiTable.variables.btagDeepFlavQG = DEEPJETVARS.btagDeepFlavQG
746 proc.jetPuppiTable.variables.btagRobustParTAK4B = ROBUSTPARTAK4VARS.btagRobustParTAK4B
747 proc.jetPuppiTable.variables.btagRobustParTAK4CvL = ROBUSTPARTAK4VARS.btagRobustParTAK4CvL
748 proc.jetPuppiTable.variables.btagRobustParTAK4CvB = ROBUSTPARTAK4VARS.btagRobustParTAK4CvB
753 run2_nanoAOD_ANY.toReplaceWith(
754 proc.jetPuppiForMETTask,
755 proc.jetPuppiForMETTask.copyAndExclude([proc.corrT1METJetPuppiTable])
762 jetMCTableName =
"jet{}MCTable".
format(jetName)
763 setattr(proc, jetMCTableName, proc.jetMCTable.clone(
764 src = proc.jetPuppiTable.src,
765 name = proc.jetPuppiTable.name
768 getattr(proc,jetMCTableName).variables.genJetIdx = PFJETVARS.genJetIdx
770 jetMCTableTaskName =
"jet{}MCTablesTask".
format(jetName)
771 setattr(proc, jetMCTableTaskName, cms.Task(getattr(proc,jetMCTableName)))
773 run2_nanoAOD_ANY.toReplaceWith(
774 proc.nanoTableTaskFS,
775 proc.nanoTableTaskFS.copyAndAdd( getattr(proc,jetMCTableTaskName))
782 Recluster AK4 CHS jets and replace slimmedJets that is used as default to 783 save AK4 CHS jets in NanoAODs (for Run-2). 785 print(
"custom_jme_cff::ReclusterAK4CHSJets: Recluster AK4 PF CHS jets")
787 from RecoBTag.ONNXRuntime.pfParticleNetFromMiniAODAK4_cff
import _pfParticleNetFromMiniAODAK4CHSCentralJetTagsAll
788 from RecoBTag.ONNXRuntime.pfParticleNetFromMiniAODAK4_cff
import _pfParticleNetFromMiniAODAK4CHSForwardJetTagsAll
790 bTagDiscriminatorsForAK4CHS = cms.PSet(
791 foo = cms.vstring(_pfParticleNetFromMiniAODAK4CHSCentralJetTagsAll+_pfParticleNetFromMiniAODAK4CHSForwardJetTagsAll)
793 bTagDiscriminatorsForAK4CHS = bTagDiscriminatorsForAK4CHS.foo.value()
800 "inputCollection" :
"",
801 "genJetsCollection":
"AK4GenJetsNoNu",
802 "bTagDiscriminators": bTagDiscriminatorsForAK4CHS,
805 recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
807 jetName = recoJetInfo.jetUpper
808 patJetFinalColl = recoJetInfo.patJetFinalCollection
814 proc.jetCorrFactorsNano.src=patJetFinalColl
815 proc.updatedJets.jetSource=patJetFinalColl
822 finalJetsCut =
"(pt >= 10) || ((pt < 10) && (genJetFwdRef().backRef().isNonnull()))" 824 finalJetsCut =
"(pt >= 10)" 826 proc.finalJets.cut = finalJetsCut
830 proc.corrT1METJetTable.cut =
"pt>=10 && pt<15 && abs(eta)<9.9" 836 proc.jetTable.src = cms.InputTag(
"finalJets")
837 proc.jetTable.cut = jetTableCut
838 proc.jetMCTable.cut = jetTableCut
839 proc.jetTable.name =
"JetCHS" 844 run2_nanoAOD_ANY.toModify(
846 src = cms.InputTag(
"linkedObjects",
"jets"),
853 jetTableDoc =
"AK4 PF CHS jets with JECs applied. Jets with pt >= 10 GeV are stored." 855 jetTableDoc +=
"For jets with pt < 10 GeV, only those matched to AK4 Gen jets are stored." 856 proc.jetTable.doc = jetTableDoc
858 proc.jetTable.variables.rawFactor.precision = 10
863 proc.jetTable.variables.chHadMultiplicity = PFJETVARS.chHadMultiplicity
864 proc.jetTable.variables.neHadMultiplicity = PFJETVARS.neHadMultiplicity
865 proc.jetTable.variables.hfHadMultiplicity = PFJETVARS.hfHadMultiplicity
866 proc.jetTable.variables.hfEMMultiplicity = PFJETVARS.hfEMMultiplicity
867 proc.jetTable.variables.muMultiplicity = PFJETVARS.muMultiplicity
868 proc.jetTable.variables.elMultiplicity = PFJETVARS.elMultiplicity
869 proc.jetTable.variables.phoMultiplicity = PFJETVARS.phoMultiplicity
874 proc.updatedJetsWithUserData.userFloats.chFPV1EF = cms.InputTag(
"jercVars:chargedFromPV1EnergyFraction")
875 proc.updatedJetsWithUserData.userFloats.chFPV2EF = cms.InputTag(
"jercVars:chargedFromPV2EnergyFraction")
876 proc.updatedJetsWithUserData.userFloats.chFPV3EF = cms.InputTag(
"jercVars:chargedFromPV3EnergyFraction")
877 proc.jetTable.variables.chFPV1EF =
Var(
"userFloat('chFPV1EF')", float, doc=
"charged fromPV==1 Energy Fraction (component of the total charged Energy Fraction).", precision= 6)
878 proc.jetTable.variables.chFPV2EF =
Var(
"userFloat('chFPV2EF')", float, doc=
"charged fromPV==2 Energy Fraction (component of the total charged Energy Fraction).", precision= 6)
879 proc.jetTable.variables.chFPV3EF =
Var(
"userFloat('chFPV3EF')", float, doc=
"charged fromPV==3 Energy Fraction (component of the total charged Energy Fraction).", precision= 6)
885 for varNames
in proc.jetTable.variables.parameterNames_():
886 if "btagDeepFlav" in varNames
or "btagRobustParT" in varNames:
887 delattr(proc.jetTable.variables, varNames)
889 proc.jetTable.variables.btagPNetB =
Var(
"?pt>15 && bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:BvsAll')>0?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:BvsAll'):-1",float,precision=10,doc=
"ParticleNet b vs. udscg")
890 proc.jetTable.variables.btagPNetCvL =
Var(
"?pt>15 && bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:CvsL')>0?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:CvsL'):-1",float,precision=10,doc=
"ParticleNet c vs. udsg")
891 proc.jetTable.variables.btagPNetCvB =
Var(
"?pt>15 && bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:CvsB')>0?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:CvsB'):-1",float,precision=10,doc=
"ParticleNet c vs. b")
892 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")
893 proc.jetTable.variables.btagPNetTauVJet =
Var(
"?pt>15 && bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:TauVsJet')>0?bDiscriminator('pfParticleNetFromMiniAODAK4CHSCentralDiscriminatorsJetTags:TauVsJet'):-1",float,precision=10,doc=
"ParticleNet tau vs. jet")
894 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")
895 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.")
896 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")
901 hfJetShowerShapeforCustomNanoAOD =
"hfJetShowerShapeforCustomNanoAOD" 902 setattr(proc, hfJetShowerShapeforCustomNanoAOD, hfJetShowerShape.clone(jets=
"updatedJets", vertices=
"offlineSlimmedPrimaryVertices") )
903 proc.jetUserDataTask.add(getattr(proc, hfJetShowerShapeforCustomNanoAOD))
904 proc.updatedJetsWithUserData.userFloats.hfsigmaEtaEta = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:sigmaEtaEta')
905 proc.updatedJetsWithUserData.userFloats.hfsigmaPhiPhi = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:sigmaPhiPhi')
906 proc.updatedJetsWithUserData.userInts.hfcentralEtaStripSize = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:centralEtaStripSize')
907 proc.updatedJetsWithUserData.userInts.hfadjacentEtaStripsSize = cms.InputTag(
'hfJetShowerShapeforCustomNanoAOD:adjacentEtaStripsSize')
908 proc.jetTable.variables.hfsigmaEtaEta =
Var(
"userFloat('hfsigmaEtaEta')",float,doc=
"sigmaEtaEta for HF jets (noise discriminating variable)",precision=10)
909 proc.jetTable.variables.hfsigmaPhiPhi =
Var(
"userFloat('hfsigmaPhiPhi')",float,doc=
"sigmaPhiPhi for HF jets (noise discriminating variable)",precision=10)
910 proc.jetTable.variables.hfcentralEtaStripSize =
Var(
"userInt('hfcentralEtaStripSize')", int, doc=
"eta size of the central tower strip in HF (noise discriminating variable) ")
911 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) ")
917 (~run2_nanoAOD_ANY).toReplaceWith(
918 proc.jetUserDataTask,
919 proc.jetUserDataTask.copyAndExclude([proc.bJetVars])
922 proc.jetTablesTask.copyAndExclude([proc.bjetNN, proc.cjetNN])
923 ).toModify(proc.updatedJetsWithUserData.userFloats,
925 leptonPtRelv0 =
None,
926 leptonPtRelInvv0 =
None,
934 proc.updatedJetsWithUserData.userInts,
938 proc.jetTable, externalVariables = cms.PSet()
944 proc.jetForMETTask.copyAndExclude([proc.corrT1METJetTable])
951 jetMCTableName =
"jet{}MCTable".
format(jetName)
952 setattr(proc, jetMCTableName, proc.jetMCTable.clone(
953 src = proc.jetTable.src,
954 name = proc.jetTable.name
957 getattr(proc,jetMCTableName).variables.genJetIdx = PFJETVARS.genJetIdx
959 jetMCTableTaskName =
"jet{}MCTablesTask".
format(jetName)
960 setattr(proc, jetMCTableTaskName, cms.Task(getattr(proc,jetMCTableName)))
962 (~run2_nanoAOD_ANY).toReplaceWith(
963 proc.nanoTableTaskFS,
964 proc.nanoTableTaskFS.copyAndAdd(getattr(proc,jetMCTableTaskName))
971 Store a separate AK8 Puppi jet collection for JEC studies. 972 Only minimal info are stored 974 print(
"custom_jme_cff::AddNewAK8PuppiJetsForJEC: Make a new AK8 PF Puppi jet collection for JEC studies")
980 "jet" :
"ak8pfpuppi",
981 "inputCollection" :
"",
982 "genJetsCollection":
"AK8GenJetsNoNu",
985 recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
987 jetName = recoJetInfo.jetUpper
988 payload = recoJetInfo.jetCorrPayload
990 patJetFinalColl = recoJetInfo.patJetFinalCollection
991 jetTablePrefix =
"FatJetForJEC" 992 jetTableDoc =
"AK8 PF Puppi jets with JECs applied. Reclustered for JEC studies so only minimal info stored." 996 jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF=
True,
997 doCalo=
False, ptcut=ptcut, doPUIDVar=
False, doQGL=
False, doBTag=
False, runOnMC=runOnMC
1004 Store an AK8 CHS jet collection for JEC studies. 1006 print(
"custom_jme_cff::AddNewAK8CHSJets: Make a new AK8 PF CHS jet collection for JEC studies")
1013 "inputCollection" :
"",
1014 "genJetsCollection":
"AK8GenJetsNoNu",
1015 "minPtFastjet" : 0.,
1017 recoJetInfo = recoJA.addRecoJetCollection(proc, **cfg)
1019 jetName = recoJetInfo.jetUpper
1020 payload = recoJetInfo.jetCorrPayload
1022 patJetFinalColl = recoJetInfo.patJetFinalCollection
1023 jetTablePrefix =
"FatJetCHS" 1024 jetTableDoc =
"AK8 PF CHS jets with JECs applied. Reclustered for JEC studies so only minimal info stored." 1028 jetName, payload, patJetFinalColl, jetTablePrefix, jetTableDoc, doPF=
True,
1029 doCalo=
False, ptcut=ptcut, doPUIDVar=
False, doQGL=
False, doBTag=
False, runOnMC=runOnMC
1036 Add more variables for AK8 PFPUPPI jets 1039 proc.fatJetTable.variables.rawFactor.precision = 10
1045 proc.fatJetTable.variables.chHEF =
Var(
"?isPFJet()?chargedHadronEnergyFraction():-1", float, doc=
"charged Hadron Energy Fraction", precision = 6)
1046 proc.fatJetTable.variables.neHEF =
Var(
"?isPFJet()?neutralHadronEnergyFraction():-1", float, doc=
"neutral Hadron Energy Fraction", precision = 6)
1047 proc.fatJetTable.variables.chEmEF =
Var(
"?isPFJet()?chargedEmEnergyFraction():-1", float, doc=
"charged Electromagnetic Energy Fraction", precision = 6)
1048 proc.fatJetTable.variables.neEmEF =
Var(
"?isPFJet()?neutralEmEnergyFraction():-1", float, doc=
"neutral Electromagnetic Energy Fraction", precision = 6)
1049 proc.fatJetTable.variables.muEF =
Var(
"?isPFJet()?muonEnergyFraction():-1", float, doc=
"muon Energy Fraction", precision = 6)
1050 proc.fatJetTable.variables.hfHEF =
Var(
"?isPFJet()?HFHadronEnergyFraction():-1", float, doc=
"energy fraction in forward hadronic calorimeter", precision = 6)
1051 proc.fatJetTable.variables.hfEmEF =
Var(
"?isPFJet()?HFEMEnergyFraction():-1", float, doc=
"energy fraction in forward EM calorimeter", precision = 6)
1052 proc.fatJetTable.variables.chHadMultiplicity =
Var(
"?isPFJet()?chargedHadronMultiplicity():-1",
"int16", doc=
"(Puppi-weighted) number of charged hadrons in the jet")
1053 proc.fatJetTable.variables.neHadMultiplicity =
Var(
"?isPFJet()?neutralHadronMultiplicity():-1",
"int16", doc=
"(Puppi-weighted) number of neutral hadrons in the jet")
1054 proc.fatJetTable.variables.hfHadMultiplicity =
Var(
"?isPFJet()?HFHadronMultiplicity():-1",
"int16", doc=
"(Puppi-weighted) number of HF Hadrons in the jet")
1055 proc.fatJetTable.variables.hfEMMultiplicity =
Var(
"?isPFJet()?HFEMMultiplicity():-1",
"int16", doc=
"(Puppi-weighted) number of HF EMs in the jet")
1056 proc.fatJetTable.variables.muMultiplicity =
Var(
"?isPFJet()?muonMultiplicity():-1",
"int16", doc=
"(Puppi-weighted) number of muons in the jet")
1057 proc.fatJetTable.variables.elMultiplicity =
Var(
"?isPFJet()?electronMultiplicity():-1",
"int16", doc=
"(Puppi-weighted) number of electrons in the jet")
1058 proc.fatJetTable.variables.phoMultiplicity =
Var(
"?isPFJet()?photonMultiplicity():-1",
"int16", doc=
"(Puppi-weighted) number of photons in the jet")
1070 Add genJet into custom nanoAOD 1073 genJetName = genJetInfo.jetUpper
1074 genJetAlgo = genJetInfo.jetAlgo
1075 genJetSize = genJetInfo.jetSize
1076 genJetSizeNr = genJetInfo.jetSizeNr
1077 genJetFinalColl =
"{}{}{}".
format(genJetAlgo.upper(), genJetSize,
"GenJetsNoNu")
1078 genJetTablePrefix = nanoInfo_genjets[genJetInfo.jet][
"name"]
1079 genJetTableDoc = nanoInfo_genjets[genJetInfo.jet][
"doc"]
1081 SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=
False)
1085 def SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=False):
1087 Schedule modules for a given genJet collection and save its variables into custom NanoAOD 1090 genJetTableName =
"jet{}Table".
format(genJetName)
1091 setattr(proc, genJetTableName, genJetTable.clone(
1092 src = genJetFinalColl,
1094 name = genJetTablePrefix,
1095 doc = genJetTableDoc,
1096 variables = GENJETVARS
1100 genJetFlavourAssociationName =
"genJet{}FlavourAssociation".
format(genJetName)
1101 setattr(proc, genJetFlavourAssociationName, genJetFlavourAssociation.clone(
1102 jets = getattr(proc,genJetTableName).src,
1103 jetAlgorithm = supportedJetAlgos[genJetAlgo],
1104 rParam = genJetSizeNr,
1108 genJetFlavourTableName =
"genJet{}FlavourTable".
format(genJetName)
1109 setattr(proc, genJetFlavourTableName, genJetFlavourTable.clone(
1110 name = getattr(proc,genJetTableName).name,
1111 src = getattr(proc,genJetTableName).src,
1112 cut = getattr(proc,genJetTableName).cut,
1113 jetFlavourInfos = genJetFlavourAssociationName,
1117 genJetTaskName =
"genJet{}Task".
format(genJetName)
1118 setattr(proc, genJetTaskName, cms.Task(
1119 getattr(proc,genJetTableName),
1120 getattr(proc,genJetFlavourAssociationName),
1121 getattr(proc,genJetFlavourTableName)
1124 proc.jetMCTask.add(getattr(proc,genJetTaskName))
1130 Recluster AK4 Gen jets and replace 1131 slimmedGenJets that is used as default 1132 to save AK4 Gen jets in NanoAODs. 1134 print(
"custom_jme_cff::ReclusterAK4GenJets: Recluster AK4 Gen jets")
1143 genJetInfo = genJA.addGenJetCollection(proc, **cfg)
1145 genJetName = genJetInfo.jetUpper
1146 genJetAlgo = genJetInfo.jetAlgo
1147 genJetSize = genJetInfo.jetSize
1148 genJetSizeNr = genJetInfo.jetSizeNr
1149 selectedGenJets =
"{}{}{}".
format(genJetAlgo.upper(), genJetSize,
"GenJetsNoNu")
1155 proc.genJetTable.src = selectedGenJets
1156 proc.genJetTable.cut =
"" 1157 proc.genJetTable.doc =
"AK4 Gen jets (made with visible genparticles) with pt > 5 GeV" 1159 genJetFlavourAssociationName =
"genJet{}FlavourAssociation".
format(genJetName)
1160 setattr(proc, genJetFlavourAssociationName, genJetFlavourAssociation.clone(
1161 jets = proc.genJetTable.src,
1162 jetAlgorithm = supportedJetAlgos[genJetAlgo],
1163 rParam = genJetSizeNr,
1166 proc.jetMCTask.add(getattr(proc, genJetFlavourAssociationName))
1171 Make a separate AK8 Gen jet collection for JEC studies. 1173 print(
"custom_jme_cff::AddNewAK8GenJetsForJEC: Add new AK8 Gen jets for JEC studies")
1180 "minPtFastjet" : 10.
1182 genJetInfo = genJA.addGenJetCollection(proc, **cfg)
1184 genJetName = genJetInfo.jetUpper
1185 genJetAlgo = genJetInfo.jetAlgo
1186 genJetSize = genJetInfo.jetSize
1187 genJetSizeNr = genJetInfo.jetSizeNr
1188 genJetFinalColl =
"{}{}{}".
format(genJetAlgo.upper(), genJetSize,
"GenJetsNoNu")
1189 genJetTablePrefix =
"GenJetAK8ForJEC" 1190 genJetTableDoc =
"AK8 Gen jets (made with visible genparticles) with pt > 10 GeV. Reclustered for JEC studies." 1192 SaveGenJets(proc, genJetName, genJetAlgo, genJetSizeNr, genJetFinalColl, genJetTablePrefix, genJetTableDoc, runOnMC=
False)
1197 proc.genJetTable.variables.nConstituents = GENJETVARS.nConstituents
1201 proc.genJetAK8Table.variables.nConstituents = GENJETVARS.nConstituents
1207 proc.jetMCTable.variables.genJetIdx = PFJETVARS.genJetIdx
1217 Remove default pt cuts for all jets set in jets_cff.py 1220 proc.finalJets.cut =
"" 1221 proc.finalJetsPuppi.cut =
"" 1222 proc.finalJetsAK8.cut =
"" 1223 proc.genJetTable.cut =
"" 1224 proc.genJetFlavourTable.cut =
"" 1225 proc.genJetAK8Table.cut =
"" 1226 proc.genJetAK8FlavourTable.cut =
"" 1247 genJA = GenJetAdder()
1269 for jetConfig
in config_genjets:
1270 cfg = { k : v
for k, v
in jetConfig.items()
if k !=
"enabled"}
1271 genJetInfo = genJA.addGenJetCollection(process, **cfg)
1279 recoJA = RecoJetAdder(runOnMC=runOnMC)
1299 for jetConfig
in config_recojets:
1300 cfg = { k : v
for k, v
in jetConfig.items()
if k !=
"enabled"}
1301 recoJetInfo = recoJA.addRecoJetCollection(process, **cfg)
1309 def addAK4JetTasks(proc, addAK4CHSJetTasks, addAK4PuppiJetTasks):
1310 if addAK4CHSJetTasks:
1311 proc.nanoTableTaskCommon.add(proc.jetTask)
1312 proc.nanoTableTaskCommon.add(proc.jetTablesTask)
1313 proc.nanoTableTaskCommon.add(proc.jetForMETTask)
1314 if addAK4PuppiJetTasks:
1315 proc.nanoTableTaskCommon.add(proc.jetPuppiTask)
1316 proc.nanoTableTaskCommon.add(proc.jetPuppiTablesTask)
1317 proc.nanoTableTaskCommon.add(proc.jetPuppiForMETTask)
1320 jmeNano_addAK4JetTasks_switch = cms.PSet(
1321 jmeNano_addAK4CHS_switch = cms.untracked.bool(
True),
1322 jmeNano_addAK4Puppi_switch = cms.untracked.bool(
False)
1324 run2_nanoAOD_ANY.toModify(jmeNano_addAK4JetTasks_switch,
1325 jmeNano_addAK4CHS_switch =
False,
1326 jmeNano_addAK4Puppi_switch =
True 1328 process = addAK4JetTasks(process,
1329 addAK4CHSJetTasks = jmeNano_addAK4JetTasks_switch.jmeNano_addAK4CHS_switch,
1330 addAK4PuppiJetTasks = jmeNano_addAK4JetTasks_switch.jmeNano_addAK4Puppi_switch,
1337 process.puTable.savePtHatMax =
True 1343 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 ModifyAK4JetMCTable(proc)
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)