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
15 from PhysicsTools.NanoAOD.met_cff import *
19 
20 from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy
21 from Configuration.Eras.Modifier_run2_nanoAOD_94X2016_cff import run2_nanoAOD_94X2016
22 from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv1_cff import run2_nanoAOD_94XMiniAODv1
23 from Configuration.Eras.Modifier_run2_nanoAOD_94XMiniAODv2_cff import run2_nanoAOD_94XMiniAODv2
24 from Configuration.Eras.Modifier_run2_nanoAOD_102Xv1_cff import run2_nanoAOD_102Xv1
25 from Configuration.Eras.Modifier_run2_nanoAOD_106Xv1_cff import run2_nanoAOD_106Xv1
26 from Configuration.Eras.Modifier_run2_miniAOD_devel_cff import run2_miniAOD_devel
27 from Configuration.Eras.Modifier_run2_tau_ul_2016_cff import run2_tau_ul_2016
28 from Configuration.Eras.Modifier_run2_tau_ul_2018_cff import run2_tau_ul_2018
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 btagSFdir="PhysicsTools/NanoAOD/data/btagSF/"
62 
63 btagWeightTable = cms.EDProducer("BTagSFProducer",
64  src = cms.InputTag("linkedObjects","jets"),
65  cut = cms.string("pt > 25. && abs(eta) < 2.5"),
66  discNames = cms.vstring(
67  "pfCombinedInclusiveSecondaryVertexV2BJetTags",
68  "pfDeepCSVJetTags:probb+pfDeepCSVJetTags:probbb", #if multiple MiniAOD branches need to be summed up (e.g., DeepCSV b+bb), separate them using '+' delimiter
69  "pfCombinedMVAV2BJetTags"
70  ),
71  discShortNames = cms.vstring(
72  "CSVV2",
73  "DeepCSVB",
74  "CMVA"
75  ),
76  weightFiles = cms.vstring( #default settings are for 2017 94X. toModify function is called later for other eras.
77  btagSFdir+"CSVv2_94XSF_V2_B_F.csv",
78  btagSFdir+"DeepCSV_94XSF_V2_B_F.csv",
79  "unavailable" #if SFs for an algorithm in an era is unavailable, the corresponding branch will not be stored
80  ),
81  operatingPoints = cms.vstring("3","3","3"), #loose = 0, medium = 1, tight = 2, reshaping = 3
82  measurementTypesB = cms.vstring("iterativefit","iterativefit","iterativefit"), #e.g. "comb", "incl", "ttbar", "iterativefit"
83  measurementTypesC = cms.vstring("iterativefit","iterativefit","iterativefit"),
84  measurementTypesUDSG = cms.vstring("iterativefit","iterativefit","iterativefit"),
85  sysTypes = cms.vstring("central","central","central")
86 )
87 
88 for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016: # to be updated when SF for Summer16MiniAODv3 MC will be available
89  modifier.toModify(btagWeightTable,
90  cut = cms.string("pt > 25. && abs(eta) < 2.4"), #80X corresponds to 2016, |eta| < 2.4
91  weightFiles = cms.vstring( #80X corresponds to 2016 SFs
92  btagSFdir+"CSVv2_Moriond17_B_H.csv",
93  "unavailable",
94  btagSFdir+"cMVAv2_Moriond17_B_H.csv"
95  )
96  )
97 
98 
99 genWeightsTable = cms.EDProducer("GenWeightsTableProducer",
100  genEvent = cms.InputTag("generator"),
101  genLumiInfoHeader = cms.InputTag("generator"),
102  lheInfo = cms.VInputTag(cms.InputTag("externalLHEProducer"), cms.InputTag("source")),
103  preferredPDFs = cms.VPSet( # see https://lhapdf.hepforge.org/pdfsets.html
104  cms.PSet( name = cms.string("PDF4LHC15_nnlo_30_pdfas"), lhaid = cms.uint32(91400) ),
105  cms.PSet( name = cms.string("NNPDF31_nnlo_hessian_pdfas"), lhaid = cms.uint32(306000) ),
106  cms.PSet( name = cms.string("NNPDF30_nlo_as_0118"), lhaid = cms.uint32(260000) ), # for some 92X samples. Note that the nominal weight, 260000, is not included in the LHE ...
107  cms.PSet( name = cms.string("NNPDF30_lo_as_0130"), lhaid = cms.uint32(262000) ), # some MLM 80X samples have only this (e.g. /store/mc/RunIISummer16MiniAODv2/DYJetsToLL_M-50_TuneCUETP8M1_13TeV-madgraphMLM-pythia8/MINIAODSIM/PUMoriond17_80X_mcRun2_asymptotic_2016_TrancheIV_v6_ext1-v2/120000/02A210D6-F5C3-E611-B570-008CFA197BD4.root )
108  cms.PSet( name = cms.string("NNPDF30_nlo_nf_4_pdfas"), lhaid = cms.uint32(292000) ), # some FXFX 80X samples have only this (e.g. WWTo1L1Nu2Q, WWTo4Q)
109  cms.PSet( name = cms.string("NNPDF30_nlo_nf_5_pdfas"), lhaid = cms.uint32(292200) ), # some FXFX 80X samples have only this (e.g. DYJetsToLL_Pt, WJetsToLNu_Pt, DYJetsToNuNu_Pt)
110  cms.PSet( name = cms.string("NNPDF31_lo_as_0130"), lhaid = cms.uint32(315200) ), # SUSY signal samples use this
111  ),
112  namedWeightIDs = cms.vstring(),
113  namedWeightLabels = cms.vstring(),
114  lheWeightPrecision = cms.int32(14),
115  maxPdfWeights = cms.uint32(150),
116  debug = cms.untracked.bool(False),
117 )
118 lheInfoTable = cms.EDProducer("LHETablesProducer",
119  lheInfo = cms.VInputTag(cms.InputTag("externalLHEProducer"), cms.InputTag("source")),
120  precision = cms.int32(14),
121  storeLHEParticles = cms.bool(True)
122 )
123 
124 l1bits=cms.EDProducer("L1TriggerResultsConverter", src=cms.InputTag("gtStage2Digis"), legacyL1=cms.bool(False),
125  storeUnprefireableBit=cms.bool(True), src_ext=cms.InputTag("gtStage2Digis"))
126 (run2_miniAOD_80XLegacy | run2_nanoAOD_94X2016 | run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_102Xv1).toModify(l1bits, storeUnprefireableBit=False)
127 
128 nanoSequenceCommon = cms.Sequence(
129  nanoMetadata + jetSequence + muonSequence + tauSequence + electronSequence+photonSequence+vertexSequence+
130  isoTrackSequence + jetLepSequence + # must be after all the leptons
131  linkedObjects +
132  jetTables + muonTables + tauTables + electronTables + photonTables + globalTables +vertexTables+ metTables+simpleCleanerTable + isoTrackTables
133  )
134 nanoSequenceOnlyFullSim = cms.Sequence(triggerObjectTables + l1bits)
135 
136 nanoSequence = cms.Sequence(nanoSequenceCommon + nanoSequenceOnlyFullSim)
137 
138 nanoSequenceFS = cms.Sequence(genParticleSequence + particleLevelSequence + nanoSequenceCommon + jetMC + muonMC + electronMC + photonMC + tauMC + metMC + ttbarCatMCProducers + globalTablesMC + btagWeightTable + genWeightsTable + genParticleTables + particleLevelTables + lheInfoTable + ttbarCategoryTable )
139 
140 nanoSequenceMC = nanoSequenceFS.copy()
141 nanoSequenceMC.insert(nanoSequenceFS.index(nanoSequenceCommon)+1,nanoSequenceOnlyFullSim)
142 
143 # modify extraFlagsTable to store ecalBadCalibFilter decision which is re-run with updated bad crystal list for 2017 and 2018 samples
144 for modifier in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2, run2_nanoAOD_102Xv1:
145  modifier.toModify(extraFlagsTable, variables= cms.PSet())
146  modifier.toModify(extraFlagsTable, variables = dict(Flag_ecalBadCalibFilterV2 = ExtVar(cms.InputTag("ecalBadCalibFilterNanoTagger"), bool, doc = "Bad ECAL calib flag (updated xtal list)")))
147 
148 # modifier which adds new tauIDs (currently only deepTauId2017v2p1 is being added)
149 import RecoTauTag.RecoTau.tools.runTauIdMVA as tauIdConfig
150 def nanoAOD_addTauIds(process):
151  updatedTauName = "slimmedTausUpdated"
152  tauIdEmbedder = tauIdConfig.TauIDEmbedder(process, cms, debug = False, updatedTauName = updatedTauName,
153  toKeep = [ "deepTau2017v2p1" ])
154  tauIdEmbedder.runTauID()
155  process.patTauMVAIDsSeq.insert(process.patTauMVAIDsSeq.index(getattr(process, updatedTauName)),
156  process.rerunMvaIsolationSequence)
157  return process
158 
159 from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection
160 def nanoAOD_addDeepInfo(process,addDeepBTag,addDeepFlavour):
161  _btagDiscriminators=[]
162  if addDeepBTag:
163  print("Updating process to run DeepCSV btag")
164  _btagDiscriminators += ['pfDeepCSVJetTags:probb','pfDeepCSVJetTags:probbb','pfDeepCSVJetTags:probc']
165  if addDeepFlavour:
166  print("Updating process to run DeepFlavour btag")
167  _btagDiscriminators += ['pfDeepFlavourJetTags:probb','pfDeepFlavourJetTags:probbb','pfDeepFlavourJetTags:problepb','pfDeepFlavourJetTags:probc']
168  if len(_btagDiscriminators)==0: return process
169  print("Will recalculate the following discriminators: "+", ".join(_btagDiscriminators))
170  updateJetCollection(
171  process,
172  jetSource = cms.InputTag('slimmedJets'),
173  jetCorrections = ('AK4PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute','L2L3Residual']), 'None'),
174  btagDiscriminators = _btagDiscriminators,
175  postfix = 'WithDeepInfo',
176  )
177  process.load("Configuration.StandardSequences.MagneticField_cff")
178  process.jetCorrFactorsNano.src="selectedUpdatedPatJetsWithDeepInfo"
179  process.updatedJets.jetSource="selectedUpdatedPatJetsWithDeepInfo"
180  return process
181 
182 def nanoAOD_addDeepMET(process, addDeepMETProducer, ResponseTune_Graph):
183  if addDeepMETProducer:
184  # produce DeepMET on the fly if it is not in MiniAOD
185  print("add DeepMET Producers")
186  process.load('RecoMET.METPUSubtraction.deepMETProducer_cfi')
187  process.deepMETsResolutionTune = process.deepMETProducer.clone()
188  process.deepMETsResponseTune = process.deepMETProducer.clone()
189  #process.deepMETsResponseTune.graph_path = 'RecoMET/METPUSubtraction/data/deepmet/deepmet_resp_v1_2018.pb'
190  process.deepMETsResponseTune.graph_path = ResponseTune_Graph.value()
191  process.metTables += process.deepMetTables
192  return process
193 
194 from PhysicsTools.PatUtils.tools.runMETCorrectionsAndUncertainties import runMetCorAndUncFromMiniAOD
195 #from PhysicsTools.PatAlgos.slimming.puppiForMET_cff import makePuppiesFromMiniAOD
196 def nanoAOD_recalibrateMETs(process,isData):
197  # add DeepMETs
198  nanoAOD_DeepMET_switch = cms.PSet(
199  nanoAOD_addDeepMET_switch = cms.untracked.bool(True), # decide if DeeMET should be included in Nano
200  nanoAOD_produceDeepMET_switch = cms.untracked.bool(False), # decide if DeepMET should be computed on the fly
201  ResponseTune_Graph = cms.untracked.string('RecoMET/METPUSubtraction/data/deepmet/deepmet_resp_v1_2018.pb')
202  )
203  # compute DeepMETs for the eras before UL-ReminiAOD
204  (~run2_miniAOD_devel).toModify(nanoAOD_DeepMET_switch, nanoAOD_produceDeepMET_switch = cms.untracked.bool(True))
205  for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016:
206  modifier.toModify(nanoAOD_DeepMET_switch, ResponseTune_Graph=cms.untracked.string("RecoMET/METPUSubtraction/data/deepmet/deepmet_resp_v1_2016.pb"))
207  if nanoAOD_DeepMET_switch.nanoAOD_addDeepMET_switch:
208  process = nanoAOD_addDeepMET(process,
209  addDeepMETProducer=nanoAOD_DeepMET_switch.nanoAOD_produceDeepMET_switch,
210  ResponseTune_Graph=nanoAOD_DeepMET_switch.ResponseTune_Graph)
211 
212  # if included in Nano, and not computed in the fly, then it should be extracted from minAOD
213  extractDeepMETs = nanoAOD_DeepMET_switch.nanoAOD_addDeepMET_switch and not nanoAOD_DeepMET_switch.nanoAOD_produceDeepMET_switch
214 
215  runMetCorAndUncFromMiniAOD(process,isData=isData, extractDeepMETs=extractDeepMETs)
216  process.nanoSequenceCommon.insert(process.nanoSequenceCommon.index(process.jetSequence),cms.Sequence(process.fullPatMetSequence))
217  process.basicJetsForMetForT1METNano = process.basicJetsForMet.clone(
218  src = process.updatedJetsWithUserData.src,
219  skipEM = False,
220  type1JetPtThreshold = 0.0,
221  calcMuonSubtrRawPtAsValueMap = cms.bool(True),
222  )
223  process.jetSequence.insert(process.jetSequence.index(process.updatedJetsWithUserData),cms.Sequence(process.basicJetsForMetForT1METNano))
224  process.updatedJetsWithUserData.userFloats.muonSubtrRawPt = cms.InputTag("basicJetsForMetForT1METNano:MuonSubtrRawPt")
225  process.corrT1METJetTable.src = process.finalJets.src
226  process.corrT1METJetTable.cut = "pt<15 && abs(eta)<9.9"
227  for table in process.jetTable, process.corrT1METJetTable:
228  table.variables.muonSubtrFactor = Var("1-userFloat('muonSubtrRawPt')/(pt()*jecFactor('Uncorrected'))",float,doc="1-(muon-subtracted raw pt)/(raw pt)",precision=6)
229  process.metTables += process.corrT1METJetTable
230 # makePuppiesFromMiniAOD(process,True) # call this before in the global customizer otherwise it would reset photon IDs in VID
231 # runMetCorAndUncFromMiniAOD(process,isData=isData,metType="Puppi",postfix="Puppi",jetFlavor="AK4PFPuppi")
232 # process.puppiNoLep.useExistingWeights = False
233 # process.puppi.useExistingWeights = False
234 # process.nanoSequenceCommon.insert(process.nanoSequenceCommon.index(jetSequence),cms.Sequence(process.puppiMETSequence+process.fullPatMetSequencePuppi))
235  return process
236 
238 def nanoAOD_activateVID(process):
239  switchOnVIDElectronIdProducer(process,DataFormat.MiniAOD)
240  for modname in electron_id_modules_WorkingPoints_nanoAOD.modules:
241  setupAllVIDIdsInModule(process,modname,setupVIDElectronSelection)
242  process.electronSequence.insert(process.electronSequence.index(process.bitmapVIDForEle),process.egmGsfElectronIDSequence)
243  for modifier in run2_miniAOD_80XLegacy, :
244  modifier.toModify(process.electronMVAValueMapProducer, srcMiniAOD = "slimmedElectronsUpdated")
245  modifier.toModify(process.egmGsfElectronIDs, physicsObjectSrc = "slimmedElectronsUpdated")
246  for modifier in run2_nanoAOD_94XMiniAODv1,run2_nanoAOD_94XMiniAODv2,run2_nanoAOD_94X2016 ,run2_nanoAOD_102Xv1:
247  modifier.toModify(process.electronMVAValueMapProducer, srcMiniAOD = "slimmedElectronsTo106X")
248  modifier.toModify(process.egmGsfElectronIDs, physicsObjectSrc = "slimmedElectronsTo106X")
249 
250 
251 
252  switchOnVIDPhotonIdProducer(process,DataFormat.MiniAOD) # do not call this to avoid resetting photon IDs in VID, if called before inside makePuppiesFromMiniAOD
253  for modname in photon_id_modules_WorkingPoints_nanoAOD.modules:
254  setupAllVIDIdsInModule(process,modname,setupVIDPhotonSelection)
255  process.photonSequence.insert(process.photonSequence.index(bitmapVIDForPho),process.egmPhotonIDSequence)
256  for modifier in run2_miniAOD_80XLegacy,run2_nanoAOD_94XMiniAODv1,run2_nanoAOD_94XMiniAODv2,run2_nanoAOD_94X2016 ,run2_nanoAOD_102Xv1:
257  modifier.toModify(process.photonMVAValueMapProducer, srcMiniAOD = "slimmedPhotonsTo106X")
258  modifier.toModify(process.egmPhotonIDs, physicsObjectSrc = "slimmedPhotonsTo106X")
259  return process
260 
261 def nanoAOD_addDeepInfoAK8(process, addDeepBTag, addDeepBoostedJet, addDeepDoubleX, addParticleNet, jecPayload):
262  _btagDiscriminators=[]
263  if addDeepBTag:
264  print("Updating process to run DeepCSV btag to AK8 jets")
265  _btagDiscriminators += ['pfDeepCSVJetTags:probb','pfDeepCSVJetTags:probbb']
266  if addDeepBoostedJet:
267  print("Updating process to run DeepBoostedJet on datasets before 103X")
268  from RecoBTag.ONNXRuntime.pfDeepBoostedJet_cff import _pfDeepBoostedJetTagsAll as pfDeepBoostedJetTagsAll
269  _btagDiscriminators += pfDeepBoostedJetTagsAll
270  if addParticleNet:
271  print("Updating process to run ParticleNet before it's included in MiniAOD")
272  from RecoBTag.ONNXRuntime.pfParticleNet_cff import _pfParticleNetJetTagsAll as pfParticleNetJetTagsAll
273  _btagDiscriminators += pfParticleNetJetTagsAll
274  if addDeepDoubleX:
275  print("Updating process to run DeepDoubleX on datasets before 104X")
276  _btagDiscriminators += ['pfDeepDoubleBvLJetTags:probHbb', \
277  'pfDeepDoubleCvLJetTags:probHcc', \
278  'pfDeepDoubleCvBJetTags:probHcc', \
279  'pfMassIndependentDeepDoubleBvLJetTags:probHbb', 'pfMassIndependentDeepDoubleCvLJetTags:probHcc', 'pfMassIndependentDeepDoubleCvBJetTags:probHcc']
280  if len(_btagDiscriminators)==0: return process
281  print("Will recalculate the following discriminators on AK8 jets: "+", ".join(_btagDiscriminators))
282  updateJetCollection(
283  process,
284  jetSource = cms.InputTag('slimmedJetsAK8'),
285  pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'),
286  svSource = cms.InputTag('slimmedSecondaryVertices'),
287  rParam = 0.8,
288  jetCorrections = (jecPayload.value(), cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual']), 'None'),
289  btagDiscriminators = _btagDiscriminators,
290  postfix='AK8WithDeepInfo',
291  printWarning = False
292  )
293  process.jetCorrFactorsAK8.src="selectedUpdatedPatJetsAK8WithDeepInfo"
294  process.updatedJetsAK8.jetSource="selectedUpdatedPatJetsAK8WithDeepInfo"
295  return process
296 
297 from PhysicsTools.PatUtils.tools.runMETCorrectionsAndUncertainties import runMetCorAndUncFromMiniAOD
298 def nanoAOD_runMETfixEE2017(process,isData):
299  runMetCorAndUncFromMiniAOD(process,isData=isData,
300  fixEE2017 = True,
301  fixEE2017Params = {'userawPt': True, 'ptThreshold':50.0, 'minEtaThreshold':2.65, 'maxEtaThreshold': 3.139},
302  postfix = "FixEE2017")
303  process.nanoSequenceCommon.insert(process.nanoSequenceCommon.index(jetSequence),process.fullPatMetSequenceFixEE2017)
304 
306 # makePuppiesFromMiniAOD(process,True) # call this here as it calls switchOnVIDPhotonIdProducer
307  process = nanoAOD_activateVID(process)
308  nanoAOD_addDeepInfo_switch = cms.PSet(
309  nanoAOD_addDeepBTag_switch = cms.untracked.bool(False),
310  nanoAOD_addDeepFlavourTag_switch = cms.untracked.bool(False),
311  )
312  run2_miniAOD_80XLegacy.toModify(nanoAOD_addDeepInfo_switch, nanoAOD_addDeepBTag_switch = cms.untracked.bool(True))
313  for modifier in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016, run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
314  modifier.toModify(nanoAOD_addDeepInfo_switch, nanoAOD_addDeepFlavourTag_switch = cms.untracked.bool(True))
315  process = nanoAOD_addDeepInfo(process,
316  addDeepBTag=nanoAOD_addDeepInfo_switch.nanoAOD_addDeepBTag_switch,
317  addDeepFlavour=nanoAOD_addDeepInfo_switch.nanoAOD_addDeepFlavourTag_switch)
318  nanoAOD_addDeepInfoAK8_switch = cms.PSet(
319  nanoAOD_addDeepBTag_switch = cms.untracked.bool(False),
320  nanoAOD_addDeepBoostedJet_switch = cms.untracked.bool(True),
321  nanoAOD_addDeepDoubleX_switch = cms.untracked.bool(True),
322  nanoAOD_addParticleNet_switch = cms.untracked.bool(True),
323  jecPayload = cms.untracked.string('AK8PFPuppi')
324  )
325  # deepAK8 should not run on 80X, that contains ak8PFJetsCHS jets
326  run2_miniAOD_80XLegacy.toModify(nanoAOD_addDeepInfoAK8_switch,
327  nanoAOD_addDeepBTag_switch = True,
328  nanoAOD_addDeepBoostedJet_switch = False,
329  nanoAOD_addDeepDoubleX_switch = False,
330  nanoAOD_addParticleNet_switch = False,
331  jecPayload = 'AK8PFchs')
332  # for Re-MiniAOD: no need to re-run DeepAK8, DeepDoubleX and ParticleNet
333  run2_miniAOD_devel.toModify(
334  nanoAOD_addDeepInfoAK8_switch,
335  nanoAOD_addDeepBoostedJet_switch = False,
336  nanoAOD_addDeepDoubleX_switch = False,
337  nanoAOD_addParticleNet_switch = False,
338  )
339  process = nanoAOD_addDeepInfoAK8(process,
340  addDeepBTag=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepBTag_switch,
341  addDeepBoostedJet=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepBoostedJet_switch,
342  addDeepDoubleX=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepDoubleX_switch,
343  addParticleNet=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addParticleNet_switch,
344  jecPayload=nanoAOD_addDeepInfoAK8_switch.jecPayload)
345  addTauIds_switch = cms.PSet(
346  nanoAOD_addTauIds_switch = cms.untracked.bool(True)
347  )
348  run2_miniAOD_80XLegacy.toModify(addTauIds_switch, nanoAOD_addTauIds_switch = cms.untracked.bool(False))
349  ((run2_miniAOD_devel | run2_tau_ul_2016 | run2_tau_ul_2018) & \
350  (~(run2_nanoAOD_94X2016 | run2_nanoAOD_94XMiniAODv1 | run2_nanoAOD_94XMiniAODv2 | run2_nanoAOD_102Xv1 | run2_nanoAOD_106Xv1))).toModify(addTauIds_switch,
351  nanoAOD_addTauIds_switch = cms.untracked.bool(False))
352  if addTauIds_switch.nanoAOD_addTauIds_switch:
353  process = nanoAOD_addTauIds(process)
354  return process
355 
357  process = nanoAOD_customizeCommon(process)
358  process = nanoAOD_recalibrateMETs(process,isData=True)
359  for modifier in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
360  modifier.toModify(process, lambda p: nanoAOD_runMETfixEE2017(p,isData=True))
361  return process
362 
363 def nanoAOD_customizeMC(process):
364  process = nanoAOD_customizeCommon(process)
365  process = nanoAOD_recalibrateMETs(process,isData=False)
366  for modifier in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
367  modifier.toModify(process, lambda p: nanoAOD_runMETfixEE2017(p,isData=False))
368  return process
369 
370 ### Era dependent customization
371 _80x_sequence = nanoSequenceCommon.copy()
372 #remove stuff
373 _80x_sequence.remove(isoTrackTables)
374 _80x_sequence.remove(isoTrackSequence)
375 #add stuff
376 _80x_sequence.insert(_80x_sequence.index(jetSequence), extraFlagsProducers)
377 _80x_sequence.insert(_80x_sequence.index(simpleCleanerTable)+1, extraFlagsTable)
378 
379 run2_miniAOD_80XLegacy.toReplaceWith( nanoSequenceCommon, _80x_sequence)
380 
381 _102x_sequence = nanoSequenceCommon.copy()
382 #add stuff
383 _102x_sequence.insert(_102x_sequence.index(jetSequence),extraFlagsProducers102x)
384 _102x_sequence.insert(_102x_sequence.index(simpleCleanerTable)+1,extraFlagsTable)
385 
386 for modifier in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2, run2_nanoAOD_102Xv1:
387  modifier.toReplaceWith(nanoSequenceCommon, _102x_sequence)
def nanoAOD_addDeepInfo(process, addDeepBTag, addDeepFlavour)
Definition: nano_cff.py:160
def switchOnVIDElectronIdProducer(process, dataFormat, task=None)
Electrons.
Definition: vid_id_tools.py:66
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:363
def nanoAOD_activateVID(process)
Definition: nano_cff.py:238
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:305
def nanoAOD_recalibrateMETs(process, isData)
Definition: nano_cff.py:196
def nanoAOD_runMETfixEE2017(process, isData)
Definition: nano_cff.py:298
static std::string join(char **cmd)
Definition: RemoteFile.cc:18
def nanoAOD_addTauIds(process)
Definition: nano_cff.py:150
def nanoAOD_addDeepMET(process, addDeepMETProducer, ResponseTune_Graph)
Definition: nano_cff.py:182
def switchOnVIDPhotonIdProducer(process, dataFormat, task=None)
Photons.
def nanoAOD_addDeepInfoAK8(process, addDeepBTag, addDeepBoostedJet, addDeepDoubleX, addParticleNet, jecPayload)
Definition: nano_cff.py:261
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 nanoAOD_customizeData(process)
Definition: nano_cff.py:356