CMS 3D CMS Logo

nano_cff.py
Go to the documentation of this file.
1 from __future__ import print_function
2 import FWCore.ParameterSet.Config as cms
18 from PhysicsTools.NanoAOD.met_cff import *
22 
23 
24 nanoMetadata = cms.EDProducer("UniqueStringProducer",
25  strings = cms.PSet(
26  tag = cms.string("untagged"),
27  )
28 )
29 
30 linkedObjects = cms.EDProducer("PATObjectCrossLinker",
31  jets=cms.InputTag("finalJets"),
32  muons=cms.InputTag("finalMuons"),
33  electrons=cms.InputTag("finalElectrons"),
34  taus=cms.InputTag("finalTaus"),
35  photons=cms.InputTag("finalPhotons"),
36 )
37 
38 simpleCleanerTable = cms.EDProducer("NanoAODSimpleCrossCleaner",
39  name=cms.string("cleanmask"),
40  doc=cms.string("simple cleaning mask with priority to leptons"),
41  jets=cms.InputTag("linkedObjects","jets"),
42  muons=cms.InputTag("linkedObjects","muons"),
43  electrons=cms.InputTag("linkedObjects","electrons"),
44  taus=cms.InputTag("linkedObjects","taus"),
45  photons=cms.InputTag("linkedObjects","photons"),
46  jetSel=cms.string("pt>15"),
47  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 )"),
48  electronSel=cms.string(""),
49  tauSel=cms.string(""),
50  photonSel=cms.string(""),
51  jetName=cms.string("Jet"),muonName=cms.string("Muon"),electronName=cms.string("Electron"),
52  tauName=cms.string("Tau"),photonName=cms.string("Photon")
53 )
54 
55 btagSFdir="PhysicsTools/NanoAOD/data/btagSF/"
56 
57 btagWeightTable = cms.EDProducer("BTagSFProducer",
58  src = cms.InputTag("linkedObjects","jets"),
59  cut = cms.string("pt > 25. && abs(eta) < 2.5"),
60  discNames = cms.vstring(
61  "pfCombinedInclusiveSecondaryVertexV2BJetTags",
62  "pfDeepCSVJetTags:probb+pfDeepCSVJetTags:probbb", #if multiple MiniAOD branches need to be summed up (e.g., DeepCSV b+bb), separate them using '+' delimiter
63  "pfCombinedMVAV2BJetTags"
64  ),
65  discShortNames = cms.vstring(
66  "CSVV2",
67  "DeepCSVB",
68  "CMVA"
69  ),
70  weightFiles = cms.vstring( #default settings are for 2017 94X. toModify function is called later for other eras.
71  btagSFdir+"CSVv2_94XSF_V2_B_F.csv",
72  btagSFdir+"DeepCSV_94XSF_V2_B_F.csv",
73  "unavailable" #if SFs for an algorithm in an era is unavailable, the corresponding branch will not be stored
74  ),
75  operatingPoints = cms.vstring("3","3","3"), #loose = 0, medium = 1, tight = 2, reshaping = 3
76  measurementTypesB = cms.vstring("iterativefit","iterativefit","iterativefit"), #e.g. "comb", "incl", "ttbar", "iterativefit"
77  measurementTypesC = cms.vstring("iterativefit","iterativefit","iterativefit"),
78  measurementTypesUDSG = cms.vstring("iterativefit","iterativefit","iterativefit"),
79  sysTypes = cms.vstring("central","central","central")
80 )
81 
82 for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016: # to be updated when SF for Summer16MiniAODv3 MC will be available
83  modifier.toModify(btagWeightTable,
84  cut = cms.string("pt > 25. && abs(eta) < 2.4"), #80X corresponds to 2016, |eta| < 2.4
85  weightFiles = cms.vstring( #80X corresponds to 2016 SFs
86  btagSFdir+"CSVv2_Moriond17_B_H.csv",
87  "unavailable",
88  btagSFdir+"cMVAv2_Moriond17_B_H.csv"
89  )
90  )
91 
92 
93 lheInfoTable = cms.EDProducer("LHETablesProducer",
94  lheInfo = cms.VInputTag(cms.InputTag("externalLHEProducer"), cms.InputTag("source")),
95  precision = cms.int32(14),
96  storeLHEParticles = cms.bool(True)
97 )
98 
99 l1bits=cms.EDProducer("L1TriggerResultsConverter", src=cms.InputTag("gtStage2Digis"), legacyL1=cms.bool(False),
100  storeUnprefireableBit=cms.bool(True), src_ext=cms.InputTag("gtStage2Digis"))
101 (run2_miniAOD_80XLegacy | run2_nanoAOD_94X2016 | run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_102Xv1).toModify(l1bits, storeUnprefireableBit=False)
102 
103 nanoSequenceCommon = cms.Sequence(
104  nanoMetadata + jetSequence + muonSequence + tauSequence + electronSequence+photonSequence+vertexSequence+
105  isoTrackSequence + jetLepSequence + # must be after all the leptons
106  linkedObjects +
107  jetTables + muonTables + tauTables + electronTables + photonTables + globalTables +vertexTables+ metTables+simpleCleanerTable + isoTrackTables
108  )
109 nanoSequenceOnlyFullSim = cms.Sequence(triggerObjectTables + l1bits)
110 
111 nanoSequence = cms.Sequence(nanoSequenceCommon + nanoSequenceOnlyFullSim)
112 
113 nanoSequenceFS = cms.Sequence(genParticleSequence + genVertexTables + particleLevelSequence + nanoSequenceCommon + jetMC + muonMC + electronMC + photonMC + tauMC + metMC + ttbarCatMCProducers + globalTablesMC + btagWeightTable + genWeightsTable + genVertexTable + genParticleTables + particleLevelTables + lheInfoTable + ttbarCategoryTable )
114 
115 (run2_nanoAOD_92X | run2_miniAOD_80XLegacy | run2_nanoAOD_94X2016 | run2_nanoAOD_94X2016 | \
116  run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94XMiniAODv2 | \
117  run2_nanoAOD_102Xv1).toReplaceWith(nanoSequenceFS, nanoSequenceFS.copyAndExclude([genVertexTable, genVertexT0Table]))
118 
119 # GenVertex only stored in newer MiniAOD
120 nanoSequenceMC = nanoSequenceFS.copy()
121 nanoSequenceMC.insert(nanoSequenceFS.index(nanoSequenceCommon)+1,nanoSequenceOnlyFullSim)
122 
123 # modify extraFlagsTable to store ecalBadCalibFilter decision which is re-run with updated bad crystal list for 2017 and 2018 samples
124 for modifier in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2, run2_nanoAOD_102Xv1:
125  modifier.toModify(extraFlagsTable, variables= cms.PSet())
126  modifier.toModify(extraFlagsTable, variables = dict(Flag_ecalBadCalibFilterV2 = ExtVar(cms.InputTag("ecalBadCalibFilterNanoTagger"), bool, doc = "Bad ECAL calib flag (updated xtal list)")))
127 
128 # modifier which adds new tauIDs (currently only deepTauId2017v2p1 is being added)
129 import RecoTauTag.RecoTau.tools.runTauIdMVA as tauIdConfig
130 def nanoAOD_addTauIds(process):
131  updatedTauName = "slimmedTausUpdated"
132  tauIdEmbedder = tauIdConfig.TauIDEmbedder(process, debug = False, updatedTauName = updatedTauName,
133  toKeep = [ "deepTau2017v2p1" ])
134  tauIdEmbedder.runTauID()
135  process.patTauMVAIDsSeq.insert(process.patTauMVAIDsSeq.index(getattr(process, updatedTauName)),
136  process.rerunMvaIsolationSequence)
137  return process
138 
139 from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection
140 def nanoAOD_addDeepInfo(process,addDeepBTag,addDeepFlavour):
141  _btagDiscriminators=[]
142  if addDeepBTag:
143  print("Updating process to run DeepCSV btag")
144  _btagDiscriminators += ['pfDeepCSVJetTags:probb','pfDeepCSVJetTags:probbb','pfDeepCSVJetTags:probc']
145  if addDeepFlavour:
146  print("Updating process to run DeepFlavour btag")
147  _btagDiscriminators += ['pfDeepFlavourJetTags:probb','pfDeepFlavourJetTags:probbb','pfDeepFlavourJetTags:problepb','pfDeepFlavourJetTags:probc']
148  if len(_btagDiscriminators)==0: return process
149  print("Will recalculate the following discriminators: "+", ".join(_btagDiscriminators))
150  updateJetCollection(
151  process,
152  jetSource = cms.InputTag('slimmedJets'),
153  jetCorrections = ('AK4PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute','L2L3Residual']), 'None'),
154  btagDiscriminators = _btagDiscriminators,
155  postfix = 'WithDeepInfo',
156  )
157  process.load("Configuration.StandardSequences.MagneticField_cff")
158  process.jetCorrFactorsNano.src="selectedUpdatedPatJetsWithDeepInfo"
159  process.updatedJets.jetSource="selectedUpdatedPatJetsWithDeepInfo"
160  return process
161 
162 def nanoAOD_addDeepMET(process, addDeepMETProducer, ResponseTune_Graph):
163  if addDeepMETProducer:
164  # produce DeepMET on the fly if it is not in MiniAOD
165  print("add DeepMET Producers")
166  process.load('RecoMET.METPUSubtraction.deepMETProducer_cfi')
167  process.deepMETsResolutionTune = process.deepMETProducer.clone()
168  process.deepMETsResponseTune = process.deepMETProducer.clone()
169  #process.deepMETsResponseTune.graph_path = 'RecoMET/METPUSubtraction/data/deepmet/deepmet_resp_v1_2018.pb'
170  process.deepMETsResponseTune.graph_path = ResponseTune_Graph.value()
171  process.metTables += process.deepMetTables
172  return process
173 
174 from PhysicsTools.PatUtils.tools.runMETCorrectionsAndUncertainties import runMetCorAndUncFromMiniAOD
175 from PhysicsTools.PatAlgos.slimming.puppiForMET_cff import makePuppiesFromMiniAOD
176 def nanoAOD_recalibrateMETs(process,isData):
177  # add DeepMETs
178  nanoAOD_DeepMET_switch = cms.PSet(
179  nanoAOD_addDeepMET_switch = cms.untracked.bool(True), # decide if DeeMET should be included in Nano
180  nanoAOD_produceDeepMET_switch = cms.untracked.bool(False), # decide if DeepMET should be computed on the fly
181  ResponseTune_Graph = cms.untracked.string('RecoMET/METPUSubtraction/data/deepmet/deepmet_resp_v1_2018.pb')
182  )
183  for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016, run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2, run2_nanoAOD_102Xv1, run2_nanoAOD_106Xv1:
184  # compute DeepMETs in these eras (before 111X)
185  modifier.toModify(nanoAOD_DeepMET_switch, nanoAOD_produceDeepMET_switch = cms.untracked.bool(True))
186  for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016:
187  modifier.toModify(nanoAOD_DeepMET_switch, ResponseTune_Graph=cms.untracked.string("RecoMET/METPUSubtraction/data/deepmet/deepmet_resp_v1_2016.pb"))
188  if nanoAOD_DeepMET_switch.nanoAOD_addDeepMET_switch:
189  process = nanoAOD_addDeepMET(process,
190  addDeepMETProducer=nanoAOD_DeepMET_switch.nanoAOD_produceDeepMET_switch,
191  ResponseTune_Graph=nanoAOD_DeepMET_switch.ResponseTune_Graph)
192 
193  # if included in Nano, and not computed in the fly, then it should be extracted from minAOD
194  extractDeepMETs = nanoAOD_DeepMET_switch.nanoAOD_addDeepMET_switch and not nanoAOD_DeepMET_switch.nanoAOD_produceDeepMET_switch
195 
196  runMetCorAndUncFromMiniAOD(process,isData=isData, extractDeepMETs=extractDeepMETs)
197  process.nanoSequenceCommon.insert(process.nanoSequenceCommon.index(process.jetSequence),cms.Sequence(process.fullPatMetSequence))
198  process.basicJetsForMetForT1METNano = process.basicJetsForMet.clone(
199  src = process.updatedJetsWithUserData.src,
200  skipEM = False,
201  type1JetPtThreshold = 0.0,
202  calcMuonSubtrRawPtAsValueMap = cms.bool(True),
203  )
204  process.jetSequence.insert(process.jetSequence.index(process.updatedJetsWithUserData),cms.Sequence(process.basicJetsForMetForT1METNano))
205  process.updatedJetsWithUserData.userFloats.muonSubtrRawPt = cms.InputTag("basicJetsForMetForT1METNano:MuonSubtrRawPt")
206  process.corrT1METJetTable.src = process.finalJets.src
207  process.corrT1METJetTable.cut = "pt<15 && abs(eta)<9.9"
208  for table in process.jetTable, process.corrT1METJetTable:
209  table.variables.muonSubtrFactor = Var("1-userFloat('muonSubtrRawPt')/(pt()*jecFactor('Uncorrected'))",float,doc="1-(muon-subtracted raw pt)/(raw pt)",precision=6)
210  process.metTables += process.corrT1METJetTable
211 # makePuppiesFromMiniAOD(process,True) # call this before in the global customizer otherwise it would reset photon IDs in VID
212  nanoAOD_PuppiV15_switch = cms.PSet(
213  recoMetFromPFCs = cms.untracked.bool(False),
214  reclusterJets = cms.untracked.bool(False),
215  )
216  run2_nanoAOD_106Xv1.toModify(nanoAOD_PuppiV15_switch,recoMetFromPFCs=True,reclusterJets=True)
217  runMetCorAndUncFromMiniAOD(process,isData=isData,metType="Puppi",postfix="Puppi",jetFlavor="AK4PFPuppi", recoMetFromPFCs=bool(nanoAOD_PuppiV15_switch.recoMetFromPFCs), reclusterJets=bool(nanoAOD_PuppiV15_switch.reclusterJets))
218  if nanoAOD_PuppiV15_switch.reclusterJets:
219  from RecoJets.JetProducers.ak4PFJets_cfi import ak4PFJets
220  from PhysicsTools.PatAlgos.tools.helpers import getPatAlgosToolsTask, addToProcessAndTask
221  task = getPatAlgosToolsTask(process)
222  addToProcessAndTask('ak4PuppiJets', ak4PFJets.clone (src = 'puppi', doAreaFastjet = True, jetPtMin = 10.), process, task)
223  from PhysicsTools.PatAlgos.tools.jetTools import addJetCollection
224  addJetCollection(process,
225  labelName = 'Puppi',
226  jetSource = cms.InputTag('ak4PuppiJets'),
227  algo = 'AK', rParam=0.4,
228  genJetCollection=cms.InputTag('slimmedGenJets'),
229  jetCorrections = ('AK4PFPuppi', ['L1FastJet', 'L2Relative', 'L3Absolute','L2L3Residual'], 'None'),
230  pfCandidates = cms.InputTag('packedPFCandidates'),
231  pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'),
232  svSource = cms.InputTag('slimmedSecondaryVertices'),
233  muSource =cms.InputTag( 'slimmedMuons'),
234  elSource = cms.InputTag('slimmedElectrons'),
235  genParticles= cms.InputTag('prunedGenParticles'),
236  getJetMCFlavour=False
237  )
238 
239  process.patJetsPuppi.addGenPartonMatch = cms.bool(False)
240  process.patJetsPuppi.addGenJetMatch = cms.bool(False)
241  process.nanoSequenceCommon.insert(process.nanoSequenceCommon.index(process.jetSequence),cms.Sequence(process.puppiMETSequence+process.fullPatMetSequencePuppi))
242  return process
243 
245 def nanoAOD_activateVID(process):
246  switchOnVIDElectronIdProducer(process,DataFormat.MiniAOD)
247  for modname in electron_id_modules_WorkingPoints_nanoAOD.modules:
248  setupAllVIDIdsInModule(process,modname,setupVIDElectronSelection)
249  process.electronSequence.insert(process.electronSequence.index(process.bitmapVIDForEle),process.egmGsfElectronIDSequence)
250  for modifier in run2_egamma_2017,run2_egamma_2018,run2_miniAOD_80XLegacy,run2_nanoAOD_94XMiniAODv1,run2_nanoAOD_94XMiniAODv2,run2_nanoAOD_94X2016,run2_nanoAOD_102Xv1,run2_nanoAOD_106Xv1:
251  modifier.toModify(process.electronMVAValueMapProducer, src = "slimmedElectronsUpdated")
252  modifier.toModify(process.egmGsfElectronIDs, physicsObjectSrc = "slimmedElectronsUpdated")
253 
254 
255  switchOnVIDPhotonIdProducer(process,DataFormat.MiniAOD) # do not call this to avoid resetting photon IDs in VID, if called before inside makePuppiesFromMiniAOD
256  for modname in photon_id_modules_WorkingPoints_nanoAOD.modules:
257  setupAllVIDIdsInModule(process,modname,setupVIDPhotonSelection)
258  process.photonSequence.insert(process.photonSequence.index(bitmapVIDForPho),process.egmPhotonIDSequence)
259  for modifier in run2_miniAOD_80XLegacy,run2_nanoAOD_94XMiniAODv1,run2_nanoAOD_94XMiniAODv2,run2_nanoAOD_94X2016,run2_nanoAOD_102Xv1:
260  modifier.toModify(process.photonMVAValueMapProducer, src = "slimmedPhotonsTo106X")
261  modifier.toModify(process.egmPhotonIDs, physicsObjectSrc = "slimmedPhotonsTo106X")
262  return process
263 
264 def nanoAOD_addDeepInfoAK8(process, addDeepBTag, addDeepBoostedJet, addDeepDoubleX, addDeepDoubleXV2, addParticleNet, jecPayload):
265  _btagDiscriminators=[]
266  if addDeepBTag:
267  print("Updating process to run DeepCSV btag to AK8 jets")
268  _btagDiscriminators += ['pfDeepCSVJetTags:probb','pfDeepCSVJetTags:probbb']
269  if addDeepBoostedJet:
270  print("Updating process to run DeepBoostedJet on datasets before 103X")
271  from RecoBTag.ONNXRuntime.pfDeepBoostedJet_cff import _pfDeepBoostedJetTagsAll as pfDeepBoostedJetTagsAll
272  _btagDiscriminators += pfDeepBoostedJetTagsAll
273  if addParticleNet:
274  print("Updating process to run ParticleNet before it's included in MiniAOD")
275  from RecoBTag.ONNXRuntime.pfParticleNet_cff import _pfParticleNetJetTagsAll as pfParticleNetJetTagsAll
276  _btagDiscriminators += pfParticleNetJetTagsAll
277  if addDeepDoubleX:
278  print("Updating process to run DeepDoubleX on datasets before 104X")
279  _btagDiscriminators += ['pfDeepDoubleBvLJetTags:probHbb', \
280  'pfDeepDoubleCvLJetTags:probHcc', \
281  'pfDeepDoubleCvBJetTags:probHcc', \
282  'pfMassIndependentDeepDoubleBvLJetTags:probHbb', 'pfMassIndependentDeepDoubleCvLJetTags:probHcc', 'pfMassIndependentDeepDoubleCvBJetTags:probHcc']
283  if addDeepDoubleXV2:
284  print("Updating process to run DeepDoubleXv2 on datasets before 11X")
285  _btagDiscriminators += [
286  'pfMassIndependentDeepDoubleBvLV2JetTags:probHbb',
287  'pfMassIndependentDeepDoubleCvLV2JetTags:probHcc',
288  'pfMassIndependentDeepDoubleCvBV2JetTags:probHcc'
289  ]
290  if len(_btagDiscriminators)==0: return process
291  print("Will recalculate the following discriminators on AK8 jets: "+", ".join(_btagDiscriminators))
292  updateJetCollection(
293  process,
294  jetSource = cms.InputTag('slimmedJetsAK8'),
295  pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'),
296  svSource = cms.InputTag('slimmedSecondaryVertices'),
297  rParam = 0.8,
298  jetCorrections = (jecPayload.value(), cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual']), 'None'),
299  btagDiscriminators = _btagDiscriminators,
300  postfix='AK8WithDeepInfo',
301  printWarning = False
302  )
303  process.jetCorrFactorsAK8.src="selectedUpdatedPatJetsAK8WithDeepInfo"
304  process.updatedJetsAK8.jetSource="selectedUpdatedPatJetsAK8WithDeepInfo"
305  return process
306 
307 from PhysicsTools.PatUtils.tools.runMETCorrectionsAndUncertainties import runMetCorAndUncFromMiniAOD
308 def nanoAOD_runMETfixEE2017(process,isData):
309  runMetCorAndUncFromMiniAOD(process,isData=isData,
310  fixEE2017 = True,
311  fixEE2017Params = {'userawPt': True, 'ptThreshold':50.0, 'minEtaThreshold':2.65, 'maxEtaThreshold': 3.139},
312  postfix = "FixEE2017")
313  process.nanoSequenceCommon.insert(process.nanoSequenceCommon.index(jetSequence),process.fullPatMetSequenceFixEE2017)
314 
316  makePuppiesFromMiniAOD(process,True)
317  process.puppiNoLep.useExistingWeights = True
318  process.puppi.useExistingWeights = True
319  run2_nanoAOD_106Xv1.toModify(process.puppiNoLep, useExistingWeights = False)
320  run2_nanoAOD_106Xv1.toModify(process.puppi, useExistingWeights = False)
321  process = nanoAOD_activateVID(process)
322  nanoAOD_addDeepInfo_switch = cms.PSet(
323  nanoAOD_addDeepBTag_switch = cms.untracked.bool(False),
324  nanoAOD_addDeepFlavourTag_switch = cms.untracked.bool(False),
325  )
326  run2_miniAOD_80XLegacy.toModify(nanoAOD_addDeepInfo_switch, nanoAOD_addDeepBTag_switch = cms.untracked.bool(True))
327  for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016, run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
328  modifier.toModify(nanoAOD_addDeepInfo_switch, nanoAOD_addDeepFlavourTag_switch = cms.untracked.bool(True))
329  process = nanoAOD_addDeepInfo(process,
330  addDeepBTag=nanoAOD_addDeepInfo_switch.nanoAOD_addDeepBTag_switch,
331  addDeepFlavour=nanoAOD_addDeepInfo_switch.nanoAOD_addDeepFlavourTag_switch)
332  nanoAOD_addDeepInfoAK8_switch = cms.PSet(
333  nanoAOD_addDeepBTag_switch = cms.untracked.bool(False),
334  nanoAOD_addDeepBoostedJet_switch = cms.untracked.bool(False),
335  nanoAOD_addDeepDoubleX_switch = cms.untracked.bool(False),
336  nanoAOD_addDeepDoubleXV2_switch = cms.untracked.bool(False),
337  nanoAOD_addParticleNet_switch = cms.untracked.bool(False),
338  jecPayload = cms.untracked.string('AK8PFPuppi')
339  )
340  # deepAK8 should not run on 80X, that contains ak8PFJetsCHS jets
341  run2_miniAOD_80XLegacy.toModify(nanoAOD_addDeepInfoAK8_switch,
342  nanoAOD_addDeepBTag_switch = True,
343  jecPayload = 'AK8PFchs')
344  # for 94X and 102X samples: needs to run DeepAK8, DeepDoubleX and ParticleNet
345  (run2_nanoAOD_94X2016 | run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_102Xv1).toModify(
346  nanoAOD_addDeepInfoAK8_switch,
347  nanoAOD_addDeepBoostedJet_switch = True,
348  nanoAOD_addDeepDoubleX_switch = True,
349  nanoAOD_addDeepDoubleXV2_switch = True,
350  nanoAOD_addParticleNet_switch = True,
351  )
352  # for 106Xv1: only needs to run ParticleNet and DDXV2; DeepAK8, DeepDoubleX are already in MiniAOD
353  run2_nanoAOD_106Xv1.toModify(
354  nanoAOD_addDeepInfoAK8_switch,
355  nanoAOD_addDeepDoubleXV2_switch = True,
356  nanoAOD_addParticleNet_switch = True,
357  )
358  process = nanoAOD_addDeepInfoAK8(process,
359  addDeepBTag=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepBTag_switch,
360  addDeepBoostedJet=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepBoostedJet_switch,
361  addDeepDoubleX=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepDoubleX_switch,
362  addDeepDoubleXV2=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepDoubleXV2_switch,
363  addParticleNet=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addParticleNet_switch,
364  jecPayload=nanoAOD_addDeepInfoAK8_switch.jecPayload)
365  (run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94X2016 | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1).toModify(process, lambda p : nanoAOD_addTauIds(p))
366  return process
367 
369  process = nanoAOD_customizeCommon(process)
370  process = nanoAOD_recalibrateMETs(process,isData=True)
371  for modifier in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
372  modifier.toModify(process, lambda p: nanoAOD_runMETfixEE2017(p,isData=True))
373  return process
374 
375 def nanoAOD_customizeMC(process):
376  process = nanoAOD_customizeCommon(process)
377  process = nanoAOD_recalibrateMETs(process,isData=False)
378  for modifier in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
379  modifier.toModify(process, lambda p: nanoAOD_runMETfixEE2017(p,isData=False))
380  return process
381 
382 
383 _80x_sequence = nanoSequenceCommon.copy()
384 #remove stuff
385 _80x_sequence.remove(isoTrackTables)
386 _80x_sequence.remove(isoTrackSequence)
387 #add stuff
388 _80x_sequence.insert(_80x_sequence.index(jetSequence), extraFlagsProducers)
389 _80x_sequence.insert(_80x_sequence.index(simpleCleanerTable)+1, extraFlagsTable)
390 
391 run2_miniAOD_80XLegacy.toReplaceWith( nanoSequenceCommon, _80x_sequence)
392 
393 _102x_sequence = nanoSequenceCommon.copy()
394 #add stuff
395 _102x_sequence.insert(_102x_sequence.index(jetSequence),extraFlagsProducers102x)
396 _102x_sequence.insert(_102x_sequence.index(simpleCleanerTable)+1,extraFlagsTable)
397 
398 for modifier in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2, run2_nanoAOD_102Xv1:
399  modifier.toReplaceWith(nanoSequenceCommon, _102x_sequence)
nano_cff.nanoAOD_customizeData
def nanoAOD_customizeData(process)
Definition: nano_cff.py:368
nano_cff.nanoAOD_addDeepInfoAK8
def nanoAOD_addDeepInfoAK8(process, addDeepBTag, addDeepBoostedJet, addDeepDoubleX, addDeepDoubleXV2, addParticleNet, jecPayload)
Definition: nano_cff.py:264
runMETCorrectionsAndUncertainties.runMetCorAndUncFromMiniAOD
def runMetCorAndUncFromMiniAOD(process, metType="PF", jetCollUnskimmed="slimmedJets", photonColl="slimmedPhotons", electronColl="slimmedElectrons", muonColl="slimmedMuons", tauColl="slimmedTaus", pfCandColl="packedPFCandidates", jetFlavor="AK4PFchs", jetCleaning="LepClean", isData=False, manualJetConfig=False, reclusterJets=None, jetSelection="pt>15 && abs(eta)<9.9", recoMetFromPFCs=None, jetCorLabelL3="ak4PFCHSL1FastL2L3Corrector", jetCorLabelRes="ak4PFCHSL1FastL2L3ResidualCorrector", CHS=False, reapplyJEC=True, jecUncFile="", computeMETSignificance=True, fixEE2017=False, fixEE2017Params=None, extractDeepMETs=False, postfix="")
Definition: runMETCorrectionsAndUncertainties.py:2046
helpers.getPatAlgosToolsTask
def getPatAlgosToolsTask(process)
Definition: helpers.py:14
isotracks_cff
ttbarCategorization_cff
taus_cff
genparticles_cff
genVertex_cff
vid_id_tools.switchOnVIDElectronIdProducer
def switchOnVIDElectronIdProducer(process, dataFormat, task=None)
Electrons.
Definition: vid_id_tools.py:66
nano_cff.nanoAOD_addTauIds
def nanoAOD_addTauIds(process)
Definition: nano_cff.py:130
pfDeepBoostedJet_cff
particlelevel_cff
join
static std::string join(char **cmd)
Definition: RemoteFile.cc:17
globals_cff
nano_cff.nanoAOD_recalibrateMETs
def nanoAOD_recalibrateMETs(process, isData)
Definition: nano_cff.py:176
common_cff
vertices_cff
NanoAODEDMEventContent_cff
photons_cff
puppiForMET_cff.makePuppiesFromMiniAOD
def makePuppiesFromMiniAOD(process, createScheduledSequence=False)
Definition: puppiForMET_cff.py:13
common_cff.Var
def Var(expr, valtype, compression=None, doc=None, mcOnly=False, precision=-1)
Definition: common_cff.py:20
nano_cff.nanoAOD_customizeMC
def nanoAOD_customizeMC(process)
Definition: nano_cff.py:375
nano_cff.nanoAOD_activateVID
def nanoAOD_activateVID(process)
Definition: nano_cff.py:245
extraflags_cff
nano_cff.nanoAOD_addDeepInfo
def nanoAOD_addDeepInfo(process, addDeepBTag, addDeepFlavour)
Definition: nano_cff.py:140
genWeightsTable_cfi
jetTools
ak4PFJets_cfi
print
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:46
common_cff.ExtVar
def ExtVar(tag, valtype, compression=None, doc=None, mcOnly=False, precision=-1)
Definition: common_cff.py:31
nano_cff.bool
bool
Definition: nano_cff.py:126
jets_cff
muons_cff
pfParticleNet_cff
helpers
nano_cff.nanoAOD_runMETfixEE2017
def nanoAOD_runMETfixEE2017(process, isData)
Definition: nano_cff.py:308
nano_eras_cff
vid_id_tools.setupAllVIDIdsInModule
def setupAllVIDIdsInModule(process, id_module_name, setupFunction, patProducer=None, addUserData=True, task=None)
Definition: vid_id_tools.py:49
vid_id_tools.switchOnVIDPhotonIdProducer
def switchOnVIDPhotonIdProducer(process, dataFormat, task=None)
Photons.
Definition: vid_id_tools.py:158
vid_id_tools
electrons_cff
nano_cff.nanoAOD_addDeepMET
def nanoAOD_addDeepMET(process, addDeepMETProducer, ResponseTune_Graph)
Definition: nano_cff.py:162
triggerObjects_cff
helpers.addToProcessAndTask
def addToProcessAndTask(label, module, process, task)
Definition: helpers.py:29
met_cff
nano_cff.nanoAOD_customizeCommon
def nanoAOD_customizeCommon(process)
Definition: nano_cff.py:315