File indexing completed on 2024-11-25 02:30:04
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 import sys
0025
0026 import FWCore.ParameterSet.Config as cms
0027
0028
0029
0030
0031 import FWCore.ParameterSet.VarParsing as VarParsing
0032 options = VarParsing.VarParsing ( 'standard' )
0033 options.register( 'runOnMC' , True , VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.bool, 'decide, if run on MC or real data' )
0034 options.register( 'runOnMiniAOD' , True , VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.bool, 'decide, if run on miniAOD or AOD input' )
0035 options.register( 'useElecEAIsoCorr', True , VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.bool, 'decide, if EA (rho) or Delta beta corrections are used for electron isolation is used' )
0036 options.register( 'useCalibElec' , False, VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.bool, 'decide, if electron re-calibration using regression energies is used' )
0037 options.register( 'addTriggerMatch' , True , VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.bool, 'decide, if trigger objects are matched to signal muons' )
0038
0039 if( hasattr( sys, 'argv' ) ):
0040 if( len( sys.argv ) > 2 ):
0041 print('Parsing command line arguments:')
0042 for args in sys.argv :
0043 arg = args.split(',')
0044 for val in arg:
0045 val = val.split( '=' )
0046 if( len( val ) == 2 ):
0047 print('Setting "', val[0], '" to:', val[1])
0048 setattr( options, val[0], val[1] )
0049
0050
0051 process = cms.Process( 'USER' )
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063 from TopQuarkAnalysis.Configuration.patRefSel_refMuJets import *
0064
0065 inputFiles = []
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088 selectEvents = 'pGoodVertex'
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102 useElecEAIsoCorr = options.useElecEAIsoCorr
0103 useCalibElec = options.useCalibElec
0104
0105
0106 electronCut = electronGsfCut
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122 bTagSrc = 'selectedJets'
0123
0124 minBTags = 2
0125
0126
0127 addTriggerMatch = options.addTriggerMatch
0128
0129
0130
0131
0132
0133
0134 runOnMC = options.runOnMC
0135 runOnMiniAOD = options.runOnMiniAOD
0136
0137
0138 maxEvents = options.maxEvents
0139
0140
0141
0142
0143 globalTagMC = 'DEFAULT'
0144 globalTagData = 'DEFAULT'
0145
0146
0147
0148
0149 outputFile = 'patRefSel_muJets.root'
0150
0151
0152 fwkReportEvery = max( 1, int( maxEvents / 100 ) )
0153
0154
0155 wantSummary = True
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166 triggerSelection = triggerSelectionData
0167 triggerObjectSelection = triggerObjectSelectionData
0168 if runOnMC:
0169 triggerSelection = triggerSelectionMC
0170 triggerObjectSelection = triggerObjectSelectionMC
0171
0172
0173
0174
0175
0176
0177 process.load( "TopQuarkAnalysis.Configuration.patRefSel_basics_cff" )
0178 process.MessageLogger.cerr.FwkReport.reportEvery = fwkReportEvery
0179 process.options.wantSummary = wantSummary
0180 from Configuration.AlCa.GlobalTag import GlobalTag
0181 if runOnMC:
0182 if globalTagMC == 'DEFAULT':
0183 process.GlobalTag = GlobalTag( process.GlobalTag, 'auto:run2_mc' )
0184 else:
0185 process.GlobalTag.globaltag = globalTagMC
0186 else:
0187 if globalTagData == 'DEFAULT':
0188 process.GlobalTag = GlobalTag( process.GlobalTag, 'auto:run2_data' )
0189 else:
0190 process.GlobalTag.globaltag = globalTagData
0191
0192
0193
0194
0195
0196
0197 if len( inputFiles ) == 0:
0198 if runOnMiniAOD:
0199 if runOnMC:
0200 from PhysicsTools.PatAlgos.patInputFiles_cff import filesRelValTTbarPileUpMINIAODSIM
0201 inputFiles = filesRelValTTbarPileUpMINIAODSIM
0202 else:
0203 from PhysicsTools.PatAlgos.patInputFiles_cff import filesRelValSingleMuMINIAOD
0204 inputFiles = filesRelValSingleMuMINIAOD
0205 else:
0206 if runOnMC:
0207 from PhysicsTools.PatAlgos.patInputFiles_cff import filesRelValProdTTbarAODSIM
0208 inputFiles = filesRelValProdTTbarAODSIM
0209 else:
0210 from PhysicsTools.PatAlgos.patInputFiles_cff import filesSingleMuRECO
0211 inputFiles = filesSingleMuRECO
0212 process.load( "TopQuarkAnalysis.Configuration.patRefSel_inputModule_cfi" )
0213 process.source.fileNames = inputFiles
0214 process.maxEvents.input = maxEvents
0215
0216
0217
0218
0219
0220
0221 if not runOnMiniAOD:
0222 process.load( "PhysicsTools.PatAlgos.producersLayer1.patCandidates_cff" )
0223
0224
0225
0226
0227
0228
0229
0230 process.load( "TopQuarkAnalysis.Configuration.patRefSel_outputModule_cff" )
0231
0232 process.out.fileName = outputFile
0233 from TopQuarkAnalysis.Configuration.patRefSel_eventContent_cff import refMuJets_eventContent
0234 process.out.outputCommands += refMuJets_eventContent
0235 if runOnMiniAOD:
0236 from TopQuarkAnalysis.Configuration.patRefSel_eventContent_cff import miniAod_eventContent
0237 process.out.outputCommands += miniAod_eventContent
0238 else:
0239 from TopQuarkAnalysis.Configuration.patRefSel_eventContent_cff import aod_eventContent
0240 process.out.outputCommands += aod_eventContent
0241
0242 process.out.SelectEvents.SelectEvents = cms.vstring( selectEvents )
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253 from TopQuarkAnalysis.Configuration.patRefSel_triggerSelection_cff import triggerResults
0254 process.triggerSelection = triggerResults.clone( triggerConditions = [ triggerSelection ] )
0255 process.sStandAloneTrigger = cms.Sequence( process.triggerSelection
0256 )
0257 process.pStandAloneTrigger = cms.Path( process.sStandAloneTrigger )
0258
0259 process.load( 'TopQuarkAnalysis.Configuration.patRefSel_eventCleaning_cff' )
0260 process.sStandAloneEventCleaning = cms.Sequence()
0261 if runOnMiniAOD:
0262 process.sStandAloneEventCleaning += process.eventCleaningMiniAOD
0263 if runOnMC:
0264 process.sStandAloneEventCleaning += process.eventCleaningMiniAODMC
0265 else:
0266 process.sStandAloneEventCleaning += process.eventCleaningMiniAODData
0267 else:
0268 process.sStandAloneEventCleaning += process.eventCleaning
0269 if runOnMC:
0270 process.sStandAloneEventCleaning += process.eventCleaningMC
0271 else:
0272 process.sStandAloneEventCleaning += process.eventCleaningData
0273 process.pStandAloneEventCleaning = cms.Path( process.sStandAloneEventCleaning )
0274
0275 from CommonTools.ParticleFlow.goodOfflinePrimaryVertices_cfi import goodOfflinePrimaryVertices
0276 process.goodOfflinePrimaryVertices = goodOfflinePrimaryVertices.clone( filter = True )
0277 if runOnMiniAOD:
0278 process.goodOfflinePrimaryVertices.src = 'offlineSlimmedPrimaryVertices'
0279 process.sStandAloneGoodVertex = cms.Sequence( process.goodOfflinePrimaryVertices
0280 )
0281 process.pStandAloneGoodVertex = cms.Path( process.sStandAloneGoodVertex )
0282
0283
0284
0285 from TopQuarkAnalysis.Configuration.patRefSel_refMuJets_cfi import selectedMuons, preSignalMuons, signalMuons, standAloneSignalMuonFilter
0286 process.selectedMuons = selectedMuons.clone( cut = muonCut )
0287 if runOnMiniAOD:
0288 process.selectedMuons.src = 'slimmedMuons'
0289 process.preSignalMuons = preSignalMuons.clone( cut = signalMuonCut )
0290 process.signalMuons = signalMuons.clone( maxDZ = muonVertexMaxDZ )
0291 if runOnMiniAOD:
0292 process.signalMuons.vertexSource = 'offlineSlimmedPrimaryVertices'
0293 process.standAloneSignalMuonFilter = standAloneSignalMuonFilter.clone()
0294 process.sStandAloneSignalMuon = cms.Sequence( process.standAloneSignalMuonFilter )
0295 process.pStandAloneSignalMuon = cms.Path( process.sStandAloneSignalMuon )
0296
0297
0298
0299 from TopQuarkAnalysis.Configuration.patRefSel_refMuJets_cfi import standAloneLooseMuonVetoFilter
0300 process.standAloneLooseMuonVetoFilter = standAloneLooseMuonVetoFilter.clone()
0301 process.sStandAloneLooseMuonVeto = cms.Sequence( process.standAloneLooseMuonVetoFilter )
0302 process.pStandAloneLooseMuonVeto = cms.Path( process.sStandAloneLooseMuonVeto )
0303
0304
0305
0306 if not runOnMiniAOD:
0307 from PhysicsTools.SelectorUtils.tools.vid_id_tools import switchOnVIDElectronIdProducer, setupAllVIDIdsInModule, setupVIDElectronSelection
0308 electron_ids = [ 'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_CSA14_50ns_V1_cff'
0309 , 'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_CSA14_PU20bx25_V0_cff'
0310 ]
0311 switchOnVIDElectronIdProducer( process )
0312 process.electronIDValueMapProducer.ebReducedRecHitCollection = cms.InputTag( 'reducedEcalRecHitsEB' )
0313 process.electronIDValueMapProducer.eeReducedRecHitCollection = cms.InputTag( 'reducedEcalRecHitsEE' )
0314 process.electronIDValueMapProducer.esReducedRecHitCollection = cms.InputTag( 'reducedEcalRecHitsES' )
0315 for idmod in electron_ids:
0316 setupAllVIDIdsInModule( process, idmod, setupVIDElectronSelection )
0317
0318 if useElecEAIsoCorr:
0319 from EgammaAnalysis.ElectronTools.electronIsolatorFromEffectiveArea_cfi import elPFIsoValueEA03
0320 if runOnMiniAOD:
0321 process.patElPFIsoValueEA03 = elPFIsoValueEA03.clone( gsfElectrons = ''
0322 , pfElectrons = ''
0323 , patElectrons = cms.InputTag( 'slimmedElectrons' )
0324 , rhoIso = cms.InputTag( 'fixedGridRhoFastjetAll' )
0325 )
0326 from EgammaAnalysis.ElectronTools.patElectronEAIsoCorrectionProducer_cfi import patElectronEAIso03CorrectionProducer
0327 process.electronsWithEA03Iso = patElectronEAIso03CorrectionProducer.clone( patElectrons = 'slimmedElectrons'
0328 , eaIsolator = 'patElPFIsoValueEA03'
0329 )
0330 else:
0331 process.elPFIsoValueEA03 = elPFIsoValueEA03.clone( gsfElectrons = 'gedGsfElectrons'
0332 , pfElectrons = ''
0333 , rhoIso = cms.InputTag( 'fixedGridRhoFastjetAll' )
0334 )
0335 process.patElectrons.isolationValues.user = cms.VInputTag( cms.InputTag( 'elPFIsoValueEA03' ) )
0336 else:
0337 electronGsfCut.replace( '-1.0*userIsolation("User1Iso")', '-0.5*puChargedHadronIso' )
0338 electronCalibCut.replace( '-1.0*userIsolation("User1Iso")', '-0.5*puChargedHadronIso' )
0339 electronCut.replace( '-1.0*userIsolation("User1Iso")', '-0.5*puChargedHadronIso' )
0340
0341 if useCalibElec:
0342 from TopQuarkAnalysis.Configuration.patRefSel_refMuJets_cfi import electronsWithRegression, calibratedElectrons
0343 process.electronsWithRegression = electronsWithRegression.clone()
0344 if runOnMiniAOD:
0345 if useElecEAIsoCorr:
0346 process.electronsWithRegression.inputElectronsTag = 'electronsWithEA03Iso'
0347 else:
0348 process.electronsWithRegression.inputElectronsTag = 'slimmedElectrons'
0349 process.electronsWithRegression.vertexCollection = 'offlineSlimmedPrimaryVertices'
0350 process.calibratedElectrons = calibratedElectrons.clone( isMC = runOnMC )
0351 if runOnMC:
0352 process.calibratedElectrons.inputDataset = 'Summer12_LegacyPaper'
0353 else:
0354 process.calibratedElectrons.inputDataset = '22Jan2013ReReco'
0355 process.RandomNumberGeneratorService = cms.Service( "RandomNumberGeneratorService"
0356 , calibratedElectrons = cms.PSet( initialSeed = cms.untracked.uint32( 1 )
0357 , engineName = cms.untracked.string('TRandom3')
0358 )
0359 )
0360 electronCut = electronCalibCut
0361
0362 from TopQuarkAnalysis.Configuration.patRefSel_refMuJets_cfi import selectedElectrons, standAloneElectronVetoFilter
0363 process.selectedElectrons = selectedElectrons.clone( cut = electronCut )
0364 if useCalibElec:
0365 process.selectedElectrons.src = 'calibratedElectrons'
0366 elif useElecEAIsoCorr and runOnMiniAOD:
0367 process.selectedElectrons.src = 'electronsWithEA03Iso'
0368 elif runOnMiniAOD:
0369 process.selectedElectrons.src = 'slimmedElectrons'
0370
0371 process.standAloneElectronVetoFilter = standAloneElectronVetoFilter.clone()
0372 process.sStandAloneElectronVeto = cms.Sequence( process.standAloneElectronVetoFilter )
0373 process.pStandAloneElectronVeto = cms.Path( process.sStandAloneElectronVeto )
0374
0375
0376
0377 from TopQuarkAnalysis.Configuration.patRefSel_refMuJets_cfi import selectedJets
0378 process.selectedJets = selectedJets.clone( cut = jetCut )
0379 if runOnMiniAOD:
0380 process.selectedJets.src = 'slimmedJets'
0381
0382 from TopQuarkAnalysis.Configuration.patRefSel_refMuJets_cfi import signalVeryTightJets, standAloneSignalVeryTightJetsFilter
0383 process.signalVeryTightJets = signalVeryTightJets.clone( cut = veryTightJetCut )
0384 process.standAloneSignalVeryTightJetsFilter = standAloneSignalVeryTightJetsFilter.clone()
0385 process.sStandAlone1Jet = cms.Sequence( process.standAloneSignalVeryTightJetsFilter )
0386 process.pStandAlone1Jet = cms.Path( process.sStandAlone1Jet )
0387
0388 from TopQuarkAnalysis.Configuration.patRefSel_refMuJets_cfi import signalTightJets, standAloneSignalTightJetsFilter
0389 process.signalTightJets = signalTightJets.clone( cut = tightJetCut )
0390 process.standAloneSignalTightJetsFilter = standAloneSignalTightJetsFilter.clone()
0391 process.sStandAlone2Jets = cms.Sequence( process.standAloneSignalTightJetsFilter )
0392 process.pStandAlone2Jets = cms.Path( process.sStandAlone2Jets )
0393
0394 from TopQuarkAnalysis.Configuration.patRefSel_refMuJets_cfi import signalLooseJets, standAloneSignalLooseJetsFilter
0395 process.signalLooseJets = signalLooseJets.clone( cut = looseJetCut )
0396 process.standAloneSignalLooseJetsFilter = standAloneSignalLooseJetsFilter.clone()
0397 process.sStandAlone3Jets = cms.Sequence( process.standAloneSignalLooseJetsFilter )
0398 process.pStandAlone3Jets = cms.Path( process.sStandAlone3Jets )
0399
0400
0401
0402 from TopQuarkAnalysis.Configuration.patRefSel_refMuJets_cfi import signalVeryLooseJets, standAloneSignalVeryLooseJetsFilter
0403 process.signalVeryLooseJets = signalVeryLooseJets.clone( cut = veryLooseJetCut )
0404 process.standAloneSignalVeryLooseJetsFilter = standAloneSignalVeryLooseJetsFilter.clone()
0405 process.sStandAlone4Jets = cms.Sequence( process.standAloneSignalVeryLooseJetsFilter )
0406 process.pStandAlone4Jets = cms.Path( process.sStandAlone4Jets )
0407
0408
0409
0410 from TopQuarkAnalysis.Configuration.patRefSel_refMuJets_cfi import selectedBTagJets, standAloneSignalBTagsFilter
0411 process.selectedBTagJets = selectedBTagJets.clone( src = bTagSrc
0412 , cut = bTagCut
0413 )
0414 process.standAloneSignalBTagsFilter = standAloneSignalBTagsFilter.clone( minNumber = minBTags )
0415 process.sStandAloneBTags = cms.Sequence( process.standAloneSignalBTagsFilter )
0416 process.pStandAloneBTags = cms.Path( process.sStandAloneBTags )
0417
0418
0419
0420 process.sTrigger = cms.Sequence( process.sStandAloneTrigger
0421 )
0422 process.sEventCleaning = cms.Sequence( process.sTrigger
0423 + process.sStandAloneEventCleaning
0424 )
0425 process.sGoodVertex = cms.Sequence( process.sEventCleaning
0426 + process.sStandAloneGoodVertex
0427 )
0428 process.sSignalMuon = cms.Sequence( process.sGoodVertex
0429 + process.sStandAloneSignalMuon
0430 )
0431 process.sLooseMuonVeto = cms.Sequence( process.sSignalMuon
0432 + process.sStandAloneLooseMuonVeto
0433 )
0434 process.sElectronVeto = cms.Sequence( process.sLooseMuonVeto
0435 + process.sStandAloneElectronVeto
0436 )
0437 process.s1Jet = cms.Sequence( process.sElectronVeto
0438 + process.sStandAlone1Jet
0439 )
0440 process.s2Jets = cms.Sequence( process.s1Jet
0441 + process.sStandAlone2Jets
0442 )
0443 process.s3Jets = cms.Sequence( process.s2Jets
0444 + process.sStandAlone2Jets
0445 )
0446 process.s4Jets = cms.Sequence( process.s3Jets
0447 + process.sStandAlone4Jets
0448 )
0449 process.sBTags = cms.Sequence( process.s4Jets
0450 + process.sStandAloneBTags
0451 )
0452
0453 process.pTrigger = cms.Path( process.sTrigger )
0454 process.pEventCleaning = cms.Path( process.sEventCleaning )
0455 process.pGoodVertex = cms.Path( process.sGoodVertex )
0456 process.pSignalMuon = cms.Path( process.sSignalMuon )
0457 process.pLooseMuonVeto = cms.Path( process.sLooseMuonVeto )
0458 process.pElectronVeto = cms.Path( process.sElectronVeto )
0459 process.p1Jet = cms.Path( process.s1Jet )
0460 process.p2Jets = cms.Path( process.s2Jets )
0461 process.p3Jets = cms.Path( process.s2Jets )
0462 process.p4Jets = cms.Path( process.s4Jets )
0463 process.pBTags = cms.Path( process.sBTags )
0464
0465
0466
0467 if addTriggerMatch:
0468 from TopQuarkAnalysis.Configuration.patRefSel_triggerMatching_cff import muonTriggerMatch
0469 process.muonTriggerMatch = muonTriggerMatch.clone( matchedCuts = triggerObjectSelection )
0470 if not runOnMiniAOD:
0471 from PhysicsTools.PatAlgos.tools.trigTools import switchOnTriggerMatchEmbedding
0472 switchOnTriggerMatchEmbedding( process, triggerMatchers = [ 'muonTriggerMatch' ] )
0473 else:
0474 from TopQuarkAnalysis.Configuration.patRefSel_triggerMatching_cff import unpackedPatTrigger
0475 process.selectedTriggerUnpacked = unpackedPatTrigger.clone()
0476 process.muonTriggerMatch.matched = 'selectedTriggerUnpacked'
0477 from TopQuarkAnalysis.Configuration.patRefSel_triggerMatching_cff import signalMuonsTriggerMatch
0478 process.signalMuonsTriggerMatch = signalMuonsTriggerMatch.clone()
0479 process.out.outputCommands += [ 'drop *_signalMuons_*_*'
0480 , 'keep *_signalMuonsTriggerMatch_*_*'
0481 ]
0482