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