DESY Hbb Analysis Framework
ntuplizer_102X_mc_2018_autumn18-v2p1.py
Go to the documentation of this file.
1 # To be used with the following installation
2 #
3 # cmsrel CMSSW_10_2_14
4 # cd CMSSW_10_2_14/src
5 # cmsenv
6 #
7 # git cms-init
8 #
9 # git cms-merge-topic cms-nanoAOD:master-102X
10 # git checkout -b nanoAOD cms-nanoAOD/master-102X
11 # git clone https://github.com/cms-nanoAOD/nanoAOD-tools.git PhysicsTools/NanoAODTools
12 #
13 # git clone git@github.com:robervalwalsh/analysis-ntuplizer.git Analysis/Ntuplizer ### latest commit 2803c8cc21d9ff5e66652b9ee4165e4271c8e2da
14 #________________________________________________________________________________________________________________________________________________
15 
16 # For the ntuple production
17 import FWCore.ParameterSet.Config as cms
18 
19 from Configuration.StandardSequences.Eras import eras
20 
21 #process = cms.Process('MssmHbb')
22 # https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookNanoAOD?rev=48#Running_on_various_datasets_from
23 process = cms.Process('MssmHbb',eras.Run2_2018,eras.run2_nanoAOD_102Xv1)
24 
25 process.options = cms.untracked.PSet(
26 
27 )
28 
29 # execution with 4cores
30 process.options.numberOfThreads=cms.untracked.uint32(4)
31 
32 process.load('FWCore.MessageService.MessageLogger_cfi')
33 process.MessageLogger.cerr.FwkReport.reportEvery = cms.untracked.int32(1000)
34 
35 ## Using MINIAOD. GlobalTag just in case jet re-clustering, L1 trigger filter etc is needed to be done
36 process.load('Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff')
37 process.load('Configuration.Geometry.GeometryRecoDB_cff')
38 process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
39 from Configuration.AlCa.GlobalTag import GlobalTag
40 process.GlobalTag = GlobalTag(process.GlobalTag, '102X_upgrade2018_realistic_v18')
41 
42 process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(100) )
43 
44 ## TFileService
45 output_file = 'ntuple.root'
46 process.TFileService = cms.Service('TFileService',
47  fileName = cms.string(output_file)
48 )
49 
50 ### ==== Analysis imports ==== ###
57 process.load('Analysis.Ntuplizer.run2018.v2.BJetRegression_cff')
58 
59 ## ============ TRIGGER FILTER ===============
60 ## Enable below at cms.Path if needed - DATA ONLY!!!
61 process.triggerSelection = cms.EDFilter( 'TriggerResultsFilter',
62  MssmHbbTriggerResultsFilter,
63  hltResults = cms.InputTag( 'TriggerResults', '', 'HLT' ),
64  l1tResults = cms.InputTag( '' ),
65  l1tIgnoreMask = cms.bool( False ),
66  l1techIgnorePrescales = cms.bool( False ),
67  daqPartitions = cms.uint32( 1 ),
68  throw = cms.bool( False )
69 )
70 
71 
72 ### ==== Puppi specific ==== ####
73 from PhysicsTools.PatAlgos.tools.helpers import getPatAlgosToolsTask
74 patAlgosToolsTask = getPatAlgosToolsTask(process)
75 from PhysicsTools.PatAlgos.patPuppiJetSpecificProducer_cfi import patPuppiJetSpecificProducer
76 process.patPuppiJetSpecificProducer = patPuppiJetSpecificProducer.clone(
77  src=cms.InputTag("slimmedJetsPuppi"),
78 )
79 patAlgosToolsTask.add(process.patPuppiJetSpecificProducer)
80 updateJetCollection(
81  process,
82  labelName = 'PuppiJetSpecific',
83  jetSource = cms.InputTag('slimmedJetsPuppi'),
84 )
85 process.updatedPatJetsPuppiJetSpecific.userData.userFloats.src = ['patPuppiJetSpecificProducer:puppiMultiplicity', 'patPuppiJetSpecificProducer:neutralPuppiMultiplicity', 'patPuppiJetSpecificProducer:neutralHadronPuppiMultiplicity', 'patPuppiJetSpecificProducer:photonPuppiMultiplicity', 'patPuppiJetSpecificProducer:HFHadronPuppiMultiplicity', 'patPuppiJetSpecificProducer:HFEMPuppiMultiplicity' ]
86 process.PuppiJetSpecific = cms.Task()
87 process.PuppiJetSpecific.add(process.patPuppiJetSpecificProducer)
88 process.PuppiJetSpecific.add(process.updatedPatJetsPuppiJetSpecific)
89 
90 
91 
92 ### ============ Jet energy correctiosn update ============== (not really running!???)
93 ## Update the slimmedJets in miniAOD: corrections from the chosen Global Tag are applied
94 updateJetCollection(
95  process,
96  labelName = '',
97 # jetSource = cms.InputTag('slimmedJets'),
98  jetSource = cms.InputTag('slimmedJetsWithUserDataWithReg'),
99  pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'),
100  svSource = cms.InputTag('slimmedSecondaryVertices'),
101  jetCorrections = ('AK4PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual']), 'None'),
102 )
103 process.AK4Jets = cms.Task()
104 process.AK4Jets.add(process.patJetCorrFactors)
105 process.AK4Jets.add(process.updatedPatJets)
106 
107 
108 ### ============ Jet energy correctiosn update ==============
109 ## Update the slimmedJetsPuppi in miniAOD: corrections from the chosen Global Tag are applied
110 updateJetCollection(
111  process,
112  labelName = 'Puppi',
113  jetSource = cms.InputTag('updatedPatJetsPuppiJetSpecific'),
114  pvSource = cms.InputTag('offlineSlimmedPrimaryVertices'),
115  svSource = cms.InputTag('slimmedSecondaryVertices'),
116  jetCorrections = ('AK4PFPuppi', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual']), 'None'),
117 )
118 process.AK4PuppiJets = cms.Task()
119 process.AK4PuppiJets.add(process.patJetCorrFactorsPuppi)
120 process.AK4PuppiJets.add(process.updatedPatJetsPuppi)
121 
122 
123 ### ============ Jet energy correctiosn update ==============
124 ## Update the slimmedJetsAK8 in miniAOD: corrections from the chosen Global Tag are applied
125 updateJetCollection(
126  process,
127  labelName = 'AK8',
128  jetSource = cms.InputTag('slimmedJetsAK8'),
129  jetCorrections = ('AK8PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual']), 'None'),
130 )
131 process.AK8Jets = cms.Task()
132 process.AK8Jets.add(process.patJetCorrFactorsAK8)
133 process.AK8Jets.add(process.updatedPatJetsAK8)
134 
135 
136 ## ============ EVENT FILTER COUNTER ===============
137 ## Filter counter (maybe more useful for MC)
138 process.TotalEvents = cms.EDProducer('EventCountProducer')
139 process.FilteredEvents = cms.EDProducer('EventCountProducer')
140 
141 ## ============ PRIMARY VERTEX FILTER ===============
142 process.primaryVertexFilter = cms.EDFilter('VertexSelector',
143  src = cms.InputTag('offlineSlimmedPrimaryVertices'), # primary vertex collection name
144  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
145  filter = cms.bool(True), # otherwise it won't filter the events, just produce an empty vertex collection.
146 )
147 
148 ## ============ THE NTUPLIZER!!! ===============
149 process.MssmHbb = cms.EDAnalyzer('Ntuplizer',
150  # Imported settings (always at the beginning)
151  MssmHbbNtuplizerBtag,
152  MssmHbbNtuplizerTriggerPaths,
153  MssmHbbNtuplizerL1Seeds,
154  MssmHbbNtuplizerTriggerObjects,
155 
156  MonteCarlo = cms.bool(True),
157  ## Monte Carlo only
158  CrossSection = cms.double(1.), # in pb
159  GenFilterInfo = cms.InputTag("genFilterEfficiencyProducer"),
160  GenRunInfo = cms.InputTag("generator"),
161  GenEventInfo = cms.InputTag("generator"),
162  GenJets = cms.VInputTag(cms.InputTag("slimmedGenJets")),
163  GenParticles = cms.VInputTag(cms.InputTag("prunedGenParticles")),
164  PileupInfo = cms.InputTag("slimmedAddPileupInfo"),
165  ###################
166  TotalEvents = cms.InputTag ('TotalEvents'),
167  FilteredEvents = cms.InputTag ('FilteredEvents'),
168 # PatJets = cms.VInputTag( cms.InputTag('slimmedJets'), cms.InputTag('slimmedJetsPuppi'), cms.InputTag('slimmedJetsAK8'), ),
169  PatJets = cms.VInputTag( cms.InputTag('updatedPatJets'), cms.InputTag('updatedPatJetsPuppi'), cms.InputTag('updatedPatJetsAK8'), ),
170  JECRecords = cms.vstring ( 'AK4PFchs', 'AK4PFPuppi', 'AK8PFchs', ), # for the JEC uncertainties
171  JERRecords = cms.vstring ( 'AK4PFchs', 'AK4PFPuppi', 'AK8PFchs', ), # for the JER uncertainties
172  FixedGridRhoAll = cms.InputTag ('fixedGridRhoAll'),
173  PatMuons = cms.VInputTag(cms.InputTag('slimmedMuons') ),
174  PrimaryVertices = cms.VInputTag(cms.InputTag('offlineSlimmedPrimaryVertices') ),
175  TriggerResults = cms.VInputTag(cms.InputTag('TriggerResults','','HLT') ),
176  L1TJets = cms.VInputTag(cms.InputTag('caloStage2Digis','Jet','RECO'), ),
177  L1TMuons = cms.VInputTag(cms.InputTag('gmtStage2Digis','Muon','RECO'), ),
178  TriggerObjectStandAlone = cms.VInputTag(cms.InputTag('slimmedPatTrigger'), ),
179 
180 )
181 
182 process.p = cms.Path(process.TotalEvents +
183 # process.triggerSelection +
184  process.primaryVertexFilter +
185  process.FilteredEvents +
186  process.MssmHbb,
187  process.PuppiJetSpecific,
188  process.BJetRegression,
189  process.AK4Jets,
190  process.AK4PuppiJets,
191  process.AK8Jets,
192  )
193 
194 readFiles = cms.untracked.vstring()
195 secFiles = cms.untracked.vstring()
196 process.source = cms.Source ('PoolSource',fileNames = readFiles, secondaryFileNames = secFiles)
197 readFiles.extend( [
198  '/store/mc/RunIIAutumn18MiniAOD/QCD_Pt-1000toInf_MuEnrichedPt5_TuneCP5_13TeV_pythia8/MINIAODSIM/102X_upgrade2018_realistic_v15-v1/010000/ACA0E7A5-00AE-9C43-8CC1-522D87011126.root',
199 ] );
200 
201 
202 secFiles.extend( [
203  ] )
204 
205 # ============ Output MiniAOD ======================
206 # process.out = cms.OutputModule("PoolOutputModule",
207 # fileName = cms.untracked.string('patTuple.root'),
208 # outputCommands = cms.untracked.vstring('keep *' )
209 # )
210 # process.outpath = cms.EndPath(process.out)
211 
212 # ## ============ JSON Certified data =============== BE CAREFUL!!!
213 # ## Don't use with CRAB!!!
214 # import FWCore.PythonUtilities.LumiList as LumiList
215 # import FWCore.ParameterSet.Types as CfgTypes
216 # process.source.lumisToProcess = CfgTypes.untracked(CfgTypes.VLuminosityBlockRange())
217 # JSONfile = 'json_DCSONLY.txt'
218 # myLumis = LumiList.LumiList(filename = JSONfile).getCMSSWString().split(',')
219 # process.source.lumisToProcess.extend(myLumis)
============ Jet energy correctiosn update ============== (not really running!???) ...