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