/ElectroWeakAnalysis/WENu/test/pat_WenuVBTF_ntuple.py

https://github.com/aivanov-cern/cmssw · Python · 274 lines · 166 code · 28 blank · 80 comment · 0 complexity · b0925869b5e9882d1a0a59dcc0ae6bc8 MD5 · raw file

  1. ## #########################################################
  2. ##
  3. ## Configuration for the production of the ICHEP VBTF ntuple
  4. ## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  5. ## MC, spring10
  6. ##
  7. ## Nikolaos Rompotis - Imperial College London
  8. ## 22 June 2010
  9. ##
  10. ## #########################################################
  11. import FWCore.ParameterSet.Config as cms
  12. process = cms.Process("PAT")
  13. process.options = cms.untracked.PSet(
  14. Rethrow = cms.untracked.vstring('ProductNotFound')
  15. )
  16. #process.MessageLogger = cms.Service(
  17. # "MessageLogger",
  18. # categories = cms.untracked.vstring('info', 'debug','cout')
  19. # )
  20. process.load("FWCore.MessageService.MessageLogger_cfi")
  21. process.MessageLogger.cerr.threshold = cms.untracked.string("INFO")
  22. process.MessageLogger.cerr.FwkSummary = cms.untracked.PSet(
  23. reportEvery = cms.untracked.int32(1000000),
  24. limit = cms.untracked.int32(10000000)
  25. )
  26. process.MessageLogger.cerr.FwkReport = cms.untracked.PSet(
  27. reportEvery = cms.untracked.int32(100000),
  28. limit = cms.untracked.int32(10000000)
  29. )
  30. process.options = cms.untracked.PSet(
  31. wantSummary = cms.untracked.bool(True)
  32. )
  33. # source
  34. process.source = cms.Source("PoolSource",
  35. fileNames = cms.untracked.vstring(
  36. # SOME DATA FILE TO BE PUT HERE
  37. #'rfio:/castor/cern.ch/user/r/rompotis/DATA_STUDIES/Spring10/sample_WminusToENu-CTEQ66-powheg_Spring10-START3X_V26_AODSIM-v2.root',
  38. #'file:rfio:/castor/cern.ch/user/r/rompotis/DATA_STUDIES/Spring10/sample_WenuSpring10START3X_V26_S09-v1_AODSIM.root',
  39. )
  40. )
  41. process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) )
  42. ## Load additional processes
  43. process.load("Configuration.StandardSequences.Geometry_cff")
  44. process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
  45. ## global tags:
  46. process.GlobalTag.globaltag = cms.string('GR_R_36X_V11A::All') # GLOBAL TAG FOR DATA
  47. process.load("Configuration.StandardSequences.MagneticField_cff")
  48. ################################################################################################
  49. ### P r e p a r a t i o n o f t h e P A T O b j e c t s f r o m A O D ###
  50. ################################################################################################
  51. ## pat sequences to be loaded:
  52. #process.load("PhysicsTools.PFCandProducer.PF2PAT_cff")
  53. process.load("PhysicsTools.PatAlgos.patSequences_cff")
  54. #process.load("PhysicsTools.PatAlgos.triggerLayer1.triggerProducer_cff")
  55. ##
  56. #
  57. ## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  58. ## MET creation <=== WARNING: YOU MAY WANT TO MODIFY THIS PART OF THE CODE %%%%%%%%%%%%%
  59. ## specify the names of the MET collections that you need here %%%%
  60. ## #%%
  61. ## if you don't specify anything the default MET is the raw Calo MET #%%
  62. process.caloMET = process.patMETs.clone( #%%
  63. metSource = cms.InputTag("met","","RECO"),
  64. addTrigMatch = cms.bool(False),
  65. addMuonCorrections = cms.bool(False),
  66. addGenMET = cms.bool(False),
  67. )
  68. process.tcMET = process.patMETs.clone( #%%
  69. metSource = cms.InputTag("tcMet","","RECO"),
  70. addTrigMatch = cms.bool(False),
  71. addMuonCorrections = cms.bool(False),
  72. addGenMET = cms.bool(False),
  73. )
  74. process.pfMET = process.patMETs.clone( #%%
  75. metSource = cms.InputTag("pfMet","","RECO"),
  76. addTrigMatch = cms.bool(False),
  77. addMuonCorrections = cms.bool(False),
  78. addGenMET = cms.bool(False),
  79. )
  80. ## specify here what you want to have on the plots! <===== MET THAT YOU WANT ON THE PLOTS %%%%%%%
  81. myMetCollection = 'caloMET'
  82. myPfMetCollection = 'pfMET'
  83. myTcMetCollection = 'tcMET'
  84. ## modify the sequence of the MET creation: #%%
  85. process.makePatMETs = cms.Sequence(process.caloMET*process.tcMET*process.pfMET)
  86. ## %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  87. ## modify the final pat sequence: keep only electrons + METS (muons are needed for met corrections)
  88. process.load("RecoEgamma.EgammaIsolationAlgos.egammaIsolationSequence_cff")
  89. #process.patElectronIsolation = cms.Sequence(process.egammaIsolationSequence)
  90. process.patElectrons.isoDeposits = cms.PSet()
  91. process.patElectrons.userIsolation = cms.PSet()
  92. process.patElectrons.addElectronID = cms.bool(True)
  93. process.patElectrons.electronIDSources = cms.PSet(
  94. simpleEleId95relIso= cms.InputTag("simpleEleId95relIso"),
  95. simpleEleId90relIso= cms.InputTag("simpleEleId90relIso"),
  96. simpleEleId85relIso= cms.InputTag("simpleEleId85relIso"),
  97. simpleEleId80relIso= cms.InputTag("simpleEleId80relIso"),
  98. simpleEleId70relIso= cms.InputTag("simpleEleId70relIso"),
  99. simpleEleId60relIso= cms.InputTag("simpleEleId60relIso"),
  100. simpleEleId95cIso= cms.InputTag("simpleEleId95cIso"),
  101. simpleEleId90cIso= cms.InputTag("simpleEleId90cIso"),
  102. simpleEleId85cIso= cms.InputTag("simpleEleId85cIso"),
  103. simpleEleId80cIso= cms.InputTag("simpleEleId80cIso"),
  104. simpleEleId70cIso= cms.InputTag("simpleEleId70cIso"),
  105. simpleEleId60cIso= cms.InputTag("simpleEleId60cIso"),
  106. )
  107. ##
  108. process.patElectrons.addGenMatch = cms.bool(False)
  109. process.patElectrons.embedGenMatch = cms.bool(False)
  110. process.patElectrons.usePV = cms.bool(False)
  111. ##
  112. process.load("ElectroWeakAnalysis.WENu.simpleEleIdSequence_cff")
  113. # you have to tell the ID that it is data
  114. process.simpleEleId95relIso.dataMagneticFieldSetUp = cms.bool(True)
  115. process.simpleEleId90relIso.dataMagneticFieldSetUp = cms.bool(True)
  116. process.simpleEleId85relIso.dataMagneticFieldSetUp = cms.bool(True)
  117. process.simpleEleId80relIso.dataMagneticFieldSetUp = cms.bool(True)
  118. process.simpleEleId70relIso.dataMagneticFieldSetUp = cms.bool(True)
  119. process.simpleEleId60relIso.dataMagneticFieldSetUp = cms.bool(True)
  120. process.simpleEleId95cIso.dataMagneticFieldSetUp = cms.bool(True)
  121. process.simpleEleId90cIso.dataMagneticFieldSetUp = cms.bool(True)
  122. process.simpleEleId85cIso.dataMagneticFieldSetUp = cms.bool(True)
  123. process.simpleEleId80cIso.dataMagneticFieldSetUp = cms.bool(True)
  124. process.simpleEleId70cIso.dataMagneticFieldSetUp = cms.bool(True)
  125. process.simpleEleId60cIso.dataMagneticFieldSetUp = cms.bool(True)
  126. #
  127. process.patElectronIDs = cms.Sequence(process.simpleEleIdSequence)
  128. process.makePatElectrons = cms.Sequence(process.patElectronIDs*process.patElectrons)
  129. # process.makePatMuons may be needed depending on how you calculate the MET
  130. process.makePatCandidates = cms.Sequence(process.makePatElectrons+process.makePatMETs)
  131. process.patDefaultSequence = cms.Sequence(process.makePatCandidates)
  132. ##
  133. ## ################################################################################
  134. ##
  135. ## the filter to select the candidates from the data samples
  136. ##
  137. ##
  138. ## WARNING: you may want to modify this item:
  139. HLT_process_name = "HLT" # REDIGI for the Spring10 production traditional MC / HLT for the powheg samples or data
  140. # trigger path selection
  141. HLT_path_name = "HLT_Photon10_L1R" #= "HLT_Ele15_LW_L1R" #
  142. # trigger filter name
  143. HLT_filter_name = "hltL1NonIsoHLTNonIsoSinglePhotonEt10HcalIsolFilter"
  144. #
  145. HLT_path_name_extra = "HLT_Photon15_L1R" #= "HLT_Ele15_LW_L1R" #
  146. HLT_filter_name_extra = "hltL1NonIsoHLTNonIsoSinglePhotonEt15HcalIsolFilter"
  147. process.wenuFilter = cms.EDFilter('WenuCandidateFilter',
  148. ### the input collections needed:
  149. electronCollectionTag = cms.untracked.InputTag("patElectrons","","PAT"),
  150. metCollectionTag = cms.untracked.InputTag(myMetCollection,"","PAT"),
  151. pfMetCollectionTag = cms.untracked.InputTag(myPfMetCollection,"","PAT"),
  152. tcMetCollectionTag = cms.untracked.InputTag(myTcMetCollection,"","PAT"),
  153. triggerCollectionTag = cms.untracked.InputTag("TriggerResults","",HLT_process_name),
  154. triggerEventTag = cms.untracked.InputTag("hltTriggerSummaryAOD","",HLT_process_name),
  155. hltpath = cms.untracked.string(HLT_path_name),
  156. hltpathFilter = cms.untracked.InputTag(HLT_filter_name,"",HLT_process_name),
  157. ebRecHits = cms.untracked.InputTag("reducedEcalRecHitsEB"),
  158. eeRecHits = cms.untracked.InputTag("reducedEcalRecHitsEE"),
  159. PrimaryVerticesCollection = cms.untracked.InputTag("offlinePrimaryVertices"),
  160. ### here the preselection is applied
  161. # fiducial cuts:
  162. BarrelMaxEta = cms.untracked.double(1.4442),
  163. EndCapMinEta = cms.untracked.double(1.566),
  164. EndCapMaxEta = cms.untracked.double(2.5),
  165. # demand ecal driven electron:
  166. useEcalDrivenElectrons = cms.untracked.bool(True),
  167. # demand offline spike cleaning with the Swiss Cross criterion:
  168. useSpikeRejection = cms.untracked.bool(True),
  169. spikeCleaningSwissCrossCut = cms.untracked.double(0.95),
  170. # demand geometrically matched to an HLT object with ET>15GeV
  171. useTriggerInfo = cms.untracked.bool(True),
  172. electronMatched2HLT = cms.untracked.bool(True),
  173. electronMatched2HLT_DR = cms.untracked.double(0.1),
  174. useHLTObjectETCut = cms.untracked.bool(True),
  175. hltObjectETCut = cms.untracked.double(15.),
  176. useExtraTrigger = cms.untracked.bool(True),
  177. hltpathExtra = cms.untracked.string(HLT_path_name_extra),
  178. hltpathFilterExtra = cms.untracked.InputTag(HLT_filter_name_extra,"",HLT_process_name),
  179. # ET Cut in the SC
  180. ETCut = cms.untracked.double(20.),
  181. METCut = cms.untracked.double(0.),
  182. # reject events with a 2nd electron with ET > 20 that passes the WP95%
  183. vetoSecondElectronEvents = cms.untracked.bool(False),
  184. storeSecondElectron = cms.untracked.bool(True),
  185. ETCut2ndEle = cms.untracked.double(20.),
  186. vetoSecondElectronIDType = cms.untracked.string("simpleEleId95relIso"),
  187. vetoSecondElectronIDSign = cms.untracked.string("="),
  188. vetoSecondElectronIDValue = cms.untracked.double(7.),
  189. # Other parameters of the code - leave them as they are
  190. useValidFirstPXBHit = cms.untracked.bool(False),
  191. useConversionRejection = cms.untracked.bool(False),
  192. useExpectedMissingHits = cms.untracked.bool(False),
  193. maxNumberOfExpectedMissingHits = cms.untracked.int32(1),
  194. # calculate some new cuts
  195. calculateValidFirstPXBHit = cms.untracked.bool(True),
  196. calculateConversionRejection = cms.untracked.bool(True),
  197. calculateExpectedMissingHits = cms.untracked.bool(True),
  198. # we are dealing with DATA
  199. dataMagneticFieldSetUp = cms.untracked.bool(True),
  200. dcsTag = cms.untracked.InputTag("scalersRawToDigi"),
  201. )
  202. ####################################################################################
  203. ##
  204. ## the W selection that you prefer included in another cfg
  205. from ElectroWeakAnalysis.WENu.simpleCutBasedSpring10SelectionBlocks_cfi import *
  206. selection_inverse = cms.PSet (
  207. deta_EB_inv = cms.untracked.bool(True),
  208. deta_EE_inv = cms.untracked.bool(True)
  209. )
  210. ####################################################################################
  211. #
  212. # we need to store jet information, hence we have to produce the jets:
  213. process.load("JetMETCorrections.Configuration.DefaultJEC_cff")
  214. process.jetSequence = cms.Sequence( process.ak5CaloJetsL2L3 )
  215. process.pfjetAK5Sequence = cms.Sequence( process.ak5PFJetsL2L3 )
  216. process.ourJetSequence = cms.Sequence( process.jetSequence * process.pfjetAK5Sequence )
  217. ##
  218. ## and the plot creator
  219. process.plotter = cms.EDAnalyzer('WenuPlots',
  220. # selection in use: wont be used - we have usePrecalcID true later
  221. selection_80relIso,
  222. selection_inverse,
  223. # The selection to be used here:
  224. usePrecalcID = cms.untracked.bool(True),
  225. usePrecalcIDType = cms.untracked.string('simpleEleId80relIso'),
  226. usePrecalcIDSign = cms.untracked.string('='),
  227. usePrecalcIDValue = cms.untracked.double(7),
  228. # some extra information on the ntuple production:
  229. includeJetInformationInNtuples = cms.untracked.bool(True),
  230. caloJetCollectionTag = cms.untracked.InputTag('ak5CaloJetsL2L3'),
  231. pfJetCollectionTag = cms.untracked.InputTag('ak5PFJetsL2L3'),
  232. DRJetFromElectron = cms.untracked.double(0.3),
  233. #
  234. wenuCollectionTag = cms.untracked.InputTag("wenuFilter","selectedWenuCandidates","PAT"),
  235. WENU_VBTFselectionFileName = cms.untracked.string("WENU_VBTFselection.root"),
  236. WENU_VBTFpreseleFileName = cms.untracked.string("WENU_VBTFpreselection.root"),
  237. DatasetTag = cms.untracked.int32(100),
  238. storeSecondElectronInformation = cms.untracked.bool(True),
  239. )
  240. #
  241. # if you run on data then you have to do misalignment corrections first!!!
  242. # not to be used with MC!!
  243. process.load("RecoEgamma.EgammaTools.correctedElectronsProducer_cfi")
  244. process.p = cms.Path( process.gsfElectrons*process.ourJetSequence*
  245. process.patDefaultSequence*process.wenuFilter*process.plotter)
  246. #process.p = cms.Path( process.ourJetSequence * process.patDefaultSequence +process.wenuFilter + process.plotter)