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