DESY Hbb Analysis Framework
ntuplizer_94X_mc_2017_fall17-v3.py
Go to the documentation of this file.
1 # For the ntuple production
2 import FWCore.ParameterSet.Config as cms
3 
4 from Configuration.StandardSequences.Eras import eras
5 
6 process = cms.Process('MssmHbb',eras.Run2_2017,eras.run2_nanoAOD_94XMiniAODv2)
7 
8 process.load('FWCore.MessageService.MessageLogger_cfi')
9 process.MessageLogger.cerr.FwkReport.reportEvery = cms.untracked.int32(100000)
10 
11 ## Using MINIAOD. GlobalTag just in case jet re-clustering, L1 trigger filter etc is needed to be done
12 process.load('Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff')
13 process.load('Configuration.Geometry.GeometryRecoDB_cff')
14 process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
15 from Configuration.AlCa.GlobalTag import GlobalTag
16 process.GlobalTag = GlobalTag(process.GlobalTag, '94X_mc2017_realistic_v14')
17 
18 process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(100) )
19 
20 ## TFileService
21 output_file = 'ntuple.root'
22 process.TFileService = cms.Service('TFileService',
23  fileName = cms.string(output_file)
24 )
25 
27 
28 ## ============ TRIGGER FILTER ===============
29 ## Enable below at cms.Path if needed - DATA ONLY!!!
30 process.triggerSelection = cms.EDFilter( 'TriggerResultsFilter',
31  MssmHbbTriggerResultsFilter,
32  hltResults = cms.InputTag( 'TriggerResults', '', 'HLT' ),
33  l1tResults = cms.InputTag( '' ),
34  l1tIgnoreMask = cms.bool( False ),
35  l1techIgnorePrescales = cms.bool( False ),
36  daqPartitions = cms.uint32( 1 ),
37  throw = cms.bool( False )
38 )
39 
40 
41 # only need if discriminator is new or recommended not for JEC
42 bTagDiscriminators = [
43  'pfCombinedInclusiveSecondaryVertexV2BJetTags',
44  'pfJetProbabilityBJetTags',
45  'pfDeepCSVJetTags:probudsg',
46  'pfDeepCSVJetTags:probb',
47  'pfDeepCSVJetTags:probc',
48  'pfDeepCSVJetTags:probbb',
49  'pfDeepCSVJetTags:probcc',
50 ]
51 
52 ### ==== Regression ==== ####
53 process.bJetVars = cms.EDProducer("JetRegressionVarProducer",
54  pvsrc = cms.InputTag("offlineSlimmedPrimaryVertices"),
55  src = cms.InputTag("slimmedJets"),
56  svsrc = cms.InputTag("slimmedSecondaryVertices"),
57  gpsrc = cms.InputTag("prunedGenParticles"),
58  #musrc = cms.InputTag("slimmedMuons"),
59  #elesrc = cms.InputTag("slimmedElectrons")
60 )
61 
62 process.slimmedJetsWithUserData = cms.EDProducer("PATJetUserDataEmbedder",
63  src = cms.InputTag("slimmedJets"),
64  userFloats = cms.PSet(
65  leadTrackPt = cms.InputTag("bJetVars:leadTrackPt"),
66  leptonPtRel = cms.InputTag("bJetVars:leptonPtRel"),
67  leptonPtRatio = cms.InputTag("bJetVars:leptonPtRatio"),
68  leptonPtRelInv = cms.InputTag("bJetVars:leptonPtRelInv"),
69  leptonPtRelv0 = cms.InputTag("bJetVars:leptonPtRelv0"),
70  leptonPtRatiov0 = cms.InputTag("bJetVars:leptonPtRatiov0"),
71  leptonPtRelInvv0 = cms.InputTag("bJetVars:leptonPtRelInvv0"),
72  leptonDeltaR = cms.InputTag("bJetVars:leptonDeltaR"),
73  leptonPt = cms.InputTag("bJetVars:leptonPt"),
74  vtxPt = cms.InputTag("bJetVars:vtxPt"),
75  vtxMass = cms.InputTag("bJetVars:vtxMass"),
76  vtx3dL = cms.InputTag("bJetVars:vtx3dL"),
77  vtx3deL = cms.InputTag("bJetVars:vtx3deL"),
78  ptD = cms.InputTag("bJetVars:ptD"),
79  genPtwNu = cms.InputTag("bJetVars:genPtwNu"),
80 
81  ),
82  userInts = cms.PSet(
83  vtxNtrk = cms.InputTag("bJetVars:vtxNtrk"),
84  leptonPdgId = cms.InputTag("bJetVars:leptonPdgId"),
85  ),
86 )
87 
88 process.bjetNN= cms.EDProducer("BJetEnergyRegressionMVA",
89  backend = cms.string("TF"),
90  src = cms.InputTag("slimmedJetsWithUserData"),
91  pvsrc = cms.InputTag("offlineSlimmedPrimaryVertices"),
92  svsrc = cms.InputTag("slimmedSecondaryVertices"),
93  rhosrc = cms.InputTag("fixedGridRhoFastjetAll"),
94 
95  weightFile = cms.FileInPath("PhysicsTools/NanoAOD/data/breg_training_2017.pb"),
96  name = cms.string("JetRegNN"),
97  isClassifier = cms.bool(False),
98  variablesOrder = cms.vstring(["Jet_pt","Jet_eta","rho","Jet_mt","Jet_leadTrackPt","Jet_leptonPtRel","Jet_leptonDeltaR","Jet_neHEF","Jet_neEmEF","Jet_vtxPt","Jet_vtxMass","Jet_vtx3dL","Jet_vtxNtrk","Jet_vtx3deL","Jet_numDaughters_pt03","Jet_energyRing_dR0_em_Jet_rawEnergy","Jet_energyRing_dR1_em_Jet_rawEnergy","Jet_energyRing_dR2_em_Jet_rawEnergy","Jet_energyRing_dR3_em_Jet_rawEnergy","Jet_energyRing_dR4_em_Jet_rawEnergy","Jet_energyRing_dR0_neut_Jet_rawEnergy","Jet_energyRing_dR1_neut_Jet_rawEnergy","Jet_energyRing_dR2_neut_Jet_rawEnergy","Jet_energyRing_dR3_neut_Jet_rawEnergy","Jet_energyRing_dR4_neut_Jet_rawEnergy","Jet_energyRing_dR0_ch_Jet_rawEnergy","Jet_energyRing_dR1_ch_Jet_rawEnergy","Jet_energyRing_dR2_ch_Jet_rawEnergy","Jet_energyRing_dR3_ch_Jet_rawEnergy","Jet_energyRing_dR4_ch_Jet_rawEnergy","Jet_energyRing_dR0_mu_Jet_rawEnergy","Jet_energyRing_dR1_mu_Jet_rawEnergy","Jet_energyRing_dR2_mu_Jet_rawEnergy","Jet_energyRing_dR3_mu_Jet_rawEnergy","Jet_energyRing_dR4_mu_Jet_rawEnergy","Jet_chHEF","Jet_chEmEF","Jet_leptonPtRelInv","isEle","isMu","isOther","Jet_mass","Jet_ptd"]),
99  variables = cms.PSet(
100  Jet_pt = cms.string("pt*jecFactor('Uncorrected')"),
101  Jet_mt = cms.string("mt*jecFactor('Uncorrected')"),
102  Jet_eta = cms.string("eta"),
103  Jet_mass = cms.string("mass*jecFactor('Uncorrected')"),
104  Jet_ptd = cms.string("userFloat('ptD')"),
105  Jet_leadTrackPt = cms.string("userFloat('leadTrackPt')"),
106  Jet_vtxNtrk = cms.string("userInt('vtxNtrk')"),
107  Jet_vtxMass = cms.string("userFloat('vtxMass')"),
108  Jet_vtx3dL = cms.string("userFloat('vtx3dL')"),
109  Jet_vtx3deL = cms.string("userFloat('vtx3deL')"),
110  Jet_vtxPt = cms.string("userFloat('vtxPt')"),
111  #Jet_leptonPt = cms.string("userFloat('leptonPt')"),
112  Jet_leptonPtRel = cms.string("userFloat('leptonPtRelv0')"),
113  Jet_leptonPtRelInv = cms.string("userFloat('leptonPtRelInvv0')*jecFactor('Uncorrected')"),
114  Jet_leptonDeltaR = cms.string("userFloat('leptonDeltaR')"),
115  #Jet_leptonPdgId = cms.string("userInt('leptonPdgId')"),
116  Jet_neHEF = cms.string("neutralHadronEnergyFraction()"),
117  Jet_neEmEF = cms.string("neutralEmEnergyFraction()"),
118  Jet_chHEF = cms.string("chargedHadronEnergyFraction()"),
119  Jet_chEmEF = cms.string("chargedEmEnergyFraction()"),
120  isMu = cms.string("?abs(userInt('leptonPdgId'))==13?1:0"),
121  isEle = cms.string("?abs(userInt('leptonPdgId'))==11?1:0"),
122  isOther = cms.string("?userInt('leptonPdgId')==0?1:0"),
123  ),
124  inputTensorName = cms.string("ffwd_inp"),
125  outputTensorName = cms.string("ffwd_out/BiasAdd"),
126  outputNames = cms.vstring(["corr","res"]),
127  outputFormulas = cms.vstring(["at(0)*0.28492164611816406+1.0596693754196167","0.5*(at(2)-at(1))*0.28492164611816406"]),
128  nThreads = cms.uint32(1),
129  singleThreadPool = cms.string("no_threads"),
130 )
131 
132 process.slimmedJetsWithUserDataWithReg = cms.EDProducer("PATJetUserDataEmbedder",
133  src = cms.InputTag("slimmedJetsWithUserData"),
134  userFloats = cms.PSet(
135  bJetRegCorr = cms.InputTag("bjetNN:corr"),
136  bJetRegRes = cms.InputTag("bjetNN:res"),
137  ),
138 )
139 
140 
141 ### ==== Updated Jets ==== ###
143 
144 
145 # Puppi specifics
146 from PhysicsTools.PatAlgos.tools.helpers import getPatAlgosToolsTask
147 patAlgosToolsTask = getPatAlgosToolsTask(process)
148 from PhysicsTools.PatAlgos.patPuppiJetSpecificProducer_cfi import patPuppiJetSpecificProducer
149 process.patPuppiJetSpecificProducer = patPuppiJetSpecificProducer.clone(
150  src=cms.InputTag("slimmedJetsPuppi"),
151 )
152 patAlgosToolsTask.add(process.patPuppiJetSpecificProducer)
153 updateJetCollection(
154  process,
155  labelName = 'PuppiJetSpecific',
156  jetSource = cms.InputTag('slimmedJetsPuppi'),
157 )
158 process.updatedPatJetsPuppiJetSpecific.userData.userFloats.src = ['patPuppiJetSpecificProducer:puppiMultiplicity', 'patPuppiJetSpecificProducer:neutralPuppiMultiplicity', 'patPuppiJetSpecificProducer:neutralHadronPuppiMultiplicity', 'patPuppiJetSpecificProducer:photonPuppiMultiplicity', 'patPuppiJetSpecificProducer:HFHadronPuppiMultiplicity', 'patPuppiJetSpecificProducer:HFEMPuppiMultiplicity' ]
159 
160 
161 
162 ### ============ Jet energy correctiosn update ============== (not really running!???)
163 ## Update the slimmedJets in miniAOD: corrections from the chosen Global Tag are applied and the b-tag discriminators are re-evaluated
164 updateJetCollection(
165  process,
166  jetSource = cms.InputTag('slimmedJetsWithUserDataWithReg'),
167  jetCorrections = ('AK4PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'),
168 # btagDiscriminators = bTagDiscriminators
169 )
170 updateJetCollection(
171  process,
172  labelName = 'Puppi',
173  jetSource = cms.InputTag('updatedPatJetsPuppiJetSpecific'),
174  jetCorrections = ('AK4PFPuppi', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'),
175 # btagDiscriminators = bTagDiscriminators
176 )
177 updateJetCollection(
178  process,
179  labelName = 'AK8',
180  jetSource = cms.InputTag('slimmedJetsAK8'),
181  jetCorrections = ('AK8PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute']), 'None'),
182 # btagDiscriminators = bTagDiscriminators
183 )
184 
185 
186 ## ============ EVENT FILTER COUNTER ===============
187 ## Filter counter (maybe more useful for MC)
188 process.TotalEvents = cms.EDProducer('EventCountProducer')
189 process.FilteredEvents = cms.EDProducer('EventCountProducer')
190 
191 ## ============ PRIMARY VERTEX FILTER ===============
192 process.primaryVertexFilter = cms.EDFilter('VertexSelector',
193  src = cms.InputTag('offlineSlimmedPrimaryVertices'), # primary vertex collection name
194  cut = cms.string('!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2'), # ndof>thr=4 corresponds to sum(track_weigths) > (thr+3)/2 = 3.5 so typically 4 good tracks
195  filter = cms.bool(True), # otherwise it won't filter the events, just produce an empty vertex collection.
196 )
197 
202 
203 
204 ## ============ THE NTUPLIZER!!! ===============
205 process.MssmHbb = cms.EDAnalyzer('Ntuplizer',
206  # Imported settings (always at the beginning)
207  MssmHbbNtuplizerBtag,
208  MssmHbbNtuplizerTriggerPaths,
209  MssmHbbNtuplizerL1Seeds,
210  MssmHbbNtuplizerTriggerObjects,
211 
212  MonteCarlo = cms.bool(True),
213  ## Monte Carlo only
214  CrossSection = cms.double(1.), # in pb
215  GenFilterInfo = cms.InputTag("genFilterEfficiencyProducer"),
216  GenRunInfo = cms.InputTag("generator"),
217  GenEventInfo = cms.InputTag("generator"),
218  GenJets = cms.VInputTag(cms.InputTag("slimmedGenJets")),
219  GenParticles = cms.VInputTag(cms.InputTag("prunedGenParticles")),
220  PileupInfo = cms.InputTag("slimmedAddPileupInfo"),
221  ###################
222  TotalEvents = cms.InputTag ('TotalEvents'),
223  FilteredEvents = cms.InputTag ('FilteredEvents'),
224 # PatJets = cms.VInputTag( cms.InputTag('slimmedJets'), cms.InputTag('slimmedJetsPuppi'), cms.InputTag('slimmedJetsAK8'), ),
225  PatJets = cms.VInputTag( cms.InputTag('updatedPatJets'), cms.InputTag('updatedPatJetsPuppi'), cms.InputTag('updatedPatJetsAK8'), ),
226  JECRecords = cms.vstring ( 'AK4PFchs', 'AK4PFPuppi', 'AK8PFchs', ), # for the JEC uncertainties
227  JERRecords = cms.vstring ( 'AK4PFchs', 'AK4PFPuppi', 'AK8PFchs', ), # for the JER uncertainties
228  FixedGridRhoAll = cms.InputTag ('fixedGridRhoAll'),
229  PatMuons = cms.VInputTag(cms.InputTag('slimmedMuons') ),
230  PrimaryVertices = cms.VInputTag(cms.InputTag('offlineSlimmedPrimaryVertices') ),
231  TriggerResults = cms.VInputTag(cms.InputTag('TriggerResults','','HLT') ),
232  L1TJets = cms.VInputTag(cms.InputTag('caloStage2Digis','Jet','RECO'), ),
233  L1TMuons = cms.VInputTag(cms.InputTag('gmtStage2Digis','Muon','RECO'), ),
234  TriggerObjectStandAlone = cms.VInputTag(cms.InputTag('slimmedPatTrigger'), ),
235 
236 )
237 
238 process.p = cms.Path(
239  process.TotalEvents *
240 # process.triggerSelection *
241  process.primaryVertexFilter *
242  process.FilteredEvents *
243  process.bJetVars * process.slimmedJetsWithUserData * process.bjetNN * process.slimmedJetsWithUserDataWithReg *
244  process.patJetCorrFactors * process.updatedPatJets *
245  process.patPuppiJetSpecificProducer * process.updatedPatJetsPuppiJetSpecific *
246  process.patJetCorrFactorsPuppi * process.updatedPatJetsPuppi *
247  process.patJetCorrFactorsAK8 * process.updatedPatJetsAK8 *
248  process.MssmHbb
249  )
250 
251 
252 readFiles = cms.untracked.vstring()
253 secFiles = cms.untracked.vstring()
254 process.source = cms.Source ('PoolSource',fileNames = readFiles, secondaryFileNames = secFiles)
255 readFiles.extend( [
256 # '/store/mc/RunIIFall17MiniAOD/SUSYGluGluToBBHToBB_M-350_TuneCP5_13TeV-pythia8/MINIAODSIM/94X_mc2017_realistic_v11-v1/00000/02D5DD76-241B-E811-A02E-0CC47A2B0214.root',
257  '/store/mc/RunIIFall17MiniAODv2/SUSYGluGluToBBHToBB_NarrowWidth_M-350_TuneCP5_13TeV-pythia8/MINIAODSIM/PU2017_12Apr2018_94X_mc2017_realistic_v14-v1/20000/5CCCC2D7-BB41-E811-8AD3-FA163EF96190.root',
258 ] );
259 
260 
261 secFiles.extend( [
262  ] )
263 
264 # ============ Output MiniAOD ======================
265 # process.out = cms.OutputModule("PoolOutputModule",
266 # fileName = cms.untracked.string('patTuple.root'),
267 # outputCommands = cms.untracked.vstring('keep *' )
268 # )
269 # process.outpath = cms.EndPath(process.out)
270 
271 # ## ============ JSON Certified data =============== BE CAREFUL!!!
272 # ## Don't use with CRAB!!!
273 # import FWCore.PythonUtilities.LumiList as LumiList
274 # import FWCore.ParameterSet.Types as CfgTypes
275 # process.source.lumisToProcess = CfgTypes.untracked(CfgTypes.VLuminosityBlockRange())
276 # JSONfile = 'json.txt'
277 # myLumis = LumiList.LumiList(filename = JSONfile).getCMSSWString().split(',')
278 # process.source.lumisToProcess.extend(myLumis)
============ Jet energy correctiosn update ============== (not really running!???) ...