CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
nano_cff.py
Go to the documentation of this file.
1 import FWCore.ParameterSet.Config as cms
14 from PhysicsTools.NanoAOD.met_cff import *
18 
19 from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy
20 from Configuration.Eras.Modifier_run2_nanoAOD_92X_cff import run2_nanoAOD_92X
21 from Configuration.Eras.Modifier_run2_nanoAOD_94X2016_cff import run2_nanoAOD_94X2016
22 
23 nanoMetadata = cms.EDProducer("UniqueStringProducer",
24  strings = cms.PSet(
25  tag = cms.string("untagged"),
26  )
27 )
28 
29 linkedObjects = cms.EDProducer("PATObjectCrossLinker",
30  jets=cms.InputTag("finalJets"),
31  muons=cms.InputTag("finalMuons"),
32  electrons=cms.InputTag("finalElectrons"),
33  taus=cms.InputTag("finalTaus"),
34  photons=cms.InputTag("finalPhotons"),
35 )
36 
37 simpleCleanerTable = cms.EDProducer("NanoAODSimpleCrossCleaner",
38  name=cms.string("cleanmask"),
39  doc=cms.string("simple cleaning mask with priority to leptons"),
40  jets=cms.InputTag("linkedObjects","jets"),
41  muons=cms.InputTag("linkedObjects","muons"),
42  electrons=cms.InputTag("linkedObjects","electrons"),
43  taus=cms.InputTag("linkedObjects","taus"),
44  photons=cms.InputTag("linkedObjects","photons"),
45  jetSel=cms.string("pt>15"),
46  muonSel=cms.string("isPFMuon && innerTrack.validFraction >= 0.49 && ( isGlobalMuon && globalTrack.normalizedChi2 < 3 && combinedQuality.chi2LocalPosition < 12 && combinedQuality.trkKink < 20 && segmentCompatibility >= 0.303 || segmentCompatibility >= 0.451 )"),
47  electronSel=cms.string(""),
48  tauSel=cms.string(""),
49  photonSel=cms.string(""),
50  jetName=cms.string("Jet"),muonName=cms.string("Muon"),electronName=cms.string("Electron"),
51  tauName=cms.string("Tau"),photonName=cms.string("Photon")
52 )
53 
54 btagSFdir="PhysicsTools/NanoAOD/data/btagSF/"
55 
56 btagWeightTable = cms.EDProducer("BTagSFProducer",
57  src = cms.InputTag("linkedObjects","jets"),
58  cut = cms.string("pt > 25. && abs(eta) < 2.5"),
59  discNames = cms.vstring(
60  "pfCombinedInclusiveSecondaryVertexV2BJetTags",
61  "pfDeepCSVJetTags:probb+pfDeepCSVJetTags:probbb", #if multiple MiniAOD branches need to be summed up (e.g., DeepCSV b+bb), separate them using '+' delimiter
62  "pfCombinedMVAV2BJetTags"
63  ),
64  discShortNames = cms.vstring(
65  "CSVV2",
66  "DeepCSVB",
67  "CMVA"
68  ),
69  weightFiles = cms.vstring( #default settings are for 2017 94X. toModify function is called later for other eras.
70  btagSFdir+"CSVv2_94XSF_V2_B_F.csv",
71  btagSFdir+"DeepCSV_94XSF_V2_B_F.csv",
72  "unavailable" #if SFs for an algorithm in an era is unavailable, the corresponding branch will not be stored
73  ),
74  operatingPoints = cms.vstring("3","3","3"), #loose = 0, medium = 1, tight = 2, reshaping = 3
75  measurementTypesB = cms.vstring("iterativefit","iterativefit","iterativefit"), #e.g. "comb", "incl", "ttbar", "iterativefit"
76  measurementTypesC = cms.vstring("iterativefit","iterativefit","iterativefit"),
77  measurementTypesUDSG = cms.vstring("iterativefit","iterativefit","iterativefit"),
78  sysTypes = cms.vstring("central","central","central")
79 )
80 
81 run2_miniAOD_80XLegacy.toModify(btagWeightTable,
82  cut = cms.string("pt > 25. && abs(eta) < 2.4"), #80X corresponds to 2016, |eta| < 2.4
83  weightFiles = cms.vstring( #80X corresponds to 2016 SFs
84  btagSFdir+"CSVv2_Moriond17_B_H.csv",
85  "unavailable",
86  btagSFdir+"cMVAv2_Moriond17_B_H.csv"
87  )
88 )
89 
90 run2_nanoAOD_92X.toModify(btagWeightTable, #92X corresponds to MCv1, for which SFs are unavailable
91  weightFiles = cms.vstring(
92  "unavailable",
93  "unavailable",
94  "unavailable"
95  )
96 )
97 
98 genWeightsTable = cms.EDProducer("GenWeightsTableProducer",
99  genEvent = cms.InputTag("generator"),
100  lheInfo = cms.InputTag("externalLHEProducer"),
101  preferredPDFs = cms.VPSet( # see https://lhapdf.hepforge.org/pdfsets.html
102  cms.PSet( name = cms.string("PDF4LHC15_nnlo_30_pdfas"), lhaid = cms.uint32(91400) ),
103  cms.PSet( name = cms.string("NNPDF31_nnlo_hessian_pdfas"), lhaid = cms.uint32(306000) ),
104  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 ...
105  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 )
106  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)
107  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)
108  ),
109  namedWeightIDs = cms.vstring(),
110  namedWeightLabels = cms.vstring(),
111  lheWeightPrecision = cms.int32(14),
112  maxPdfWeights = cms.uint32(150),
113  debug = cms.untracked.bool(False),
114 )
115 lheInfoTable = cms.EDProducer("LHETablesProducer",
116  lheInfo = cms.InputTag("externalLHEProducer"),
117  precision = cms.int32(14),
118  storeLHEParticles = cms.bool(True)
119 )
120 
121 l1bits=cms.EDProducer("L1TriggerResultsConverter", src=cms.InputTag("gtStage2Digis"), legacyL1=cms.bool(False))
122 
123 nanoSequence = cms.Sequence(
124  nanoMetadata + jetSequence + muonSequence + tauSequence + electronSequence+photonSequence+vertexSequence+metSequence+
125  isoTrackSequence + # must be after all the leptons
126  linkedObjects +
127  jetTables + muonTables + tauTables + electronTables + photonTables + globalTables +vertexTables+ metTables+simpleCleanerTable + triggerObjectTables + isoTrackTables +
128  l1bits)
129 
130 nanoSequenceMC = cms.Sequence(genParticleSequence + particleLevelSequence + nanoSequence + jetMC + muonMC + electronMC + photonMC + tauMC + metMC + ttbarCatMCProducers + globalTablesMC + btagWeightTable + genWeightsTable + genParticleTables + particleLevelTables + lheInfoTable + ttbarCategoryTable )
131 
132 
133 from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection
134 from PhysicsTools.PatAlgos.tools.helpers import getPatAlgosToolsTask
136  print "Updating process to run DeepCSV btag on legacy 80X datasets"
137  updateJetCollection(
138  process,
139  jetSource = cms.InputTag('slimmedJets'),
140  jetCorrections = ('AK4PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute','L2L3Residual']), 'None'),
141  btagDiscriminators = ['pfDeepCSVJetTags:probb','pfDeepCSVJetTags:probbb','pfDeepCSVJetTags:probc'], ## to add discriminators
142  btagPrefix = ''
143  )
144  process.load("Configuration.StandardSequences.MagneticField_cff")
145  process.looseJetId.src="selectedUpdatedPatJets"
146  process.tightJetId.src="selectedUpdatedPatJets"
147  process.tightJetIdLepVeto.src="selectedUpdatedPatJets"
148  process.bJetVars.src="selectedUpdatedPatJets"
149  process.slimmedJetsWithUserData.src="selectedUpdatedPatJets"
150  process.qgtagger80x.srcJets="selectedUpdatedPatJets"
151  patAlgosToolsTask = getPatAlgosToolsTask(process)
152  patAlgosToolsTask .add(process.updatedPatJets)
153  patAlgosToolsTask .add(process.patJetCorrFactors)
154  process.additionalendpath = cms.EndPath(patAlgosToolsTask)
155  return process
157  print "Updating process to run DeepFlavour btag on legacy 80X datasets"
158  updateJetCollection(
159  process,
160  jetSource = cms.InputTag('slimmedJets'),
161  jetCorrections = ('AK4PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute','L2L3Residual']), 'None'),
162  btagDiscriminators = ['pfDeepFlavourJetTags:probb','pfDeepFlavourJetTags:probbb','pfDeepFlavourJetTags:problepb'], ## to add discriminators
163  btagPrefix = ''
164  )
165  process.load("Configuration.StandardSequences.MagneticField_cff")
166  process.looseJetId.src="selectedUpdatedPatJets"
167  process.tightJetId.src="selectedUpdatedPatJets"
168  process.tightJetIdLepVeto.src="selectedUpdatedPatJets"
169  process.bJetVars.src="selectedUpdatedPatJets"
170  process.slimmedJetsWithUserData.src="selectedUpdatedPatJets"
171  process.qgtagger80x.srcJets="selectedUpdatedPatJets"
172  process.pfDeepFlavourJetTags.graph_path = 'RecoBTag/Combined/data/DeepFlavourV03_10X_training/constant_graph.pb'
173  process.pfDeepFlavourJetTags.lp_names = ["cpf_input_batchnorm/keras_learning_phase"]
174  patAlgosToolsTask = getPatAlgosToolsTask(process)
175  patAlgosToolsTask .add(process.updatedPatJets)
176  patAlgosToolsTask .add(process.patJetCorrFactors)
177  process.additionalendpath = cms.EndPath(patAlgosToolsTask)
178  return process
179 
180 
182  run2_miniAOD_80XLegacy.toModify(process, nanoAOD_addDeepBTagFor80X)
183  run2_nanoAOD_94X2016.toModify(process, nanoAOD_addDeepFlavourTagFor94X2016)
184  return process
185 
186 
188  process = nanoAOD_customizeCommon(process)
189  if hasattr(process,'calibratedPatElectrons80X'):
190  process.calibratedPatElectrons80X.isMC = cms.bool(False)
191  process.calibratedPatPhotons80X.isMC = cms.bool(False)
192  return process
193 
194 def nanoAOD_customizeMC(process):
195  process = nanoAOD_customizeCommon(process)
196  if hasattr(process,'calibratedPatElectrons80X'):
197  process.calibratedPatElectrons80X.isMC = cms.bool(True)
198  process.calibratedPatPhotons80X.isMC = cms.bool(True)
199  return process
200 
201 ### Era dependent customization
202 _80x_sequence = nanoSequence.copy()
203 #remove stuff
204 _80x_sequence.remove(isoTrackTable)
205 _80x_sequence.remove(isoTrackSequence)
206 #add stuff
207 _80x_sequence.insert(_80x_sequence.index(jetSequence), extraFlagsProducers)
208 _80x_sequence.insert(_80x_sequence.index(l1bits)+1, extraFlagsTable)
209 
210 run2_miniAOD_80XLegacy.toReplaceWith( nanoSequence, _80x_sequence)
211 
212 
213 
def nanoAOD_addDeepBTagFor80X(process)
Definition: nano_cff.py:135
def nanoAOD_customizeMC(process)
Definition: nano_cff.py:194
def nanoAOD_customizeCommon(process)
Definition: nano_cff.py:181
def nanoAOD_addDeepFlavourTagFor94X2016(process)
Definition: nano_cff.py:156
void add(std::map< std::string, TH1 * > &h, TH1 *hist)
def getPatAlgosToolsTask(process)
Definition: helpers.py:12
def nanoAOD_customizeData(process)
Definition: nano_cff.py:187