DESY Hbb Analysis Framework
ntuplizer_102X_2018_rereco17Sep2018-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_dataRun2_v10')
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(False),
157  ###################
158  TotalEvents = cms.InputTag ('TotalEvents'),
159  FilteredEvents = cms.InputTag ('FilteredEvents'),
160 # PatJets = cms.VInputTag( cms.InputTag('slimmedJets'), cms.InputTag('slimmedJetsPuppi'), cms.InputTag('slimmedJetsAK8'), ),
161  PatJets = cms.VInputTag( cms.InputTag('updatedPatJets'), cms.InputTag('updatedPatJetsPuppi'), cms.InputTag('updatedPatJetsAK8'), ),
162  JECRecords = cms.vstring ( 'AK4PFchs', 'AK4PFPuppi', 'AK8PFchs', ), # for the JEC uncertainties
163  JERRecords = cms.vstring ( 'AK4PFchs', 'AK4PFPuppi', 'AK8PFchs', ), # for the JER uncertainties
164  FixedGridRhoAll = cms.InputTag ('fixedGridRhoAll'),
165  PatMuons = cms.VInputTag(cms.InputTag('slimmedMuons') ),
166  PrimaryVertices = cms.VInputTag(cms.InputTag('offlineSlimmedPrimaryVertices') ),
167  TriggerResults = cms.VInputTag(cms.InputTag('TriggerResults','','HLT') ),
168  L1TJets = cms.VInputTag(cms.InputTag('caloStage2Digis','Jet','RECO'), ),
169  L1TMuons = cms.VInputTag(cms.InputTag('gmtStage2Digis','Muon','RECO'), ),
170  TriggerObjectStandAlone = cms.VInputTag(cms.InputTag('slimmedPatTrigger'), ),
171 
172 )
173 
174 process.p = cms.Path(process.TotalEvents +
175  process.triggerSelection +
176  process.primaryVertexFilter +
177  process.FilteredEvents +
178  process.MssmHbb,
179  process.PuppiJetSpecific,
180  process.BJetRegression,
181  process.AK4Jets,
182  process.AK4PuppiJets,
183  process.AK8Jets,
184  )
185 
186 readFiles = cms.untracked.vstring()
187 secFiles = cms.untracked.vstring()
188 process.source = cms.Source ('PoolSource',fileNames = readFiles, secondaryFileNames = secFiles)
189 readFiles.extend( [
190 # '/store/data/Run2018A/JetHT/MINIAOD/17Sep2018-v1/00000/F769A2D8-AE75-DB46-AAD1-BE567B3D452F.root',
191 # '/store/data/Run2018B/JetHT/MINIAOD/17Sep2018-v1/60000/DCBD418B-A67F-0A41-9C1C-EE32AB0C7296.root',
192 # '/store/data/Run2018C/JetHT/MINIAOD/17Sep2018-v1/100000/9E3FD670-4672-BD4F-9E09-297E7CC77AD4.root',
193  '/store/data/Run2018D/JetHT/MINIAOD/PromptReco-v2/000/325/172/00000/0E546AB1-677A-DD4B-BFFE-DF8419E0FAE3.root',
194 ] );
195 
196 
197 secFiles.extend( [
198  ] )
199 
200 # ============ Output MiniAOD ======================
201 # process.out = cms.OutputModule("PoolOutputModule",
202 # fileName = cms.untracked.string('patTuple.root'),
203 # outputCommands = cms.untracked.vstring('keep *' )
204 # )
205 # process.outpath = cms.EndPath(process.out)
206 
207 # ## ============ JSON Certified data =============== BE CAREFUL!!!
208 # ## Don't use with CRAB!!!
209 # import FWCore.PythonUtilities.LumiList as LumiList
210 # import FWCore.ParameterSet.Types as CfgTypes
211 # process.source.lumisToProcess = CfgTypes.untracked(CfgTypes.VLuminosityBlockRange())
212 # JSONfile = 'json_DCSONLY.txt'
213 # myLumis = LumiList.LumiList(filename = JSONfile).getCMSSWString().split(',')
214 # process.source.lumisToProcess.extend(myLumis)
============ Jet energy correctiosn update ============== (not really running!???) ...