1 from __future__
import print_function
2 import FWCore.ParameterSet.Config
as cms
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
26 nanoMetadata = cms.EDProducer(
"UniqueStringProducer",
28 tag = cms.string(
"untagged"),
32 linkedObjects = cms.EDProducer(
"PATObjectCrossLinker",
33 jets=cms.InputTag(
"finalJets"),
34 muons=cms.InputTag(
"finalMuons"),
35 electrons=cms.InputTag(
"finalElectrons"),
36 taus=cms.InputTag(
"finalTaus"),
37 photons=cms.InputTag(
"finalPhotons"),
40 simpleCleanerTable = cms.EDProducer(
"NanoAODSimpleCrossCleaner",
41 name=cms.string(
"cleanmask"),
42 doc=cms.string(
"simple cleaning mask with priority to leptons"),
43 jets=cms.InputTag(
"linkedObjects",
"jets"),
44 muons=cms.InputTag(
"linkedObjects",
"muons"),
45 electrons=cms.InputTag(
"linkedObjects",
"electrons"),
46 taus=cms.InputTag(
"linkedObjects",
"taus"),
47 photons=cms.InputTag(
"linkedObjects",
"photons"),
48 jetSel=cms.string(
"pt>15"),
49 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 )"),
50 electronSel=cms.string(
""),
51 tauSel=cms.string(
""),
52 photonSel=cms.string(
""),
53 jetName=cms.string(
"Jet"),muonName=cms.string(
"Muon"),electronName=cms.string(
"Electron"),
54 tauName=cms.string(
"Tau"),photonName=cms.string(
"Photon")
57 btagSFdir=
"PhysicsTools/NanoAOD/data/btagSF/" 59 btagWeightTable = cms.EDProducer(
"BTagSFProducer",
60 src = cms.InputTag(
"linkedObjects",
"jets"),
61 cut = cms.string(
"pt > 25. && abs(eta) < 2.5"),
62 discNames = cms.vstring(
63 "pfCombinedInclusiveSecondaryVertexV2BJetTags",
64 "pfDeepCSVJetTags:probb+pfDeepCSVJetTags:probbb",
65 "pfCombinedMVAV2BJetTags" 67 discShortNames = cms.vstring(
72 weightFiles = cms.vstring(
73 btagSFdir+
"CSVv2_94XSF_V2_B_F.csv",
74 btagSFdir+
"DeepCSV_94XSF_V2_B_F.csv",
77 operatingPoints = cms.vstring(
"3",
"3",
"3"),
78 measurementTypesB = cms.vstring(
"iterativefit",
"iterativefit",
"iterativefit"),
79 measurementTypesC = cms.vstring(
"iterativefit",
"iterativefit",
"iterativefit"),
80 measurementTypesUDSG = cms.vstring(
"iterativefit",
"iterativefit",
"iterativefit"),
81 sysTypes = cms.vstring(
"central",
"central",
"central")
84 for modifier
in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016:
85 modifier.toModify(btagWeightTable,
86 cut = cms.string(
"pt > 25. && abs(eta) < 2.4"),
87 weightFiles = cms.vstring(
88 btagSFdir+
"CSVv2_Moriond17_B_H.csv",
90 btagSFdir+
"cMVAv2_Moriond17_B_H.csv" 95 genWeightsTable = cms.EDProducer(
"GenWeightsTableProducer",
96 genEvent = cms.InputTag(
"generator"),
97 lheInfo = cms.VInputTag(cms.InputTag(
"externalLHEProducer"), cms.InputTag(
"source")),
98 preferredPDFs = cms.VPSet(
99 cms.PSet( name = cms.string(
"PDF4LHC15_nnlo_30_pdfas"), lhaid = cms.uint32(91400) ),
100 cms.PSet( name = cms.string(
"NNPDF31_nnlo_hessian_pdfas"), lhaid = cms.uint32(306000) ),
101 cms.PSet( name = cms.string(
"NNPDF30_nlo_as_0118"), lhaid = cms.uint32(260000) ),
102 cms.PSet( name = cms.string(
"NNPDF30_lo_as_0130"), lhaid = cms.uint32(262000) ),
103 cms.PSet( name = cms.string(
"NNPDF30_nlo_nf_4_pdfas"), lhaid = cms.uint32(292000) ),
104 cms.PSet( name = cms.string(
"NNPDF30_nlo_nf_5_pdfas"), lhaid = cms.uint32(292200) ),
106 namedWeightIDs = cms.vstring(),
107 namedWeightLabels = cms.vstring(),
108 lheWeightPrecision = cms.int32(14),
109 maxPdfWeights = cms.uint32(150),
110 debug = cms.untracked.bool(
False),
112 lheInfoTable = cms.EDProducer(
"LHETablesProducer",
113 lheInfo = cms.VInputTag(cms.InputTag(
"externalLHEProducer"), cms.InputTag(
"source")),
114 precision = cms.int32(14),
115 storeLHEParticles = cms.bool(
True)
118 l1bits=cms.EDProducer(
"L1TriggerResultsConverter", src=cms.InputTag(
"gtStage2Digis"), legacyL1=cms.bool(
False))
120 nanoSequenceCommon = cms.Sequence(
121 nanoMetadata + jetSequence + muonSequence + tauSequence + electronSequence+photonSequence+vertexSequence+
124 jetTables + muonTables + tauTables + electronTables + photonTables + globalTables +vertexTables+ metTables+simpleCleanerTable + isoTrackTables
126 nanoSequenceOnlyFullSim = cms.Sequence(triggerObjectTables + l1bits)
128 nanoSequence = cms.Sequence(nanoSequenceCommon + nanoSequenceOnlyFullSim)
130 nanoSequenceFS = cms.Sequence(genParticleSequence + particleLevelSequence + nanoSequenceCommon + jetMC + muonMC + electronMC + photonMC + tauMC + metMC + ttbarCatMCProducers + globalTablesMC + btagWeightTable + genWeightsTable + genParticleTables + particleLevelTables + lheInfoTable + ttbarCategoryTable )
132 nanoSequenceMC = nanoSequenceFS.copy()
133 nanoSequenceMC.insert(nanoSequenceFS.index(nanoSequenceCommon)+1,nanoSequenceOnlyFullSim)
136 for modifier
in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2, run2_nanoAOD_102Xv1:
137 modifier.toModify(extraFlagsTable, variables= cms.PSet())
138 modifier.toModify(extraFlagsTable, variables =
dict(Flag_ecalBadCalibFilterV2 =
ExtVar(cms.InputTag(
"ecalBadCalibFilterNanoTagger"), bool, doc =
"Bad ECAL calib flag (updated xtal list)")))
142 _btagDiscriminators=[]
144 print(
"Updating process to run DeepCSV btag")
145 _btagDiscriminators += [
'pfDeepCSVJetTags:probb',
'pfDeepCSVJetTags:probbb',
'pfDeepCSVJetTags:probc']
147 print(
"Updating process to run DeepFlavour btag")
148 _btagDiscriminators += [
'pfDeepFlavourJetTags:probb',
'pfDeepFlavourJetTags:probbb',
'pfDeepFlavourJetTags:problepb',
'pfDeepFlavourJetTags:probc']
149 if len(_btagDiscriminators)==0:
return process
150 print(
"Will recalculate the following discriminators: "+
", ".
join(_btagDiscriminators))
153 jetSource = cms.InputTag(
'slimmedJets'),
154 jetCorrections = (
'AK4PFchs', cms.vstring([
'L1FastJet',
'L2Relative',
'L3Absolute',
'L2L3Residual']),
'None'),
155 btagDiscriminators = _btagDiscriminators,
156 postfix =
'WithDeepInfo',
158 process.load(
"Configuration.StandardSequences.MagneticField_cff")
159 process.jetCorrFactorsNano.src=
"selectedUpdatedPatJetsWithDeepInfo" 160 process.updatedJets.jetSource=
"selectedUpdatedPatJetsWithDeepInfo" 162 process.pfDeepFlavourJetTagsWithDeepInfo.graph_path =
'RecoBTag/Combined/data/DeepFlavourV03_10X_training/constant_graph.pb' 163 process.pfDeepFlavourJetTagsWithDeepInfo.lp_names = [
"cpf_input_batchnorm/keras_learning_phase"]
166 from PhysicsTools.PatUtils.tools.runMETCorrectionsAndUncertainties
import runMetCorAndUncFromMiniAOD
170 process.nanoSequenceCommon.insert(process.nanoSequenceCommon.index(process.jetSequence),cms.Sequence(process.fullPatMetSequence))
171 process.basicJetsForMetForT1METNano = process.basicJetsForMet.clone(
172 src = process.updatedJetsWithUserData.src,
174 type1JetPtThreshold = 0.0,
175 calcMuonSubtrRawPtAsValueMap = cms.bool(
True),
177 process.jetSequence.insert(process.jetSequence.index(process.updatedJetsWithUserData),cms.Sequence(process.basicJetsForMetForT1METNano))
178 process.updatedJetsWithUserData.userFloats.muonSubtrRawPt = cms.InputTag(
"basicJetsForMetForT1METNano:MuonSubtrRawPt")
179 process.corrT1METJetTable.src = process.finalJets.src
180 process.corrT1METJetTable.cut =
"pt<15 && abs(eta)<9.9" 181 for table
in process.jetTable, process.corrT1METJetTable:
182 table.variables.muonSubtrFactor =
Var(
"1-userFloat('muonSubtrRawPt')/(pt()*jecFactor('Uncorrected'))",float,doc=
"1-(muon-subtracted raw pt)/(raw pt)",precision=6)
183 process.metTables += process.corrT1METJetTable
194 for modname
in electron_id_modules_WorkingPoints_nanoAOD.modules:
196 process.electronSequence.insert(process.electronSequence.index(bitmapVIDForEle),process.egmGsfElectronIDSequence)
197 for modifier
in run2_miniAOD_80XLegacy, :
198 modifier.toModify(process.electronMVAValueMapProducer, srcMiniAOD =
"slimmedElectronsUpdated")
199 modifier.toModify(process.electronMVAVariableHelper, srcMiniAOD =
"slimmedElectronsUpdated")
200 modifier.toModify(process.egmGsfElectronIDs, physicsObjectSrc =
"slimmedElectronsUpdated")
201 if hasattr(process,
"heepIDVarValueMaps"):
202 modifier.toModify(process.heepIDVarValueMaps, elesMiniAOD =
"slimmedElectronsUpdated")
204 for modname
in photon_id_modules_WorkingPoints_nanoAOD.modules:
206 process.photonSequence.insert(process.photonSequence.index(bitmapVIDForPho),process.egmPhotonIDSequence)
210 _btagDiscriminators=[]
212 print(
"Updating process to run DeepCSV btag to AK8 jets")
213 _btagDiscriminators += [
'pfDeepCSVJetTags:probb',
'pfDeepCSVJetTags:probbb']
214 if addDeepBoostedJet:
215 print(
"Updating process to run DeepBoostedJet on datasets before 103X")
217 from RecoBTag.MXNet.pfDeepBoostedDiscriminatorsJetTags_cfi
import pfDeepBoostedDiscriminatorsJetTags
218 from RecoBTag.MXNet.pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags_cfi
import pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags
219 from RecoBTag.MXNet.Parameters.V02.pfDeepBoostedJetPreprocessParams_cfi
import pfDeepBoostedJetPreprocessParams
as pfDeepBoostedJetPreprocessParamsV02
220 from RecoBTag.MXNet.Parameters.V02.pfMassDecorrelatedDeepBoostedJetPreprocessParams_cfi
import pfMassDecorrelatedDeepBoostedJetPreprocessParams
as pfMassDecorrelatedDeepBoostedJetPreprocessParamsV02
221 pfDeepBoostedJetTags.preprocessParams = pfDeepBoostedJetPreprocessParamsV02
222 pfDeepBoostedJetTags.model_path =
'RecoBTag/Combined/data/DeepBoostedJet/V02/full/resnet-symbol.json' 223 pfDeepBoostedJetTags.param_path =
'RecoBTag/Combined/data/DeepBoostedJet/V02/full/resnet-0000.params' 224 pfMassDecorrelatedDeepBoostedJetTags.preprocessParams = pfMassDecorrelatedDeepBoostedJetPreprocessParamsV02
225 pfMassDecorrelatedDeepBoostedJetTags.model_path =
'RecoBTag/Combined/data/DeepBoostedJet/V02/decorrelated/resnet-symbol.json' 226 pfMassDecorrelatedDeepBoostedJetTags.param_path =
'RecoBTag/Combined/data/DeepBoostedJet/V02/decorrelated/resnet-0000.params' 228 pfDeepBoostedJetTagsProbs = [
'pfDeepBoostedJetTags:' + flav_name
229 for flav_name
in pfDeepBoostedJetTags.flav_names]
230 pfDeepBoostedJetTagsMetaDiscrs = [
'pfDeepBoostedDiscriminatorsJetTags:' + disc.name.value()
231 for disc
in pfDeepBoostedDiscriminatorsJetTags.discriminators]
232 pfMassDecorrelatedDeepBoostedJetTagsProbs = [
'pfMassDecorrelatedDeepBoostedJetTags:' + flav_name
233 for flav_name
in pfMassDecorrelatedDeepBoostedJetTags.flav_names]
234 pfMassDecorrelatedDeepBoostedJetTagsMetaDiscrs = [
'pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags:' + disc.name.value()
235 for disc
in pfMassDecorrelatedDeepBoostedDiscriminatorsJetTags.discriminators]
236 pfDeepBoostedJetTagsAll = pfDeepBoostedJetTagsProbs + pfDeepBoostedJetTagsMetaDiscrs + \
237 pfMassDecorrelatedDeepBoostedJetTagsProbs + pfMassDecorrelatedDeepBoostedJetTagsMetaDiscrs
238 _btagDiscriminators += pfDeepBoostedJetTagsAll
240 print(
"Updating process to run DeepDoubleX on datasets before 104X")
241 _btagDiscriminators += [
'pfMassIndependentDeepDoubleBvLJetTags:probHbb',
'pfMassIndependentDeepDoubleCvLJetTags:probHcc',
'pfMassIndependentDeepDoubleCvBJetTags:probHcc']
242 if len(_btagDiscriminators)==0:
return process
243 print(
"Will recalculate the following discriminators on AK8 jets: "+
", ".
join(_btagDiscriminators))
246 jetSource = cms.InputTag(
'slimmedJetsAK8'),
247 pvSource = cms.InputTag(
'offlineSlimmedPrimaryVertices'),
248 svSource = cms.InputTag(
'slimmedSecondaryVertices'),
250 jetCorrections = (jecPayload.value(), cms.vstring([
'L1FastJet',
'L2Relative',
'L3Absolute',
'L2L3Residual']),
'None'),
251 btagDiscriminators = _btagDiscriminators,
252 postfix=
'AK8WithDeepInfo',
255 process.jetCorrFactorsAK8.src=
"selectedUpdatedPatJetsAK8WithDeepInfo" 256 process.updatedJetsAK8.jetSource=
"selectedUpdatedPatJetsAK8WithDeepInfo" 259 from PhysicsTools.PatUtils.tools.runMETCorrectionsAndUncertainties
import runMetCorAndUncFromMiniAOD
263 fixEE2017Params = {
'userawPt':
True,
'ptThreshold':50.0,
'minEtaThreshold':2.65,
'maxEtaThreshold': 3.139},
264 postfix =
"FixEE2017")
265 process.nanoSequenceCommon.insert(process.nanoSequenceCommon.index(jetSequence),process.fullPatMetSequenceFixEE2017)
270 nanoAOD_addDeepInfo_switch = cms.PSet(
271 nanoAOD_addDeepBTag_switch = cms.untracked.bool(
False),
272 nanoAOD_addDeepFlavourTag_switch = cms.untracked.bool(
False),
274 run2_miniAOD_80XLegacy.toModify(nanoAOD_addDeepInfo_switch, nanoAOD_addDeepBTag_switch = cms.untracked.bool(
True))
275 for modifier
in run2_miniAOD_80XLegacy, run2_nanoAOD_94X2016, run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
276 modifier.toModify(nanoAOD_addDeepInfo_switch, nanoAOD_addDeepFlavourTag_switch = cms.untracked.bool(
True))
278 addDeepBTag=nanoAOD_addDeepInfo_switch.nanoAOD_addDeepBTag_switch,
279 addDeepFlavour=nanoAOD_addDeepInfo_switch.nanoAOD_addDeepFlavourTag_switch)
280 nanoAOD_addDeepInfoAK8_switch = cms.PSet(
281 nanoAOD_addDeepBTag_switch = cms.untracked.bool(
False),
282 nanoAOD_addDeepBoostedJet_switch = cms.untracked.bool(
True),
283 nanoAOD_addDeepDoubleX_switch = cms.untracked.bool(
True),
284 jecPayload = cms.untracked.string(
'AK8PFPuppi')
287 run2_miniAOD_80XLegacy.toModify(nanoAOD_addDeepInfoAK8_switch,
288 nanoAOD_addDeepBTag_switch = cms.untracked.bool(
True),
289 nanoAOD_addDeepBoostedJet_switch = cms.untracked.bool(
False),
290 nanoAOD_addDeepDoubleX_switch = cms.untracked.bool(
False),
291 jecPayload = cms.untracked.string(
'AK8PFchs'))
293 addDeepBTag=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepBTag_switch,
294 addDeepBoostedJet=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepBoostedJet_switch,
295 addDeepDoubleX=nanoAOD_addDeepInfoAK8_switch.nanoAOD_addDeepDoubleX_switch,
296 jecPayload=nanoAOD_addDeepInfoAK8_switch.jecPayload)
302 for modifier
in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
309 for modifier
in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2:
314 _80x_sequence = nanoSequenceCommon.copy()
316 _80x_sequence.remove(isoTrackTables)
317 _80x_sequence.remove(isoTrackSequence)
319 _80x_sequence.insert(_80x_sequence.index(jetSequence), extraFlagsProducers)
320 _80x_sequence.insert(_80x_sequence.index(simpleCleanerTable)+1, extraFlagsTable)
322 run2_miniAOD_80XLegacy.toReplaceWith( nanoSequenceCommon, _80x_sequence)
324 _102x_sequence = nanoSequenceCommon.copy()
326 _102x_sequence.insert(_102x_sequence.index(jetSequence),extraFlagsProducers102x)
327 _102x_sequence.insert(_102x_sequence.index(simpleCleanerTable)+1,extraFlagsTable)
329 for modifier
in run2_nanoAOD_94XMiniAODv1, run2_nanoAOD_94XMiniAODv2, run2_nanoAOD_102Xv1:
330 modifier.toReplaceWith(nanoSequenceCommon, _102x_sequence)
def nanoAOD_addDeepInfo(process, addDeepBTag, addDeepFlavour)
def ExtVar(tag, valtype, compression=None, doc=None, mcOnly=False, precision=-1)
def nanoAOD_addDeepInfoAK8(process, addDeepBTag, addDeepBoostedJet, addDeepDoubleX, jecPayload)
S & print(S &os, JobReport::InputFile const &f)
def nanoAOD_customizeMC(process)
def nanoAOD_activateVID(process)
def Var(expr, valtype, compression=None, doc=None, mcOnly=False, precision=-1)
def nanoAOD_customizeCommon(process)
def nanoAOD_recalibrateMETs(process, isData)
def nanoAOD_runMETfixEE2017(process, isData)
static std::string join(char **cmd)
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, postfix="")
def nanoAOD_customizeData(process)