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_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy
3 from Configuration.Eras.Modifier_run2_nanoAOD_92X_cff import run2_nanoAOD_92X
4 from Configuration.Eras.Modifier_run2_nanoAOD_94X2016_cff import run2_nanoAOD_94X2016
5 
7 
8 
9 
10 ##################### User floats producers, selectors ##########################
11 from RecoJets.JetProducers.ak4PFJets_cfi import ak4PFJets
12 
13 chsForSATkJets = cms.EDFilter("CandPtrSelector", src = cms.InputTag("packedPFCandidates"), cut = cms.string('charge()!=0 && pvAssociationQuality()>=5 && vertexRef().key()==0'))
14 softActivityJets = ak4PFJets.clone(src = 'chsForSATkJets', doAreaFastjet = False, jetPtMin=1)
15 softActivityJets10 = cms.EDFilter("CandPtrSelector", src = cms.InputTag("softActivityJets"), cut = cms.string('pt>10'))
16 softActivityJets5 = cms.EDFilter("CandPtrSelector", src = cms.InputTag("softActivityJets"), cut = cms.string('pt>5'))
17 softActivityJets2 = cms.EDFilter("CandPtrSelector", src = cms.InputTag("softActivityJets"), cut = cms.string('pt>2'))
18 
19 looseJetId = cms.EDProducer("PatJetIDValueMapProducer",
20  filterParams=cms.PSet(
21  version = cms.string('WINTER16'),
22  quality = cms.string('LOOSE'),
23  ),
24  src = cms.InputTag("slimmedJets")
25 )
26 tightJetId = cms.EDProducer("PatJetIDValueMapProducer",
27  filterParams=cms.PSet(
28  version = cms.string('WINTER17'),
29  quality = cms.string('TIGHT'),
30  ),
31  src = cms.InputTag("slimmedJets")
32 )
33 for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016:
34  modifier.toModify( tightJetId.filterParams, version = "WINTER16" )
35 
36 tightJetIdLepVeto = cms.EDProducer("PatJetIDValueMapProducer",
37  filterParams=cms.PSet(
38  version = cms.string('WINTER17'),
39  quality = cms.string('TIGHTLEPVETO'),
40  ),
41  src = cms.InputTag("slimmedJets")
42 )
43 
44 looseJetIdAK8 = cms.EDProducer("PatJetIDValueMapProducer",
45  filterParams=cms.PSet(
46  version = cms.string('WINTER16'),
47  quality = cms.string('LOOSE'),
48  ),
49  src = cms.InputTag("slimmedJetsAK8")
50 )
51 tightJetIdAK8 = cms.EDProducer("PatJetIDValueMapProducer",
52  filterParams=cms.PSet(
53  version = cms.string('WINTER17'),
54  quality = cms.string('TIGHT'),
55  ),
56  src = cms.InputTag("slimmedJetsAK8")
57 )
58 for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016:
59  modifier.toModify( tightJetIdAK8.filterParams, version = "WINTER16" )
60 
61 tightJetIdLepVetoAK8 = cms.EDProducer("PatJetIDValueMapProducer",
62  filterParams=cms.PSet(
63  version = cms.string('WINTER17'),
64  quality = cms.string('TIGHTLEPVETO'),
65  ),
66  src = cms.InputTag("slimmedJetsAK8")
67 )
68 
69 bJetVars = cms.EDProducer("JetRegressionVarProducer",
70  pvsrc = cms.InputTag("offlineSlimmedPrimaryVertices"),
71  src = cms.InputTag("slimmedJets"),
72  svsrc = cms.InputTag("slimmedSecondaryVertices"),
73  gpsrc = cms.InputTag("prunedGenParticles"),
74  #musrc = cms.InputTag("slimmedMuons"),
75  #elesrc = cms.InputTag("slimmedElectrons")
76 )
77 
78 
79 slimmedJetsWithUserData = cms.EDProducer("PATJetUserDataEmbedder",
80  src = cms.InputTag("slimmedJets"),
81  userFloats = cms.PSet(
82  leadTrackPt = cms.InputTag("bJetVars:leadTrackPt"),
83  leptonPtRel = cms.InputTag("bJetVars:leptonPtRel"),
84  leptonPtRatio = cms.InputTag("bJetVars:leptonPtRatio"),
85  leptonPtRelInv = cms.InputTag("bJetVars:leptonPtRelInv"),
86  leptonPtRelv0 = cms.InputTag("bJetVars:leptonPtRelv0"),
87  leptonPtRatiov0 = cms.InputTag("bJetVars:leptonPtRatiov0"),
88  leptonPtRelInvv0 = cms.InputTag("bJetVars:leptonPtRelInvv0"),
89  leptonDeltaR = cms.InputTag("bJetVars:leptonDeltaR"),
90  leptonPt = cms.InputTag("bJetVars:leptonPt"),
91  vtxPt = cms.InputTag("bJetVars:vtxPt"),
92  vtxMass = cms.InputTag("bJetVars:vtxMass"),
93  vtx3dL = cms.InputTag("bJetVars:vtx3dL"),
94  vtx3deL = cms.InputTag("bJetVars:vtx3deL"),
95  ptD = cms.InputTag("bJetVars:ptD"),
96  genPtwNu = cms.InputTag("bJetVars:genPtwNu"),
97 
98  ),
99  userInts = cms.PSet(
100  tightId = cms.InputTag("tightJetId"),
101  tightIdLepVeto = cms.InputTag("tightJetIdLepVeto"),
102  vtxNtrk = cms.InputTag("bJetVars:vtxNtrk"),
103  leptonPdgId = cms.InputTag("bJetVars:leptonPdgId"),
104 
105  ),
106 )
107 for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016:
108  modifier.toModify( slimmedJetsWithUserData.userInts,
109  looseId = cms.InputTag("looseJetId"),
110  tightIdLepVeto = None,
111  )
112 
113 slimmedJetsAK8WithUserData = cms.EDProducer("PATJetUserDataEmbedder",
114  src = cms.InputTag("slimmedJetsAK8"),
115  userFloats = cms.PSet(),
116  userInts = cms.PSet(
117  tightId = cms.InputTag("tightJetIdAK8"),
118  tightIdLepVeto = cms.InputTag("tightJetIdLepVetoAK8"),
119  ),
120 )
121 for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016:
122  modifier.toModify( slimmedJetsAK8WithUserData.userInts,
123  looseId = cms.InputTag("looseJetIdAK8"),
124  tightIdLepVeto = None,
125  )
126 
128 # Note: Safe to always add 'L2L3Residual' as MC contains dummy L2L3Residual corrections (always set to 1)
129 # (cf. https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookJetEnergyCorrections#CMSSW_7_6_4_and_above )
130 jetCorrFactorsNano = patJetCorrFactors.clone(src='slimmedJetsWithUserData',
131  levels = cms.vstring('L1FastJet',
132  'L2Relative',
133  'L3Absolute',
134  'L2L3Residual'),
135  primaryVertices = cms.InputTag("offlineSlimmedPrimaryVertices"),
136 )
137 jetCorrFactorsAK8 = patJetCorrFactors.clone(src='slimmedJetsAK8WithUserData',
138  levels = cms.vstring('L1FastJet',
139  'L2Relative',
140  'L3Absolute',
141  'L2L3Residual'),
142  payload = cms.string('AK8PFPuppi'),
143  primaryVertices = cms.InputTag("offlineSlimmedPrimaryVertices"),
144 )
145 run2_miniAOD_80XLegacy.toModify(jetCorrFactorsAK8, payload = cms.string('AK8PFchs')) # ak8PFJetsCHS in 2016 80X miniAOD
146 
148 updatedJets = updatedPatJets.clone(
149  addBTagInfo=False,
150  jetSource='slimmedJetsWithUserData',
151  jetCorrFactorsSource=cms.VInputTag(cms.InputTag("jetCorrFactorsNano") ),
152 )
153 
154 finalJets = cms.EDFilter("PATJetRefSelector",
155  src = cms.InputTag("updatedJets"),
156  cut = cms.string("pt > 15")
157 )
158 
159 updatedJetsAK8 = updatedPatJets.clone(
160  addBTagInfo=False,
161  jetSource='slimmedJetsAK8WithUserData',
162  jetCorrFactorsSource=cms.VInputTag(cms.InputTag("jetCorrFactorsAK8") ),
163 )
164 
165 finalJetsAK8 = cms.EDFilter("PATJetRefSelector",
166  src = cms.InputTag("updatedJetsAK8"),
167  cut = cms.string("pt > 170")
168 )
169 
170 
171 
172 
173 
174 ##################### Tables for final output and docs ##########################
175 
176 
177 
178 jetTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
179  src = cms.InputTag("linkedObjects","jets"),
180  cut = cms.string(""), #we should not filter on cross linked collections
181  name = cms.string("Jet"),
182  doc = cms.string("slimmedJets, i.e. ak4 PFJets CHS with JECs applied, after basic selection (" + finalJets.cut.value()+")"),
183  singleton = cms.bool(False), # the number of entries is variable
184  extension = cms.bool(False), # this is the main table for the jets
185  externalVariables = cms.PSet(
186  #bRegOld = ExtVar(cms.InputTag("bjetMVA"),float, doc="pt corrected with b-jet regression",precision=14),
187  bRegCorr = ExtVar(cms.InputTag("bjetNN:corr"),float, doc="pt correction for b-jet energy regression",precision=12),
188  bRegRes = ExtVar(cms.InputTag("bjetNN:res"),float, doc="res on pt corrected with b-jet regression",precision=8),
189  ),
190  variables = cms.PSet(P4Vars,
191  area = Var("jetArea()", float, doc="jet catchment area, for JECs",precision=10),
192  nMuons = Var("?hasOverlaps('muons')?overlaps('muons').size():0", int, doc="number of muons in the jet"),
193  muonIdx1 = Var("?overlaps('muons').size()>0?overlaps('muons')[0].key():-1", int, doc="index of first matching muon"),
194  muonIdx2 = Var("?overlaps('muons').size()>1?overlaps('muons')[1].key():-1", int, doc="index of second matching muon"),
195  electronIdx1 = Var("?overlaps('electrons').size()>0?overlaps('electrons')[0].key():-1", int, doc="index of first matching electron"),
196  electronIdx2 = Var("?overlaps('electrons').size()>1?overlaps('electrons')[1].key():-1", int, doc="index of second matching electron"),
197  nElectrons = Var("?hasOverlaps('electrons')?overlaps('electrons').size():0", int, doc="number of electrons in the jet"),
198  btagCMVA = Var("bDiscriminator('pfCombinedMVAV2BJetTags')",float,doc="CMVA V2 btag discriminator",precision=10),
199  btagDeepB = Var("bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')",float,doc="DeepCSV b+bb tag discriminator",precision=10),
200  btagDeepFlavB = Var("bDiscriminator('pfDeepFlavourJetTags:probb')+bDiscriminator('pfDeepFlavourJetTags:probbb')+bDiscriminator('pfDeepFlavourJetTags:problepb')",float,doc="DeepFlavour b+bb+lepb tag discriminator",precision=10),
201  btagCSVV2 = Var("bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",float,doc=" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",precision=10),
202  btagDeepC = Var("bDiscriminator('pfDeepCSVJetTags:probc')",float,doc="DeepCSV charm btag discriminator",precision=10),
203  #puIdDisc = Var("userFloat('pileupJetId:fullDiscriminant')",float,doc="Pilup ID discriminant",precision=10),
204  puId = Var("userInt('pileupJetId:fullId')",int,doc="Pilup ID flags"),
205  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"),
206  qgl = Var("userFloat('QGTagger:qgLikelihood')",float,doc="Quark vs Gluon likelihood discriminator",precision=10),
207  nConstituents = Var("numberOfDaughters()",int,doc="Number of particles in the jet"),
208  rawFactor = Var("1.-jecFactor('Uncorrected')",float,doc="1 - Factor to get back to raw pT",precision=6),
209  chHEF = Var("chargedHadronEnergyFraction()", float, doc="charged Hadron Energy Fraction", precision= 6),
210  neHEF = Var("neutralHadronEnergyFraction()", float, doc="neutral Hadron Energy Fraction", precision= 6),
211  chEmEF = Var("chargedEmEnergyFraction()", float, doc="charged Electromagnetic Energy Fraction", precision= 6),
212  neEmEF = Var("neutralEmEnergyFraction()", float, doc="neutral Electromagnetic Energy Fraction", precision= 6),
213  muEF = Var("muonEnergyFraction()", float, doc="muon Energy Fraction", precision= 6),
214  )
215 )
216 
217 #jets are not as precise as muons
218 jetTable.variables.pt.precision=10
219 
220 ### Era dependent customization
221 run2_miniAOD_80XLegacy.toModify( slimmedJetsWithUserData.userFloats,qgl=cms.InputTag('qgtagger80x:qgLikelihood'))
222 run2_miniAOD_80XLegacy.toModify( jetTable.variables.qgl, expr="userFloat('qgl')" )
223 for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016:
224  modifier.toModify( jetTable.variables, jetId = Var("userInt('tightId')*2+userInt('looseId')",int,doc="Jet ID flags bit1 is loose, bit2 is tight"))
225 
226 bjetMVA= cms.EDProducer("BJetEnergyRegressionMVA",
227  backend = cms.string("TMVA"),
228  src = cms.InputTag("linkedObjects","jets"),
229  pvsrc = cms.InputTag("offlineSlimmedPrimaryVertices"),
230  svsrc = cms.InputTag("slimmedSecondaryVertices"),
231  rhosrc = cms.InputTag("fixedGridRhoFastjetAll"),
232  weightFile = cms.FileInPath("PhysicsTools/NanoAOD/data/bjet-regression.xml"),
233  name = cms.string("JetReg"),
234  isClassifier = cms.bool(False),
235  variablesOrder = cms.vstring(["Jet_pt","nPVs","Jet_eta","Jet_mt","Jet_leadTrackPt","Jet_leptonPtRel","Jet_leptonPt","Jet_leptonDeltaR","Jet_neHEF","Jet_neEmEF","Jet_vtxPt","Jet_vtxMass","Jet_vtx3dL","Jet_vtxNtrk","Jet_vtx3deL"]),
236  variables = cms.PSet(
237  Jet_pt = cms.string("pt"),
238  Jet_eta = cms.string("eta"),
239  Jet_mt = cms.string("mt"),
240  Jet_leadTrackPt = cms.string("userFloat('leadTrackPt')"),
241  Jet_vtxNtrk = cms.string("userInt('vtxNtrk')"),
242  Jet_vtxMass = cms.string("userFloat('vtxMass')"),
243  Jet_vtx3dL = cms.string("userFloat('vtx3dL')"),
244  Jet_vtx3deL = cms.string("userFloat('vtx3deL')"),
245  Jet_vtxPt = cms.string("userFloat('vtxPt')"),
246  Jet_leptonPtRel = cms.string("userFloat('leptonPtRelv0')"),
247  Jet_leptonPt = cms.string("?overlaps('muons').size()>0?overlaps('muons')[0].pt():(?overlaps('electrons').size()>0?overlaps('electrons')[0].pt():0)"),
248  Jet_neHEF = cms.string("neutralHadronEnergy()/energy()"),
249  Jet_neEmEF = cms.string("neutralEmEnergy()/energy()"),
250  Jet_leptonDeltaR = cms.string('''?overlaps('muons').size()>0?deltaR(eta,phi,overlaps('muons')[0].eta,overlaps('muons')[0].phi):
251  (?overlaps('electrons').size()>0?deltaR(eta,phi,overlaps('electrons')[0].eta,overlaps('electrons')[0].phi):
252  0)'''),
253  )
254 
255 )
256 
257 bjetNN= cms.EDProducer("BJetEnergyRegressionMVA",
258  backend = cms.string("TF"),
259  src = cms.InputTag("linkedObjects","jets"),
260  pvsrc = cms.InputTag("offlineSlimmedPrimaryVertices"),
261  svsrc = cms.InputTag("slimmedSecondaryVertices"),
262  rhosrc = cms.InputTag("fixedGridRhoFastjetAll"),
263 
264  weightFile = cms.FileInPath("PhysicsTools/NanoAOD/data/breg_training_2017.pb"),
265  name = cms.string("JetRegNN"),
266  isClassifier = cms.bool(False),
267  variablesOrder = cms.vstring(["Jet_pt","Jet_eta","rho","Jet_mt","Jet_leadTrackPt","Jet_leptonPtRel","Jet_leptonDeltaR","Jet_neHEF","Jet_neEmEF","Jet_vtxPt","Jet_vtxMass","Jet_vtx3dL","Jet_vtxNtrk","Jet_vtx3deL","Jet_numDaughters_pt03","Jet_energyRing_dR0_em_Jet_rawEnergy","Jet_energyRing_dR1_em_Jet_rawEnergy","Jet_energyRing_dR2_em_Jet_rawEnergy","Jet_energyRing_dR3_em_Jet_rawEnergy","Jet_energyRing_dR4_em_Jet_rawEnergy","Jet_energyRing_dR0_neut_Jet_rawEnergy","Jet_energyRing_dR1_neut_Jet_rawEnergy","Jet_energyRing_dR2_neut_Jet_rawEnergy","Jet_energyRing_dR3_neut_Jet_rawEnergy","Jet_energyRing_dR4_neut_Jet_rawEnergy","Jet_energyRing_dR0_ch_Jet_rawEnergy","Jet_energyRing_dR1_ch_Jet_rawEnergy","Jet_energyRing_dR2_ch_Jet_rawEnergy","Jet_energyRing_dR3_ch_Jet_rawEnergy","Jet_energyRing_dR4_ch_Jet_rawEnergy","Jet_energyRing_dR0_mu_Jet_rawEnergy","Jet_energyRing_dR1_mu_Jet_rawEnergy","Jet_energyRing_dR2_mu_Jet_rawEnergy","Jet_energyRing_dR3_mu_Jet_rawEnergy","Jet_energyRing_dR4_mu_Jet_rawEnergy","Jet_chHEF","Jet_chEmEF","Jet_leptonPtRelInv","isEle","isMu","isOther","Jet_mass","Jet_ptd"]),
268  variables = cms.PSet(
269  Jet_pt = cms.string("pt*jecFactor('Uncorrected')"),
270  Jet_mt = cms.string("mt*jecFactor('Uncorrected')"),
271  Jet_eta = cms.string("eta"),
272  Jet_mass = cms.string("mass*jecFactor('Uncorrected')"),
273  Jet_ptd = cms.string("userFloat('ptD')"),
274  Jet_leadTrackPt = cms.string("userFloat('leadTrackPt')"),
275  Jet_vtxNtrk = cms.string("userInt('vtxNtrk')"),
276  Jet_vtxMass = cms.string("userFloat('vtxMass')"),
277  Jet_vtx3dL = cms.string("userFloat('vtx3dL')"),
278  Jet_vtx3deL = cms.string("userFloat('vtx3deL')"),
279  Jet_vtxPt = cms.string("userFloat('vtxPt')"),
280  #Jet_leptonPt = cms.string("userFloat('leptonPt')"),
281  Jet_leptonPtRel = cms.string("userFloat('leptonPtRelv0')"),
282  Jet_leptonPtRelInv = cms.string("userFloat('leptonPtRelInvv0')*jecFactor('Uncorrected')"),
283  Jet_leptonDeltaR = cms.string("userFloat('leptonDeltaR')"),
284  #Jet_leptonPdgId = cms.string("userInt('leptonPdgId')"),
285  Jet_neHEF = cms.string("neutralHadronEnergyFraction()"),
286  Jet_neEmEF = cms.string("neutralEmEnergyFraction()"),
287  Jet_chHEF = cms.string("chargedHadronEnergyFraction()"),
288  Jet_chEmEF = cms.string("chargedEmEnergyFraction()"),
289  isMu = cms.string("?abs(userInt('leptonPdgId'))==13?1:0"),
290  isEle = cms.string("?abs(userInt('leptonPdgId'))==11?1:0"),
291  isOther = cms.string("?userInt('leptonPdgId')==0?1:0"),
292  ),
293  inputTensorName = cms.string("ffwd_inp"),
294  outputTensorName = cms.string("ffwd_out/BiasAdd"),
295  outputNames = cms.vstring(["corr","res"]),
296  outputFormulas = cms.vstring(["at(0)*0.28492164611816406+1.0596693754196167","0.5*(at(2)-at(1))*0.28492164611816406"]),
297  nThreads = cms.uint32(1),
298  singleThreadPool = cms.string("no_threads"),
299 )
300 
301 
302 
303 ##### Soft Activity tables
304 saJetTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
305  src = cms.InputTag("softActivityJets"),
306  cut = cms.string(""),
307  maxLen = cms.uint32(6),
308  name = cms.string("SoftActivityJet"),
309  doc = cms.string("jets clustered from charged candidates compatible with primary vertex (" + chsForSATkJets.cut.value()+")"),
310  singleton = cms.bool(False), # the number of entries is variable
311  extension = cms.bool(False), # this is the main table for the jets
312  variables = cms.PSet(P3Vars,
313  )
314 )
315 
316 saJetTable.variables.pt.precision=10
317 saJetTable.variables.eta.precision=8
318 saJetTable.variables.phi.precision=8
319 
320 saTable = cms.EDProducer("GlobalVariablesTableProducer",
321  variables = cms.PSet(
322  SoftActivityJetHT = ExtVar( cms.InputTag("softActivityJets"), "candidatescalarsum", doc = "scalar sum of soft activity jet pt, pt>1" ),
323  SoftActivityJetHT10 = ExtVar( cms.InputTag("softActivityJets10"), "candidatescalarsum", doc = "scalar sum of soft activity jet pt , pt >10" ),
324  SoftActivityJetHT5 = ExtVar( cms.InputTag("softActivityJets5"), "candidatescalarsum", doc = "scalar sum of soft activity jet pt, pt>5" ),
325  SoftActivityJetHT2 = ExtVar( cms.InputTag("softActivityJets2"), "candidatescalarsum", doc = "scalar sum of soft activity jet pt, pt >2" ),
326  SoftActivityJetNjets10 = ExtVar( cms.InputTag("softActivityJets10"), "candidatesize", doc = "number of soft activity jet pt, pt >2" ),
327  SoftActivityJetNjets5 = ExtVar( cms.InputTag("softActivityJets5"), "candidatesize", doc = "number of soft activity jet pt, pt >5" ),
328  SoftActivityJetNjets2 = ExtVar( cms.InputTag("softActivityJets2"), "candidatesize", doc = "number of soft activity jet pt, pt >10" ),
329 
330  )
331 )
332 
333 
334 
335 ## BOOSTED STUFF #################
336 fatJetTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
337  src = cms.InputTag("finalJetsAK8"),
338  cut = cms.string(" pt > 170"), #probably already applied in miniaod
339  name = cms.string("FatJet"),
340  doc = cms.string("slimmedJetsAK8, i.e. ak8 fat jets for boosted analysis"),
341  singleton = cms.bool(False), # the number of entries is variable
342  extension = cms.bool(False), # this is the main table for the jets
343  variables = cms.PSet(P4Vars,
344  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"),
345  area = Var("jetArea()", float, doc="jet catchment area, for JECs",precision=10),
346  rawFactor = Var("1.-jecFactor('Uncorrected')",float,doc="1 - Factor to get back to raw pT",precision=6),
347  tau1 = Var("userFloat('NjettinessAK8Puppi:tau1')",float, doc="Nsubjettiness (1 axis)",precision=10),
348  tau2 = Var("userFloat('NjettinessAK8Puppi:tau2')",float, doc="Nsubjettiness (2 axis)",precision=10),
349  tau3 = Var("userFloat('NjettinessAK8Puppi:tau3')",float, doc="Nsubjettiness (3 axis)",precision=10),
350  tau4 = Var("userFloat('NjettinessAK8Puppi:tau4')",float, doc="Nsubjettiness (4 axis)",precision=10),
351  n2b1 = Var("userFloat('ak8PFJetsPuppiSoftDropValueMap:nb1AK8PuppiSoftDropN2')", float, doc="N2 with beta=1", precision=10),
352  n3b1 = Var("userFloat('ak8PFJetsPuppiSoftDropValueMap:nb1AK8PuppiSoftDropN3')", float, doc="N3 with beta=1", precision=10),
353  msoftdrop = Var("groomedMass('SoftDropPuppi')",float, doc="Corrected soft drop mass with PUPPI",precision=10),
354  btagCMVA = Var("bDiscriminator('pfCombinedMVAV2BJetTags')",float,doc="CMVA V2 btag discriminator",precision=10),
355  btagDeepB = Var("bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')",float,doc="DeepCSV b+bb tag discriminator",precision=10),
356  btagCSVV2 = Var("bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",float,doc=" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",precision=10),
357  btagHbb = Var("bDiscriminator('pfBoostedDoubleSecondaryVertexAK8BJetTags')",float,doc="Higgs to BB tagger discriminator",precision=10),
358  deepTag_TvsQCD = Var("bDiscriminator('pfDeepBoostedDiscriminatorsJetTags:TvsQCD')",float,doc="DeepBoostedJet tagger top vs QCD discriminator",precision=10),
359  deepTag_WvsQCD = Var("bDiscriminator('pfDeepBoostedDiscriminatorsJetTags:WvsQCD')",float,doc="DeepBoostedJet tagger W vs QCD discriminator",precision=10),
360  deepTag_ZvsQCD = Var("bDiscriminator('pfDeepBoostedDiscriminatorsJetTags:ZvsQCD')",float,doc="DeepBoostedJet tagger Z vs QCD discriminator",precision=10),
361  deepTagMD_TvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:TvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger top vs QCD discriminator",precision=10),
362  deepTagMD_WvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:WvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger W vs QCD discriminator",precision=10),
363  deepTagMD_ZvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z vs QCD discriminator",precision=10),
364  deepTagMD_ZHbbvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZHbbvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z/H->bb vs QCD discriminator",precision=10),
365  deepTagMD_ZbbvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZbbvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z->bb vs QCD discriminator",precision=10),
366  deepTagMD_HbbvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:HbbvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger H->bb vs QCD discriminator",precision=10),
367  deepTagMD_ZHccvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ZHccvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z/H->cc vs QCD discriminator",precision=10),
368  deepTagMD_H4qvsQCD = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:H4qvsQCD')",float,doc="Mass-decorrelated DeepBoostedJet tagger H->4q vs QCD discriminator",precision=10),
369  deepTagMD_bbvsLight = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:bbvsLight')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z/H/gluon->bb vs light flavour discriminator",precision=10),
370  deepTagMD_ccvsLight = Var("bDiscriminator('pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:ccvsLight')",float,doc="Mass-decorrelated DeepBoostedJet tagger Z/H/gluon->cc vs light flavour discriminator",precision=10),
371  subJetIdx1 = Var("?nSubjetCollections()>0 && subjets('SoftDropPuppi').size()>0?subjets('SoftDropPuppi')[0].key():-1", int,
372  doc="index of first subjet"),
373  subJetIdx2 = Var("?nSubjetCollections()>0 && subjets('SoftDropPuppi').size()>1?subjets('SoftDropPuppi')[1].key():-1", int,
374  doc="index of second subjet"),
375 
376 # btagDeepC = Var("bDiscriminator('pfDeepCSVJetTags:probc')",float,doc="CMVA V2 btag discriminator",precision=10),
377 #puIdDisc = Var("userFloat('pileupJetId:fullDiscriminant')",float,doc="Pilup ID discriminant",precision=10),
378 # nConstituents = Var("numberOfDaughters()",int,doc="Number of particles in the jet"),
379 # rawFactor = Var("1.-jecFactor('Uncorrected')",float,doc="1 - Factor to get back to raw pT",precision=6),
380  )
381 )
382 ### Era dependent customization
383 run2_miniAOD_80XLegacy.toModify( bjetNN,outputFormulas = cms.vstring(["at(0)*0.31628304719924927+1.0454729795455933","0.5*(at(2)-at(1))*0.31628304719924927"]))
384 run2_miniAOD_80XLegacy.toModify( fatJetTable.variables, msoftdrop_chs = Var("userFloat('ak8PFJetsCHSSoftDropMass')",float, doc="Legacy uncorrected soft drop mass with CHS",precision=10))
385 run2_miniAOD_80XLegacy.toModify( fatJetTable.variables.tau1, expr = cms.string("userFloat(\'ak8PFJetsPuppiValueMap:NjettinessAK8PuppiTau1\')"),)
386 run2_miniAOD_80XLegacy.toModify( fatJetTable.variables.tau2, expr = cms.string("userFloat(\'ak8PFJetsPuppiValueMap:NjettinessAK8PuppiTau2\')"),)
387 run2_miniAOD_80XLegacy.toModify( fatJetTable.variables.tau3, expr = cms.string("userFloat(\'ak8PFJetsPuppiValueMap:NjettinessAK8PuppiTau3\')"),)
388 run2_miniAOD_80XLegacy.toModify( fatJetTable.variables, tau4 = None)
389 run2_miniAOD_80XLegacy.toModify( fatJetTable.variables, n2b1 = None)
390 run2_miniAOD_80XLegacy.toModify( fatJetTable.variables, n3b1 = None)
391 for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016:
392  modifier.toModify( fatJetTable.variables, jetId = Var("userInt('tightId')*2+userInt('looseId')",int,doc="Jet ID flags bit1 is loose, bit2 is tight"))
393 
394 run2_nanoAOD_92X.toModify( fatJetTable.variables, tau4 = None)
395 run2_nanoAOD_92X.toModify( fatJetTable.variables, n2b1 = None)
396 run2_nanoAOD_92X.toModify( fatJetTable.variables, n3b1 = None)
397 
398 
399 
400 subJetTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
401  src = cms.InputTag("slimmedJetsAK8PFPuppiSoftDropPacked","SubJets"),
402  cut = cms.string(""), #probably already applied in miniaod
403  name = cms.string("SubJet"),
404  doc = cms.string("slimmedJetsAK8, i.e. ak8 fat jets for boosted analysis"),
405  singleton = cms.bool(False), # the number of entries is variable
406  extension = cms.bool(False), # this is the main table for the jets
407  variables = cms.PSet(P4Vars,
408  btagCMVA = Var("bDiscriminator('pfCombinedMVAV2BJetTags')",float,doc="CMVA V2 btag discriminator",precision=10),
409  btagDeepB = Var("bDiscriminator('pfDeepCSVJetTags:probb')+bDiscriminator('pfDeepCSVJetTags:probbb')",float,doc="DeepCSV b+bb tag discriminator",precision=10),
410  btagCSVV2 = Var("bDiscriminator('pfCombinedInclusiveSecondaryVertexV2BJetTags')",float,doc=" pfCombinedInclusiveSecondaryVertexV2 b-tag discriminator (aka CSVV2)",precision=10),
411  rawFactor = Var("1.-jecFactor('Uncorrected')",float,doc="1 - Factor to get back to raw pT",precision=6),
412  tau1 = Var("userFloat('NjettinessAK8Subjets:tau1')",float, doc="Nsubjettiness (1 axis)",precision=10),
413  tau2 = Var("userFloat('NjettinessAK8Subjets:tau2')",float, doc="Nsubjettiness (2 axis)",precision=10),
414  tau3 = Var("userFloat('NjettinessAK8Subjets:tau3')",float, doc="Nsubjettiness (3 axis)",precision=10),
415  tau4 = Var("userFloat('NjettinessAK8Subjets:tau4')",float, doc="Nsubjettiness (4 axis)",precision=10),
416  n2b1 = Var("userFloat('nb1AK8PuppiSoftDropSubjets:ecfN2')", float, doc="N2 with beta=1", precision=10),
417  n3b1 = Var("userFloat('nb1AK8PuppiSoftDropSubjets:ecfN3')", float, doc="N3 with beta=1", precision=10),
418  )
419 )
420 
421 #jets are not as precise as muons
422 fatJetTable.variables.pt.precision=10
423 subJetTable.variables.pt.precision=10
424 
425 run2_miniAOD_80XLegacy.toModify( subJetTable.variables, tau1 = None)
426 run2_miniAOD_80XLegacy.toModify( subJetTable.variables, tau2 = None)
427 run2_miniAOD_80XLegacy.toModify( subJetTable.variables, tau3 = None)
428 run2_miniAOD_80XLegacy.toModify( subJetTable.variables, tau4 = None)
429 run2_miniAOD_80XLegacy.toModify( subJetTable.variables, n2b1 = None)
430 run2_miniAOD_80XLegacy.toModify( subJetTable.variables, n3b1 = None)
431 run2_miniAOD_80XLegacy.toModify( subJetTable.variables, btagCMVA = None, btagDeepB = None)
432 
433 run2_nanoAOD_92X.toModify( subJetTable.variables, tau4 = None)
434 run2_nanoAOD_92X.toModify( subJetTable.variables, n2b1 = None)
435 run2_nanoAOD_92X.toModify( subJetTable.variables, n3b1 = None)
436 
437 
438 
439 
440 
441 ## MC STUFF ######################
442 jetMCTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
443  src = cms.InputTag("linkedObjects","jets"),
444  cut = cms.string(""), #we should not filter on cross linked collections
445  name = cms.string("Jet"),
446  singleton = cms.bool(False), # the number of entries is variable
447  extension = cms.bool(True), # this is an extension table for the jets
448  variables = cms.PSet(
449  partonFlavour = Var("partonFlavour()", int, doc="flavour from parton matching"),
450  hadronFlavour = Var("hadronFlavour()", int, doc="flavour from hadron ghost clustering"),
451  genJetIdx = Var("?genJetFwdRef().backRef().isNonnull()?genJetFwdRef().backRef().key():-1", int, doc="index of matched gen jet"),
452  )
453 )
454 genJetTable = cms.EDProducer("SimpleCandidateFlatTableProducer",
455  src = cms.InputTag("slimmedGenJets"),
456  cut = cms.string("pt > 10"),
457  name = cms.string("GenJet"),
458  doc = cms.string("slimmedGenJets, i.e. ak4 Jets made with visible genparticles"),
459  singleton = cms.bool(False), # the number of entries is variable
460  extension = cms.bool(False), # this is the main table for the genjets
461  variables = cms.PSet(P4Vars,
462  #anything else?
463  )
464 )
465 patJetPartons = cms.EDProducer('HadronAndPartonSelector',
466  src = cms.InputTag("generator"),
467  particles = cms.InputTag("prunedGenParticles"),
468  partonMode = cms.string("Auto"),
469  fullChainPhysPartons = cms.bool(True)
470 )
471 genJetFlavourAssociation = cms.EDProducer("JetFlavourClustering",
472  jets = genJetTable.src,
473  bHadrons = cms.InputTag("patJetPartons","bHadrons"),
474  cHadrons = cms.InputTag("patJetPartons","cHadrons"),
475  partons = cms.InputTag("patJetPartons","physicsPartons"),
476  leptons = cms.InputTag("patJetPartons","leptons"),
477  jetAlgorithm = cms.string("AntiKt"),
478  rParam = cms.double(0.4),
479  ghostRescaling = cms.double(1e-18),
480  hadronFlavourHasPriority = cms.bool(False)
481 )
482 genJetFlavourTable = cms.EDProducer("GenJetFlavourTableProducer",
483  name = genJetTable.name,
484  src = genJetTable.src,
485  cut = genJetTable.cut,
486  deltaR = cms.double(0.1),
487  jetFlavourInfos = cms.InputTag("slimmedGenJetsFlavourInfos"),
488 )
489 
490 genJetAK8Table = cms.EDProducer("SimpleCandidateFlatTableProducer",
491  src = cms.InputTag("slimmedGenJetsAK8"),
492  cut = cms.string("pt > 100."),
493  name = cms.string("GenJetAK8"),
494  doc = cms.string("slimmedGenJetsAK8, i.e. ak8 Jets made with visible genparticles"),
495  singleton = cms.bool(False), # the number of entries is variable
496  extension = cms.bool(False), # this is the main table for the genjets
497  variables = cms.PSet(P4Vars,
498  #anything else?
499  )
500 )
501 genJetAK8FlavourAssociation = cms.EDProducer("JetFlavourClustering",
502  jets = genJetAK8Table.src,
503  bHadrons = cms.InputTag("patJetPartons","bHadrons"),
504  cHadrons = cms.InputTag("patJetPartons","cHadrons"),
505  partons = cms.InputTag("patJetPartons","physicsPartons"),
506  leptons = cms.InputTag("patJetPartons","leptons"),
507  jetAlgorithm = cms.string("AntiKt"),
508  rParam = cms.double(0.8),
509  ghostRescaling = cms.double(1e-18),
510  hadronFlavourHasPriority = cms.bool(False)
511 )
512 genJetAK8FlavourTable = cms.EDProducer("GenJetFlavourTableProducer",
513  name = genJetAK8Table.name,
514  src = genJetAK8Table.src,
515  cut = genJetAK8Table.cut,
516  deltaR = cms.double(0.1),
517  jetFlavourInfos = cms.InputTag("genJetAK8FlavourAssociation"),
518 )
519 genSubJetAK8Table = cms.EDProducer("SimpleCandidateFlatTableProducer",
520  src = cms.InputTag("slimmedGenJetsAK8SoftDropSubJets"),
521  cut = cms.string(""), ## These don't get a pt cut, but in miniAOD only subjets from fat jets with pt > 100 are kept
522  name = cms.string("SubGenJetAK8"),
523  doc = cms.string("slimmedGenJetsAK8SoftDropSubJets, i.e. subjets of ak8 Jets made with visible genparticles"),
524  singleton = cms.bool(False), # the number of entries is variable
525  extension = cms.bool(False), # this is the main table for the genjets
526  variables = cms.PSet(P4Vars,
527  #anything else?
528  )
529 )
530 ### Era dependent customization
531 run2_miniAOD_80XLegacy.toModify( genJetFlavourTable, jetFlavourInfos = cms.InputTag("genJetFlavourAssociation"),)
532 run2_nanoAOD_92X.toModify( genJetFlavourTable, jetFlavourInfos = cms.InputTag("genJetFlavourAssociation"),)
533 
534 #before cross linking
535 jetSequence = cms.Sequence(tightJetId+tightJetIdLepVeto+bJetVars+slimmedJetsWithUserData+jetCorrFactorsNano+updatedJets+tightJetIdAK8+tightJetIdLepVetoAK8+slimmedJetsAK8WithUserData+jetCorrFactorsAK8+updatedJetsAK8+chsForSATkJets+softActivityJets+softActivityJets2+softActivityJets5+softActivityJets10+finalJets+finalJetsAK8)
536 
537 from RecoJets.JetProducers.QGTagger_cfi import QGTagger
538 qgtagger80x=QGTagger.clone(srcJets="slimmedJets",srcVertexCollection="offlineSlimmedPrimaryVertices")
539 
540 _jetSequence_80X = jetSequence.copy()
541 _jetSequence_80X.replace(tightJetIdLepVeto, looseJetId)
542 _jetSequence_80X.replace(tightJetIdLepVetoAK8, looseJetIdAK8)
543 _jetSequence_80X.insert(1,qgtagger80x)
544 run2_miniAOD_80XLegacy.toReplaceWith(jetSequence, _jetSequence_80X)
545 
546 _jetSequence_94X2016 = jetSequence.copy()
547 _jetSequence_94X2016.replace(tightJetIdLepVeto, looseJetId)
548 _jetSequence_94X2016.replace(tightJetIdLepVetoAK8, looseJetIdAK8)
549 run2_nanoAOD_94X2016.toReplaceWith(jetSequence, _jetSequence_94X2016)
550 
551 #after cross linkining
552 jetTables = cms.Sequence(bjetMVA+bjetNN+jetTable+fatJetTable+subJetTable+saJetTable+saTable)
553 
554 #MC only producers and tables
555 jetMC = cms.Sequence(jetMCTable+genJetTable+patJetPartons+genJetFlavourTable+genJetAK8Table+genJetAK8FlavourAssociation+genJetAK8FlavourTable+genSubJetAK8Table)
556 _jetMC_pre94X = jetMC.copy()
557 _jetMC_pre94X.insert(_jetMC_pre94X.index(genJetFlavourTable),genJetFlavourAssociation)
558 _jetMC_pre94X.remove(genSubJetAK8Table)
559 run2_miniAOD_80XLegacy.toReplaceWith(jetMC, _jetMC_pre94X)
560 run2_nanoAOD_92X.toReplaceWith(jetMC, _jetMC_pre94X)
561 
562 
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