DESY Hbb Analysis Framework
ntuplizer_94X_2017_rereco31Mar18-v2.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_dataRun2_v6')
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 ### ==== Updated Jets ==== ###
54 
55 
56 # Puppi specifics
57 from PhysicsTools.PatAlgos.tools.helpers import getPatAlgosToolsTask
58 patAlgosToolsTask = getPatAlgosToolsTask(process)
59 from PhysicsTools.PatAlgos.patPuppiJetSpecificProducer_cfi import patPuppiJetSpecificProducer
60 process.patPuppiJetSpecificProducer = patPuppiJetSpecificProducer.clone(
61  src=cms.InputTag("slimmedJetsPuppi"),
62 )
63 patAlgosToolsTask.add(process.patPuppiJetSpecificProducer)
64 updateJetCollection(
65  process,
66  labelName = 'PuppiJetSpecific',
67  jetSource = cms.InputTag('slimmedJetsPuppi'),
68 )
69 process.updatedPatJetsPuppiJetSpecific.userData.userFloats.src = ['patPuppiJetSpecificProducer:puppiMultiplicity', 'patPuppiJetSpecificProducer:neutralPuppiMultiplicity', 'patPuppiJetSpecificProducer:neutralHadronPuppiMultiplicity', 'patPuppiJetSpecificProducer:photonPuppiMultiplicity', 'patPuppiJetSpecificProducer:HFHadronPuppiMultiplicity', 'patPuppiJetSpecificProducer:HFEMPuppiMultiplicity' ]
70 
71 
72 
73 ### ============ Jet energy correctiosn update ============== (not really running!???)
74 ## Update the slimmedJets in miniAOD: corrections from the chosen Global Tag are applied and the b-tag discriminators are re-evaluated
75 updateJetCollection(
76  process,
77  jetSource = cms.InputTag('slimmedJets'),
78  jetCorrections = ('AK4PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual']), 'None'),
79 # btagDiscriminators = bTagDiscriminators
80 )
81 
82 updateJetCollection(
83  process,
84  labelName = 'Puppi',
85  jetSource = cms.InputTag('updatedPatJetsPuppiJetSpecific'),
86  jetCorrections = ('AK4PFPuppi', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual']), 'None'),
87 # btagDiscriminators = bTagDiscriminators
88 )
89 
90 updateJetCollection(
91  process,
92  labelName = 'AK8',
93  jetSource = cms.InputTag('slimmedJetsAK8'),
94  jetCorrections = ('AK8PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual']), 'None'),
95 # btagDiscriminators = bTagDiscriminators
96 )
97 
98 
99 
100 
101 
102 ## ============ EVENT FILTER COUNTER ===============
103 ## Filter counter (maybe more useful for MC)
104 process.TotalEvents = cms.EDProducer('EventCountProducer')
105 process.FilteredEvents = cms.EDProducer('EventCountProducer')
106 
107 ## ============ PRIMARY VERTEX FILTER ===============
108 process.primaryVertexFilter = cms.EDFilter('VertexSelector',
109  src = cms.InputTag('offlineSlimmedPrimaryVertices'), # primary vertex collection name
110  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
111  filter = cms.bool(True), # otherwise it won't filter the events, just produce an empty vertex collection.
112 )
113 
118 
119 
120 ## ============ THE NTUPLIZER!!! ===============
121 process.MssmHbb = cms.EDAnalyzer('Ntuplizer',
122  # Imported settings (always at the beginning)
123  MssmHbbNtuplizerBtag,
124  MssmHbbNtuplizerTriggerPaths,
125  MssmHbbNtuplizerL1Seeds,
126  MssmHbbNtuplizerTriggerObjects,
127 
128  MonteCarlo = cms.bool(False),
129  ###################
130  TotalEvents = cms.InputTag ('TotalEvents'),
131  FilteredEvents = cms.InputTag ('FilteredEvents'),
132 # PatJets = cms.VInputTag( cms.InputTag('slimmedJets'), cms.InputTag('slimmedJetsPuppi'), cms.InputTag('slimmedJetsAK8'), ),
133  PatJets = cms.VInputTag( cms.InputTag('updatedPatJets'), cms.InputTag('updatedPatJetsPuppi'), cms.InputTag('updatedPatJetsAK8'), ),
134  JECRecords = cms.vstring ( 'AK4PFchs', 'AK4PFPuppi', 'AK8PFchs', ), # for the JEC uncertainties
135  JERRecords = cms.vstring ( 'AK4PFchs', 'AK4PFPuppi', 'AK8PFchs', ), # for the JER uncertainties
136  FixedGridRhoAll = cms.InputTag ('fixedGridRhoAll'),
137  PatMuons = cms.VInputTag(cms.InputTag('slimmedMuons') ),
138  PrimaryVertices = cms.VInputTag(cms.InputTag('offlineSlimmedPrimaryVertices') ),
139  TriggerResults = cms.VInputTag(cms.InputTag('TriggerResults','','HLT') ),
140  L1TJets = cms.VInputTag(cms.InputTag('caloStage2Digis','Jet','RECO'), ),
141  L1TMuons = cms.VInputTag(cms.InputTag('gmtStage2Digis','Muon','RECO'), ),
142  TriggerObjectStandAlone = cms.VInputTag(cms.InputTag('slimmedPatTrigger'), ),
143 
144 )
145 
146 process.p = cms.Path(
147  process.TotalEvents *
148  process.triggerSelection *
149  process.primaryVertexFilter *
150  process.FilteredEvents *
151  process.patJetCorrFactors * process.updatedPatJets *
152  process.patPuppiJetSpecificProducer * process.updatedPatJetsPuppiJetSpecific *
153  process.patJetCorrFactorsPuppi * process.updatedPatJetsPuppi *
154  process.patJetCorrFactorsAK8 * process.updatedPatJetsAK8 *
155  process.MssmHbb
156  )
157 
158 
159 readFiles = cms.untracked.vstring()
160 secFiles = cms.untracked.vstring()
161 process.source = cms.Source ('PoolSource',fileNames = readFiles, secondaryFileNames = secFiles)
162 readFiles.extend( [
163  '/store/data/Run2017F/BTagCSV/MINIAOD/17Nov2017-v1/00000/0202DCDF-4CFF-E711-8269-141877642F9D.root',
164 ] );
165 
166 
167 secFiles.extend( [
168  ] )
169 
170 # ============ Output MiniAOD ======================
171 # process.out = cms.OutputModule("PoolOutputModule",
172 # fileName = cms.untracked.string('patTuple.root'),
173 # outputCommands = cms.untracked.vstring('keep *' )
174 # )
175 # process.outpath = cms.EndPath(process.out)
176 
177 # ## ============ JSON Certified data =============== BE CAREFUL!!!
178 # ## Don't use with CRAB!!!
179 # import FWCore.PythonUtilities.LumiList as LumiList
180 # import FWCore.ParameterSet.Types as CfgTypes
181 # process.source.lumisToProcess = CfgTypes.untracked(CfgTypes.VLuminosityBlockRange())
182 # JSONfile = 'json.txt'
183 # myLumis = LumiList.LumiList(filename = JSONfile).getCMSSWString().split(',')
184 # process.source.lumisToProcess.extend(myLumis)
============ Jet energy correctiosn update ============== (not really running!???) ...