1 from __future__
import print_function
2 import FWCore.ParameterSet.Config
as cms
30 nanoMetadata = cms.EDProducer(
"UniqueStringProducer",
32 tag = cms.string(
"untagged"),
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"),
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")
62 lhcInfoTable = cms.EDProducer(
"LHCInfoProducer",
63 precision = cms.int32(10),
66 nanoTableTaskCommon = cms.Task(
67 cms.Task(nanoMetadata), jetTask, jetForMETTask, extraFlagsProducersTask, muonTask, tauTask, boostedTauTask,
68 electronTask , lowPtElectronTask, photonTask,
69 vertexTask, isoTrackTask, jetLepTask,
71 cms.Task(linkedObjects),
72 jetTablesTask, muonTablesTask, fsrTablesTask, tauTablesTask, boostedTauTablesTask,
73 electronTablesTask, lowPtElectronTablesTask, photonTablesTask,
74 globalTablesTask, vertexTablesTask, metTablesTask, simpleCleanerTable, extraFlagsTableTask,
75 isoTrackTablesTask,softActivityTablesTask
78 nanoSequenceCommon = cms.Sequence(nanoTableTaskCommon)
80 nanoSequenceOnlyFullSim = cms.Sequence(triggerObjectTablesTask)
81 nanoSequenceOnlyData = cms.Sequence(cms.Sequence(protonTablesTask) + lhcInfoTable)
83 nanoSequence = cms.Sequence(nanoSequenceCommon + nanoSequenceOnlyData + nanoSequenceOnlyFullSim)
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)
90 nanoSequenceFS = cms.Sequence(nanoSequenceCommon + cms.Sequence(nanoTableTaskFS))
93 nanoSequenceMC = nanoSequenceFS.copy()
94 nanoSequenceMC.insert(nanoSequenceFS.index(nanoSequenceCommon)+1,nanoSequenceOnlyFullSim)
97 import RecoTauTag.RecoTau.tools.runTauIdMVA
as tauIdConfig
100 updatedTauName =
"slimmedTausUpdated"
101 tauIdEmbedder = tauIdConfig.TauIDEmbedder(process, debug =
False,
102 updatedTauName = updatedTauName,
104 tauIdEmbedder.runTauID()
105 _tauTask = patTauMVAIDsTask.copy()
106 _tauTask.add(process.rerunMvaIsolationTask)
107 _tauTask.add(finalTaus)
108 process.finalTaus.src = updatedTauName
111 process.tauTask = _tauTask.copy()
117 updatedBoostedTauName =
"slimmedTausBoostedNewID"
118 boostedTauIdEmbedder = tauIdConfig.TauIDEmbedder(process, debug =
False,
119 originalTauName =
"slimmedTausBoosted",
120 updatedTauName = updatedBoostedTauName,
123 boostedTauIdEmbedder.runTauID()
124 _boostedTauTask = process.rerunMvaIsolationTaskBoosted.copy()
125 _boostedTauTask.add(getattr(process, updatedBoostedTauName))
126 _boostedTauTask.add(process.finalBoostedTaus)
127 process.finalBoostedTaus.src = updatedBoostedTauName
130 process.boostedTauTask = _boostedTauTask.copy()
137 _btagDiscriminators=[]
139 print(
"Updating process to run DeepCSV btag")
140 _btagDiscriminators += [
'pfDeepCSVJetTags:probb',
'pfDeepCSVJetTags:probbb',
'pfDeepCSVJetTags:probc']
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))
148 jetSource = cms.InputTag(
'slimmedJets'),
149 jetCorrections = (
'AK4PFchs', cms.vstring([
'L1FastJet',
'L2Relative',
'L3Absolute',
'L2L3Residual']),
'None'),
150 btagDiscriminators = _btagDiscriminators,
151 postfix =
'WithDeepInfo',
153 process.load(
"Configuration.StandardSequences.MagneticField_cff")
154 process.jetCorrFactorsNano.src=
"selectedUpdatedPatJetsWithDeepInfo"
155 process.updatedJets.jetSource=
"selectedUpdatedPatJetsWithDeepInfo"
159 from PhysicsTools.PatUtils.tools.runMETCorrectionsAndUncertainties
import runMetCorAndUncFromMiniAOD
162 nanoAOD_DeepMET_switch = cms.PSet(
163 ResponseTune_Graph = cms.untracked.string(
'RecoMET/METPUSubtraction/data/deepmet/deepmet_resp_v1_2018.pb')
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"))
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()
175 process.nanoSequenceCommon.insert(2,cms.Sequence(process.fullPatMetSequence))
178 from PhysicsTools.PatAlgos.slimming.puppiForMET_cff
import makePuppiesFromMiniAOD
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")
187 nanoAOD_PuppiV15_switch = cms.PSet(
188 recoMetFromPFCs = cms.untracked.bool(
False),
189 reclusterJets = cms.untracked.bool(
False),
191 run2_nanoAOD_106Xv1.toModify(nanoAOD_PuppiV15_switch,recoMetFromPFCs=
True,reclusterJets=
True)
192 if nanoAOD_PuppiV15_switch.reclusterJets:
196 addToProcessAndTask(
'ak4PuppiJets', ak4PFJets.clone (src =
'puppi', doAreaFastjet =
True, jetPtMin = 10.), process, task)
198 addJetCollection(process,
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
213 process.patJetsPuppi.addGenPartonMatch = cms.bool(
False)
214 process.patJetsPuppi.addGenJetMatch = cms.bool(
False)
216 print(
"nanoAOD_PuppiV15_switch.reclusterJets is true")
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))
227 for modname
in electron_id_modules_WorkingPoints_nanoAOD.modules:
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")
238 for modname
in photon_id_modules_WorkingPoints_nanoAOD.modules:
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")
249 def nanoAOD_addDeepInfoAK8(process, addDeepBTag, addDeepBoostedJet, addDeepDoubleX, addDeepDoubleXV2, addParticleNet, addParticleNetMass, jecPayload):
250 _btagDiscriminators=[]
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")
257 _btagDiscriminators += pfDeepBoostedJetTagsAll
259 print(
"Updating process to run ParticleNet before it's included in MiniAOD")
261 _btagDiscriminators += pfParticleNetJetTagsAll
262 if addParticleNetMass:
264 _btagDiscriminators += _pfParticleNetMassRegressionOutputs
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']
272 print(
"Updating process to run DeepDoubleXv2 on datasets before 11X")
273 _btagDiscriminators += [
274 'pfMassIndependentDeepDoubleBvLV2JetTags:probHbb',
275 'pfMassIndependentDeepDoubleCvLV2JetTags:probHcc',
276 'pfMassIndependentDeepDoubleCvBV2JetTags:probHcc'
278 if len(_btagDiscriminators)==0:
return process
279 print(
"Will recalculate the following discriminators on AK8 jets: "+
", ".
join(_btagDiscriminators))
282 jetSource = cms.InputTag(
'slimmedJetsAK8'),
283 pvSource = cms.InputTag(
'offlineSlimmedPrimaryVertices'),
284 svSource = cms.InputTag(
'slimmedSecondaryVertices'),
286 jetCorrections = (jecPayload.value(), cms.vstring([
'L1FastJet',
'L2Relative',
'L3Absolute',
'L2L3Residual']),
'None'),
287 btagDiscriminators = _btagDiscriminators,
288 postfix=
'AK8WithDeepInfo',
291 process.jetCorrFactorsAK8.src=
"selectedUpdatedPatJetsAK8WithDeepInfo"
292 process.updatedJetsAK8.jetSource=
"selectedUpdatedPatJetsAK8WithDeepInfo"
295 from PhysicsTools.PatUtils.tools.runMETCorrectionsAndUncertainties
import runMetCorAndUncFromMiniAOD
299 fixEE2017Params = {
'userawPt':
True,
'ptThreshold':50.0,
'minEtaThreshold':2.65,
'maxEtaThreshold': 3.139},
300 postfix =
"FixEE2017")
301 process.nanoSequenceCommon.insert(2,process.fullPatMetSequenceFixEE2017)
307 nanoAOD_addDeepInfo_switch = cms.PSet(
308 nanoAOD_addDeepBTag_switch = cms.untracked.bool(
False),
309 nanoAOD_addDeepFlavourTag_switch = cms.untracked.bool(
False),
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))
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')
327 run2_miniAOD_80XLegacy.toModify(nanoAOD_addDeepInfoAK8_switch,
328 nanoAOD_addDeepBTag_switch =
True,
329 jecPayload =
'AK8PFchs')
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,
340 run2_nanoAOD_106Xv1.toModify(
341 nanoAOD_addDeepInfoAK8_switch,
342 nanoAOD_addDeepDoubleXV2_switch =
True,
343 nanoAOD_addParticleNet_switch =
True,
344 nanoAOD_addParticleNetMass_switch =
True,
347 run2_nanoAOD_106Xv2.toModify(
348 nanoAOD_addDeepInfoAK8_switch,
349 nanoAOD_addParticleNetMass_switch =
True,
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()
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()
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()))
376 for modifier
in run2_miniAOD_80XLegacy,run2_nanoAOD_94X2016,run2_nanoAOD_94XMiniAODv1,run2_nanoAOD_94XMiniAODv2,run2_nanoAOD_102Xv1,run2_nanoAOD_106Xv1:
378 for modifier
in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
384 for modifier
in run2_miniAOD_80XLegacy,run2_nanoAOD_94X2016,run2_nanoAOD_94XMiniAODv1,run2_nanoAOD_94XMiniAODv2,run2_nanoAOD_102Xv1,run2_nanoAOD_106Xv1:
386 for modifier
in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
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)"
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)
def nanoAOD_customizeCommon
def nanoAOD_customizeData
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
def nanoAOD_runMETfixEE2017
static std::string join(char **cmd)
def nanoWmassGenCustomize
increasing the precision of selected GenParticles.
def nanoAOD_addDeepInfoAK8
def runMetCorAndUncFromMiniAOD
def nanoAOD_addBoostedTauIds
def nanoAOD_recalibrateMETs