CMS 3D CMS Logo

jets_cff.py
Go to the documentation of this file.
1 import FWCore.ParameterSet.Config as cms
2 from Configuration.Eras.Modifier_run2_jme_2016_cff import run2_jme_2016
3 from Configuration.Eras.Modifier_run2_jme_2017_cff import run2_jme_2017
4 from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy
5 from Configuration.Eras.Modifier_run2_nanoAOD_94X2016_cff import run2_nanoAOD_94X2016
6 from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv1_cff import run2_nanoAOD_94XMiniAODv1
7 from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv2_cff import run2_nanoAOD_94XMiniAODv2
8 from Configuration.Eras.Modifier_run2_nanoAOD_102Xv1_cff import run2_nanoAOD_102Xv1
9 from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff import run2_nanoAOD_106Xv1
10 from Configuration.Eras.Modifier_run2_miniAOD_devel_cff import run2_miniAOD_devel
11 from Configuration.ProcessModifiers.run2_miniAOD_UL_cff import run2_miniAOD_UL
12 
15 
16 
17 ##################### User floats producers, selectors ##########################
18 from RecoJets.JetProducers.ak4PFJets_cfi import ak4PFJets
19 
20 chsForSATkJets = cms.EDFilter("CandPtrSelector", src = cms.InputTag("packedPFCandidates"), cut = cms.string('charge()!=0 && pvAssociationQuality()>=5 && vertexRef().key()==0'))
21 softActivityJets = ak4PFJets.clone(src = 'chsForSATkJets', doAreaFastjet = False, jetPtMin=1)
22 softActivityJets10 = cms.EDFilter("CandPtrSelector", src = cms.InputTag("softActivityJets"), cut = cms.string('pt>10'))
23 softActivityJets5 = cms.EDFilter("CandPtrSelector", src = cms.InputTag("softActivityJets"), cut = cms.string('pt>5'))
24 softActivityJets2 = cms.EDFilter("CandPtrSelector", src = cms.InputTag("softActivityJets"), cut = cms.string('pt>2'))
25 
27 # Note: Safe to always add 'L2L3Residual' as MC contains dummy L2L3Residual corrections (always set to 1)
28 # (cf. https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookJetEnergyCorrections#CMSSW_7_6_4_and_above )
29 jetCorrFactorsNano = patJetCorrFactors.clone(src='slimmedJets',
30  levels = cms.vstring('L1FastJet',
31  'L2Relative',
32  'L3Absolute',
33  'L2L3Residual'),
34  primaryVertices = cms.InputTag("offlineSlimmedPrimaryVertices"),
35 )
36 jetCorrFactorsAK8 = patJetCorrFactors.clone(src='slimmedJetsAK8',
37  levels = cms.vstring('L1FastJet',
38  'L2Relative',
39  'L3Absolute',
40  'L2L3Residual'),
41  payload = cms.string('AK8PFPuppi'),
42  primaryVertices = cms.InputTag("offlineSlimmedPrimaryVertices"),
43 )
44 run2_miniAOD_80XLegacy.toModify(jetCorrFactorsAK8, payload = cms.string('AK8PFchs')) # ak8PFJetsCHS in 2016 80X miniAOD
45 
47 
48 updatedJets = updatedPatJets.clone(
49  addBTagInfo=False,
50  jetSource='slimmedJets',
51  jetCorrFactorsSource=cms.VInputTag(cms.InputTag("jetCorrFactorsNano") ),
52 )
53 
54 updatedJetsAK8 = updatedPatJets.clone(
55  addBTagInfo=False,
56  jetSource='slimmedJetsAK8',
57  jetCorrFactorsSource=cms.VInputTag(cms.InputTag("jetCorrFactorsAK8") ),
58 )
59 
60 
61 looseJetId = cms.EDProducer("PatJetIDValueMapProducer",
62  filterParams=cms.PSet(
63  version = cms.string('WINTER16'),
64  quality = cms.string('LOOSE'),
65  ),
66  src = cms.InputTag("updatedJets")
67 )
68 tightJetId = cms.EDProducer("PatJetIDValueMapProducer",
69  filterParams=cms.PSet(
70  version = cms.string('SUMMER18'),
71  quality = cms.string('TIGHT'),
72  ),
73  src = cms.InputTag("updatedJets")
74 )
75 tightJetIdLepVeto = cms.EDProducer("PatJetIDValueMapProducer",
76  filterParams=cms.PSet(
77  version = cms.string('SUMMER18'),
78  quality = cms.string('TIGHTLEPVETO'),
79  ),
80  src = cms.InputTag("updatedJets")
81 )
82 run2_jme_2016.toModify( tightJetId.filterParams, version = "WINTER16" )
83 run2_jme_2016.toModify( tightJetIdLepVeto.filterParams, version = "WINTER16" )
84 run2_jme_2017.toModify( tightJetId.filterParams, version = "WINTER17" )
85 run2_jme_2017.toModify( tightJetIdLepVeto.filterParams, version = "WINTER17" )
86 for modifier in run2_nanoAOD_106Xv1, run2_miniAOD_devel:
87  modifier.toModify( tightJetId.filterParams, version = "RUN2ULCHS" )
88  modifier.toModify( tightJetIdLepVeto.filterParams, version = "RUN2ULCHS" )
89 
90 
91 looseJetIdAK8 = cms.EDProducer("PatJetIDValueMapProducer",
92  filterParams=cms.PSet(
93  version = cms.string('WINTER16'),
94  quality = cms.string('LOOSE'),
95  ),
96  src = cms.InputTag("updatedJetsAK8")
97 )
98 tightJetIdAK8 = cms.EDProducer("PatJetIDValueMapProducer",
99  filterParams=cms.PSet(
100  version = cms.string('SUMMER18PUPPI'),
101  quality = cms.string('TIGHT'),
102  ),
103  src = cms.InputTag("updatedJetsAK8")
104 )
105 tightJetIdLepVetoAK8 = cms.EDProducer("PatJetIDValueMapProducer",
106  filterParams=cms.PSet(
107  version = cms.string('SUMMER18PUPPI'),
108  quality = cms.string('TIGHTLEPVETO'),
109  ),
110  src = cms.InputTag("updatedJetsAK8")
111 )
112 run2_jme_2016.toModify( tightJetIdAK8.filterParams, version = "WINTER16" )
113 run2_jme_2016.toModify( tightJetIdLepVetoAK8.filterParams, version = "WINTER16" )
114 run2_jme_2017.toModify( tightJetIdAK8.filterParams, version = "WINTER17PUPPI" )
115 run2_jme_2017.toModify( tightJetIdLepVetoAK8.filterParams, version = "WINTER17PUPPI" )
116 for modifier in run2_nanoAOD_106Xv1, run2_miniAOD_devel:
117  modifier.toModify( tightJetIdAK8.filterParams, version = "RUN2ULPUPPI" )
118  modifier.toModify( tightJetIdLepVetoAK8.filterParams, version = "RUN2ULPUPPI" )
119 
120 
121 bJetVars = cms.EDProducer("JetRegressionVarProducer",
122  pvsrc = cms.InputTag("offlineSlimmedPrimaryVertices"),
123  src = cms.InputTag("updatedJets"),
124  svsrc = cms.InputTag("slimmedSecondaryVertices"),
125  gpsrc = cms.InputTag("prunedGenParticles"),
126  #musrc = cms.InputTag("slimmedMuons"),
127  #elesrc = cms.InputTag("slimmedElectrons")
128 )
129 
130 jercVars = cms.EDProducer("BetaStarPackedCandidateVarProducer",
131  srcJet = cms.InputTag("updatedJets"),
132  srcPF = cms.InputTag("packedPFCandidates"),
133  maxDR = cms.double(0.4)
134 )
135 
136 updatedJetsWithUserData = cms.EDProducer("PATJetUserDataEmbedder",
137  src = cms.InputTag("updatedJets"),
138  userFloats = cms.PSet(
139  leadTrackPt = cms.InputTag("bJetVars:leadTrackPt"),
140  leptonPtRel = cms.InputTag("bJetVars:leptonPtRel"),
141  leptonPtRatio = cms.InputTag("bJetVars:leptonPtRatio"),
142  leptonPtRelInv = cms.InputTag("bJetVars:leptonPtRelInv"),
143  leptonPtRelv0 = cms.InputTag("bJetVars:leptonPtRelv0"),
144  leptonPtRatiov0 = cms.InputTag("bJetVars:leptonPtRatiov0"),
145  leptonPtRelInvv0 = cms.InputTag("bJetVars:leptonPtRelInvv0"),
146  leptonDeltaR = cms.InputTag("bJetVars:leptonDeltaR"),
147  leptonPt = cms.InputTag("bJetVars:leptonPt"),
148  vtxPt = cms.InputTag("bJetVars:vtxPt"),
149  vtxMass = cms.InputTag("bJetVars:vtxMass"),
150  vtx3dL = cms.InputTag("bJetVars:vtx3dL"),
151  vtx3deL = cms.InputTag("bJetVars:vtx3deL"),
152  ptD = cms.InputTag("bJetVars:ptD"),
153  genPtwNu = cms.InputTag("bJetVars:genPtwNu"),
154  qgl = cms.InputTag('qgtagger:qgLikelihood'),
155  puId94XDisc = cms.InputTag('pileupJetId94X:fullDiscriminant'),
156  puId102XDisc = cms.InputTag('pileupJetId102X:fullDiscriminant'),
157  puId106XUL17Disc = cms.InputTag('pileupJetId106XUL17:fullDiscriminant'),
158  chFPV0EF = cms.InputTag("jercVars:chargedFromPV0EnergyFraction"),
159  chFPV1EF = cms.InputTag("jercVars:chargedFromPV1EnergyFraction"),
160  chFPV2EF = cms.InputTag("jercVars:chargedFromPV2EnergyFraction"),
161  chFPV3EF = cms.InputTag("jercVars:chargedFromPV3EnergyFraction"),
162  ),
163  userInts = cms.PSet(
164  tightId = cms.InputTag("tightJetId"),
165  tightIdLepVeto = cms.InputTag("tightJetIdLepVeto"),
166  vtxNtrk = cms.InputTag("bJetVars:vtxNtrk"),
167  leptonPdgId = cms.InputTag("bJetVars:leptonPdgId"),
168  puId106XUL17Id = cms.InputTag('pileupJetId106XUL17:fullId'),
169  ),
170 )
171 run2_jme_2016.toModify(updatedJetsWithUserData.userInts,
172  looseId = cms.InputTag("looseJetId"),
173 )
174 
175 updatedJetsAK8WithUserData = cms.EDProducer("PATJetUserDataEmbedder",
176  src = cms.InputTag("updatedJetsAK8"),
177  userInts = cms.PSet(
178  tightId = cms.InputTag("tightJetIdAK8"),
179  tightIdLepVeto = cms.InputTag("tightJetIdLepVetoAK8"),
180  ),
181 )
182 run2_jme_2016.toModify(updatedJetsAK8WithUserData.userInts,
183  looseId = cms.InputTag("looseJetIdAK8"),
184 )
185 
186 
187 finalJets = cms.EDFilter("PATJetRefSelector",
188  src = cms.InputTag("updatedJetsWithUserData"),
189  cut = cms.string("pt > 15")
190 )
191 
192 finalJetsAK8 = cms.EDFilter("PATJetRefSelector",
193  src = cms.InputTag("updatedJetsAK8WithUserData"),
194  cut = cms.string("pt > 170")
195 )
196 
197 lepInJetVars = cms.EDProducer("LepInJetProducer",
198  src = cms.InputTag("updatedJetsAK8WithUserData"),
199  srcEle = cms.InputTag("finalElectrons"),
200  srcMu = cms.InputTag("finalMuons")
201 )
202 
203 
204 
205 ##################### Tables for final output and docs ##########################
206 
207 
208 
209 jetTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
210  src = cms.InputTag("linkedObjects","jets"),
211  cut = cms.string(""), #we should not filter on cross linked collections
212  name = cms.string("Jet"),
213  doc = cms.string("slimmedJets, i.e. ak4 PFJets CHS with JECs applied, after basic selection (" + finalJets.cut.value()+")"),
214  singleton = cms.bool(False), # the number of entries is variable
215  extension = cms.bool(False), # this is the main table for the jets
216  externalVariables = cms.PSet(
217  bRegCorr = ExtVar(cms.InputTag("bjetNN:corr"),float, doc="pt correction for b-jet energy regression",precision=10),
218  bRegRes = ExtVar(cms.InputTag("bjetNN:res"),float, doc="res on pt corrected with b-jet regression",precision=6),
219  cRegCorr = ExtVar(cms.InputTag("cjetNN:corr"),float, doc="pt correction for c-jet energy regression",precision=10),
220  cRegRes = ExtVar(cms.InputTag("cjetNN:res"),float, doc="res on pt corrected with c-jet regression",precision=6),
221  ),
222  variables = cms.PSet(P4Vars,
223  area = Var("jetArea()", float, doc="jet catchment area, for JECs",precision=10),
224  nMuons = Var("?hasOverlaps('muons')?overlaps('muons').size():0", int, doc="number of muons in the jet"),
225  muonIdx1 = Var("?overlaps('muons').size()>0?overlaps('muons')[0].key():-1", int, doc="index of first matching muon"),
226  muonIdx2 = Var("?overlaps('muons').size()>1?overlaps('muons')[1].key():-1", int, doc="index of second matching muon"),
227  electronIdx1 = Var("?overlaps('electrons').size()>0?overlaps('electrons')[0].key():-1", int, doc="index of first matching electron"),
228  electronIdx2 = Var("?overlaps('electrons').size()>1?overlaps('electrons')[1].key():-1", int, doc="index of second matching electron"),
229  nElectrons = Var("?hasOverlaps('electrons')?overlaps('electrons').size():0", int, doc="number of electrons in the jet"),
230  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),
231  btagDeepFlavB = Var("bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb')",float,doc="DeepJet b+bb+lepb tag discriminator",precision=10),
232  btagCSVV2 = Var("bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",float,doc=" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",precision=10),
233  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),
234  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),
235  btagDeepFlavCvL = Var("?(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),
236  btagDeepFlavCvB = Var("?(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),
237  btagDeepFlavQG = Var("?(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),
238  puIdDisc = Var("userFloat('puId102XDisc')",float,doc="Pileup ID discriminant with 102X (2018) training",precision=10),
239  puId = Var("userInt('pileupJetId:fullId')",int,doc="Pileup ID flags for pre-UL trainings"),
240  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"),
241  qgl = Var("userFloat('qgl')",float,doc="Quark vs Gluon likelihood discriminator",precision=10),
242  nConstituents = Var("numberOfDaughters()",int,doc="Number of particles in the jet"),
243  rawFactor = Var("1.-jecFactor('Uncorrected')",float,doc="1 - Factor to get back to raw pT",precision=6),
244  chHEF = Var("chargedHadronEnergyFraction()", float, doc="charged Hadron Energy Fraction", precision= 6),
245  neHEF = Var("neutralHadronEnergyFraction()", float, doc="neutral Hadron Energy Fraction", precision= 6),
246  chEmEF = Var("chargedEmEnergyFraction()", float, doc="charged Electromagnetic Energy Fraction", precision= 6),
247  neEmEF = Var("neutralEmEnergyFraction()", float, doc="neutral Electromagnetic Energy Fraction", precision= 6),
248  muEF = Var("muonEnergyFraction()", float, doc="muon Energy Fraction", precision= 6),
249  chFPV0EF = Var("userFloat('chFPV0EF')", float, doc="charged fromPV==0 Energy Fraction (energy excluded from CHS jets). Previously called betastar.", precision= 6),
250  chFPV1EF = Var("userFloat('chFPV1EF')", float, doc="charged fromPV==1 Energy Fraction (component of the total charged Energy Fraction).", precision= 6),
251  chFPV2EF = Var("userFloat('chFPV2EF')", float, doc="charged fromPV==2 Energy Fraction (component of the total charged Energy Fraction).", precision= 6),
252  chFPV3EF = Var("userFloat('chFPV3EF')", float, doc="charged fromPV==3 Energy Fraction (component of the total charged Energy Fraction).", precision= 6),
253  )
254 )
255 
256 #jets are not as precise as muons
257 jetTable.variables.pt.precision=10
258 
259 ### Era dependent customization
260 for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016, run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2, run2_nanoAOD_102Xv1, run2_nanoAOD_106Xv1:
261  # Deprecated after 106X
262  modifier.toModify(jetTable.variables,
263  btagCMVA = Var("bDiscriminator('pfCombinedMVAV2BJetTags')",float,doc="CMVA V2 btag discriminator",precision=10),
264  btagDeepC = Var("bDiscriminator('pfDeepCSVJetTags:probc')",float,doc="DeepCSV charm btag discriminator",precision=10),
265  btagDeepFlavC = Var("bDiscriminator('pfDeepFlavourJetTags:probc')",float,doc="DeepFlavour charm tag discriminator",precision=10),
266  )
267 for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016:
268  modifier.toModify( jetTable.variables, jetId = Var("userInt('tightIdLepVeto')*4+userInt('tightId')*2+userInt('looseId')",int,doc="Jet ID flags bit1 is loose, bit2 is tight, bit3 is tightLepVeto"))
269 run2_jme_2016.toModify( jetTable.variables, puIdDisc = Var("userFloat('pileupJetId:fullDiscriminant')",float,doc="Pileup ID discriminant with 80X (2016) training",precision=10))
270 run2_jme_2017.toModify( jetTable.variables, puId = Var("userInt('puId106XUL17Id')", int,doc="Pileup ID flags with 106X (2017) training"))
271 run2_jme_2017.toModify( jetTable.variables, puIdDisc = Var("userFloat('puId106XUL17Disc')", float,doc="Pileup ID discriminant with 106X (2017) training",precision=10))
272 for modifier in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
273  modifier.toModify( jetTable.variables, puIdDisc = Var("userFloat('puId94XDisc')", float,doc="Pileup ID discriminant with 94X (2017) training",precision=10))
274  modifier.toModify( jetTable.variables, puId = Var("userInt('pileupJetId:fullId')",int,doc="Pileup ID flags for 2016/2017/2018 EOY trainings"))
275 
276 
277 bjetNN= cms.EDProducer("BJetEnergyRegressionMVA",
278  backend = cms.string("TF"),
279  src = cms.InputTag("linkedObjects","jets"),
280  pvsrc = cms.InputTag("offlineSlimmedPrimaryVertices"),
281  svsrc = cms.InputTag("slimmedSecondaryVertices"),
282  rhosrc = cms.InputTag("fixedGridRhoFastjetAll"),
283 
284  weightFile = cms.FileInPath("PhysicsTools/NanoAOD/data/breg_training_2018.pb"),
285  name = cms.string("JetRegNN"),
286  isClassifier = cms.bool(False),
287  variablesOrder = cms.vstring(["Jet_pt","Jet_eta","rho","Jet_mt","Jet_leadTrackPt","Jet_leptonPtRel","Jet_leptonDeltaR","Jet_neHEF",
288  "Jet_neEmEF","Jet_vtxPt","Jet_vtxMass","Jet_vtx3dL","Jet_vtxNtrk","Jet_vtx3deL",
289  "Jet_numDaughters_pt03","Jet_energyRing_dR0_em_Jet_rawEnergy","Jet_energyRing_dR1_em_Jet_rawEnergy",
290  "Jet_energyRing_dR2_em_Jet_rawEnergy","Jet_energyRing_dR3_em_Jet_rawEnergy","Jet_energyRing_dR4_em_Jet_rawEnergy",
291  "Jet_energyRing_dR0_neut_Jet_rawEnergy","Jet_energyRing_dR1_neut_Jet_rawEnergy","Jet_energyRing_dR2_neut_Jet_rawEnergy",
292  "Jet_energyRing_dR3_neut_Jet_rawEnergy","Jet_energyRing_dR4_neut_Jet_rawEnergy","Jet_energyRing_dR0_ch_Jet_rawEnergy",
293  "Jet_energyRing_dR1_ch_Jet_rawEnergy","Jet_energyRing_dR2_ch_Jet_rawEnergy","Jet_energyRing_dR3_ch_Jet_rawEnergy",
294  "Jet_energyRing_dR4_ch_Jet_rawEnergy","Jet_energyRing_dR0_mu_Jet_rawEnergy","Jet_energyRing_dR1_mu_Jet_rawEnergy",
295  "Jet_energyRing_dR2_mu_Jet_rawEnergy","Jet_energyRing_dR3_mu_Jet_rawEnergy","Jet_energyRing_dR4_mu_Jet_rawEnergy",
296  "Jet_chHEF","Jet_chEmEF","Jet_leptonPtRelInv","isEle","isMu","isOther","Jet_mass","Jet_ptd"]),
297  variables = cms.PSet(
298  Jet_pt = cms.string("pt*jecFactor('Uncorrected')"),
299  Jet_mt = cms.string("mt*jecFactor('Uncorrected')"),
300  Jet_eta = cms.string("eta"),
301  Jet_mass = cms.string("mass*jecFactor('Uncorrected')"),
302  Jet_ptd = cms.string("userFloat('ptD')"),
303  Jet_leadTrackPt = cms.string("userFloat('leadTrackPt')"),
304  Jet_vtxNtrk = cms.string("userInt('vtxNtrk')"),
305  Jet_vtxMass = cms.string("userFloat('vtxMass')"),
306  Jet_vtx3dL = cms.string("userFloat('vtx3dL')"),
307  Jet_vtx3deL = cms.string("userFloat('vtx3deL')"),
308  Jet_vtxPt = cms.string("userFloat('vtxPt')"),
309  #Jet_leptonPt = cms.string("userFloat('leptonPt')"),
310  Jet_leptonPtRel = cms.string("userFloat('leptonPtRelv0')"),
311  Jet_leptonPtRelInv = cms.string("userFloat('leptonPtRelInvv0')*jecFactor('Uncorrected')"),
312  Jet_leptonDeltaR = cms.string("userFloat('leptonDeltaR')"),
313  #Jet_leptonPdgId = cms.string("userInt('leptonPdgId')"),
314  Jet_neHEF = cms.string("neutralHadronEnergyFraction()"),
315  Jet_neEmEF = cms.string("neutralEmEnergyFraction()"),
316  Jet_chHEF = cms.string("chargedHadronEnergyFraction()"),
317  Jet_chEmEF = cms.string("chargedEmEnergyFraction()"),
318  isMu = cms.string("?abs(userInt('leptonPdgId'))==13?1:0"),
319  isEle = cms.string("?abs(userInt('leptonPdgId'))==11?1:0"),
320  isOther = cms.string("?userInt('leptonPdgId')==0?1:0"),
321  ),
322  inputTensorName = cms.string("ffwd_inp"),
323  outputTensorName = cms.string("ffwd_out/BiasAdd"),
324  outputNames = cms.vstring(["corr","res"]),
325  outputFormulas = cms.vstring(["at(0)*0.27912887930870056+1.0545977354049683","0.5*(at(2)-at(1))*0.27912887930870056"]),
326  nThreads = cms.uint32(1),
327  singleThreadPool = cms.string("no_threads"),
328 
329 )
330 
331 cjetNN= cms.EDProducer("BJetEnergyRegressionMVA",
332  backend = cms.string("TF"),
333  src = cms.InputTag("linkedObjects","jets"),
334  pvsrc = cms.InputTag("offlineSlimmedPrimaryVertices"),
335  svsrc = cms.InputTag("slimmedSecondaryVertices"),
336  rhosrc = cms.InputTag("fixedGridRhoFastjetAll"),
337 
338  weightFile = cms.FileInPath("PhysicsTools/NanoAOD/data/creg_training_2018.pb"),
339  name = cms.string("JetRegNN"),
340  isClassifier = cms.bool(False),
341  variablesOrder = cms.vstring(["Jet_pt","Jet_eta","rho","Jet_mt","Jet_leadTrackPt","Jet_leptonPtRel","Jet_leptonDeltaR",
342  "Jet_neHEF","Jet_neEmEF","Jet_vtxPt","Jet_vtxMass","Jet_vtx3dL","Jet_vtxNtrk","Jet_vtx3deL",
343  "Jet_numDaughters_pt03","Jet_chEmEF","Jet_chHEF", "Jet_ptd","Jet_mass",
344  "Jet_energyRing_dR0_em_Jet_rawEnergy","Jet_energyRing_dR1_em_Jet_rawEnergy",
345  "Jet_energyRing_dR2_em_Jet_rawEnergy","Jet_energyRing_dR3_em_Jet_rawEnergy","Jet_energyRing_dR4_em_Jet_rawEnergy",
346  "Jet_energyRing_dR0_neut_Jet_rawEnergy","Jet_energyRing_dR1_neut_Jet_rawEnergy","Jet_energyRing_dR2_neut_Jet_rawEnergy",
347  "Jet_energyRing_dR3_neut_Jet_rawEnergy","Jet_energyRing_dR4_neut_Jet_rawEnergy","Jet_energyRing_dR0_ch_Jet_rawEnergy",
348  "Jet_energyRing_dR1_ch_Jet_rawEnergy","Jet_energyRing_dR2_ch_Jet_rawEnergy","Jet_energyRing_dR3_ch_Jet_rawEnergy",
349  "Jet_energyRing_dR4_ch_Jet_rawEnergy","Jet_energyRing_dR0_mu_Jet_rawEnergy","Jet_energyRing_dR1_mu_Jet_rawEnergy",
350  "Jet_energyRing_dR2_mu_Jet_rawEnergy","Jet_energyRing_dR3_mu_Jet_rawEnergy","Jet_energyRing_dR4_mu_Jet_rawEnergy"]),
351  variables = cms.PSet(
352  Jet_pt = cms.string("pt*jecFactor('Uncorrected')"),
353  Jet_mt = cms.string("mt*jecFactor('Uncorrected')"),
354  Jet_eta = cms.string("eta"),
355  Jet_mass = cms.string("mass*jecFactor('Uncorrected')"),
356  Jet_ptd = cms.string("userFloat('ptD')"),
357  Jet_leadTrackPt = cms.string("userFloat('leadTrackPt')"),
358  Jet_vtxNtrk = cms.string("userInt('vtxNtrk')"),
359  Jet_vtxMass = cms.string("userFloat('vtxMass')"),
360  Jet_vtx3dL = cms.string("userFloat('vtx3dL')"),
361  Jet_vtx3deL = cms.string("userFloat('vtx3deL')"),
362  Jet_vtxPt = cms.string("userFloat('vtxPt')"),
363  #Jet_leptonPt = cms.string("userFloat('leptonPt')"),
364  Jet_leptonPtRel = cms.string("userFloat('leptonPtRelv0')"),
365  Jet_leptonPtRelInv = cms.string("userFloat('leptonPtRelInvv0')*jecFactor('Uncorrected')"),
366  Jet_leptonDeltaR = cms.string("userFloat('leptonDeltaR')"),
367  #Jet_leptonPdgId = cms.string("userInt('leptonPdgId')"),
368  Jet_neHEF = cms.string("neutralHadronEnergyFraction()"),
369  Jet_neEmEF = cms.string("neutralEmEnergyFraction()"),
370  Jet_chHEF = cms.string("chargedHadronEnergyFraction()"),
371  Jet_chEmEF = cms.string("chargedEmEnergyFraction()"),
372  isMu = cms.string("?abs(userInt('leptonPdgId'))==13?1:0"),
373  isEle = cms.string("?abs(userInt('leptonPdgId'))==11?1:0"),
374  isOther = cms.string("?userInt('leptonPdgId')==0?1:0"),
375  ),
376  inputTensorName = cms.string("ffwd_inp"),
377  outputTensorName = cms.string("ffwd_out/BiasAdd"),
378  outputNames = cms.vstring(["corr","res"]),
379  outputFormulas = cms.vstring(["at(0)*0.24325256049633026+0.993854820728302","0.5*(at(2)-at(1))*0.24325256049633026"]),
380  nThreads = cms.uint32(1),
381  singleThreadPool = cms.string("no_threads"),
382 )
383 
384 
385 ##### Soft Activity tables
386 saJetTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
387  src = cms.InputTag("softActivityJets"),
388  cut = cms.string(""),
389  maxLen = cms.uint32(6),
390  name = cms.string("SoftActivityJet"),
391  doc = cms.string("jets clustered from charged candidates compatible with primary vertex (" + chsForSATkJets.cut.value()+")"),
392  singleton = cms.bool(False), # the number of entries is variable
393  extension = cms.bool(False), # this is the main table for the jets
394  variables = cms.PSet(P3Vars,
395  )
396 )
397 
398 saJetTable.variables.pt.precision=10
399 saJetTable.variables.eta.precision=8
400 saJetTable.variables.phi.precision=8
401 
402 saTable = cms.EDProducer("GlobalVariablesTableProducer",
403  variables = cms.PSet(
404  SoftActivityJetHT = ExtVar( cms.InputTag("softActivityJets"), "candidatescalarsum", doc = "scalar sum of soft activity jet pt, pt>1" ),
405  SoftActivityJetHT10 = ExtVar( cms.InputTag("softActivityJets10"), "candidatescalarsum", doc = "scalar sum of soft activity jet pt , pt >10" ),
406  SoftActivityJetHT5 = ExtVar( cms.InputTag("softActivityJets5"), "candidatescalarsum", doc = "scalar sum of soft activity jet pt, pt>5" ),
407  SoftActivityJetHT2 = ExtVar( cms.InputTag("softActivityJets2"), "candidatescalarsum", doc = "scalar sum of soft activity jet pt, pt >2" ),
408  SoftActivityJetNjets10 = ExtVar( cms.InputTag("softActivityJets10"), "candidatesize", doc = "number of soft activity jet pt, pt >2" ),
409  SoftActivityJetNjets5 = ExtVar( cms.InputTag("softActivityJets5"), "candidatesize", doc = "number of soft activity jet pt, pt >5" ),
410  SoftActivityJetNjets2 = ExtVar( cms.InputTag("softActivityJets2"), "candidatesize", doc = "number of soft activity jet pt, pt >10" ),
411 
412  )
413 )
414 
415 
416 
417 ## BOOSTED STUFF #################
418 fatJetTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
419  src = cms.InputTag("finalJetsAK8"),
420  cut = cms.string(" pt > 170"), #probably already applied in miniaod
421  name = cms.string("FatJet"),
422  doc = cms.string("slimmedJetsAK8, i.e. ak8 fat jets for boosted analysis"),
423  singleton = cms.bool(False), # the number of entries is variable
424  extension = cms.bool(False), # this is the main table for the jets
425  variables = cms.PSet(P4Vars,
426  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"),
427  area = Var("jetArea()", float, doc="jet catchment area, for JECs",precision=10),
428  rawFactor = Var("1.-jecFactor('Uncorrected')",float,doc="1 - Factor to get back to raw pT",precision=6),
429  tau1 = Var("userFloat('NjettinessAK8Puppi:tau1')",float, doc="Nsubjettiness (1 axis)",precision=10),
430  tau2 = Var("userFloat('NjettinessAK8Puppi:tau2')",float, doc="Nsubjettiness (2 axis)",precision=10),
431  tau3 = Var("userFloat('NjettinessAK8Puppi:tau3')",float, doc="Nsubjettiness (3 axis)",precision=10),
432  tau4 = Var("userFloat('NjettinessAK8Puppi:tau4')",float, doc="Nsubjettiness (4 axis)",precision=10),
433  n2b1 = Var("userFloat('ak8PFJetsPuppiSoftDropValueMap:nb1AK8PuppiSoftDropN2')", float, doc="N2 with beta=1", precision=10),
434  n3b1 = Var("userFloat('ak8PFJetsPuppiSoftDropValueMap:nb1AK8PuppiSoftDropN3')", float, doc="N3 with beta=1", precision=10),
435  msoftdrop = Var("groomedMass('SoftDropPuppi')",float, doc="Corrected soft drop mass with PUPPI",precision=10),
436  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),
437  btagCSVV2 = Var("bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",float,doc=" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",precision=10),
438  btagHbb = Var("bDiscriminator('pfBoostedDoubleSecondaryVertexAK8BJetTags')",float,doc="Higgs to BB tagger discriminator",precision=10),
439  btagDDBvLV2 = Var("bDiscriminator('pfMassIndependentDeepDoubleBvLV2JetTags:probHbb')",float,doc="DeepDoubleX V2(mass-decorrelated) discriminator for H(Z)->bb vs QCD",precision=10),
440  btagDDCvLV2 = Var("bDiscriminator('pfMassIndependentDeepDoubleCvLV2JetTags:probHcc')",float,doc="DeepDoubleX V2 (mass-decorrelated) discriminator for H(Z)->cc vs QCD",precision=10),
441  btagDDCvBV2 = Var("bDiscriminator('pfMassIndependentDeepDoubleCvBV2JetTags:probHcc')",float,doc="DeepDoubleX V2 (mass-decorrelated) discriminator for H(Z)->cc vs H(Z)->bb",precision=10),
442  deepTag_TvsQCD = Var("bDiscriminator('pfDeepBoostedDiscriminatorsJetTags:TvsQCD')",float,doc="DeepBoostedJet tagger top vs QCD discriminator",precision=10),
443  deepTag_WvsQCD = Var("bDiscriminator('pfDeepBoostedDiscriminatorsJetTags:WvsQCD')",float,doc="DeepBoostedJet tagger W vs QCD discriminator",precision=10),
444  deepTag_ZvsQCD = Var("bDiscriminator('pfDeepBoostedDiscriminatorsJetTags:ZvsQCD')",float,doc="DeepBoostedJet tagger Z vs QCD discriminator",precision=10),
445  deepTag_H = Var("bDiscriminator('pfDeepBoostedJetTags:probHbb')+bDiscriminator('pfDeepBoostedJetTags:probHcc')+bDiscriminator('pfDeepBoostedJetTags:probHqqqq')",float,doc="DeepBoostedJet tagger H(bb,cc,4q) sum",precision=10),
446  deepTag_QCD = Var("bDiscriminator('pfDeepBoostedJetTags:probQCDbb')+bDiscriminator('pfDeepBoostedJetTags:probQCDcc')+bDiscriminator('pfDeepBoostedJetTags:probQCDb')+bDiscriminator('pfDeepBoostedJetTags:probQCDc')+bDiscriminator('pfDeepBoostedJetTags:probQCDothers')",float,doc="DeepBoostedJet tagger QCD(bb,cc,b,c,others) sum",precision=10),
447  deepTag_QCDothers = Var("bDiscriminator('pfDeepBoostedJetTags:probQCDothers')",float,doc="DeepBoostedJet tagger QCDothers value",precision=10),
448  deepTagMD_TvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:TvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger top vs QCD discriminator",precision=10),
449  deepTagMD_WvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:WvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger W vs QCD discriminator",precision=10),
450  deepTagMD_ZvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z vs QCD discriminator",precision=10),
451  deepTagMD_ZHbbvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZHbbvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z/H->bb vs QCD discriminator",precision=10),
452  deepTagMD_ZbbvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZbbvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z->bb vs QCD discriminator",precision=10),
453  deepTagMD_HbbvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:HbbvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger H->bb vs QCD discriminator",precision=10),
454  deepTagMD_ZHccvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZHccvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z/H->cc vs QCD discriminator",precision=10),
455  deepTagMD_H4qvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:H4qvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger H->4q vs QCD discriminator",precision=10),
456  deepTagMD_bbvsLight = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:bbvsLight')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z/H/gluon->bb vs light flavour discriminator",precision=10),
457  deepTagMD_ccvsLight = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ccvsLight')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z/H/gluon->cc vs light flavour discriminator",precision=10),
458  particleNet_TvsQCD = Var("bDiscriminator('pfParticleNetDiscriminatorsJetTags:TvsQCD')",float,doc="ParticleNet tagger top vs QCD discriminator",precision=10),
459  particleNet_WvsQCD = Var("bDiscriminator('pfParticleNetDiscriminatorsJetTags:WvsQCD')",float,doc="ParticleNet tagger W vs QCD discriminator",precision=10),
460  particleNet_ZvsQCD = Var("bDiscriminator('pfParticleNetDiscriminatorsJetTags:ZvsQCD')",float,doc="ParticleNet tagger Z vs QCD discriminator",precision=10),
461  particleNet_HbbvsQCD = Var("bDiscriminator('pfParticleNetDiscriminatorsJetTags:HbbvsQCD')",float,doc="ParticleNet tagger H(->bb) vs QCD discriminator",precision=10),
462  particleNet_HccvsQCD = Var("bDiscriminator('pfParticleNetDiscriminatorsJetTags:HccvsQCD')",float,doc="ParticleNet tagger H(->cc) vs QCD discriminator",precision=10),
463  particleNet_H4qvsQCD = Var("bDiscriminator('pfParticleNetDiscriminatorsJetTags:H4qvsQCD')",float,doc="ParticleNet tagger H(->VV->qqqq) vs QCD discriminator",precision=10),
464  particleNet_QCD = Var("bDiscriminator('pfParticleNetJetTags:probQCDbb')+bDiscriminator('pfParticleNetJetTags:probQCDcc')+bDiscriminator('pfParticleNetJetTags:probQCDb')+bDiscriminator('pfParticleNetJetTags:probQCDc')+bDiscriminator('pfParticleNetJetTags:probQCDothers')",float,doc="ParticleNet tagger QCD(bb,cc,b,c,others) sum",precision=10),
465  particleNetMD_Xbb = Var("bDiscriminator('pfMassDecorrelatedParticleNetJetTags:probXbb')",float,doc="Mass-decorrelated ParticleNet tagger raw X->bb score. For X->bb vs QCD tagging, use Xbb/(Xbb+QCD)",precision=10),
466  particleNetMD_Xcc = Var("bDiscriminator('pfMassDecorrelatedParticleNetJetTags:probXcc')",float,doc="Mass-decorrelated ParticleNet tagger raw X->cc score. For X->cc vs QCD tagging, use Xcc/(Xcc+QCD)",precision=10),
467  particleNetMD_Xqq = Var("bDiscriminator('pfMassDecorrelatedParticleNetJetTags:probXqq')",float,doc="Mass-decorrelated ParticleNet tagger raw X->qq (uds) score. For X->qq vs QCD tagging, use Xqq/(Xqq+QCD). For W vs QCD tagging, use (Xcc+Xqq)/(Xcc+Xqq+QCD)",precision=10),
468  particleNetMD_QCD = Var("bDiscriminator('pfMassDecorrelatedParticleNetJetTags:probQCDbb')+bDiscriminator('pfMassDecorrelatedParticleNetJetTags:probQCDcc')+bDiscriminator('pfMassDecorrelatedParticleNetJetTags:probQCDb')+bDiscriminator('pfMassDecorrelatedParticleNetJetTags:probQCDc')+bDiscriminator('pfMassDecorrelatedParticleNetJetTags:probQCDothers')",float,doc="Mass-decorrelated ParticleNet tagger raw QCD score",precision=10),
469  subJetIdx1 = Var("?nSubjetCollections()>0 && subjets('SoftDropPuppi').size()>0?subjets('SoftDropPuppi')[0].key():-1", int,
470  doc="index of first subjet"),
471  subJetIdx2 = Var("?nSubjetCollections()>0 && subjets('SoftDropPuppi').size()>1?subjets('SoftDropPuppi')[1].key():-1", int,
472  doc="index of second subjet"),
473 
474 # btagDeepC = Var("bDiscriminator('pfDeepCSVJetTags:probc')",float,doc="CMVA V2 btag discriminator",precision=10),
475 #puIdDisc = Var("userFloat('pileupJetId:fullDiscriminant')",float,doc="Pileup ID discriminant",precision=10),
476 # nConstituents = Var("numberOfDaughters()",int,doc="Number of particles in the jet"),
477 # rawFactor = Var("1.-jecFactor('Uncorrected')",float,doc="1 - Factor to get back to raw pT",precision=6),
478  ),
479  externalVariables = cms.PSet(
480  lsf3 = ExtVar(cms.InputTag("lepInJetVars:lsf3"),float, doc="Lepton Subjet Fraction (3 subjets)",precision=10),
481  muonIdx3SJ = ExtVar(cms.InputTag("lepInJetVars:muIdx3SJ"),int, doc="index of muon matched to jet"),
482  electronIdx3SJ = ExtVar(cms.InputTag("lepInJetVars:eleIdx3SJ"),int,doc="index of electron matched to jet"),
483  )
484 )
485 ### Era dependent customization
486 for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016, run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2, run2_nanoAOD_102Xv1, run2_nanoAOD_106Xv1:
487  modifier.toModify( fatJetTable.variables.n2b1, expr = cms.string("userFloat('ak8PFJetsPuppiSoftDropValueMap:nb1AK8PuppiSoftDropN2')"),)
488  modifier.toModify( fatJetTable.variables.n3b1, expr = cms.string("userFloat('ak8PFJetsPuppiSoftDropValueMap:nb1AK8PuppiSoftDropN3')"),)
489  # Deprecated after 106X
490  modifier.toModify( fatJetTable.variables,
491  btagCMVA = Var("bDiscriminator('pfCombinedMVAV2BJetTags')",float,doc="CMVA V2 btag discriminator",precision=10),
492  btagDDBvL_noMD = Var("bDiscriminator('pfDeepDoubleBvLJetTags:probHbb')",float,doc="DeepDoubleX discriminator (no mass-decorrelation) for H(Z)->bb vs QCD",precision=10),
493  btagDDCvL_noMD = Var("bDiscriminator('pfDeepDoubleCvLJetTags:probHcc')",float,doc="DeepDoubleX discriminator (no mass-decorrelation) for H(Z)->cc vs QCD",precision=10),
494  btagDDCvB_noMD = Var("bDiscriminator('pfDeepDoubleCvBJetTags:probHcc')",float,doc="DeepDoubleX discriminator (no mass-decorrelation) for H(Z)->cc vs H(Z)->bb",precision=10),
495  btagDDBvL = Var("bDiscriminator('pfMassIndependentDeepDoubleBvLJetTags:probHbb')",float,doc="DeepDoubleX (mass-decorrelated) discriminator for H(Z)->bb vs QCD",precision=10),
496  btagDDCvL = Var("bDiscriminator('pfMassIndependentDeepDoubleCvLJetTags:probHcc')",float,doc="DeepDoubleX (mass-decorrelated) discriminator for H(Z)->cc vs QCD",precision=10),
497  btagDDCvB = Var("bDiscriminator('pfMassIndependentDeepDoubleCvBJetTags:probHcc')",float,doc="DeepDoubleX (mass-decorrelated) discriminator for H(Z)->cc vs H(Z)->bb",precision=10),
498  )
499 run2_miniAOD_80XLegacy.toModify( fatJetTable.variables, msoftdrop_chs = Var("userFloat('ak8PFJetsCHSSoftDropMass')",float, doc="Legacy uncorrected soft drop mass with CHS",precision=10))
500 run2_miniAOD_80XLegacy.toModify( fatJetTable.variables.tau1, expr = cms.string("userFloat(\'ak8PFJetsPuppiValueMap:NjettinessAK8PuppiTau1\')"),)
501 run2_miniAOD_80XLegacy.toModify( fatJetTable.variables.tau2, expr = cms.string("userFloat(\'ak8PFJetsPuppiValueMap:NjettinessAK8PuppiTau2\')"),)
502 run2_miniAOD_80XLegacy.toModify( fatJetTable.variables.tau3, expr = cms.string("userFloat(\'ak8PFJetsPuppiValueMap:NjettinessAK8PuppiTau3\')"),)
503 run2_miniAOD_80XLegacy.toModify( fatJetTable.variables, tau4 = None)
504 run2_miniAOD_80XLegacy.toModify( fatJetTable.variables, n2b1 = None)
505 run2_miniAOD_80XLegacy.toModify( fatJetTable.variables, n3b1 = None)
506 for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016:
507  modifier.toModify( fatJetTable.variables, jetId = Var("userInt('tightId')*2+userInt('looseId')",int,doc="Jet ID flags bit1 is loose, bit2 is tight"))
508 
509 run2_jme_2016.toModify( bjetNN, weightFile = cms.FileInPath("PhysicsTools/NanoAOD/data/breg_training_2016.pb") )
510 run2_jme_2016.toModify( bjetNN,outputFormulas = cms.vstring(["at(0)*0.31976690888404846+1.047176718711853","0.5*(at(2)-at(1))*0.31976690888404846"]))
511 
512 run2_jme_2017.toModify( bjetNN, weightFile = cms.FileInPath("PhysicsTools/NanoAOD/data/breg_training_2017.pb") )
513 run2_jme_2017.toModify( bjetNN,outputFormulas = cms.vstring(["at(0)*0.28225210309028625+1.055067777633667","0.5*(at(2)-at(1))*0.28225210309028625"]))
514 
515 run2_jme_2016.toModify( cjetNN, weightFile = cms.FileInPath("PhysicsTools/NanoAOD/data/creg_training_2016.pb") )
516 run2_jme_2016.toModify( cjetNN,outputFormulas = cms.vstring(["at(0)*0.28862622380256653+0.9908722639083862","0.5*(at(2)-at(1))*0.28862622380256653"]))
517 
518 run2_jme_2017.toModify( cjetNN, weightFile = cms.FileInPath("PhysicsTools/NanoAOD/data/creg_training_2017.pb") )
519 run2_jme_2017.toModify( cjetNN,outputFormulas = cms.vstring(["at(0)*0.24718524515628815+0.9927206635475159","0.5*(at(2)-at(1))*0.24718524515628815"]))
520 
521 
522 
523 subJetTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
524  src = cms.InputTag("slimmedJetsAK8PFPuppiSoftDropPacked","SubJets"),
525  cut = cms.string(""), #probably already applied in miniaod
526  name = cms.string("SubJet"),
527  doc = cms.string("slimmedJetsAK8, i.e. ak8 fat jets for boosted analysis"),
528  singleton = cms.bool(False), # the number of entries is variable
529  extension = cms.bool(False), # this is the main table for the jets
530  variables = cms.PSet(P4Vars,
531  btagDeepB = Var("bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')",float,doc="DeepCSV b+bb tag discriminator",precision=10),
532  btagCSVV2 = Var("bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",float,doc=" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",precision=10),
533  rawFactor = Var("1.-jecFactor('Uncorrected')",float,doc="1 - Factor to get back to raw pT",precision=6),
534  tau1 = Var("userFloat('NjettinessAK8Subjets:tau1')",float, doc="Nsubjettiness (1 axis)",precision=10),
535  tau2 = Var("userFloat('NjettinessAK8Subjets:tau2')",float, doc="Nsubjettiness (2 axis)",precision=10),
536  tau3 = Var("userFloat('NjettinessAK8Subjets:tau3')",float, doc="Nsubjettiness (3 axis)",precision=10),
537  tau4 = Var("userFloat('NjettinessAK8Subjets:tau4')",float, doc="Nsubjettiness (4 axis)",precision=10),
538  n2b1 = Var("userFloat('nb1AK8PuppiSoftDropSubjets:ecfN2')", float, doc="N2 with beta=1", precision=10),
539  n3b1 = Var("userFloat('nb1AK8PuppiSoftDropSubjets:ecfN3')", float, doc="N3 with beta=1", precision=10),
540  )
541 )
542 
543 # Deprecation/backcomp
544 for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016, run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2, run2_nanoAOD_102Xv1, run2_nanoAOD_106Xv1:
545  # post 106X
546  modifier.toModify(subJetTable.variables,
547  btagCMVA = Var("bDiscriminator('pfCombinedMVAV2BJetTags')",float,doc="CMVA V2 btag discriminator",precision=10),
548  )
549 
550 #jets are not as precise as muons
551 fatJetTable.variables.pt.precision=10
552 subJetTable.variables.pt.precision=10
553 
554 run2_miniAOD_80XLegacy.toModify( subJetTable.variables, tau1 = None)
555 run2_miniAOD_80XLegacy.toModify( subJetTable.variables, tau2 = None)
556 run2_miniAOD_80XLegacy.toModify( subJetTable.variables, tau3 = None)
557 run2_miniAOD_80XLegacy.toModify( subJetTable.variables, tau4 = None)
558 run2_miniAOD_80XLegacy.toModify( subJetTable.variables, n2b1 = None)
559 run2_miniAOD_80XLegacy.toModify( subJetTable.variables, n3b1 = None)
560 run2_miniAOD_80XLegacy.toModify( subJetTable.variables, btagCMVA = None, btagDeepB = None)
561 
562 
563 corrT1METJetTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
564  src = cms.InputTag("corrT1METJets"),
565  cut = cms.string(""),
566  name = cms.string("CorrT1METJet"),
567  doc = cms.string("Additional low-pt jets for Type-1 MET re-correction"),
568  singleton = cms.bool(False), # the number of entries is variable
569  extension = cms.bool(False), # this is the main table for the jets
570  variables = cms.PSet(
571  rawPt = Var("pt()*jecFactor('Uncorrected')",float,precision=10),
572  eta = Var("eta", float,precision=12),
573  phi = Var("phi", float, precision=12),
574  area = Var("jetArea()", float, doc="jet catchment area, for JECs",precision=10),
575  )
576 )
577 
578 
579 
580 ## MC STUFF ######################
581 jetMCTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
582  src = cms.InputTag("linkedObjects","jets"),
583  cut = cms.string(""), #we should not filter on cross linked collections
584  name = cms.string("Jet"),
585  singleton = cms.bool(False), # the number of entries is variable
586  extension = cms.bool(True), # this is an extension table for the jets
587  variables = cms.PSet(
588  partonFlavour = Var("partonFlavour()", int, doc="flavour from parton matching"),
589  hadronFlavour = Var("hadronFlavour()", int, doc="flavour from hadron ghost clustering"),
590  genJetIdx = Var("?genJetFwdRef().backRef().isNonnull()?genJetFwdRef().backRef().key():-1", int, doc="index of matched gen jet"),
591  )
592 )
593 genJetTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
594  src = cms.InputTag("slimmedGenJets"),
595  cut = cms.string("pt > 10"),
596  name = cms.string("GenJet"),
597  doc = cms.string("slimmedGenJets, i.e. ak4 Jets made with visible genparticles"),
598  singleton = cms.bool(False), # the number of entries is variable
599  extension = cms.bool(False), # this is the main table for the genjets
600  variables = cms.PSet(P4Vars,
601  #anything else?
602  )
603 )
604 patJetPartons = cms.EDProducer('HadronAndPartonSelector',
605  src = cms.InputTag("generator"),
606  particles = cms.InputTag("prunedGenParticles"),
607  partonMode = cms.string("Auto"),
608  fullChainPhysPartons = cms.bool(True)
609 )
610 genJetFlavourAssociation = cms.EDProducer("JetFlavourClustering",
611  jets = genJetTable.src,
612  bHadrons = cms.InputTag("patJetPartons","bHadrons"),
613  cHadrons = cms.InputTag("patJetPartons","cHadrons"),
614  partons = cms.InputTag("patJetPartons","physicsPartons"),
615  leptons = cms.InputTag("patJetPartons","leptons"),
616  jetAlgorithm = cms.string("AntiKt"),
617  rParam = cms.double(0.4),
618  ghostRescaling = cms.double(1e-18),
619  hadronFlavourHasPriority = cms.bool(False)
620 )
621 genJetFlavourTable = cms.EDProducer("GenJetFlavourTableProducer",
622  name = genJetTable.name,
623  src = genJetTable.src,
624  cut = genJetTable.cut,
625  deltaR = cms.double(0.1),
626  jetFlavourInfos = cms.InputTag("slimmedGenJetsFlavourInfos"),
627 )
628 
629 genJetAK8Table = cms.EDProducer("SimpleCandidateFlatTableProducer",
630  src = cms.InputTag("slimmedGenJetsAK8"),
631  cut = cms.string("pt > 100."),
632  name = cms.string("GenJetAK8"),
633  doc = cms.string("slimmedGenJetsAK8, i.e. ak8 Jets made with visible genparticles"),
634  singleton = cms.bool(False), # the number of entries is variable
635  extension = cms.bool(False), # this is the main table for the genjets
636  variables = cms.PSet(P4Vars,
637  #anything else?
638  )
639 )
640 genJetAK8FlavourAssociation = cms.EDProducer("JetFlavourClustering",
641  jets = genJetAK8Table.src,
642  bHadrons = cms.InputTag("patJetPartons","bHadrons"),
643  cHadrons = cms.InputTag("patJetPartons","cHadrons"),
644  partons = cms.InputTag("patJetPartons","physicsPartons"),
645  leptons = cms.InputTag("patJetPartons","leptons"),
646  jetAlgorithm = cms.string("AntiKt"),
647  rParam = cms.double(0.8),
648  ghostRescaling = cms.double(1e-18),
649  hadronFlavourHasPriority = cms.bool(False)
650 )
651 genJetAK8FlavourTable = cms.EDProducer("GenJetFlavourTableProducer",
652  name = genJetAK8Table.name,
653  src = genJetAK8Table.src,
654  cut = genJetAK8Table.cut,
655  deltaR = cms.double(0.1),
656  jetFlavourInfos = cms.InputTag("genJetAK8FlavourAssociation"),
657 )
658 fatJetMCTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
659  src = fatJetTable.src,
660  cut = fatJetTable.cut,
661  name = fatJetTable.name,
662  singleton = cms.bool(False),
663  extension = cms.bool(True),
664  variables = cms.PSet(
665  nBHadrons = Var("jetFlavourInfo().getbHadrons().size()", "uint8", doc="number of b-hadrons"),
666  nCHadrons = Var("jetFlavourInfo().getcHadrons().size()", "uint8", doc="number of c-hadrons"),
667  hadronFlavour = Var("hadronFlavour()", int, doc="flavour from hadron ghost clustering"),
668  genJetAK8Idx = Var("?genJetFwdRef().backRef().isNonnull()?genJetFwdRef().backRef().key():-1", int, doc="index of matched gen AK8 jet"),
669  )
670 )
671 
672 genSubJetAK8Table = cms.EDProducer("SimpleCandidateFlatTableProducer",
673  src = cms.InputTag("slimmedGenJetsAK8SoftDropSubJets"),
674  cut = cms.string(""), ## These don't get a pt cut, but in miniAOD only subjets from fat jets with pt > 100 are kept
675  name = cms.string("SubGenJetAK8"),
676  doc = cms.string("slimmedGenJetsAK8SoftDropSubJets, i.e. subjets of ak8 Jets made with visible genparticles"),
677  singleton = cms.bool(False), # the number of entries is variable
678  extension = cms.bool(False), # this is the main table for the genjets
679  variables = cms.PSet(P4Vars,
680  #anything else?
681  )
682 )
683 subjetMCTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
684  src = subJetTable.src,
685  cut = subJetTable.cut,
686  name = subJetTable.name,
687  singleton = cms.bool(False),
688  extension = cms.bool(True),
689  variables = cms.PSet(
690  nBHadrons = Var("jetFlavourInfo().getbHadrons().size()", "uint8", doc="number of b-hadrons"),
691  nCHadrons = Var("jetFlavourInfo().getcHadrons().size()", "uint8", doc="number of c-hadrons"),
692  hadronFlavour = Var("hadronFlavour()", int, doc="flavour from hadron ghost clustering"),
693  )
694 )
695 
696 ### Era dependent customization
697 run2_miniAOD_80XLegacy.toModify( genJetFlavourTable, jetFlavourInfos = cms.InputTag("genJetFlavourAssociation"),)
698 
699 from RecoJets.JetProducers.QGTagger_cfi import QGTagger
700 qgtagger=QGTagger.clone(srcJets="updatedJets",srcVertexCollection="offlineSlimmedPrimaryVertices")
701 
702 from RecoJets.JetProducers.PileupJetID_cfi import pileupJetId, _chsalgos_94x, _chsalgos_102x, _chsalgos_106X_UL17
703 pileupJetId94X=pileupJetId.clone(jets="updatedJets",algos = cms.VPSet(_chsalgos_94x),inputIsCorrected=True,applyJec=False,vertexes="offlineSlimmedPrimaryVertices")
704 pileupJetId102X=pileupJetId.clone(jets="updatedJets",algos = cms.VPSet(_chsalgos_102x),inputIsCorrected=True,applyJec=False,vertexes="offlineSlimmedPrimaryVertices")
705 pileupJetId106XUL17=pileupJetId.clone(jets="updatedJets",algos = cms.VPSet(_chsalgos_106X_UL17),inputIsCorrected=True,applyJec=False,vertexes="offlineSlimmedPrimaryVertices")
706 
707 
708 #before cross linking
709 jetSequence = cms.Sequence(jetCorrFactorsNano+updatedJets+tightJetId+tightJetIdLepVeto+bJetVars+qgtagger+jercVars+pileupJetId94X+pileupJetId102X+pileupJetId106XUL17+updatedJetsWithUserData+jetCorrFactorsAK8+updatedJetsAK8+tightJetIdAK8+tightJetIdLepVetoAK8+updatedJetsAK8WithUserData+chsForSATkJets+softActivityJets+softActivityJets2+softActivityJets5+softActivityJets10+finalJets+finalJetsAK8)
710 
711 _jetSequence_2016 = jetSequence.copy()
712 _jetSequence_2016.insert(_jetSequence_2016.index(tightJetId), looseJetId)
713 _jetSequence_2016.insert(_jetSequence_2016.index(tightJetIdAK8), looseJetIdAK8)
714 run2_jme_2016.toReplaceWith(jetSequence, _jetSequence_2016)
715 
716 
717 #HF shower shape variables:
718 #In 106X the variables are not computed/stored by default, but can be accessed/recomputed via modifiers
719 #For the two following modifiers, the producer is run on MINIAOD and one can directly access the variables
720 for modifier in run2_miniAOD_UL, run2_miniAOD_devel:
721  modifier.toModify( jetTable.variables, hfsigmaEtaEta = Var("userFloat('hfJetShowerShape:sigmaEtaEta')",float,doc="sigmaEtaEta for HF jets (noise discriminating variable)",precision=10))
722  modifier.toModify( jetTable.variables, hfsigmaPhiPhi = Var("userFloat('hfJetShowerShape:sigmaPhiPhi')",float,doc="sigmaPhiPhi for HF jets (noise discriminating variable)",precision=10))
723  modifier.toModify( jetTable.variables, hfcentralEtaStripSize = Var("userInt('hfJetShowerShape:centralEtaStripSize')", int, doc="eta size of the central tower strip in HF (noise discriminating variable) "))
724  modifier.toModify( jetTable.variables, hfadjacentEtaStripsSize = Var("userInt('hfJetShowerShape:adjacentEtaStripsSize')", int, doc="eta size of the strips next to the central tower strip in HF (noise discriminating variable) "))
725 
726 #For the following modifiers, the producer is not run on MINIAOD and one needs to run the producer in the NANOAOD step
727 from RecoJets.JetProducers.hfJetShowerShape_cfi import hfJetShowerShape
728 hfJetShowerShapeforNanoAOD = hfJetShowerShape.clone(jets="updatedJets",vertices="offlineSlimmedPrimaryVertices")
729 for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016, run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2, run2_nanoAOD_102Xv1, run2_nanoAOD_106Xv1:
730  modifier.toModify(updatedJetsWithUserData.userFloats,
731  hfsigmaEtaEta = cms.InputTag('hfJetShowerShapeforNanoAOD:sigmaEtaEta'),
732  hfsigmaPhiPhi = cms.InputTag('hfJetShowerShapeforNanoAOD:sigmaPhiPhi'),
733  )
734  modifier.toModify(updatedJetsWithUserData.userInts,
735  hfcentralEtaStripSize = cms.InputTag('hfJetShowerShapeforNanoAOD:centralEtaStripSize'),
736  hfadjacentEtaStripsSize = cms.InputTag('hfJetShowerShapeforNanoAOD:adjacentEtaStripsSize'),
737  )
738  modifier.toModify( jetTable.variables, hfsigmaEtaEta = Var("userFloat('hfsigmaEtaEta')",float,doc="sigmaEtaEta for HF jets (noise discriminating variable)",precision=10))
739  modifier.toModify( jetTable.variables, hfsigmaPhiPhi = Var("userFloat('hfsigmaPhiPhi')",float,doc="sigmaPhiPhi for HF jets (noise discriminating variable)",precision=10))
740  modifier.toModify( jetTable.variables, hfcentralEtaStripSize = Var("userInt('hfcentralEtaStripSize')", int, doc="eta size of the central tower strip in HF (noise discriminating variable) "))
741  modifier.toModify( jetTable.variables, hfadjacentEtaStripsSize = Var("userInt('hfadjacentEtaStripsSize')", int, doc="eta size of the strips next to the central tower strip in HF (noise discriminating variable) "))
742  _jetSequence_rerunHFshowershape = jetSequence.copy()
743  _jetSequence_rerunHFshowershape.insert(_jetSequence_rerunHFshowershape.index(updatedJetsWithUserData), hfJetShowerShapeforNanoAOD)
744  modifier.toReplaceWith(jetSequence, _jetSequence_rerunHFshowershape)
745 
746 #after lepton collections have been run
747 jetLepSequence = cms.Sequence(lepInJetVars)
748 
749 #after cross linkining
750 jetTables = cms.Sequence(bjetNN+cjetNN+jetTable+fatJetTable+subJetTable+saJetTable+saTable)
751 
752 #MC only producers and tables
753 jetMC = cms.Sequence(jetMCTable+genJetTable+patJetPartons+genJetFlavourTable+genJetAK8Table+genJetAK8FlavourAssociation+genJetAK8FlavourTable+fatJetMCTable+genSubJetAK8Table+subjetMCTable)
754 _jetMC_pre94X = jetMC.copy()
755 _jetMC_pre94X.insert(_jetMC_pre94X.index(genJetFlavourTable),genJetFlavourAssociation)
756 _jetMC_pre94X.remove(genSubJetAK8Table)
757 run2_miniAOD_80XLegacy.toReplaceWith(jetMC, _jetMC_pre94X)
758 
759 
def ExtVar(tag, valtype, compression=None, doc=None, mcOnly=False, precision=-1)
Definition: common_cff.py:31
def Var(expr, valtype, compression=None, doc=None, mcOnly=False, precision=-1)
Definition: common_cff.py:20