CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
nano_cff.py
Go to the documentation of this file.
1 from __future__ import print_function
2 import FWCore.ParameterSet.Config as cms
21 from PhysicsTools.NanoAOD.met_cff import *
29 
30 nanoMetadata = cms.EDProducer("UniqueStringProducer",
31  strings = cms.PSet(
32  tag = cms.string("untagged"),
33  )
34 )
35 
36 linkedObjects = cms.EDProducer("PATObjectCrossLinker",
37  jets=cms.InputTag("finalJets"),
38  muons=cms.InputTag("finalMuons"),
39  electrons=cms.InputTag("finalElectrons"),
40  taus=cms.InputTag("finalTaus"),
41  photons=cms.InputTag("finalPhotons"),
42 )
43 
44 simpleCleanerTable = cms.EDProducer("NanoAODSimpleCrossCleaner",
45  name=cms.string("cleanmask"),
46  doc=cms.string("simple cleaning mask with priority to leptons"),
47  jets=cms.InputTag("linkedObjects","jets"),
48  muons=cms.InputTag("linkedObjects","muons"),
49  electrons=cms.InputTag("linkedObjects","electrons"),
50  taus=cms.InputTag("linkedObjects","taus"),
51  photons=cms.InputTag("linkedObjects","photons"),
52  jetSel=cms.string("pt>15"),
53  muonSel=cms.string("track.isNonnull && isLooseMuon && isPFMuon && innerTrack.validFraction >= 0.49 && ( isGlobalMuon && globalTrack.normalizedChi2 < 3 && combinedQuality.chi2LocalPosition < 12 && combinedQuality.trkKink < 20 && segmentCompatibility >= 0.303 || segmentCompatibility >= 0.451 )"),
54  electronSel=cms.string(""),
55  tauSel=cms.string(""),
56  photonSel=cms.string(""),
57  jetName=cms.string("Jet"),muonName=cms.string("Muon"),electronName=cms.string("Electron"),
58  tauName=cms.string("Tau"),photonName=cms.string("Photon")
59 )
60 
61 
62 lhcInfoTable = cms.EDProducer("LHCInfoProducer",
63  precision = cms.int32(10),
64 )
65 
66 nanoTableTaskCommon = cms.Task(
67  cms.Task(nanoMetadata), jetTask, jetForMETTask, extraFlagsProducersTask, muonTask, tauTask, boostedTauTask,
68  electronTask , lowPtElectronTask, photonTask,
69  vertexTask, isoTrackTask, jetLepTask, # must be after all the leptons
70  softActivityTask,
71  cms.Task(linkedObjects),
72  jetTablesTask, muonTablesTask, fsrTablesTask, tauTablesTask, boostedTauTablesTask,
73  electronTablesTask, lowPtElectronTablesTask, photonTablesTask,
74  globalTablesTask, vertexTablesTask, metTablesTask, simpleCleanerTable, extraFlagsTableTask,
75  isoTrackTablesTask,softActivityTablesTask
76  )
77 
78 nanoSequenceCommon = cms.Sequence(nanoTableTaskCommon)
79 
80 nanoSequenceOnlyFullSim = cms.Sequence(triggerObjectTablesTask)
81 nanoSequenceOnlyData = cms.Sequence(cms.Sequence(protonTablesTask) + lhcInfoTable)
82 
83 nanoSequence = cms.Sequence(nanoSequenceCommon + nanoSequenceOnlyData + nanoSequenceOnlyFullSim)
84 
85 nanoTableTaskFS = cms.Task(genParticleTask, particleLevelTask, jetMCTask, muonMCTask, electronMCTask, lowPtElectronMCTask, photonMCTask,
86  tauMCTask, boostedTauMCTask,
87  metMCTable, ttbarCatMCProducersTask, globalTablesMCTask, cms.Task(btagWeightTable), ttbarCategoryTableTask,
88  genWeightsTableTask, genVertexTablesTask, genParticleTablesTask, genProtonTablesTask, particleLevelTablesTask)
89 
90 nanoSequenceFS = cms.Sequence(nanoSequenceCommon + cms.Sequence(nanoTableTaskFS))
91 
92 # GenVertex only stored in newer MiniAOD
93 nanoSequenceMC = nanoSequenceFS.copy()
94 nanoSequenceMC.insert(nanoSequenceFS.index(nanoSequenceCommon)+1,nanoSequenceOnlyFullSim)
95 
96 # modifier which adds new tauIDs (currently only deepTauId2017v2p1 is being added)
97 import RecoTauTag.RecoTau.tools.runTauIdMVA as tauIdConfig
98 def nanoAOD_addTauIds(process, idsToRun=[]):
99  if idsToRun: #no-empty list of tauIDs to run
100  updatedTauName = "slimmedTausUpdated"
101  tauIdEmbedder = tauIdConfig.TauIDEmbedder(process, debug = False,
102  updatedTauName = updatedTauName,
103  toKeep = idsToRun)
104  tauIdEmbedder.runTauID()
105  _tauTask = patTauMVAIDsTask.copy()
106  _tauTask.add(process.rerunMvaIsolationTask)
107  _tauTask.add(finalTaus)
108  process.finalTaus.src = updatedTauName
109  #remember to adjust the selection and tables with added IDs
110 
111  process.tauTask = _tauTask.copy()
112 
113  return process
114 
115 def nanoAOD_addBoostedTauIds(process, idsToRun=[]):
116  if idsToRun: #no-empty list of tauIDs to run
117  updatedBoostedTauName = "slimmedTausBoostedNewID"
118  boostedTauIdEmbedder = tauIdConfig.TauIDEmbedder(process, debug = False,
119  originalTauName = "slimmedTausBoosted",
120  updatedTauName = updatedBoostedTauName,
121  postfix = "Boosted",
122  toKeep = idsToRun)
123  boostedTauIdEmbedder.runTauID()
124  _boostedTauTask = process.rerunMvaIsolationTaskBoosted.copy()
125  _boostedTauTask.add(getattr(process, updatedBoostedTauName))
126  _boostedTauTask.add(process.finalBoostedTaus)
127  process.finalBoostedTaus.src = updatedBoostedTauName
128  #remember to adjust the selection and tables with added IDs
129 
130  process.boostedTauTask = _boostedTauTask.copy()
131 
132  return process
133 
134 
135 from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection
136 def nanoAOD_addDeepInfo(process,addDeepBTag,addDeepFlavour):
137  _btagDiscriminators=[]
138  if addDeepBTag:
139  print("Updating process to run DeepCSV btag")
140  _btagDiscriminators += ['pfDeepCSVJetTags:probb','pfDeepCSVJetTags:probbb','pfDeepCSVJetTags:probc']
141  if addDeepFlavour:
142  print("Updating process to run DeepFlavour btag")
143  _btagDiscriminators += ['pfDeepFlavourJetTags:probb','pfDeepFlavourJetTags:probbb','pfDeepFlavourJetTags:problepb','pfDeepFlavourJetTags:probc']
144  if len(_btagDiscriminators)==0: return process
145  print("Will recalculate the following discriminators: "+", ".join(_btagDiscriminators))
146  updateJetCollection(
147  process,
148  jetSource = cms.InputTag('slimmedJets'),
149  jetCorrections = ('AK4PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute','L2L3Residual']), 'None'),
150  btagDiscriminators = _btagDiscriminators,
151  postfix = 'WithDeepInfo',
152  )
153  process.load("Configuration.StandardSequences.MagneticField_cff")
154  process.jetCorrFactorsNano.src="selectedUpdatedPatJetsWithDeepInfo"
155  process.updatedJets.jetSource="selectedUpdatedPatJetsWithDeepInfo"
156  return process
157 
158 
159 from PhysicsTools.PatUtils.tools.runMETCorrectionsAndUncertainties import runMetCorAndUncFromMiniAOD
160 def nanoAOD_recalibrateMETs(process,isData):
161  # add DeepMETs
162  nanoAOD_DeepMET_switch = cms.PSet(
163  ResponseTune_Graph = cms.untracked.string('RecoMET/METPUSubtraction/data/deepmet/deepmet_resp_v1_2018.pb')
164  )
165  for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016:
166  modifier.toModify(nanoAOD_DeepMET_switch, ResponseTune_Graph=cms.untracked.string("RecoMET/METPUSubtraction/data/deepmet/deepmet_resp_v1_2016.pb"))
167 
168  print("add DeepMET Producers")
169  process.load('RecoMET.METPUSubtraction.deepMETProducer_cfi')
170  process.deepMETsResolutionTune = process.deepMETProducer.clone()
171  process.deepMETsResponseTune = process.deepMETProducer.clone()
172  process.deepMETsResponseTune.graph_path = nanoAOD_DeepMET_switch.ResponseTune_Graph.value()
173 
174  runMetCorAndUncFromMiniAOD(process,isData=isData)
175  process.nanoSequenceCommon.insert(2,cms.Sequence(process.fullPatMetSequence))
176 
177 
178  from PhysicsTools.PatAlgos.slimming.puppiForMET_cff import makePuppiesFromMiniAOD
179  makePuppiesFromMiniAOD(process,True)
180  process.puppiNoLep.useExistingWeights = True
181  process.puppi.useExistingWeights = True
182  run2_nanoAOD_106Xv1.toModify(process.puppiNoLep, useExistingWeights = False)
183  run2_nanoAOD_106Xv1.toModify(process.puppi, useExistingWeights = False)
184  print("will make Puppies on top of MINIAOD")
185 
186 # makePuppiesFromMiniAOD(process,True) # call this before in the global customizer otherwise it would reset photon IDs in VID
187  nanoAOD_PuppiV15_switch = cms.PSet(
188  recoMetFromPFCs = cms.untracked.bool(False),
189  reclusterJets = cms.untracked.bool(False),
190  )
191  run2_nanoAOD_106Xv1.toModify(nanoAOD_PuppiV15_switch,recoMetFromPFCs=True,reclusterJets=True)
192  if nanoAOD_PuppiV15_switch.reclusterJets:
193  from RecoJets.JetProducers.ak4PFJets_cfi import ak4PFJets
194  from PhysicsTools.PatAlgos.tools.helpers import getPatAlgosToolsTask, addToProcessAndTask
195  task = getPatAlgosToolsTask(process)
196  addToProcessAndTask('ak4PuppiJets', ak4PFJets.clone (src = 'puppi', doAreaFastjet = True, jetPtMin = 10.), process, task)
197  from PhysicsTools.PatAlgos.tools.jetTools import addJetCollection
198  addJetCollection(process,
199  labelName = 'Puppi',
200  jetSource = cms.InputTag('ak4PuppiJets'),
201  algo = 'AK', rParam=0.4,
202  genJetCollection=cms.InputTag('slimmedGenJets'),
203  jetCorrections = ('AK4PFPuppi', ['L1FastJet', 'L2Relative', 'L3Absolute','L2L3Residual'], 'None'),
204  pfCandidates = cms.InputTag('packedPFCandidates'),
205  pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'),
206  svSource = cms.InputTag('slimmedSecondaryVertices'),
207  muSource =cms.InputTag( 'slimmedMuons'),
208  elSource = cms.InputTag('slimmedElectrons'),
209  genParticles= cms.InputTag('prunedGenParticles'),
210  getJetMCFlavour= False
211  )
212 
213  process.patJetsPuppi.addGenPartonMatch = cms.bool(False)
214  process.patJetsPuppi.addGenJetMatch = cms.bool(False)
215 
216  print("nanoAOD_PuppiV15_switch.reclusterJets is true")
217 
218  runMetCorAndUncFromMiniAOD(process,isData=isData,metType="Puppi",postfix="Puppi",jetFlavor="AK4PFPuppi", recoMetFromPFCs=bool(nanoAOD_PuppiV15_switch.recoMetFromPFCs), reclusterJets=bool(nanoAOD_PuppiV15_switch.reclusterJets))
219  process.nanoSequenceCommon.insert(2,cms.Sequence(process.puppiMETSequence+process.fullPatMetSequencePuppi))
220 
221  return process
222 
224 def nanoAOD_activateVID(process):
225 
226  switchOnVIDElectronIdProducer(process,DataFormat.MiniAOD,electronTask)
227  for modname in electron_id_modules_WorkingPoints_nanoAOD.modules:
228  setupAllVIDIdsInModule(process,modname,setupVIDElectronSelection)
229 
230  electronTask_ = process.egmGsfElectronIDTask.copy()
231  electronTask_.add(electronTask.copy())
232  process.electronTask = electronTask_.copy()
233  for modifier in run2_miniAOD_80XLegacy,run2_nanoAOD_94XMiniAODv1,run2_nanoAOD_94XMiniAODv2,run2_nanoAOD_94X2016,run2_nanoAOD_102Xv1,run2_nanoAOD_106Xv1:
234  modifier.toModify(process.electronMVAValueMapProducer, src = "slimmedElectronsUpdated")
235  modifier.toModify(process.egmGsfElectronIDs, physicsObjectSrc = "slimmedElectronsUpdated")
236 
237  switchOnVIDPhotonIdProducer(process,DataFormat.MiniAOD,photonTask) # do not call this to avoid resetting photon IDs in VID, if called before inside makePuppiesFromMiniAOD
238  for modname in photon_id_modules_WorkingPoints_nanoAOD.modules:
239  setupAllVIDIdsInModule(process,modname,setupVIDPhotonSelection)
240 
241  photonTask_ = process.egmPhotonIDTask.copy()
242  photonTask_.add(photonTask.copy())
243  process.photonTask = photonTask_.copy()
244  for modifier in run2_miniAOD_80XLegacy,run2_nanoAOD_94XMiniAODv1,run2_nanoAOD_94XMiniAODv2,run2_nanoAOD_94X2016,run2_nanoAOD_102Xv1:
245  modifier.toModify(process.photonMVAValueMapProducer, src = "slimmedPhotonsTo106X")
246  modifier.toModify(process.egmPhotonIDs, physicsObjectSrc = "slimmedPhotonsTo106X")
247  return process
248 
249 def nanoAOD_addDeepInfoAK8(process, addDeepBTag, addDeepBoostedJet, addDeepDoubleX, addDeepDoubleXV2, addParticleNet, addParticleNetMass, jecPayload):
250  _btagDiscriminators=[]
251  if addDeepBTag:
252  print("Updating process to run DeepCSV btag to AK8 jets")
253  _btagDiscriminators += ['pfDeepCSVJetTags:probb','pfDeepCSVJetTags:probbb']
254  if addDeepBoostedJet:
255  print("Updating process to run DeepBoostedJet on datasets before 103X")
256  from RecoBTag.ONNXRuntime.pfDeepBoostedJet_cff import _pfDeepBoostedJetTagsAll as pfDeepBoostedJetTagsAll
257  _btagDiscriminators += pfDeepBoostedJetTagsAll
258  if addParticleNet:
259  print("Updating process to run ParticleNet before it's included in MiniAOD")
260  from RecoBTag.ONNXRuntime.pfParticleNet_cff import _pfParticleNetJetTagsAll as pfParticleNetJetTagsAll
261  _btagDiscriminators += pfParticleNetJetTagsAll
262  if addParticleNetMass:
263  from RecoBTag.ONNXRuntime.pfParticleNet_cff import _pfParticleNetMassRegressionOutputs
264  _btagDiscriminators += _pfParticleNetMassRegressionOutputs
265  if addDeepDoubleX:
266  print("Updating process to run DeepDoubleX on datasets before 104X")
267  _btagDiscriminators += ['pfDeepDoubleBvLJetTags:probHbb', \
268  'pfDeepDoubleCvLJetTags:probHcc', \
269  'pfDeepDoubleCvBJetTags:probHcc', \
270  'pfMassIndependentDeepDoubleBvLJetTags:probHbb', 'pfMassIndependentDeepDoubleCvLJetTags:probHcc', 'pfMassIndependentDeepDoubleCvBJetTags:probHcc']
271  if addDeepDoubleXV2:
272  print("Updating process to run DeepDoubleXv2 on datasets before 11X")
273  _btagDiscriminators += [
274  'pfMassIndependentDeepDoubleBvLV2JetTags:probHbb',
275  'pfMassIndependentDeepDoubleCvLV2JetTags:probHcc',
276  'pfMassIndependentDeepDoubleCvBV2JetTags:probHcc'
277  ]
278  if len(_btagDiscriminators)==0: return process
279  print("Will recalculate the following discriminators on AK8 jets: "+", ".join(_btagDiscriminators))
280  updateJetCollection(
281  process,
282  jetSource = cms.InputTag('slimmedJetsAK8'),
283  pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'),
284  svSource = cms.InputTag('slimmedSecondaryVertices'),
285  rParam = 0.8,
286  jetCorrections = (jecPayload.value(), cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual']), 'None'),
287  btagDiscriminators = _btagDiscriminators,
288  postfix='AK8WithDeepInfo',
289  printWarning = False
290  )
291  process.jetCorrFactorsAK8.src="selectedUpdatedPatJetsAK8WithDeepInfo"
292  process.updatedJetsAK8.jetSource="selectedUpdatedPatJetsAK8WithDeepInfo"
293  return process
294 
295 from PhysicsTools.PatUtils.tools.runMETCorrectionsAndUncertainties import runMetCorAndUncFromMiniAOD
296 def nanoAOD_runMETfixEE2017(process,isData):
297  runMetCorAndUncFromMiniAOD(process,isData=isData,
298  fixEE2017 = True,
299  fixEE2017Params = {'userawPt': True, 'ptThreshold':50.0, 'minEtaThreshold':2.65, 'maxEtaThreshold': 3.139},
300  postfix = "FixEE2017")
301  process.nanoSequenceCommon.insert(2,process.fullPatMetSequenceFixEE2017)
302 
303 
305 
306  process = nanoAOD_activateVID(process)
307  nanoAOD_addDeepInfo_switch = cms.PSet(
308  nanoAOD_addDeepBTag_switch = cms.untracked.bool(False),
309  nanoAOD_addDeepFlavourTag_switch = cms.untracked.bool(False),
310  )
311  run2_miniAOD_80XLegacy.toModify(nanoAOD_addDeepInfo_switch, nanoAOD_addDeepBTag_switch = cms.untracked.bool(True))
312  for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016, run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
313  modifier.toModify(nanoAOD_addDeepInfo_switch, nanoAOD_addDeepFlavourTag_switch = cms.untracked.bool(True))
314  process = nanoAOD_addDeepInfo(process,
315  addDeepBTag=nanoAOD_addDeepInfo_switch.nanoAOD_addDeepBTag_switch,
316  addDeepFlavour=nanoAOD_addDeepInfo_switch.nanoAOD_addDeepFlavourTag_switch)
317  nanoAOD_addDeepInfoAK8_switch = cms.PSet(
318  nanoAOD_addDeepBTag_switch = cms.untracked.bool(False),
319  nanoAOD_addDeepBoostedJet_switch = cms.untracked.bool(False),
320  nanoAOD_addDeepDoubleX_switch = cms.untracked.bool(False),
321  nanoAOD_addDeepDoubleXV2_switch = cms.untracked.bool(False),
322  nanoAOD_addParticleNet_switch = cms.untracked.bool(False),
323  nanoAOD_addParticleNetMass_switch = cms.untracked.bool(False),
324  jecPayload = cms.untracked.string('AK8PFPuppi')
325  )
326  # deepAK8 should not run on 80X, that contains ak8PFJetsCHS jets
327  run2_miniAOD_80XLegacy.toModify(nanoAOD_addDeepInfoAK8_switch,
328  nanoAOD_addDeepBTag_switch = True,
329  jecPayload = 'AK8PFchs')
330  # for 94X and 102X samples: needs to run DeepAK8, DeepDoubleX and ParticleNet
331  (run2_nanoAOD_94X2016 | run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_102Xv1).toModify(
332  nanoAOD_addDeepInfoAK8_switch,
333  nanoAOD_addDeepBoostedJet_switch = True,
334  nanoAOD_addDeepDoubleX_switch = True,
335  nanoAOD_addDeepDoubleXV2_switch = True,
336  nanoAOD_addParticleNet_switch = True,
337  nanoAOD_addParticleNetMass_switch = True,
338  )
339  # for 106Xv1: only needs to run ParticleNet and DDXV2; DeepAK8, DeepDoubleX are already in MiniAOD
340  run2_nanoAOD_106Xv1.toModify(
341  nanoAOD_addDeepInfoAK8_switch,
342  nanoAOD_addDeepDoubleXV2_switch = True,
343  nanoAOD_addParticleNet_switch = True,
344  nanoAOD_addParticleNetMass_switch = True,
345  )
346 
347  run2_nanoAOD_106Xv2.toModify(
348  nanoAOD_addDeepInfoAK8_switch,
349  nanoAOD_addParticleNetMass_switch = True,
350  )
351 
352  process = nanoAOD_addDeepInfoAK8(process,
353  addDeepBTag=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepBTag_switch,
354  addDeepBoostedJet=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepBoostedJet_switch,
355  addDeepDoubleX=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepDoubleX_switch,
356  addDeepDoubleXV2=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepDoubleXV2_switch,
357  addParticleNet=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addParticleNet_switch,
358  addParticleNetMass=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addParticleNetMass_switch,
359  jecPayload=nanoAOD_addDeepInfoAK8_switch.jecPayload)
360  nanoAOD_tau_switch = cms.PSet(
361  idsToAdd = cms.vstring()
362  )
363  (run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94X2016 | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1).toModify(nanoAOD_tau_switch, idsToAdd = ["deepTau2017v2p1"])
364  (run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94X2016 | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1).toModify(process, lambda p : nanoAOD_addTauIds(p, nanoAOD_tau_switch.idsToAdd.value()))
365  nanoAOD_boostedTau_switch = cms.PSet(
366  idsToAdd = cms.vstring()
367  )
368  run2_nanoAOD_106Xv2.toModify(nanoAOD_boostedTau_switch, idsToAdd = ["2017v2", "dR0p32017v2", "newDM2017v2","againstEle2018"])
369  run2_nanoAOD_106Xv2.toModify(process, lambda p : nanoAOD_addBoostedTauIds(p, nanoAOD_boostedTau_switch.idsToAdd.value()))
370 
371  return process
372 
374  process = nanoAOD_customizeCommon(process)
375 
376  for modifier in run2_miniAOD_80XLegacy,run2_nanoAOD_94X2016,run2_nanoAOD_94XMiniAODv1,run2_nanoAOD_94XMiniAODv2,run2_nanoAOD_102Xv1,run2_nanoAOD_106Xv1:
377  modifier.toModify(process, lambda p: nanoAOD_recalibrateMETs(p,isData=True))
378  for modifier in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
379  modifier.toModify(process, lambda p: nanoAOD_runMETfixEE2017(p,isData=True))
380  return process
381 
382 def nanoAOD_customizeMC(process):
383  process = nanoAOD_customizeCommon(process)
384  for modifier in run2_miniAOD_80XLegacy,run2_nanoAOD_94X2016,run2_nanoAOD_94XMiniAODv1,run2_nanoAOD_94XMiniAODv2,run2_nanoAOD_102Xv1,run2_nanoAOD_106Xv1:
385  modifier.toModify(process, lambda p: nanoAOD_recalibrateMETs(p,isData=False))
386  for modifier in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
387  modifier.toModify(process, lambda p: nanoAOD_runMETfixEE2017(p,isData=False))
388  return process
389 
390 ###increasing the precision of selected GenParticles.
392  pdgSelection="?(abs(pdgId) == 11|| abs(pdgId)==13 || abs(pdgId)==15 ||abs(pdgId)== 12 || abs(pdgId)== 14 || abs(pdgId)== 16|| abs(pdgId)== 24|| pdgId== 23)"
393  # Keep precision same as default RECO for selected particles
394  ptPrecision="{}?{}:{}".format(pdgSelection, CandVars.pt.precision.value(),genParticleTable.variables.pt.precision.value())
395  process.genParticleTable.variables.pt.precision=cms.string(ptPrecision)
396  phiPrecision="{} ? {} : {}".format(pdgSelection, CandVars.phi.precision.value(), genParticleTable.variables.phi.precision.value())
397  process.genParticleTable.variables.phi.precision=cms.string(phiPrecision)
398  etaPrecision="{} ? {} : {}".format(pdgSelection, CandVars.eta.precision.value(), genParticleTable.variables.eta.precision.value())
399  process.genParticleTable.variables.eta.precision=cms.string(etaPrecision)
400  return process
def setupAllVIDIdsInModule
Definition: vid_id_tools.py:49
def nanoAOD_customizeCommon
Definition: nano_cff.py:304
def switchOnVIDElectronIdProducer
Electrons.
Definition: vid_id_tools.py:66
def getPatAlgosToolsTask
Definition: helpers.py:13
def nanoAOD_customizeData
Definition: nano_cff.py:373
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
def nanoAOD_runMETfixEE2017
Definition: nano_cff.py:296
def nanoAOD_addDeepInfo
Definition: nano_cff.py:136
static std::string join(char **cmd)
Definition: RemoteFile.cc:19
def nanoAOD_customizeMC
Definition: nano_cff.py:382
def switchOnVIDPhotonIdProducer
Photons.
def nanoAOD_activateVID
Definition: nano_cff.py:224
def nanoWmassGenCustomize
increasing the precision of selected GenParticles.
Definition: nano_cff.py:391
def addToProcessAndTask
Definition: helpers.py:28
def nanoAOD_addDeepInfoAK8
Definition: nano_cff.py:249
def nanoAOD_addTauIds
Definition: nano_cff.py:98
def nanoAOD_addBoostedTauIds
Definition: nano_cff.py:115
def nanoAOD_recalibrateMETs
Definition: nano_cff.py:160