def lep_config(process, reportEveryNum=100, maxEvents=-1) : common_config(process, reportEveryNum, maxEvents) el_config(process) mu_config(process) met_config(process) # redefine selectedPatMuons (isGlobalMuon not included in std definition) process.selectedPatMuons.cut = "pt > 10. & abs(eta) < 2.4 & isGlobalMuon" from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ), src=cms.InputTag('offlinePrimaryVertices') ) ## let it run process.p = cms.Path( process.patMuons * process.selectedPatMuons * process.patElectrons * process.selectedPatElectrons * process.goodOfflinePrimaryVertices* process.patTrigger * process.patTriggerEvent * process.patMETsPF ) #Keep NVtxs process.out.outputCommands.append('keep *_offlinePrimaryVertices_*_*') process.patJetCorrFactors.rho = cms.InputTag("kt6PFJetsPFlow", "rho") process.out.outputCommands.append('keep *_kt6PFJetsPFlow_*_PAT')
def CMGWPswitchToPFJets(process) : addJetCollection(process,cms.InputTag('newAK7PF'),'AK7','PF', doJTA = True, doBTagging = True, jetCorrLabel = ('AK7PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute'])), doType1MET = True, genJetCollection=cms.InputTag("ak7GenJets"), doJetID = False ) addJetCollection(process,cms.InputTag('ak5PFJets'),'AK5','PF', doJTA = True, doBTagging = True, jetCorrLabel = ('AK5PF', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute'])), doType1MET = True, genJetCollection=cms.InputTag("ak5GenJets"), doJetID = False ) process.selectedPatPFParticles.cut = "" from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ), src=cms.InputTag('offlinePrimaryVertices') )
def lep_config(process, reportEveryNum=100, maxEvents=-1): common_config(process, reportEveryNum, maxEvents) el_config(process) mu_config(process) met_config(process) # redefine selectedPatMuons (isGlobalMuon not included in std definition) process.selectedPatMuons.cut = "pt > 10. & abs(eta) < 2.4 & isGlobalMuon" from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams=pvSelector.clone(minNdof=cms.double(4.0), maxZ=cms.double(24.0)), src=cms.InputTag('offlinePrimaryVertices')) ## let it run process.p = cms.Path( process.patMuons * process.selectedPatMuons * process.patElectrons * process.selectedPatElectrons * process.goodOfflinePrimaryVertices * process.patTrigger * process.patTriggerEvent * process.patMETsPF) #Keep NVtxs process.out.outputCommands.append('keep *_offlinePrimaryVertices_*_*') process.patJetCorrFactors.rho = cms.InputTag("kt6PFJetsPFlow", "rho") process.out.outputCommands.append('keep *_kt6PFJetsPFlow_*_PAT')
def CMGWPswitchToPFJets(process): addJetCollection( process, cms.InputTag('newAK7PF'), 'AK7', 'PF', doJTA=True, doBTagging=True, jetCorrLabel=('AK7PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute'])), doType1MET=True, genJetCollection=cms.InputTag("ak7GenJets"), doJetID=False) addJetCollection( process, cms.InputTag('ak5PFJets'), 'AK5', 'PF', doJTA=True, doBTagging=True, jetCorrLabel=('AK5PF', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute'])), doType1MET=True, genJetCollection=cms.InputTag("ak5GenJets"), doJetID=False) process.selectedPatPFParticles.cut = "" from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams=pvSelector.clone(minNdof=cms.double(4.0), maxZ=cms.double(24.0)), src=cms.InputTag('offlinePrimaryVertices'))
## in data few events don't have a valid pf collection. They get veto by the following lines if data: process.pfFilter = cms.EDFilter('CandViewCountFilter', src = cms.InputTag(input_PFCandidates), minNumber = cms.uint32(1), filter = cms.bool(False) ## Add Filter option ) process.path *= (process.pfFilter) # PFCandidates ################################################### ## Good offline PV selection: from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter('PrimaryVertexObjectFilter', filterParams = pvSelector.clone(maxZ = 24.0), # ndof >= 4, rho <= 2 ) ## ------------------------------------------------------------------------ ## TopProjections from CommonTools/ParticleFlow: process.load("CommonTools.ParticleFlow.pfNoPileUpIso_cff") process.load("CommonTools.ParticleFlow.pfParticleSelection_cff") ## pf candidate configuration for everything but CHS jets # Modifications for new particleFlow Pointers ## pf candidate configuration for CHS jets process.pfPileUp.PFCandidates = cms.InputTag(input_PFCandidatePtrs) process.pfPileUp.Vertices = cms.InputTag(input_PrimaryVertices) process.pfPileUp.checkClosestZVertex = False process.pfNoPileUp.bottomCollection = cms.InputTag(input_PFCandidatePtrs)
process.kt6PFJets.doRhoFastjet = True ##-------------------- Turn-on the FastJet jet area calculation for your favorite algorithm ----------------------- process.ak5PFJets.doAreaFastjet = True process.primaryVertexFilter = cms.EDFilter( "GoodVertexFilter", vertexCollection=cms.InputTag('offlinePrimaryVertices'), minimumNDOF=cms.uint32(4), maxAbsZ=cms.double(24), maxd0=cms.double(2)) from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams=pvSelector.clone(maxZ=cms.double(24.0)), src=cms.InputTag('offlinePrimaryVertices')) ############################### ########## Gen Setup ########## ############################### #process.load("RecoJets.Configuration.GenJetParticles_cff") process.load("TopQuarkAnalysis.TopEventProducers.sequences.ttGenEvent_cff") ############################### ####### PF2PAT Setup ########## ############################### # Default PF2PAT with AK5 jets. Make sure to turn ON the L1fastjet stuff.
def applyFilters( process ) : ## The beam scraping filter __________________________________________________|| process.noscraping = cms.EDFilter( "FilterOutScraping", applyfilter = cms.untracked.bool(True), debugOn = cms.untracked.bool(False), numtrack = cms.untracked.uint32(10), thresh = cms.untracked.double(0.25) ) ## The iso-based HBHE noise filter ___________________________________________|| #process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi') ## The CSC beam halo tight filter ____________________________________________|| #process.load('RecoMET.METAnalyzers.CSCHaloFilter_cfi') process.load("RecoMET.METFilters.metFilters_cff") ## The HCAL laser filter _____________________________________________________|| process.load("RecoMET.METFilters.hcalLaserEventFilter_cfi") process.hcalLaserEventFilter.vetoByRunEventNumber=cms.untracked.bool(False) process.hcalLaserEventFilter.vetoByHBHEOccupancy=cms.untracked.bool(True) ## The ECAL dead cell trigger primitive filter _______________________________|| process.load('RecoMET.METFilters.EcalDeadCellTriggerPrimitiveFilter_cfi') ## For AOD and RECO recommendation to use recovered rechits process.EcalDeadCellTriggerPrimitiveFilter.tpDigiCollection = cms.InputTag("ecalTPSkimNA") ## The EE bad SuperCrystal filter ____________________________________________|| process.load('RecoMET.METFilters.eeBadScFilter_cfi') ## The Good vertices collection needed by the tracking failure filter ________|| process.goodVertices = cms.EDFilter( "VertexSelector", filter = cms.bool(False), src = cms.InputTag("offlinePrimaryVertices"), cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.rho < 2") ) ## The tracking failure filter _______________________________________________|| process.load('RecoMET.METFilters.trackingFailureFilter_cfi') process.load('RecoMET.METFilters.trackingPOGFilters_cfi') # Tracking TOBTEC fakes filter ## # if true, only events passing filter (bad events) will pass process.tobtecfakesfilter.filter=cms.bool(False) ## The good primary vertex filter ____________________________________________|| pvSrc = 'offlinePrimaryVertices' process.primaryVertexFilter = cms.EDFilter( "VertexSelector", src = cms.InputTag("offlinePrimaryVertices"), cut = cms.string("!isFake & ndof > 4 & abs(z) <= 24 & position.Rho <= 2"), filter = cms.bool(True) ) from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams = pvSelector.clone( maxZ = cms.double(24.0), minNdof = cms.double(4.0) # this is >= 4 ), src=cms.InputTag(pvSrc) )
numtrack=cms.untracked.uint32(10), thresh=cms.untracked.double(0.2)) # HB + HE noise filtering process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi') process.HBHENoiseFilter.minIsolatedNoiseSumE = 999999. process.HBHENoiseFilter.minNumIsolatedNoiseChannels = 999999 process.HBHENoiseFilter.minIsolatedNoiseSumEt = 999999. from HLTrigger.HLTfilters.hltHighLevel_cfi import * if mytrigs is not None: process.hltSelection = hltHighLevel.clone( TriggerResultsTag='TriggerResults::HLT', HLTPaths=mytrigs) process.hltSelection.throw = False from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector goodVertexSelection = pvSelector.clone(maxZ=24.) process.primaryVertexFilter = cms.EDFilter("PrimaryVertexFilter", goodVertexSelection) # Select jets process.selectedPatJets.cut = cms.string('pt > 25') # Add the files readFiles = cms.untracked.vstring() secFiles = cms.untracked.vstring() readFiles.extend([ '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/E4D2CB53-9881-E011-8D99-003048F024DC.root', '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/DC453887-7481-E011-89B9-001617E30D0A.root', '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/DABFB9E8-9B81-E011-9FF7-0030487CD812.root', '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/D4E6F338-9B81-E011-A8DE-003048F110BE.root',
def getBaseConfig(globaltag, testfile="", maxevents=0, datatype='data'): """Default config for Z+jet skims with Kappa This is used in a cmssw config file via: import skim_base process = skim_base.getBaseConfig('START53_V12', "testfile.root") """ # Set the globalt tag and datatype for testing or by grid-control --------- data = (datatype == 'data') if data: testfile = 'file:/storage/8/dhaitz/testfiles/data_AOD_2012A.root' testfile = 'file:/storage/8/dhaitz/temp-DoubleMu/0C79FC3F-4083-E211-9CC5-20CF3027A5E2.root' if '@' in globaltag: globaltag = 'FT53_V21A_AN6' maxevents = maxevents or 100 else: testfile = 'file:/storage/8/dhaitz/testfiles/rundepMC.root' if '@' in globaltag: globaltag = 'START53_V19F' maxevents = maxevents or 100 datatype = 'mc' print "GT:", globaltag, "| TYPE:", datatype, "| maxevents:", maxevents, "| file:", testfile # Basic process setup ----------------------------------------------------- process = cms.Process('kappaSkim') process.source = cms.Source('PoolSource', fileNames = cms.untracked.vstring(testfile)) process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(maxevents)) # Includes + Global Tag --------------------------------------------------- process.load('FWCore.MessageService.MessageLogger_cfi') process.load('Configuration.StandardSequences.Services_cff') process.load('Configuration.StandardSequences.MagneticField_38T_cff') process.load('Configuration.Geometry.GeometryIdeal_cff') process.load('Configuration.Geometry.GeometryPilot2_cff') process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAny_cfi') process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi') process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi') process.load('RecoMuon.DetLayers.muonDetLayerGeometry_cfi') process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') process.load('Configuration.StandardSequences.Reconstruction_cff') process.GlobalTag.globaltag = globaltag + '::All' # Reduce amount of messages ----------------------------------------------- process.MessageLogger.default = cms.untracked.PSet( ERROR = cms.untracked.PSet(limit = cms.untracked.int32(5))) process.MessageLogger.cerr.FwkReport.reportEvery = 40 # Produce PF muon isolation ----------------------------------------------- from CommonTools.ParticleFlow.Isolation.tools_cfi import isoDepositReplace process.pfmuIsoDepositPFCandidates = isoDepositReplace('muons', 'particleFlow') process.pfMuonIso = cms.Path(process.pfmuIsoDepositPFCandidates) # Electrons --------------------------------------------------------------- process.load("Kappa.Skimming.KElectrons_cff") process.electrons = cms.Path( process.makeKappaElectrons) # Create good primary vertices to be used for PF association -------------- from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter("PrimaryVertexObjectFilter", filterParams = pvSelector.clone(minNdof = cms.double(4.0), maxZ = cms.double(24.0)), src=cms.InputTag('offlinePrimaryVertices') ) process.ak5PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices') process.kt6PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices') # CHS Jets with the NoPU sequence ----------------------------------------- process.load('CommonTools.ParticleFlow.PFBRECO_cff') process.pfPileUp.Vertices = cms.InputTag('goodOfflinePrimaryVertices') process.pfPileUp.checkClosestZVertex = cms.bool(False) process.pfCHS = cms.Path(process.goodOfflinePrimaryVertices * process.PFBRECO) process.ak5PFJetsCHS = process.ak5PFJets.clone(src = cms.InputTag('pfNoPileUp')) process.kt6PFJetsCHS = process.kt6PFJets.clone(src = cms.InputTag('pfNoPileUp')) # Gen Jets without neutrinos ---------------------------------------------- if datatype == 'mc': process.load('RecoJets.JetProducers.ak5GenJets_cfi') process.NoNuGenJets = cms.Path(process.genParticlesForJetsNoNu * process.genParticlesForJets * process.ak5GenJetsNoNu * process.kt6GenJetsNoNu * process.kt6GenJets ) # Path to Redo all Jets --------------------------------------------------- process.jetsRedo = cms.Path( process.ak5PFJets * process.kt6PFJets * process.ak5PFJetsCHS * process.kt6PFJetsCHS ) # QG TAGGER ---------------------------------------------------------------- process.load('QuarkGluonTagger.EightTeV.QGTagger_RecoJets_cff') process.QGTagger.srcJets = cms.InputTag("ak5PFJets") process.AK5PFJetsQGTagger = process.QGTagger process.AK5PFJetsCHSQGTagger = process.QGTagger.clone( srcJets = cms.InputTag("ak5PFJetsCHS"), useCHS = cms.untracked.bool(True)) process.QGTagging = cms.Path(process.QuarkGluonTagger * process.AK5PFJetsQGTagger * process.AK5PFJetsCHSQGTagger ) # B-Tagging ---------------------------------------------------------------- # b-tagging general configuration process.load("RecoJets.JetAssociationProducers.ic5JetTracksAssociatorAtVertex_cfi") process.load("RecoBTag.Configuration.RecoBTag_cff") ### AK5 # create a ak5PF jets and tracks association process.ak5PFJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone() process.ak5PFJetTracksAssociatorAtVertex.jets = "ak5PFJets" process.ak5PFJetTracksAssociatorAtVertex.tracks = "generalTracks" process.ak5PFImpactParameterTagInfos = process.impactParameterTagInfos.clone() process.ak5PFImpactParameterTagInfos.jetTracks = "ak5PFJetTracksAssociatorAtVertex" # secondary vertex b-tag process.ak5PFSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone() process.ak5PFSecondaryVertexTagInfos.trackIPTagInfos = "ak5PFImpactParameterTagInfos" process.ak5PFSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone() process.ak5PFSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag(cms.InputTag("ak5PFSecondaryVertexTagInfos")) process.ak5PFCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone() process.ak5PFCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak5PFImpactParameterTagInfos"), cms.InputTag("ak5PFSecondaryVertexTagInfos")) process.ak5PFCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone() process.ak5PFCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak5PFImpactParameterTagInfos"), cms.InputTag("ak5PFSecondaryVertexTagInfos")) # sequence for AK5 b-tagging process.ak5PFJetBtagging = cms.Sequence(process.ak5PFJetTracksAssociatorAtVertex * process.ak5PFImpactParameterTagInfos * process.ak5PFSecondaryVertexTagInfos * process.ak5PFSecondaryVertexTagInfos * (process.ak5PFSimpleSecondaryVertexBJetTags + process.ak5PFCombinedSecondaryVertexBJetTags + process.ak5PFCombinedSecondaryVertexMVABJetTags)) ### AK5 CHS # create a ak5PFCHS jets and tracks association process.ak5PFCHSJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone() process.ak5PFCHSJetTracksAssociatorAtVertex.jets = "ak5PFJetsCHS" process.ak5PFCHSJetTracksAssociatorAtVertex.tracks = "generalTracks" process.ak5PFCHSImpactParameterTagInfos = process.impactParameterTagInfos.clone() process.ak5PFCHSImpactParameterTagInfos.jetTracks = "ak5PFCHSJetTracksAssociatorAtVertex" # secondary vertex b-tag process.ak5PFCHSSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone() process.ak5PFCHSSecondaryVertexTagInfos.trackIPTagInfos = "ak5PFCHSImpactParameterTagInfos" process.ak5PFCHSSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone() process.ak5PFCHSSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag(cms.InputTag("ak5PFCHSSecondaryVertexTagInfos")) process.ak5PFCHSCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone() process.ak5PFCHSCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak5PFCHSImpactParameterTagInfos"), cms.InputTag("ak5PFCHSSecondaryVertexTagInfos")) process.ak5PFCHSCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone() process.ak5PFCHSCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak5PFCHSImpactParameterTagInfos"), cms.InputTag("ak5PFCHSSecondaryVertexTagInfos")) # sequence for AK5CHS b-tagging process.ak5PFCHSJetBtagging = cms.Sequence(process.ak5PFCHSJetTracksAssociatorAtVertex * process.ak5PFCHSImpactParameterTagInfos * process.ak5PFCHSSecondaryVertexTagInfos * process.ak5PFCHSSecondaryVertexTagInfos * (process.ak5PFCHSSimpleSecondaryVertexBJetTags + process.ak5PFCHSCombinedSecondaryVertexBJetTags + process.ak5PFCHSCombinedSecondaryVertexMVABJetTags)) # Add the modules for all the jet collections to the path process.BTagging = cms.Path( process.ak5PFJetBtagging * process.ak5PFCHSJetBtagging ) # PU jet ID --------------------------------------------------------------- process.load("RecoJets.JetProducers.PileupJetID_cfi") # AK5 process.ak5PFPuJetId = process.pileupJetIdProducer.clone( jets = cms.InputTag("ak5PFJets"), applyJec = cms.bool(True), inputIsCorrected = cms.bool(False), residualsTxt = cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"), ) process.ak5PFPuJetMva = process.pileupJetIdProducer.clone( jets = cms.InputTag("ak5PFJets"), jetids = cms.InputTag("ak5PFPuJetId"), applyJec = cms.bool(True), inputIsCorrected = cms.bool(False), residualsTxt = cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"), ) # AK5 CHS process.ak5PFCHSPuJetId = process.pileupJetIdProducerChs.clone( jets = cms.InputTag("ak5PFJetsCHS"), applyJec = cms.bool(True), inputIsCorrected = cms.bool(False), residualsTxt = cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"), ) process.ak5PFCHSPuJetMva = process.pileupJetIdProducerChs.clone( jets = cms.InputTag("ak5PFJetsCHS"), jetids = cms.InputTag("ak5PFCHSPuJetId"), applyJec = cms.bool(True), inputIsCorrected = cms.bool(False), residualsTxt = cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"), ) process.PUJetID = cms.Path(process.ak5PFPuJetId * process.ak5PFPuJetMva * process.ak5PFCHSPuJetId * process.ak5PFCHSPuJetMva ) # MET filters ------------------------------------------------------------- process.load('RecoMET.METFilters.ecalLaserCorrFilter_cfi') # Create good vertices for the trackingFailure MET filter process.goodVertices = cms.EDFilter("VertexSelector", filter = cms.bool(False), src = cms.InputTag("offlinePrimaryVertices"), cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.rho < 2"), ) # The good primary vertex filter for other MET filters process.primaryVertexFilter = cms.EDFilter("VertexSelector", filter = cms.bool(True), src = cms.InputTag("offlinePrimaryVertices"), cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"), ) process.noscraping = cms.EDFilter("FilterOutScraping", applyfilter = cms.untracked.bool(True), debugOn = cms.untracked.bool(False), numtrack = cms.untracked.uint32(10), thresh = cms.untracked.double(0.25) ) process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi') process.load('RecoMET.METAnalyzers.CSCHaloFilter_cfi') process.load('RecoMET.METFilters.hcalLaserEventFilter_cfi') process.hcalLaserEventFilter.vetoByRunEventNumber = cms.untracked.bool(False) process.hcalLaserEventFilter.vetoByHBHEOccupancy = cms.untracked.bool(True) process.load('RecoMET.METFilters.EcalDeadCellTriggerPrimitiveFilter_cfi') process.EcalDeadCellTriggerPrimitiveFilter.tpDigiCollection = cms.InputTag("ecalTPSkimNA") process.load('RecoMET.METFilters.EcalDeadCellBoundaryEnergyFilter_cfi') process.load('RecoMET.METFilters.eeBadScFilter_cfi') process.load('RecoMET.METFilters.eeNoiseFilter_cfi') process.load('RecoMET.METFilters.ecalLaserCorrFilter_cfi') process.load('RecoMET.METFilters.trackingFailureFilter_cfi') process.load('RecoMET.METFilters.inconsistentMuonPFCandidateFilter_cfi') process.load('RecoMET.METFilters.greedyMuonPFCandidateFilter_cfi') process.hcalLaserEventFilter.taggingMode = cms.bool(True) process.EcalDeadCellTriggerPrimitiveFilter.taggingMode = cms.bool(True) process.EcalDeadCellBoundaryEnergyFilter.taggingMode = cms.bool(True) process.trackingFailureFilter.taggingMode = cms.bool(True) process.eeBadScFilter.taggingMode = cms.bool(True) process.eeNoiseFilter.taggingMode = cms.bool(True) process.ecalLaserCorrFilter.taggingMode = cms.bool(True) process.trackingFailureFilter.taggingMode = cms.bool(True) process.inconsistentMuonPFCandidateFilter.taggingMode = cms.bool(True) process.greedyMuonPFCandidateFilter.taggingMode = cms.bool(True) process.beamScrapingFilter = process.inconsistentMuonPFCandidateFilter.clone( ptMin = cms.double(5000.0) ) process.hcalNoiseFilter = process.beamScrapingFilter.clone() process.beamHaloFilter = process.beamScrapingFilter.clone() process.filtersSeq = cms.Sequence( process.primaryVertexFilter * process.hcalLaserEventFilter + process.EcalDeadCellTriggerPrimitiveFilter + process.EcalDeadCellBoundaryEnergyFilter + process.eeBadScFilter + process.eeNoiseFilter + process.ecalLaserCorrFilter + process.goodVertices * process.trackingFailureFilter + process.inconsistentMuonPFCandidateFilter + process.greedyMuonPFCandidateFilter + process.noscraping * process.beamScrapingFilter + process.HBHENoiseFilter * process.hcalNoiseFilter + process.CSCTightHaloFilter * process.beamHaloFilter ) process.metFilters = cms.Path(process.filtersSeq) # MET correction ---------------------------------------------------------- process.load("JetMETCorrections.Type1MET.pfMETCorrections_cff") process.pfchsMETcorr.src = cms.InputTag('goodOfflinePrimaryVertices') # Type-0 process.pfMETCHS = process.pfType1CorrectedMet.clone( applyType1Corrections = cms.bool(False), applyType0Corrections = cms.bool(True) ) # MET Path process.metCorrections = cms.Path( process.producePFMETCorrections * process.pfMETCHS ) # Require two good muons -------------------------------------------------- process.goodMuons = cms.EDFilter('CandViewSelector', src = cms.InputTag('muons'), cut = cms.string("pt > 12.0 & abs(eta) < 8.0 & isGlobalMuon()"), ) process.twoGoodMuons = cms.EDFilter('CandViewCountFilter', src = cms.InputTag('goodMuons'), minNumber = cms.uint32(2), ) # Configure tuple generation ---------------------------------------------- process.load('Kappa.Producers.KTuple_cff') process.kappatuple = cms.EDAnalyzer('KTuple', process.kappaTupleDefaultsBlock, outputFile = cms.string("skim.root"), PFTaggedJets = cms.PSet( process.kappaNoCut, process.kappaNoRegEx, taggers = cms.vstring( "QGlikelihood", "QGmlp", "CombinedSecondaryVertexBJetTags", "CombinedSecondaryVertexMVABJetTags", "puJetIDFullLoose", "puJetIDFullMedium", "puJetIDFullTight", "puJetIDCutbasedLoose", "puJetIDCutbasedMedium", "puJetIDCutbasedTight", ), AK5PFTaggedJets = cms.PSet( src = cms.InputTag("ak5PFJets"), QGtagger = cms.InputTag("AK5PFJetsQGTagger"), Btagger = cms.InputTag("ak5PF"), PUJetID = cms.InputTag("ak5PFPuJetMva"), PUJetID_full = cms.InputTag("full"), ), AK5PFTaggedJetsCHS = cms.PSet( src = cms.InputTag("ak5PFJetsCHS"), QGtagger = cms.InputTag("AK5PFJetsCHSQGTagger"), Btagger = cms.InputTag("ak5PFCHS"), PUJetID = cms.InputTag("ak5PFCHSPuJetMva"), PUJetID_full = cms.InputTag("full"), ) ), ) process.kappatuple.verbose = cms.int32(0) process.kappatuple.active = cms.vstring( 'LV', 'Muons', 'Electrons', 'TrackSummary', 'VertexSummary', 'BeamSpot', 'JetArea', 'PFMET', 'FilterSummary', 'PFTaggedJets', ) if data: additional_actives = ['DataMetadata'] else: additional_actives = ['GenMetadata', 'GenParticles'] for active in additional_actives: process.kappatuple.active.append(active) process.kappatuple.LV.blacklist += cms.vstring("AK5TrackJets", ".*KT.*", ".*AK7.*") process.kappatuple.PFMET.blacklist = cms.vstring("pfType1.*CorrectedMet") process.pathKappa = cms.Path( process.goodMuons * process.twoGoodMuons * process.kappatuple ) # Process schedule -------------------------------------------------------- process.schedule = cms.Schedule( process.metFilters, process.pfCHS, process.jetsRedo, process.BTagging, process.QGTagging, process.PUJetID, process.pfMuonIso, process.electrons, process.metCorrections, process.pathKappa, ) if not data: process.schedule.insert(0, process.NoNuGenJets) return process
### load the different flavour of settings of the dEdxAnalyzer module from DQM.TrackingMonitorSource.dEdxAnalyzer_cff import * # temporary patch in order to have BXlumi from RecoLuminosity.LumiProducer.lumiProducer_cff import * # temporary test in order to temporary produce the "goodPrimaryVertexCollection" # define with a new name if changes are necessary, otherwise simply include # it from CommonTools/ParticleFlow/python/goodOfflinePrimaryVertices_cfi.py # uncomment when necessary from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector from CommonTools.ParticleFlow.goodOfflinePrimaryVertices_cfi import goodOfflinePrimaryVertices trackingDQMgoodOfflinePrimaryVertices = goodOfflinePrimaryVertices.clone() trackingDQMgoodOfflinePrimaryVertices.filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ) trackingDQMgoodOfflinePrimaryVertices.src=cms.InputTag('offlinePrimaryVertices') trackingDQMgoodOfflinePrimaryVertices.filter = cms.bool(False) # Sequence TrackingDQMSourceTier0 = cms.Sequence() # dEdx monitoring TrackingDQMSourceTier0 += dedxHarmonicSequence * dEdxMonCommon * dEdxHitMonCommon # # temporary patch in order to have BXlumi # * lumiProducer # track collections for tracks in selectedTracks : if tracks != 'generalTracks': TrackingDQMSourceTier0 += sequenceName[tracks] label = 'TrackerCollisionSelectedTrackMonCommon' + str(tracks) TrackingDQMSourceTier0 += cms.Sequence(locals()[label])
thresh = cms.untracked.double(0.2) ) # HB + HE noise filtering process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi') process.HBHENoiseFilter.minIsolatedNoiseSumE = 999999. process.HBHENoiseFilter.minNumIsolatedNoiseChannels = 999999 process.HBHENoiseFilter.minIsolatedNoiseSumEt = 999999. from HLTrigger.HLTfilters.hltHighLevel_cfi import * if mytrigs is not None : process.hltSelection = hltHighLevel.clone(TriggerResultsTag = 'TriggerResults::HLT', HLTPaths = mytrigs) process.hltSelection.throw = False from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector goodVertexSelection = pvSelector.clone( maxZ = 24. ) process.primaryVertexFilter = cms.EDFilter("PrimaryVertexFilter", goodVertexSelection ) # Select jets process.selectedPatJets.cut = cms.string('pt > 25') # Add the files readFiles = cms.untracked.vstring() secFiles = cms.untracked.vstring() readFiles.extend( [ '/store/data/Run2011A/Jet/AOD/PromptReco-v4/000/165/121/E4D2CB53-9881-E011-8D99-003048F024DC.root',
def getBaseConfig(globaltag, testfile="", maxevents=0, datatype='data'): """Default config for Z+jet skims with Kappa This is used in a cmssw config file via: import skim_base process = skim_base.getBaseConfig('START53_V12', "testfile.root") """ # Set the globalt tag and datatype for testing or by grid-control --------- data = (datatype == 'data') if data: testfile = 'file:/storage/8/dhaitz/testfiles/data_electrons_2012D.root' if '@' in globaltag: globaltag = 'FT53_V21A_AN6' maxevents = maxevents or 100 else: testfile = 'file:/storage/8/dhaitz/testfiles/rundepMC.root' if '@' in globaltag: globaltag = 'START53_V19F' maxevents = maxevents or 100 datatype = 'mc' print "GT:", globaltag, "| TYPE:", datatype, "| maxevents:", maxevents, "| file:", testfile # Basic process setup ----------------------------------------------------- process = cms.Process('kappaSkim') process.source = cms.Source('PoolSource', fileNames=cms.untracked.vstring(testfile)) process.maxEvents = cms.untracked.PSet( input=cms.untracked.int32(maxevents)) # Includes + Global Tag --------------------------------------------------- process.load('FWCore.MessageService.MessageLogger_cfi') process.load('Configuration.StandardSequences.Services_cff') process.load('Configuration.StandardSequences.MagneticField_38T_cff') process.load('Configuration.Geometry.GeometryIdeal_cff') process.load('Configuration.Geometry.GeometryPilot2_cff') process.load( 'TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAny_cfi' ) process.load( 'TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi' ) process.load( 'TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi' ) process.load('RecoMuon.DetLayers.muonDetLayerGeometry_cfi') process.load( 'Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') process.load('Configuration.StandardSequences.Reconstruction_cff') process.GlobalTag.globaltag = globaltag + '::All' # Reduce amount of messages ----------------------------------------------- process.MessageLogger.default = cms.untracked.PSet( ERROR=cms.untracked.PSet(limit=cms.untracked.int32(5))) process.MessageLogger.cerr.FwkReport.reportEvery = 40 # Electrons --------------------------------------------------------------- process.load("Kappa.Skimming.KElectrons_cff") process.electrons = cms.Path(process.makeKappaElectrons) # Create good primary vertices to be used for PF association -------------- from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams=pvSelector.clone(minNdof=cms.double(4.0), maxZ=cms.double(24.0)), src=cms.InputTag('offlinePrimaryVertices')) process.ak5PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices') process.ak7PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices') process.kt4PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices') process.kt6PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices') # CHS Jets with the NoPU sequence ----------------------------------------- process.load('CommonTools.ParticleFlow.PFBRECO_cff') process.pfPileUp.Vertices = cms.InputTag('goodOfflinePrimaryVertices') process.pfPileUp.checkClosestZVertex = cms.bool(False) process.pfCHS = cms.Path(process.goodOfflinePrimaryVertices * process.PFBRECO) process.ak5PFJetsCHS = process.ak5PFJets.clone( src=cms.InputTag('pfNoPileUp')) process.ak7PFJetsCHS = process.ak7PFJets.clone( src=cms.InputTag('pfNoPileUp')) process.kt4PFJetsCHS = process.kt4PFJets.clone( src=cms.InputTag('pfNoPileUp')) process.kt6PFJetsCHS = process.kt6PFJets.clone( src=cms.InputTag('pfNoPileUp')) # Gen Jets without neutrinos ---------------------------------------------- if not data: process.load('RecoJets.JetProducers.ak5GenJets_cfi') process.NoNuGenJets = cms.Path( process.genParticlesForJetsNoNu * process.genParticlesForJets * process.ak5GenJetsNoNu * process.ak7GenJetsNoNu * process.kt4GenJetsNoNu * process.kt4GenJets * process.kt6GenJetsNoNu * process.kt6GenJets) # Path to Redo all Jets --------------------------------------------------- process.jetsRedo = cms.Path(process.ak5PFJets * process.ak7PFJets * process.kt4PFJets * process.kt6PFJets * process.ak5PFJetsCHS * process.ak7PFJetsCHS * process.kt4PFJetsCHS * process.kt6PFJetsCHS) # QG TAGGER ---------------------------------------------------------------- process.load('QuarkGluonTagger.EightTeV.QGTagger_RecoJets_cff') process.QGTagger.srcJets = cms.InputTag("ak5PFJets") process.AK5PFJetsQGTagger = process.QGTagger process.AK5PFJetsCHSQGTagger = process.QGTagger.clone( srcJets=cms.InputTag("ak5PFJetsCHS"), useCHS=cms.untracked.bool(True)) process.AK7PFJetsQGTagger = process.QGTagger.clone( srcJets=cms.InputTag("ak7PFJets")) process.AK7PFJetsCHSQGTagger = process.QGTagger.clone( srcJets=cms.InputTag("ak7PFJetsCHS"), useCHS=cms.untracked.bool(True)) process.QGTagging = cms.Path( process.QuarkGluonTagger * process.AK5PFJetsQGTagger * process.AK5PFJetsCHSQGTagger * process.AK7PFJetsQGTagger * process.AK7PFJetsCHSQGTagger) # B-Tagging ---------------------------------------------------------------- # b-tagging general configuration process.load( "RecoJets.JetAssociationProducers.ic5JetTracksAssociatorAtVertex_cfi") process.load("RecoBTag.Configuration.RecoBTag_cff") ### AK5 # create a ak5PF jets and tracks association process.ak5PFJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone( ) process.ak5PFJetTracksAssociatorAtVertex.jets = "ak5PFJets" process.ak5PFJetTracksAssociatorAtVertex.tracks = "generalTracks" process.ak5PFImpactParameterTagInfos = process.impactParameterTagInfos.clone( ) process.ak5PFImpactParameterTagInfos.jetTracks = "ak5PFJetTracksAssociatorAtVertex" # secondary vertex b-tag process.ak5PFSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone( ) process.ak5PFSecondaryVertexTagInfos.trackIPTagInfos = "ak5PFImpactParameterTagInfos" process.ak5PFSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone( ) process.ak5PFSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak5PFSecondaryVertexTagInfos")) process.ak5PFCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone( ) process.ak5PFCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak5PFImpactParameterTagInfos"), cms.InputTag("ak5PFSecondaryVertexTagInfos")) process.ak5PFCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone( ) process.ak5PFCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak5PFImpactParameterTagInfos"), cms.InputTag("ak5PFSecondaryVertexTagInfos")) # sequence for AK5 b-tagging process.ak5PFJetBtagging = cms.Sequence( process.ak5PFJetTracksAssociatorAtVertex * process.ak5PFImpactParameterTagInfos * process.ak5PFSecondaryVertexTagInfos * process.ak5PFSecondaryVertexTagInfos * (process.ak5PFSimpleSecondaryVertexBJetTags + process.ak5PFCombinedSecondaryVertexBJetTags + process.ak5PFCombinedSecondaryVertexMVABJetTags)) ### AK5 CHS # create a ak5PFCHS jets and tracks association process.ak5PFCHSJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone( ) process.ak5PFCHSJetTracksAssociatorAtVertex.jets = "ak5PFJetsCHS" process.ak5PFCHSJetTracksAssociatorAtVertex.tracks = "generalTracks" process.ak5PFCHSImpactParameterTagInfos = process.impactParameterTagInfos.clone( ) process.ak5PFCHSImpactParameterTagInfos.jetTracks = "ak5PFCHSJetTracksAssociatorAtVertex" # secondary vertex b-tag process.ak5PFCHSSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone( ) process.ak5PFCHSSecondaryVertexTagInfos.trackIPTagInfos = "ak5PFCHSImpactParameterTagInfos" process.ak5PFCHSSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone( ) process.ak5PFCHSSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak5PFCHSSecondaryVertexTagInfos")) process.ak5PFCHSCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone( ) process.ak5PFCHSCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak5PFCHSImpactParameterTagInfos"), cms.InputTag("ak5PFCHSSecondaryVertexTagInfos")) process.ak5PFCHSCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone( ) process.ak5PFCHSCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak5PFCHSImpactParameterTagInfos"), cms.InputTag("ak5PFCHSSecondaryVertexTagInfos")) # sequence for AK5CHS b-tagging process.ak5PFCHSJetBtagging = cms.Sequence( process.ak5PFCHSJetTracksAssociatorAtVertex * process.ak5PFCHSImpactParameterTagInfos * process.ak5PFCHSSecondaryVertexTagInfos * process.ak5PFCHSSecondaryVertexTagInfos * (process.ak5PFCHSSimpleSecondaryVertexBJetTags + process.ak5PFCHSCombinedSecondaryVertexBJetTags + process.ak5PFCHSCombinedSecondaryVertexMVABJetTags)) ### AK7 # create a ak7PF jets and tracks association process.ak7PFJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone( ) process.ak7PFJetTracksAssociatorAtVertex.jets = "ak7PFJets" process.ak7PFJetTracksAssociatorAtVertex.tracks = "generalTracks" process.ak7PFImpactParameterTagInfos = process.impactParameterTagInfos.clone( ) process.ak7PFImpactParameterTagInfos.jetTracks = "ak7PFJetTracksAssociatorAtVertex" # secondary vertex b-tag process.ak7PFSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone( ) process.ak7PFSecondaryVertexTagInfos.trackIPTagInfos = "ak7PFImpactParameterTagInfos" process.ak7PFSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone( ) process.ak7PFSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak7PFSecondaryVertexTagInfos")) process.ak7PFCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone( ) process.ak7PFCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak7PFImpactParameterTagInfos"), cms.InputTag("ak7PFSecondaryVertexTagInfos")) process.ak7PFCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone( ) process.ak7PFCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak7PFImpactParameterTagInfos"), cms.InputTag("ak7PFSecondaryVertexTagInfos")) # sequence for AK7 b-tagging process.ak7PFJetBtagging = cms.Sequence( process.ak7PFJetTracksAssociatorAtVertex * process.ak7PFImpactParameterTagInfos * process.ak7PFSecondaryVertexTagInfos * process.ak7PFSecondaryVertexTagInfos * (process.ak7PFSimpleSecondaryVertexBJetTags + process.ak7PFCombinedSecondaryVertexBJetTags + process.ak7PFCombinedSecondaryVertexMVABJetTags)) ### AK7 CHS # create a ak7PFCHS jets and tracks association process.ak7PFCHSJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone( ) process.ak7PFCHSJetTracksAssociatorAtVertex.jets = "ak7PFJetsCHS" process.ak7PFCHSJetTracksAssociatorAtVertex.tracks = "generalTracks" process.ak7PFCHSImpactParameterTagInfos = process.impactParameterTagInfos.clone( ) process.ak7PFCHSImpactParameterTagInfos.jetTracks = "ak7PFCHSJetTracksAssociatorAtVertex" # secondary vertex b-tag process.ak7PFCHSSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone( ) process.ak7PFCHSSecondaryVertexTagInfos.trackIPTagInfos = "ak7PFCHSImpactParameterTagInfos" process.ak7PFCHSSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone( ) process.ak7PFCHSSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak7PFCHSSecondaryVertexTagInfos")) process.ak7PFCHSCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone( ) process.ak7PFCHSCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak7PFCHSImpactParameterTagInfos"), cms.InputTag("ak7PFCHSSecondaryVertexTagInfos")) process.ak7PFCHSCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone( ) process.ak7PFCHSCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak7PFCHSImpactParameterTagInfos"), cms.InputTag("ak7PFCHSSecondaryVertexTagInfos")) # sequence for AK7CHS b-tagging process.ak7PFCHSJetBtagging = cms.Sequence( process.ak7PFCHSJetTracksAssociatorAtVertex * process.ak7PFCHSImpactParameterTagInfos * process.ak7PFCHSSecondaryVertexTagInfos * process.ak7PFCHSSecondaryVertexTagInfos * (process.ak7PFCHSSimpleSecondaryVertexBJetTags + process.ak7PFCHSCombinedSecondaryVertexBJetTags + process.ak7PFCHSCombinedSecondaryVertexMVABJetTags)) # Add the modules for all the jet collections to the path process.BTagging = cms.Path( process.ak5PFJetBtagging * process.ak5PFCHSJetBtagging * process.ak7PFJetBtagging * process.ak7PFCHSJetBtagging) # PU jet ID --------------------------------------------------------------- process.load("RecoJets.JetProducers.PileupJetID_cfi") # AK5 process.ak5PFPuJetId = process.pileupJetIdProducer.clone( jets=cms.InputTag("ak5PFJets"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False), residualsTxt=cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"), ) process.ak5PFPuJetMva = process.pileupJetIdProducer.clone( jets=cms.InputTag("ak5PFJets"), jetids=cms.InputTag("ak5PFPuJetId"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False), residualsTxt=cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"), ) # AK5 CHS process.ak5PFCHSPuJetId = process.pileupJetIdProducerChs.clone( jets=cms.InputTag("ak5PFJetsCHS"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False), residualsTxt=cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"), ) process.ak5PFCHSPuJetMva = process.pileupJetIdProducerChs.clone( jets=cms.InputTag("ak5PFJetsCHS"), jetids=cms.InputTag("ak5PFCHSPuJetId"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False), residualsTxt=cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"), ) # ak7 process.ak7PFPuJetId = process.pileupJetIdProducer.clone( jets=cms.InputTag("ak7PFJets"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False), residualsTxt=cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"), ) process.ak7PFPuJetMva = process.pileupJetIdProducer.clone( jets=cms.InputTag("ak7PFJets"), jetids=cms.InputTag("ak7PFPuJetId"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False), residualsTxt=cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"), ) # ak7 CHS process.ak7PFCHSPuJetId = process.pileupJetIdProducerChs.clone( jets=cms.InputTag("ak7PFJetsCHS"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False), residualsTxt=cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"), ) process.ak7PFCHSPuJetMva = process.pileupJetIdProducerChs.clone( jets=cms.InputTag("ak7PFJetsCHS"), jetids=cms.InputTag("ak7PFCHSPuJetId"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False), residualsTxt=cms.FileInPath("RecoMET/METPUSubtraction/data/dummy.txt"), ) process.PUJetID = cms.Path( process.ak5PFPuJetId * process.ak5PFPuJetMva * process.ak5PFCHSPuJetId * process.ak5PFCHSPuJetMva * process.ak7PFPuJetId * process.ak7PFPuJetMva * process.ak7PFCHSPuJetId * process.ak7PFCHSPuJetMva) # MET filters ------------------------------------------------------------- process.load('RecoMET.METFilters.ecalLaserCorrFilter_cfi') # Create good vertices for the trackingFailure MET filter process.goodVertices = cms.EDFilter( "VertexSelector", filter=cms.bool(False), src=cms.InputTag("offlinePrimaryVertices"), cut=cms.string( "!isFake && ndof > 4 && abs(z) <= 24 && position.rho < 2"), ) # The good primary vertex filter for other MET filters process.primaryVertexFilter = cms.EDFilter( "VertexSelector", filter=cms.bool(True), src=cms.InputTag("offlinePrimaryVertices"), cut=cms.string( "!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"), ) process.noscraping = cms.EDFilter("FilterOutScraping", applyfilter=cms.untracked.bool(True), debugOn=cms.untracked.bool(False), numtrack=cms.untracked.uint32(10), thresh=cms.untracked.double(0.25)) process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi') process.load('RecoMET.METAnalyzers.CSCHaloFilter_cfi') process.load('RecoMET.METFilters.hcalLaserEventFilter_cfi') process.hcalLaserEventFilter.vetoByRunEventNumber = cms.untracked.bool( False) process.hcalLaserEventFilter.vetoByHBHEOccupancy = cms.untracked.bool(True) process.load('RecoMET.METFilters.EcalDeadCellTriggerPrimitiveFilter_cfi') process.EcalDeadCellTriggerPrimitiveFilter.tpDigiCollection = cms.InputTag( "ecalTPSkimNA") process.load('RecoMET.METFilters.EcalDeadCellBoundaryEnergyFilter_cfi') process.load('RecoMET.METFilters.eeBadScFilter_cfi') process.load('RecoMET.METFilters.eeNoiseFilter_cfi') process.load('RecoMET.METFilters.ecalLaserCorrFilter_cfi') process.load('RecoMET.METFilters.trackingFailureFilter_cfi') process.load('RecoMET.METFilters.inconsistentMuonPFCandidateFilter_cfi') process.load('RecoMET.METFilters.greedyMuonPFCandidateFilter_cfi') process.hcalLaserEventFilter.taggingMode = cms.bool(True) process.EcalDeadCellTriggerPrimitiveFilter.taggingMode = cms.bool(True) process.EcalDeadCellBoundaryEnergyFilter.taggingMode = cms.bool(True) process.trackingFailureFilter.taggingMode = cms.bool(True) process.eeBadScFilter.taggingMode = cms.bool(True) process.eeNoiseFilter.taggingMode = cms.bool(True) process.ecalLaserCorrFilter.taggingMode = cms.bool(True) process.trackingFailureFilter.taggingMode = cms.bool(True) process.inconsistentMuonPFCandidateFilter.taggingMode = cms.bool(True) process.greedyMuonPFCandidateFilter.taggingMode = cms.bool(True) process.beamScrapingFilter = process.inconsistentMuonPFCandidateFilter.clone( ptMin=cms.double(5000.0)) process.hcalNoiseFilter = process.beamScrapingFilter.clone() process.beamHaloFilter = process.beamScrapingFilter.clone() process.filtersSeq = cms.Sequence( process.primaryVertexFilter * process.hcalLaserEventFilter + process.EcalDeadCellTriggerPrimitiveFilter + process.EcalDeadCellBoundaryEnergyFilter + process.eeBadScFilter + process.eeNoiseFilter + process.ecalLaserCorrFilter + process.goodVertices * process.trackingFailureFilter + process.inconsistentMuonPFCandidateFilter + process.greedyMuonPFCandidateFilter + process.noscraping * process.beamScrapingFilter + process.HBHENoiseFilter * process.hcalNoiseFilter + process.CSCTightHaloFilter * process.beamHaloFilter) process.metFilters = cms.Path(process.filtersSeq) # MET correction ---------------------------------------------------------- process.load("JetMETCorrections.Type1MET.pfMETCorrections_cff") process.pfchsMETcorr.src = cms.InputTag('goodOfflinePrimaryVertices') # Type-0 process.pfMETCHS = process.pfType1CorrectedMet.clone( applyType1Corrections=cms.bool(False), applyType0Corrections=cms.bool(True)) # MET Path process.metCorrections = cms.Path(process.producePFMETCorrections * process.pfMETCHS) # Configure tuple generation ---------------------------------------------- process.load('Kappa.Producers.KTuple_cff') process.kappatuple = cms.EDAnalyzer( 'KTuple', process.kappaTupleDefaultsBlock, outputFile=cms.string("skim.root"), PFTaggedJets=cms.PSet( process.kappaNoCut, process.kappaNoRegEx, taggers=cms.vstring("QGlikelihood", "QGmlp", "CombinedSecondaryVertexBJetTags", "CombinedSecondaryVertexMVABJetTags", "puJetIDFullLoose", "puJetIDFullMedium", "puJetIDFullTight", "puJetIDCutbasedLoose", "puJetIDCutbasedMedium", "puJetIDCutbasedTight"), AK5PFTaggedJets=cms.PSet( src=cms.InputTag("ak5PFJets"), QGtagger=cms.InputTag("AK5PFJetsQGTagger"), Btagger=cms.InputTag("ak5PF"), PUJetID=cms.InputTag("ak5PFPuJetMva"), PUJetID_full=cms.InputTag("full"), ), AK5PFTaggedJetsCHS=cms.PSet( src=cms.InputTag("ak5PFJetsCHS"), QGtagger=cms.InputTag("AK5PFJetsCHSQGTagger"), Btagger=cms.InputTag("ak5PFCHS"), PUJetID=cms.InputTag("ak5PFCHSPuJetMva"), PUJetID_full=cms.InputTag("full"), ), AK7PFTaggedJets=cms.PSet( src=cms.InputTag("ak7PFJets"), QGtagger=cms.InputTag("AK7PFJetsQGTagger"), Btagger=cms.InputTag("ak7PF"), PUJetID=cms.InputTag("ak7PFPuJetMva"), PUJetID_full=cms.InputTag("full"), ), AK7PFTaggedJetsCHS=cms.PSet( src=cms.InputTag("ak7PFJetsCHS"), QGtagger=cms.InputTag("AK7PFJetsCHSQGTagger"), Btagger=cms.InputTag("ak7PFCHS"), PUJetID=cms.InputTag("ak7PFCHSPuJetMva"), PUJetID_full=cms.InputTag("full"), ), ), ) process.kappatuple.verbose = cms.int32(0) process.kappatuple.active = cms.vstring( 'LV', 'TrackSummary', 'VertexSummary', 'BeamSpot', 'JetArea', 'PFMET', 'PFJets', 'FilterSummary', 'PFTaggedJets', 'Electrons', ) if data: additional_actives = ['DataMetadata'] else: additional_actives = ['GenMetadata', 'GenParticles'] for active in additional_actives: process.kappatuple.active.append(active) process.kappatuple.LV.blacklist += cms.vstring("AK5TrackJets", ".*KT.*") process.kappatuple.PFMET.blacklist = cms.vstring("pfType1.*CorrectedMet") process.pathKappa = cms.Path(process.kappatuple) # Process schedule -------------------------------------------------------- process.schedule = cms.Schedule( process.metFilters, process.electrons, process.pfCHS, process.jetsRedo, process.BTagging, process.QGTagging, process.PUJetID, process.metCorrections, process.pathKappa, ) if not data: process.schedule.insert(0, process.NoNuGenJets) return process
) ## Removal of beam scraping events process.scrapingVeto = cms.EDFilter("FilterOutScraping", applyfilter = cms.untracked.bool (True), debugOn = cms.untracked.bool (False), numtrack = cms.untracked.uint32(10), thresh = cms.untracked.double(0.25) ) ## Produce a collection of good primary vertices from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter("PrimaryVertexObjectFilter", filterParams = pvSelector.clone( minNdof = cms.double(4.0), # this is >= 4 maxZ = cms.double(24.0), maxRho = cms.double(2.0) ), src = cms.InputTag('offlinePrimaryVertices') ) ## Event counters process.nEventsTotal = cms.EDProducer("EventCountProducer") ## Path definition process.p = cms.Path( process.nEventsTotal* process.primaryVertexFilter* process.scrapingVeto* ( process.goodOfflinePrimaryVertices+
def createProcess(runOnMC, runCHS, correctMETWithT1, processCaloJets, processCA8Jets, globalTag): ## import skeleton process from PhysicsTools.PatAlgos.patTemplate_cfg import process # load the PAT config process.load("PhysicsTools.PatAlgos.patSequences_cff") process.load("JetMETCorrections.Configuration.JetCorrectionProducers_cff") # Do some CHS stuff process.ak5PFchsL1Fastjet = process.ak5PFL1Fastjet.clone(algorithm = 'AK5PFchs') process.ak5PFchsL2Relative = process.ak5PFL2Relative.clone(algorithm = 'AK5PFchs') process.ak5PFchsL3Absolute = process.ak5PFL3Absolute.clone(algorithm = 'AK5PFchs') process.ak5PFchsResidual = process.ak5PFResidual.clone(algorithm = 'AK5PFchs') process.ak5PFchsL1FastL2L3 = cms.ESProducer( 'JetCorrectionESChain', correctors = cms.vstring('ak5PFchsL1Fastjet', 'ak5PFchsL2Relative','ak5PFchsL3Absolute') ) from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector ## The good primary vertex filter ____________________________________________|| ## This filter throw events with no primary vertex process.primaryVertexFilter = cms.EDFilter( "VertexSelector", src = cms.InputTag("offlinePrimaryVertices"), cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"), filter = cms.bool(True) ) process.goodOfflinePrimaryVertices = cms.EDFilter("PrimaryVertexObjectFilter", filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ), src = cms.InputTag('offlinePrimaryVertices') ) # Configure PAT to use PF2PAT instead of AOD sources # this function will modify the PAT sequences. from PhysicsTools.PatAlgos.tools.coreTools import removeSpecificPATObjects, removeMCMatching from PhysicsTools.PatAlgos.tools.pfTools import usePF2PAT, adaptPFIsoElectrons, adaptPVs, usePFIso #from PhysicsTools.PatAlgos.tools.metTools import * def usePF2PATForAnalysis(jetAlgo, postfix, useTypeIMET, usePFNoPU): # Jet corrections # No L2L3 Residual on purpose if usePFNoPU: jetCorrections = ("%sPFchs" % algo, ['L1FastJet', 'L2Relative', 'L3Absolute']) postfix += "chs" else: jetCorrections = ("%sPF" % algo, ['L1FastJet', 'L2Relative', 'L3Absolute']) #if not runOnMC: # jetCorrections[1].append('L2L3Residual') p = postfix usePF2PAT(process, runPF2PAT=True, jetAlgo=jetAlgo, runOnMC=runOnMC, postfix=p, jetCorrections=jetCorrections, typeIMetCorrections = useTypeIMET) getattr(process, "pfPileUp" + p).Enable = True getattr(process, "pfPileUp" + p).Vertices = 'goodOfflinePrimaryVertices' getattr(process, "pfPileUp" + p).checkClosestZVertex = cms.bool(False) getattr(process, "pfJets" + p).doAreaFastjet = cms.bool(True) getattr(process, "pfJets" + p).doRhoFastjet = False getattr(process, 'patJetCorrFactors' + p).rho = cms.InputTag("kt6PFJets", "rho") # Do not use kt6PFJetsPFlowAK5, it's not ok for L1FastJet. # top projections in PF2PAT: getattr(process,"pfNoPileUp" + p).enable = cms.bool(usePFNoPU) getattr(process,"pfNoMuon" + p).enable = True getattr(process,"pfNoElectron" + p).enable = True getattr(process,"pfNoTau" + p).enable = True getattr(process,"pfNoJet" + p).enable = True getattr(process,"patElectrons" + p).embedTrack = True getattr(process,"patMuons" + p).embedTrack = True # enable delta beta correction for muon selection in PF2PAT? getattr(process,"pfIsolatedMuons" + p).doDeltaBetaCorrection = True getattr(process, "patJets" + p).embedPFCandidates = False # Keep only jets with pt > 2 Gev getattr(process, "selectedPatJets" + p).cut = "pt > 2"; # Use a cone of 0.3 for photon isolation #adaptPFIsoPhotons(process, applyPostfix(process, "patPhotons", postfix), postfix, "03") # 2012 Photon ID # Electron conversion setattr(process, "patConversions" + p, cms.EDProducer("PATConversionProducer", # input collection electronSource = cms.InputTag("selectedPatElectrons" + p) )) # Switch electron isolation to dR = 0.3, for PF2PAT getattr(process, "pfIsolatedElectrons" + p).isolationValueMapsCharged = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFId" + p)) getattr(process, "pfIsolatedElectrons" + p).deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFId" + p) getattr(process, "pfIsolatedElectrons" + p).isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("elPFIsoValueNeutral03PFId" + p), cms.InputTag("elPFIsoValueGamma03PFId" + p)) getattr(process, "pfElectrons" + p).isolationValueMapsCharged = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFId" + p)) getattr(process, "pfElectrons" + p).deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFId" + p) getattr(process, "pfElectrons" + p).isolationValueMapsNeutral = cms.VInputTag(cms.InputTag( "elPFIsoValueNeutral03PFId" + p), cms.InputTag("elPFIsoValueGamma03PFId" + p)) # ... And for PAT adaptPFIsoElectrons(process, getattr(process, "pfElectrons" + p), p, "03") if runOnMC: cloneProcessingSnippet(process, getattr(process, "makePatMuons" + p), "Loose" + p, p) getattr(process, "muonMatchLoose" + p).src = cms.InputTag("pfMuons" + p) getattr(process, "patMuonsLoose" + p).pfMuonSource = cms.InputTag("pfMuons" + p) getattr(process, "patDefaultSequence" + p).replace(getattr(process, "makePatMuons" + p), getattr(process, "makePatMuons" + p) + getattr(process, "makePatMuonsLoose" + p)) else: setattr(process, "patMuonsLoose" + p, getattr(process, "patMuons" + p).clone( pfMuonSource = cms.InputTag("pfMuons" + p) ) ) setattr(process, "selectedPatMuonsLoose" + p, getattr(process, "selectedPatMuons" + p).clone( src = cms.InputTag("patMuonsLoose" + p) ) ) sequence = getattr(process, "patDefaultSequence" + p) if not runOnMC: sequence += getattr(process, "patMuonsLoose" + p) sequence += (getattr(process, "selectedPatMuonsLoose" + p)) setattr(process, "patElectronsLoose" + p, getattr(process, "patElectrons" + p).clone( pfElectronSource = cms.InputTag("pfElectrons" + p) ) ) setattr(process, "selectedPatElectronsLoose" + p, getattr(process, "selectedPatElectrons" + p).clone( src = cms.InputTag("patElectronsLoose" + p) ) ) adaptPFIsoElectrons(process, getattr(process, "patElectronsLoose" + p), postfix, "03") sequence = getattr(process, "patDefaultSequence" + p) sequence += (getattr(process, "patElectronsLoose" + p) * getattr(process, "selectedPatElectronsLoose" + p)) #giulia turn off qg tagger ## Setup quark gluon tagger #process.load('QuarkGluonTagger.EightTeV.QGTagger_RecoJets_cff') #cloneProcessingSnippet(process, process.QuarkGluonTagger, p) #getattr(process, "QGTagger" + p).srcJets = cms.InputTag("selectedPatJets" + p) #getattr(process, "QGTagger" + p).isPatJet = cms.untracked.bool(True) #getattr(process, "QGTagger" + p).useCHS = cms.untracked.bool(usePFNoPU) ## Remove the processing of primary vertices, as it's already what we do here #getattr(process, 'QGTagger' + p).srcPV = cms.InputTag('goodOfflinePrimaryVertices') #getattr(process, 'QuarkGluonTagger' + p).remove(getattr(process, 'goodOfflinePrimaryVerticesQG' + p)) if not runOnMC: if 'L2L3Residual' in jetCorrections: getattr(process, 'patPFJetMETtype1p2Corr' + p).jetCorrLabel = 'L2L3Residual' getattr(process, 'patPFMet' + p).addGenMET = cms.bool(False) names = ["Taus"] #if jetAlgo != "AK5": #names += ["Electrons", "Muons"] if len(names) > 0: removeSpecificPATObjects(process, names = names, outputModules = ['out'], postfix = p) adaptPVs(process, pvCollection = cms.InputTag("goodOfflinePrimaryVertices"), postfix = p) getattr(process, "patDefaultSequence" + p).replace(getattr(process, "selectedPatElectrons" + p), getattr(process, "selectedPatElectrons" + p) + getattr(process, "patConversions" + p)) #getattr(process, "patDefaultSequence" + p).replace(getattr(process, "selectedPatJets" + p), getattr(process, "selectedPatJets" + p) + getattr(process, "QuarkGluonTagger" + p)) return getattr(process, "patPF2PATSequence" + p) if correctMETWithT1: process.load("PhysicsTools.PatUtils.patPFMETCorrections_cff") from PhysicsTools.PatAlgos.tools.helpers import cloneProcessingSnippet print "##########################" print "PF jets with PF2PAT" print "Using Type I met" if correctMETWithT1 else "NOT using Type I met" print "##########################" #runCHS = False postfixes = {'PFlowAK5': 'AK5'} #postfixes = {'PFlowAK5': 'AK5', 'PFlowAK7': 'AK7', 'PFlowCA8': 'CA8'} #postfixes = {'PFlowCA8': 'CA8'} ##giulia turn off qg tagger ## Setup quark gluon tagger #process.load('QuarkGluonTagger.EightTeV.QGTagger_RecoJets_cff') process.sequence_chs = cms.Sequence() process.sequence_nochs = cms.Sequence() for p, algo in postfixes.items(): process.sequence_nochs += usePF2PATForAnalysis(jetAlgo=algo, postfix=p, usePFNoPU=False, useTypeIMET=correctMETWithT1) if runCHS: process.sequence_chs += usePF2PATForAnalysis(jetAlgo=algo, postfix=p, usePFNoPU=True, useTypeIMET=correctMETWithT1) # setattr(process, 'QGTagger' + p, process.QGTagger.clone()) # getattr(process, "QGTagger" + p).srcJets = cms.InputTag("selectedPatJets" + p) # getattr(process, "QGTagger" + p).isPatJet = cms.untracked.bool(True) # getattr(process, "QGTagger" + p).useCHS = cms.untracked.bool(False) # # process.QuarkGluonTagger.replace(process.QGTagger, getattr(process, 'QGTagger' + p)) if runCHS: chsP = p + "chs" # setattr(process, 'QGTagger' + chsP, process.QGTagger.clone()) # getattr(process, "QGTagger" + chsP).srcJets = cms.InputTag("selectedPatJets" + chsP) # getattr(process, "QGTagger" + chsP).isPatJet = cms.untracked.bool(True) # getattr(process, "QGTagger" + chsP).useCHS = cms.untracked.bool(True) # process.QuarkGluonTagger.replace(getattr(process, 'QGTagger' + p), getattr(process, 'QGTagger' + p) + getattr(process, 'QGTagger' + chsP)) print "##########################" print "Calo jets" if processCaloJets else "No processing of calo jets" print "##########################" usePFIso(process, "") #adaptPFIsoPhotons(process, process.patPhotons, "", "03") # chiara init ---------------------------------- print "##########################" print "CA8 Jets" if processCA8Jets else "No processing of CA8 jets collection" print "##########################" if processCA8Jets: from PhysicsTools.PatAlgos.tools.jetTools import addJetCollection # Reco CA 0.8 jets # non sapendo quali parametri usare esattamente lascerei i default della reco per ora. # Per doAreaFastjet e doRhoFastjet per il momento usiamo quanto e' ridefinito sopra from RecoJets.JetProducers.ca4PFJets_cfi import ca4PFJets process.ca8PFJetsPFlow = ca4PFJets.clone( rParam = cms.double(0.8) # src = cms.InputTag('pfNoElectron'+postfix), # doAreaFastjet = cms.bool(True), # doRhoFastjet = cms.bool(True), # Rho_EtaMax = cms.double(6.0), # Ghost_EtaMax = cms.double(7.0) ) # Gen CA 0.8 jets from RecoJets.JetProducers.ca4GenJets_cfi import ca4GenJets process.ca8GenJetsNoNu = ca4GenJets.clone( rParam = cms.double(0.8), src = cms.InputTag("genParticlesForJetsNoNu") ) # chiara end ---------------------------------- if processCaloJets: # No L2L3 Residual on purpose jetCorrections = ('AK5Calo', ['L1Offset', 'L2Relative', 'L3Absolute']) addJetCollection(process, cms.InputTag('ak7CaloJets'), 'AK7', 'Calo', doJTA = True, doBTagging = True, jetCorrLabel = jetCorrections, doType1MET = correctMETWithT1, doL1Cleaning = False, doL1Counters = False, genJetCollection = cms.InputTag("ak7GenJets"), doJetID = True, jetIdLabel = "ak7" ) switchJetCollection(process, cms.InputTag('ak5CaloJets'), doJTA = True, doBTagging = True, jetCorrLabel = jetCorrections, doType1MET = correctMETWithT1, genJetCollection = cms.InputTag("ak5GenJets"), doJetID = True, jetIdLabel = "ak5" ) process.selectedPatJets.cut = "pt > 2" process.selectedPatJetsAK7Calo.cut = "pt > 2" else: removeSpecificPATObjects(process, names = ['Jets', 'METs']) if not runOnMC: # Remove MC Matching removeMCMatching(process, names = ["All"]) removeSpecificPATObjects(process, names = ['Electrons', 'Muons', 'Taus']) if runCHS: print "##########################" print "Running CHS sequence" print "##########################" process.analysisSequence = cms.Sequence() process.analysisSequence *= process.sequence_nochs #if runCHS: # process.analysisSequence *= process.sequence_chs # chiara init ---------------------------------- if processCA8Jets: process.analysisSequence *= process.ca8PFJetsPFlow print("done process.ca8PFJetsPFlow") process.analysisSequence *= process.ca8GenJetsNoNu print("done process.ca8GenJetsNoNu") # nuovo # chiara end ---------------------------------- #GIULIA # Quark Gluon tagging #process.analysisSequence *= process.QuarkGluonTagger # Add default pat sequence to our path # This brings to life TcMET, Calo jets and Photons ########process.analysisSequence *= process.patDefaultSequence # Add our PhotonIsolationProducer to the analysisSequence. This producer compute pf isolations # for our photons process.photonPFIsolation = cms.EDProducer("PhotonIsolationProducer", src = cms.InputTag("selectedPatPhotons") ) ##########process.analysisSequence *= process.photonPFIsolation # Filtering # require physics declared process.load('HLTrigger.special.hltPhysicsDeclared_cfi') process.hltPhysicsDeclared.L1GtReadoutRecordTag = 'gtDigis' # require scraping filter process.scrapingVeto = cms.EDFilter("FilterOutScraping", applyfilter = cms.untracked.bool(True), debugOn = cms.untracked.bool(False), numtrack = cms.untracked.uint32(10), thresh = cms.untracked.double(0.25) ) # Count events process.nEventsTotal = cms.EDProducer("EventCountProducer") process.nEventsFiltered = cms.EDProducer("EventCountProducer") # MET Filters process.load("RecoMET.METFilters.metFilters_cff") # HCAL Laser filter : work only on Winter13 rereco process.load("EventFilter.HcalRawToDigi.hcallaserFilterFromTriggerResult_cff") # Let it run process.p = cms.Path( process.nEventsTotal + # Filters process.hcalfilter + process.primaryVertexFilter + process.scrapingVeto + process.metFilters + process.goodOfflinePrimaryVertices + # Physics process.analysisSequence + process.nEventsFiltered ) if runOnMC: process.p.remove(process.hcalfilter) process.p.remove(process.scrapingVeto) # Add PF2PAT output to the created file from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning #process.load("CommonTools.ParticleFlow.PF2PAT_EventContent_cff") process.out.outputCommands = cms.untracked.vstring('drop *', #process.out.outputCommands = cms.untracked.vstring('keep *') #'drop *', 'keep *_*_*_SIM', 'keep *_*_*_HLT', 'keep *_*_*_RECO', 'keep *_*ca8*_*_PAT') #'keep *_photonCore_*_*', #'keep double_kt6*Jets*_rho_*', #'keep *_goodOfflinePrimaryVertices_*_*', #'keep recoPFCandidates_particleFlow_*_*', # Content of *patEventContentNoCleaning #'keep *_selectedPatPhotons*_*_*', 'keep *_selectedPatElectrons*_*_*', 'keep *_selectedPatMuons*_*_*', 'keep *_selectedPatTaus*_*_*', 'keep *_selectedPatJets*_*_*', 'drop *_selectedPatJets_pfCandidates_*', 'drop *_*PF_caloTowers_*', 'drop *_*JPT_pfCandidates_*', 'drop *_*Calo_pfCandidates_*', 'keep *_patMETs*_*_*', 'keep *_selectedPatPFParticles*_*_*', 'keep *_selectedPatTrackCands*_*_*', #'keep *_cleanPatPhotons*_*_*', 'keep *_cleanPatElectrons*_*_*', 'keep *_cleanPatMuons*_*_*', 'keep *_cleanPatTaus*_*_*', #'keep *_cleanPatJets*_*_*', 'keep *_cleanPatHemispheres*_*_*', 'keep *_cleanPatPFParticles*_*_*', #'keep *_cleanPatTrackCands*_*_*', #'drop *_*PFlow_caloTowers_*', # Type I residual #'drop *_selectedPatJetsForMET*_*_PAT', #'keep *_patPFMet*_*_PAT', # Keep raw met # Trigger #'keep *_TriggerResults_*_HLT', # Debug #'keep *_pf*_*_PAT' # Photon ID #'keep *_patConversions*_*_*', #'keep *_photonPFIsolation*_*_*', # Quark Gluon tagging #'keep *_QGTagger*_*_*', #'drop *_kt6PFJetsIsoQG_*_PAT', #'drop *_kt6PFJetsQG_*_PAT', # MC truth #'keep *_genParticles_*_*' #) if runOnMC: process.out.outputCommands.extend(['keep *_addPileupInfo_*_*', 'keep *_generator_*_*']) # switch on PAT trigger # from PhysicsTools.PatAlgos.tools.trigTools import switchOnTrigger # switchOnTrigger( process ) ## ------------------------------------------------------ # In addition you usually want to change the following # parameters: ## ------------------------------------------------------ # process.GlobalTag.globaltag = "%s::All" % (globalTag) ## (according to https://twiki.cern.ch/twiki/bin/view/CMS/SWGuideFrontierConditions) # ## #process.source.fileNames = cms.untracked.vstring('file:input_data.root') ## (e.g. 'file:AOD.root') # ## #process.maxEvents.input = 2500 process.maxEvents.input = 5000 # ## # process.out.outputCommands = [ ... ] ## (e.g. taken from PhysicsTools/PatAlgos/python/patEventContent_cff.py) # ## process.options.wantSummary = False ## (to suppress the long output at the end of the job) process.MessageLogger.cerr.FwkReport.reportEvery = 1000 # Remove annoying ecalLaser messages process.MessageLogger.suppressError = cms.untracked.vstring ('ecalLaserCorrFilter') return process
def addPATSequences(process, runMC): # Load the PAT config from PhysicsTools.PatAlgos.patEventContent_cff import patEventContent process.out = cms.OutputModule( "PoolOutputModule", fileName=cms.untracked.string('patTuple.root'), SelectEvents=cms.untracked.PSet(SelectEvents=cms.vstring('pat_step')), outputCommands=cms.untracked.vstring('drop *', *patEventContent)) ### process.load('PhysicsTools.PatAlgos.patSequences_cff') from PhysicsTools.PatAlgos.tools.pfTools import usePF2PAT postfix = "PFlow" jetAlgo = "AK5" jetCorrections = None if runMC: jetCorrections = ('AK5PFchs', ['L1FastJet', 'L2Relative', 'L3Absolute']) else: jetCorrections = ('AK5PFchs', [ 'L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual' ]) usePF2PAT(process, runPF2PAT=True, jetAlgo=jetAlgo, runOnMC=runMC, postfix=postfix, jetCorrections=jetCorrections) #from PhysicsTools.PatAlgos.tools.coreTools import removeMCMatching #if not runMC: # removeMCMatching(process, ['All'],"") #-----------------Customization---------------- process.pfPileUpPFlow.Enable = True process.pfPileUpPFlow.checkClosestZVertex = False process.pfPileUpPFlow.Vertices = cms.InputTag('goodOfflinePrimaryVertices') process.pfPileUpPFlow.verbose = True process.pfJetsPFlow.doAreaFastjet = True process.pfJetsPFlow.doRhoFastjet = False from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams=pvSelector.clone(minNdof=cms.double(4.0), maxZ=cms.double(24.0)), src=cms.InputTag('offlinePrimaryVertices')) # Compute the mean pt per unit area (rho) from the PFCHS inputs #from RecoJets.Configuration.RecoPFJets_cff import kt6PFJets,ak5PFJets #process.kt6PFJetsPFlow = kt6PFJets.clone( # src = cms.InputTag('pfNoElectron'+postfix), # doAreaFastjet = cms.bool(True), # doRhoFastjet = cms.bool(True) # ) #process.patJetCorrFactorsPFlow.rho = cms.InputTag("kt6PFJetsPFlow", "rho") from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets process.kt6PFJetsForPAT = kt4PFJets.clone(rParam=cms.double(0.6), doAreaFastjet=cms.bool(True), doRhoFastjet=cms.bool(True)) process.patJetCorrFactorsPFlow.rho = cms.InputTag("kt6PFJetsForPAT", "rho") from RecoJets.JetProducers.ak5PFJets_cfi import ak5PFJets process.ak5PFJetsPileUp = ak5PFJets.clone(src=cms.InputTag('pfPileUp' + postfix)) # Switch on PAT trigger from PhysicsTools.PatAlgos.tools.trigTools import switchOnTrigger #switchOnTrigger( process,triggerProducer = 'patTrigger', triggerEventProducer = 'patTriggerEvent', sequence = 'patPF2PATSequence',hltProcess = 'HLT', outputModule = 'out') switchOnTrigger(process, sequence='patPF2PATSequence' + postfix) process.patTrigger.addL1Algos = cms.bool(True) switchOnTrigger(process, sequence='patPF2PATSequence' + postfix) # to fix event content #------------------------------------------------------------------------------------------------------------- # Add modules to default sequence #if runMC: # getattr(process, "patElectrons"+postfix).embedGenMatch = True # getattr(process, "patMuons"+postfix).embedGenMatch = True #else: # getattr(process, "patElectrons"+postfix).embedGenMatch = False # getattr(process, "patMuons"+postfix).embedGenMatch = False # Add modules to default sequence getattr(process, "patPF2PATSequence" + postfix).replace( getattr(process, "pfNoElectron" + postfix), getattr(process, "pfNoElectron" + postfix) * process.kt6PFJetsForPAT) getattr(process, "patPF2PATSequence" + postfix).replace( getattr(process, "pfNoPileUp" + postfix), getattr(process, "pfNoPileUp" + postfix) * process.ak5PFJetsPileUp) #---------------------------------------------- # Let it run process.pat_step = cms.Path( process.goodOfflinePrimaryVertices * #process.patDefaultSequence + getattr(process, "patPF2PATSequence" + postfix)) # Add PatTrigger output to the created file from PhysicsTools.PatAlgos.patEventContent_cff import patTriggerEventContent # Add PF2PAT output to the created file from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning patOutputCommands = cms.untracked.vstring( 'drop *', 'keep recoPFCandidates_particleFlow_*_*', *patEventContentNoCleaning) # Adjust the event content patOutputCommands += [ #'keep *_selectedPat*_*_*', 'keep *_genParticles*_*_*', 'keep *_offlinePrimaryVertices*_*_*', 'keep *_goodOfflinePrimaryVertices*_*_*', #'keep *_pileUpN*PrimaryVertices_*_*', #'keep *_pfPileUpExclN*_*_*', 'keep *_pfPileUpPFlow*_*_*', 'keep *_pfNoPileUpPFlow*_*_*', 'keep *_ak5PFJetsPileUp_*_*', 'keep *_ak5PFJets_*_*', 'keep recoTracks_generalTracks_*_*', 'keep HcalNoiseSummary_hcalnoise_*_*', 'keep *_BeamHaloSummary_*_*', #------- Trigger collections ------ 'keep edmTriggerResults_TriggerResults_*_*', 'keep *_hltTriggerSummaryAOD_*_*', 'keep L1GlobalTriggerObjectMapRecord_*_*_*', 'keep L1GlobalTriggerReadoutRecord_*_*_*', #------- CASTOR rec hits ------ 'keep *_logErrorHarvester_*_*', 'keep *_castorreco_*_*', #------- Calo towers (just for now) ------ 'keep *_towerMaker_*_*', #---------------PatTrigger---------------- 'keep patTriggerObjects_patTrigger*_*_*', 'keep patTriggerFilters_patTrigger*_*_*', 'keep patTriggerPaths_patTrigger*_*_*', 'keep patTriggerEvent_patTriggerEvent*_*_*' ] process.out.outputCommands = patOutputCommands # top projections in PF2PAT: getattr(process, "pfNoPileUp" + postfix).enable = True getattr(process, "pfNoMuon" + postfix).enable = True getattr(process, "pfNoElectron" + postfix).enable = True getattr(process, "pfNoTau" + postfix).enable = False getattr(process, "pfNoJet" + postfix).enable = True # verbose flags for the PF2PAT modules getattr(process, "pfNoJet" + postfix).verbose = False
#-# Copyright (c) 2014 - All Rights Reserved #-# Joram Berger <*****@*****.**> #-# Roger Wolf <*****@*****.**> import FWCore.ParameterSet.Config as cms import Kappa.Skimming.tools as tools cmssw_version_number = tools.get_cmssw_version_number() ## ------------------------------------------------------------------------ ## Good offline PV selection: from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector goodOfflinePrimaryVertices = cms.EDFilter('PrimaryVertexObjectFilter', src = cms.InputTag('offlinePrimaryVertices'), filterParams = pvSelector.clone( minNdof = 4.0, maxZ = 24.0 ), ) goodOfflinePrimaryVertexEvents = cms.EDFilter("KVertexFilter", minNumber = cms.uint32(1), maxNumber = cms.uint32(999999), src = cms.InputTag("goodOfflinePrimaryVertices") ) ## ------------------------------------------------------------------------ ## TopProjections from CommonTools/ParticleFlow: from CommonTools.ParticleFlow.PFBRECO_cff import * if (cmssw_version_number.startswith("7_4")): from CommonTools.ParticleFlow.pfParticleSelection_cff import * ## pf candidate configuration for everything but CHS jets
def getBaseConfig(globaltag, testfile="", maxevents=0, datatype='data'): """Default config for Z+jet skims with Kappa This is used in a cmssw config file via: import skim_base process = skim_base.getBaseConfig('START53_V12', "testfile.root") """ # Set the globalt tag and datatype for testing or by grid-control --------- data = (datatype == 'data') if data: testfile = 'file:/storage/8/dhaitz/testfiles/data_AOD_2012A.root' if '@' in globaltag: globaltag = 'FT53_V21A_AN6' maxevents = maxevents or 100 else: testfile = 'file:/storage/8/dhaitz/testfiles/rundepMC.root' if '@' in globaltag: globaltag = 'START53_V19F' maxevents = maxevents or 100 datatype = 'mc' print "GT:", globaltag, "| TYPE:", datatype, "| maxevents:", maxevents, "| file:", testfile # Basic process setup ----------------------------------------------------- process = cms.Process('kappaSkim') process.source = cms.Source('PoolSource', fileNames = cms.untracked.vstring(testfile)) process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(maxevents)) # Includes + Global Tag --------------------------------------------------- process.load('FWCore.MessageService.MessageLogger_cfi') process.load('Configuration.StandardSequences.Services_cff') process.load('Configuration.StandardSequences.MagneticField_38T_cff') process.load('Configuration.Geometry.GeometryIdeal_cff') process.load('Configuration.Geometry.GeometryPilot2_cff') process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAny_cfi') process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi') process.load('TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi') process.load('RecoMuon.DetLayers.muonDetLayerGeometry_cfi') process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') process.load('Configuration.StandardSequences.Reconstruction_cff') process.GlobalTag.globaltag = globaltag + '::All' # Reduce amount of messages ----------------------------------------------- process.MessageLogger.default = cms.untracked.PSet( ERROR = cms.untracked.PSet(limit = cms.untracked.int32(5))) process.MessageLogger.cerr.FwkReport.reportEvery = 40 # Produce PF muon isolation ----------------------------------------------- from CommonTools.ParticleFlow.Isolation.tools_cfi import isoDepositReplace process.pfmuIsoDepositPFCandidates = isoDepositReplace('muons', 'particleFlow') process.pfMuonIso = cms.Path(process.pfmuIsoDepositPFCandidates) # Create good primary vertices to be used for PF association -------------- from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter("PrimaryVertexObjectFilter", filterParams = pvSelector.clone(minNdof = cms.double(4.0), maxZ = cms.double(24.0)), src=cms.InputTag('offlinePrimaryVertices') ) process.ak5PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices') process.ak7PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices') process.kt4PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices') process.kt6PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices') # CHS Jets with the NoPU sequence ----------------------------------------- process.load('CommonTools.ParticleFlow.PFBRECO_cff') process.pfPileUp.Vertices = cms.InputTag('goodOfflinePrimaryVertices') process.pfPileUp.checkClosestZVertex = cms.bool(False) process.pfCHS = cms.Path(process.goodOfflinePrimaryVertices * process.PFBRECO) process.ak5PFJetsCHS = process.ak5PFJets.clone(src = cms.InputTag('pfNoPileUp')) process.ak7PFJetsCHS = process.ak7PFJets.clone(src = cms.InputTag('pfNoPileUp')) process.kt4PFJetsCHS = process.kt4PFJets.clone(src = cms.InputTag('pfNoPileUp')) process.kt6PFJetsCHS = process.kt6PFJets.clone(src = cms.InputTag('pfNoPileUp')) # Gen Jets without neutrinos ---------------------------------------------- if datatype == 'mc': process.load('RecoJets.JetProducers.ak5GenJets_cfi') process.NoNuGenJets = cms.Path(process.genParticlesForJetsNoNu * process.genParticlesForJets * process.ak5GenJetsNoNu * process.ak7GenJetsNoNu * process.kt4GenJetsNoNu * process.kt4GenJets * process.kt6GenJetsNoNu * process.kt6GenJets ) # Path to Redo all Jets --------------------------------------------------- process.jetsRedo = cms.Path( process.ak5PFJets * process.ak7PFJets * process.kt4PFJets * process.kt6PFJets * process.ak5PFJetsCHS * process.ak7PFJetsCHS * process.kt4PFJetsCHS * process.kt6PFJetsCHS ) # MET filters ------------------------------------------------------------- process.load('RecoMET.METFilters.ecalLaserCorrFilter_cfi') # Create good vertices for the trackingFailure MET filter process.goodVertices = cms.EDFilter("VertexSelector", filter = cms.bool(False), src = cms.InputTag("offlinePrimaryVertices"), cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.rho < 2"), ) # The good primary vertex filter for other MET filters process.primaryVertexFilter = cms.EDFilter("VertexSelector", filter = cms.bool(True), src = cms.InputTag("offlinePrimaryVertices"), cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"), ) process.noscraping = cms.EDFilter("FilterOutScraping", applyfilter = cms.untracked.bool(True), debugOn = cms.untracked.bool(False), numtrack = cms.untracked.uint32(10), thresh = cms.untracked.double(0.25) ) process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi') process.load('RecoMET.METAnalyzers.CSCHaloFilter_cfi') process.load('RecoMET.METFilters.hcalLaserEventFilter_cfi') process.hcalLaserEventFilter.vetoByRunEventNumber = cms.untracked.bool(False) process.hcalLaserEventFilter.vetoByHBHEOccupancy = cms.untracked.bool(True) process.load('RecoMET.METFilters.EcalDeadCellTriggerPrimitiveFilter_cfi') process.EcalDeadCellTriggerPrimitiveFilter.tpDigiCollection = cms.InputTag("ecalTPSkimNA") process.load('RecoMET.METFilters.EcalDeadCellBoundaryEnergyFilter_cfi') process.load('RecoMET.METFilters.eeBadScFilter_cfi') process.load('RecoMET.METFilters.eeNoiseFilter_cfi') process.load('RecoMET.METFilters.ecalLaserCorrFilter_cfi') process.load('RecoMET.METFilters.trackingFailureFilter_cfi') process.load('RecoMET.METFilters.inconsistentMuonPFCandidateFilter_cfi') process.load('RecoMET.METFilters.greedyMuonPFCandidateFilter_cfi') process.hcalLaserEventFilter.taggingMode = cms.bool(True) process.EcalDeadCellTriggerPrimitiveFilter.taggingMode = cms.bool(True) process.EcalDeadCellBoundaryEnergyFilter.taggingMode = cms.bool(True) process.trackingFailureFilter.taggingMode = cms.bool(True) process.eeBadScFilter.taggingMode = cms.bool(True) process.eeNoiseFilter.taggingMode = cms.bool(True) process.ecalLaserCorrFilter.taggingMode = cms.bool(True) process.trackingFailureFilter.taggingMode = cms.bool(True) process.inconsistentMuonPFCandidateFilter.taggingMode = cms.bool(True) process.greedyMuonPFCandidateFilter.taggingMode = cms.bool(True) process.beamScrapingFilter = process.inconsistentMuonPFCandidateFilter.clone( ptMin = cms.double(5000.0) ) process.hcalNoiseFilter = process.beamScrapingFilter.clone() process.beamHaloFilter = process.beamScrapingFilter.clone() process.filtersSeq = cms.Sequence( process.primaryVertexFilter * process.hcalLaserEventFilter + process.EcalDeadCellTriggerPrimitiveFilter + process.EcalDeadCellBoundaryEnergyFilter + process.eeBadScFilter + process.eeNoiseFilter + process.ecalLaserCorrFilter + process.goodVertices * process.trackingFailureFilter + process.inconsistentMuonPFCandidateFilter + process.greedyMuonPFCandidateFilter + process.noscraping * process.beamScrapingFilter + process.HBHENoiseFilter * process.hcalNoiseFilter + process.CSCTightHaloFilter * process.beamHaloFilter ) process.metFilters = cms.Path(process.filtersSeq) # MET correction ---------------------------------------------------------- process.load("JetMETCorrections.Type1MET.pfMETCorrections_cff") process.pfchsMETcorr.src = cms.InputTag('goodOfflinePrimaryVertices') # Type-0 process.pfMETCHS = process.pfType1CorrectedMet.clone( applyType1Corrections = cms.bool(False), applyType0Corrections = cms.bool(True) ) # MET Path process.metCorrections = cms.Path( process.producePFMETCorrections * process.pfMETCHS ) # Require two good muons -------------------------------------------------- process.goodMuons = cms.EDFilter('CandViewSelector', src = cms.InputTag('muons'), cut = cms.string("pt > 12.0 & abs(eta) < 8.0 & isGlobalMuon()"), ) process.twoGoodMuons = cms.EDFilter('CandViewCountFilter', src = cms.InputTag('goodMuons'), minNumber = cms.uint32(2), ) # Configure tuple generation ---------------------------------------------- process.load('Kappa.Producers.KTuple_cff') process.kappatuple = cms.EDAnalyzer('KTuple', process.kappaTupleDefaultsBlock, outputFile = cms.string("skim_" + datatype + "_no-tagging.root"), ) process.kappatuple.verbose = cms.int32(0) process.kappatuple.active = cms.vstring( 'LV', 'Muons', 'TrackSummary', 'VertexSummary', 'BeamSpot', 'JetArea', 'PFMET', 'PFJets', 'FilterSummary', ) if data: additional_actives = ['DataMetadata'] else: additional_actives = ['GenMetadata', 'GenParticles'] for active in additional_actives: process.kappatuple.active.append(active) # custom whitelist, otherwise the HLT trigger bits are not sufficient! process.kappatuple.Metadata.hltWhitelist = cms.vstring( # matches 'HLT_Mu17_Mu8_v7' etc. "^HLT_(Double)?Mu([0-9]+)_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$", # matches 'HLT_DoubleMu7_v8' etc. "^HLT_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$", ) process.kappatuple.Metadata.tauDiscrProcessName = cms.untracked.string("XXXXXXXXX") process.kappatuple.GenParticles.genParticles.selectedStatus = cms.int32(31) # use the good objects not temporary ones process.kappatuple.VertexSummary.whitelist = cms.vstring(".*fflinePrimaryVertices") process.kappatuple.VertexSummary.blacklist += cms.vstring(".*QG.*") process.kappatuple.LV.whitelist += cms.vstring("recoCaloJets.*") process.kappatuple.LV.blacklist += cms.vstring("AK5TrackJets", ".*KT.*") process.kappatuple.PFJets.whitelist = cms.vstring("recoPFJets.*kappaSkim") process.kappatuple.PFMET.blacklist = cms.vstring("pfType1.*CorrectedMet") process.kappatuple.PFJets.blacklist = cms.vstring(".*Tau.*", "recoPFJets_pfJets.*kappaSkim", ".*QG.*", ".*KT.*") del process.kappatuple.GenParticles.genStableMuons process.pathKappa = cms.Path( process.goodMuons * process.twoGoodMuons * process.kappatuple ) # Process schedule -------------------------------------------------------- process.schedule = cms.Schedule( process.metFilters, process.pfCHS, process.jetsRedo, process.pfMuonIso, process.metCorrections, process.pathKappa, ) if not data: process.schedule.insert(0, process.NoNuGenJets) return process
def getBaseConfig(globaltag, testfile="", maxevents=0, datatype='data'): """Default config for Z+jet skims with Kappa This is used in a cmssw config file via: import skim_base process = skim_base.getBaseConfig('START53_V12', "testfile.root") """ # Set the globalt tag and datatype for testing or by grid-control --------- data = (datatype == 'data') if data: testfile = 'file:/storage/8/dhaitz/testfiles/data_AOD_2012A.root' if '@' in globaltag: globaltag = 'FT53_V21A_AN6' maxevents = maxevents or 100 else: testfile = 'file:/storage/8/dhaitz/testfiles/rundepMC.root' if '@' in globaltag: globaltag = 'START53_V19F' maxevents = maxevents or 100 datatype = 'mc' print "GT:", globaltag, "| TYPE:", datatype, "| maxevents:", maxevents, "| file:", testfile # Basic process setup ----------------------------------------------------- process = cms.Process('kappaSkim') process.source = cms.Source('PoolSource', fileNames=cms.untracked.vstring(testfile)) process.maxEvents = cms.untracked.PSet( input=cms.untracked.int32(maxevents)) # Includes + Global Tag --------------------------------------------------- process.load('FWCore.MessageService.MessageLogger_cfi') process.load('Configuration.StandardSequences.Services_cff') process.load('Configuration.StandardSequences.MagneticField_38T_cff') process.load('Configuration.Geometry.GeometryIdeal_cff') process.load('Configuration.Geometry.GeometryPilot2_cff') process.load( 'TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAny_cfi' ) process.load( 'TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi' ) process.load( 'TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi' ) process.load('RecoMuon.DetLayers.muonDetLayerGeometry_cfi') process.load( 'Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') process.load('Configuration.StandardSequences.Reconstruction_cff') process.GlobalTag.globaltag = globaltag + '::All' # Reduce amount of messages ----------------------------------------------- process.MessageLogger.default = cms.untracked.PSet( ERROR=cms.untracked.PSet(limit=cms.untracked.int32(5))) process.MessageLogger.cerr.FwkReport.reportEvery = 40 # Produce PF muon isolation ----------------------------------------------- from CommonTools.ParticleFlow.Isolation.tools_cfi import isoDepositReplace process.pfmuIsoDepositPFCandidates = isoDepositReplace( 'muons', 'particleFlow') process.pfMuonIso = cms.Path(process.pfmuIsoDepositPFCandidates) # Create good primary vertices to be used for PF association -------------- from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams=pvSelector.clone(minNdof=cms.double(4.0), maxZ=cms.double(24.0)), src=cms.InputTag('offlinePrimaryVertices')) process.ak5PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices') process.ak7PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices') process.kt4PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices') process.kt6PFJets.srcPVs = cms.InputTag('goodOfflinePrimaryVertices') # CHS Jets with the NoPU sequence ----------------------------------------- process.load('CommonTools.ParticleFlow.PFBRECO_cff') process.pfPileUp.Vertices = cms.InputTag('goodOfflinePrimaryVertices') process.pfPileUp.checkClosestZVertex = cms.bool(False) process.pfCHS = cms.Path(process.goodOfflinePrimaryVertices * process.PFBRECO) process.ak5PFJetsCHS = process.ak5PFJets.clone( src=cms.InputTag('pfNoPileUp')) process.ak7PFJetsCHS = process.ak7PFJets.clone( src=cms.InputTag('pfNoPileUp')) process.kt4PFJetsCHS = process.kt4PFJets.clone( src=cms.InputTag('pfNoPileUp')) process.kt6PFJetsCHS = process.kt6PFJets.clone( src=cms.InputTag('pfNoPileUp')) # Gen Jets without neutrinos ---------------------------------------------- if datatype == 'mc': process.load('RecoJets.JetProducers.ak5GenJets_cfi') process.NoNuGenJets = cms.Path( process.genParticlesForJetsNoNu * process.genParticlesForJets * process.ak5GenJetsNoNu * process.ak7GenJetsNoNu * process.kt4GenJetsNoNu * process.kt4GenJets * process.kt6GenJetsNoNu * process.kt6GenJets) # Path to Redo all Jets --------------------------------------------------- process.jetsRedo = cms.Path(process.ak5PFJets * process.ak7PFJets * process.kt4PFJets * process.kt6PFJets * process.ak5PFJetsCHS * process.ak7PFJetsCHS * process.kt4PFJetsCHS * process.kt6PFJetsCHS) # MET filters ------------------------------------------------------------- process.load('RecoMET.METFilters.ecalLaserCorrFilter_cfi') # Create good vertices for the trackingFailure MET filter process.goodVertices = cms.EDFilter( "VertexSelector", filter=cms.bool(False), src=cms.InputTag("offlinePrimaryVertices"), cut=cms.string( "!isFake && ndof > 4 && abs(z) <= 24 && position.rho < 2"), ) # The good primary vertex filter for other MET filters process.primaryVertexFilter = cms.EDFilter( "VertexSelector", filter=cms.bool(True), src=cms.InputTag("offlinePrimaryVertices"), cut=cms.string( "!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"), ) process.noscraping = cms.EDFilter("FilterOutScraping", applyfilter=cms.untracked.bool(True), debugOn=cms.untracked.bool(False), numtrack=cms.untracked.uint32(10), thresh=cms.untracked.double(0.25)) process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi') process.load('RecoMET.METAnalyzers.CSCHaloFilter_cfi') process.load('RecoMET.METFilters.hcalLaserEventFilter_cfi') process.hcalLaserEventFilter.vetoByRunEventNumber = cms.untracked.bool( False) process.hcalLaserEventFilter.vetoByHBHEOccupancy = cms.untracked.bool(True) process.load('RecoMET.METFilters.EcalDeadCellTriggerPrimitiveFilter_cfi') process.EcalDeadCellTriggerPrimitiveFilter.tpDigiCollection = cms.InputTag( "ecalTPSkimNA") process.load('RecoMET.METFilters.EcalDeadCellBoundaryEnergyFilter_cfi') process.load('RecoMET.METFilters.eeBadScFilter_cfi') process.load('RecoMET.METFilters.eeNoiseFilter_cfi') process.load('RecoMET.METFilters.ecalLaserCorrFilter_cfi') process.load('RecoMET.METFilters.trackingFailureFilter_cfi') process.load('RecoMET.METFilters.inconsistentMuonPFCandidateFilter_cfi') process.load('RecoMET.METFilters.greedyMuonPFCandidateFilter_cfi') process.hcalLaserEventFilter.taggingMode = cms.bool(True) process.EcalDeadCellTriggerPrimitiveFilter.taggingMode = cms.bool(True) process.EcalDeadCellBoundaryEnergyFilter.taggingMode = cms.bool(True) process.trackingFailureFilter.taggingMode = cms.bool(True) process.eeBadScFilter.taggingMode = cms.bool(True) process.eeNoiseFilter.taggingMode = cms.bool(True) process.ecalLaserCorrFilter.taggingMode = cms.bool(True) process.trackingFailureFilter.taggingMode = cms.bool(True) process.inconsistentMuonPFCandidateFilter.taggingMode = cms.bool(True) process.greedyMuonPFCandidateFilter.taggingMode = cms.bool(True) process.beamScrapingFilter = process.inconsistentMuonPFCandidateFilter.clone( ptMin=cms.double(5000.0)) process.hcalNoiseFilter = process.beamScrapingFilter.clone() process.beamHaloFilter = process.beamScrapingFilter.clone() process.filtersSeq = cms.Sequence( process.primaryVertexFilter * process.hcalLaserEventFilter + process.EcalDeadCellTriggerPrimitiveFilter + process.EcalDeadCellBoundaryEnergyFilter + process.eeBadScFilter + process.eeNoiseFilter + process.ecalLaserCorrFilter + process.goodVertices * process.trackingFailureFilter + process.inconsistentMuonPFCandidateFilter + process.greedyMuonPFCandidateFilter + process.noscraping * process.beamScrapingFilter + process.HBHENoiseFilter * process.hcalNoiseFilter + process.CSCTightHaloFilter * process.beamHaloFilter) process.metFilters = cms.Path(process.filtersSeq) # MET correction ---------------------------------------------------------- process.load("JetMETCorrections.Type1MET.pfMETCorrections_cff") process.pfchsMETcorr.src = cms.InputTag('goodOfflinePrimaryVertices') # Type-0 process.pfMETCHS = process.pfType1CorrectedMet.clone( applyType1Corrections=cms.bool(False), applyType0Corrections=cms.bool(True)) # MET Path process.metCorrections = cms.Path(process.producePFMETCorrections * process.pfMETCHS) # Require two good muons -------------------------------------------------- process.goodMuons = cms.EDFilter( 'CandViewSelector', src=cms.InputTag('muons'), cut=cms.string("pt > 12.0 & abs(eta) < 8.0 & isGlobalMuon()"), ) process.twoGoodMuons = cms.EDFilter( 'CandViewCountFilter', src=cms.InputTag('goodMuons'), minNumber=cms.uint32(2), ) # Configure tuple generation ---------------------------------------------- process.load('Kappa.Producers.KTuple_cff') process.kappatuple = cms.EDAnalyzer( 'KTuple', process.kappaTupleDefaultsBlock, outputFile=cms.string("skim_" + datatype + "_no-tagging.root"), ) process.kappatuple.verbose = cms.int32(0) process.kappatuple.active = cms.vstring( 'LV', 'Muons', 'TrackSummary', 'VertexSummary', 'BeamSpot', 'JetArea', 'PFMET', 'PFJets', 'FilterSummary', ) if data: additional_actives = ['DataMetadata'] else: additional_actives = ['GenMetadata', 'GenParticles'] for active in additional_actives: process.kappatuple.active.append(active) # custom whitelist, otherwise the HLT trigger bits are not sufficient! process.kappatuple.Metadata.hltWhitelist = cms.vstring( # matches 'HLT_Mu17_Mu8_v7' etc. "^HLT_(Double)?Mu([0-9]+)_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$", # matches 'HLT_DoubleMu7_v8' etc. "^HLT_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$", ) process.kappatuple.Metadata.tauDiscrProcessName = cms.untracked.string( "XXXXXXXXX") process.kappatuple.GenParticles.genParticles.selectedStatus = cms.int32(31) # use the good objects not temporary ones process.kappatuple.VertexSummary.whitelist = cms.vstring( ".*fflinePrimaryVertices") process.kappatuple.VertexSummary.blacklist += cms.vstring(".*QG.*") process.kappatuple.LV.whitelist += cms.vstring("recoCaloJets.*") process.kappatuple.LV.blacklist += cms.vstring("AK5TrackJets", ".*KT.*") process.kappatuple.PFJets.whitelist = cms.vstring("recoPFJets.*kappaSkim") process.kappatuple.PFMET.blacklist = cms.vstring("pfType1.*CorrectedMet") process.kappatuple.PFJets.blacklist = cms.vstring( ".*Tau.*", "recoPFJets_pfJets.*kappaSkim", ".*QG.*", ".*KT.*") del process.kappatuple.GenParticles.genStableMuons process.pathKappa = cms.Path(process.goodMuons * process.twoGoodMuons * process.kappatuple) # Process schedule -------------------------------------------------------- process.schedule = cms.Schedule( process.metFilters, process.pfCHS, process.jetsRedo, process.pfMuonIso, process.metCorrections, process.pathKappa, ) if not data: process.schedule.insert(0, process.NoNuGenJets) return process
#doL1Counters=False, #doJetID = False, #genJetCollection = cms.InputTag("ak10GenJetsNoNu") #) #This line adds the tagInfos for the jet collection with label = 'selectedPatJetsPFlow'. #A similar line is needed for each jet collection! process.patJetsAK5PF.addTagInfos = cms.bool(True) process.patJetsPFlow.addTagInfos = cms.bool(True) ## Produce a collection of good primary vertices from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter("PrimaryVertexObjectFilter", filterParams = pvSelector.clone( minNdof = cms.double(4.0), # this is >= 4 maxZ = cms.double(24.0), maxRho = cms.double(2.0) ), src = cms.InputTag('offlinePrimaryVertices') ) ## Prune GenParticles process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") process.prunedGenParticles = cms.EDProducer("GenParticlePruner", src = cms.InputTag("genParticles"), select = cms.vstring( "drop *", "keep status = 3", # keeps particles from the hard matrix element "keep (abs(pdgId) >= 11 & abs(pdgId) <= 16) & status = 1", # keeps e/mu and nus with status 1 "keep (abs(pdgId) = 15) & status = 3", # keeps taus "++keep (abs(pdgId) = 5)" # keeps all b quarks and all their ancestors
def configure(process, options): """Apply configuration to a process.""" # create the main module path process.add_path('path') # enable the JSON filter (if given) if options.jsonFilterFile: process.enable_json_lumi_filter(options.jsonFilterFile) # == configure CMSSW modules ========================================== # -- Jets (default from miniAOD) -------------------------------------- if options.withPATCollections: # just write out miniAOD jets process.add_output_commands( 'keep patJets_slimmedJets_*_*', 'keep patJets_slimmedJetsAK8_*_*', ) # -- Jets (from miniAOD, but with possibly new JECs from GT) ---------- from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection updateJetCollection( process, jetSource = cms.InputTag('slimmedJets'), labelName = 'UpdatedJEC', jetCorrections = ('AK4PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual']), 'None') # Update: Safe to always add 'L2L3Residual' as MC contains dummy L2L3Residual corrections (always set to 1) ) updateJetCollection( process, jetSource = cms.InputTag('slimmedJetsAK8'), labelName = 'UpdatedJECAK8', jetCorrections = ('AK8PFchs', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual']), 'None') # Update: Safe to always add 'L2L3Residual' as MC contains dummy L2L3Residual corrections (always set to 1) ) process.jecSequence = cms.Sequence(process.patJetCorrFactorsUpdatedJEC * process.updatedPatJetsUpdatedJEC) process.jecSequenceAK8 = cms.Sequence(process.patJetCorrFactorsUpdatedJECAK8 * process.updatedPatJetsUpdatedJECAK8) process.path *= process.jecSequence process.path *= process.jecSequenceAK8 if options.withPATCollections: process.add_output_commands( 'keep patJets_updatedPatJetsUpdatedJEC_*_*', 'keep patJets_updatedPatJetsUpdatedJECAK8_*_*', ) # -- Jets (reclustered with jet toolbox) ------------------------------ from Karma.Common.Sequences.jetToolbox_cff import addJetToolboxSequences # create reclustering sequences jet_collection_names = [] # AK4CHS jets (include pileupJetID) jet_collection_names += addJetToolboxSequences( process, isData=options.isData, min_jet_pt=15, jet_algorithm_specs=('ak4',), pu_subtraction_methods=('CHS',), do_pu_jet_id=True ) # AK8CHS jets (no pileupJetID available) jet_collection_names += addJetToolboxSequences( process, isData=options.isData, min_jet_pt=15, jet_algorithm_specs=('ak8',), pu_subtraction_methods=('CHS',), do_pu_jet_id=False ) # AK4Puppi and AK8Puppi jets jet_collection_names += addJetToolboxSequences( process, isData=options.isData, min_jet_pt=15, jet_algorithm_specs=('ak4', 'ak8',), pu_subtraction_methods=('Puppi',), do_pu_jet_id=False ) # put reclustering sequences on path for _jet_collection_name in jet_collection_names: process.path *= getattr(process, _jet_collection_name) ## write out reclustered jets #process.add_output_commands('keep patJets_{}_*_*'.format(_jet_collection_name)) # -- Jet ID (precomputed and embedded as userInts) ------------------- for _jet_collection_name in jet_collection_names: _id_producer_name = "{}IDValueMap".format(_jet_collection_name) _enriched_jet_collection_name = "{}WithJetIDUserData".format(_jet_collection_name) # produce the jet id value map setattr( process, _id_producer_name, cms.EDProducer("PatJetIDValueMapProducer", filterParams = cms.PSet( version = cms.string('WINTER16'), quality = cms.string('TIGHTLEPVETO'), ), src = cms.InputTag(_jet_collection_name) ) ) # embed jet id information in pat::Jet itprocess setattr( process, _enriched_jet_collection_name, cms.EDProducer("PATJetUserDataEmbedder", src = cms.InputTag(_jet_collection_name), userInts = cms.PSet( jetIdWinter16TightLepVeto = cms.InputTag(_id_producer_name), ), ) ) # add modules to path process.path *= getattr(process, _id_producer_name) process.path *= getattr(process, _enriched_jet_collection_name) # write out ID-enriched jet collection if options.withPATCollections: process.add_output_commands( 'keep patJets_{}_*_*'.format(_enriched_jet_collection_name) ) # -- MET -------------------------------------------------------------- from PhysicsTools.PatUtils.tools.runMETCorrectionsAndUncertainties import runMetCorAndUncFromMiniAOD # run this to keep MET Type-I correction up-to-date with currently applied JECs runMetCorAndUncFromMiniAOD( process, isData=True, ) process.path *= process.fullPatMetSequence if options.withPATCollections: process.add_output_commands( 'keep patMETs_slimmedMETs_*_*', ) # -- Electrons -------------------------------------------------------- # just write out miniAOD electrons if options.withPATCollections: process.add_output_commands( "keep patElectrons_slimmedElectrons_*_*", ) # Note: electron scale/smearing correction information is contained in # the following userFloats: 'ecalEnergyPreCorr' and 'ecalEnergyPostCorr' # Note: electron ID information is stored as "pseudo-userData" in # PAT::Electrons (not in the inherited PAT::Object userData variables) # and can be accessed using PAT::Electrons::electronID() with the # corresponding tag (e.g. 'cutBasedElectronID-Summer16-80X-V1-loose') # -- Muons ------------------------------------------------------------ # just write out miniAOD muons if options.withPATCollections: process.add_output_commands( "keep patMuons_slimmedMuons_*_*", ) # -- Primary Vertices ------------------------------------------------- from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector # "good" primary vertices process.add_module( 'goodOfflinePrimaryVertices', cms.EDFilter( 'PrimaryVertexObjectFilter', src = cms.InputTag("offlineSlimmedPrimaryVertices"), filterParams = pvSelector.clone( maxZ = 24.0 ), # ndof >= 4, rho <= 2 ), on_path='path', write_out=False, ) # == END configure CMSSW modules ====================================== # == configure Karma modules ========================================== # -- preliminary checks if options.useHLTFilter and not options.hltRegexes: raise ValueError( "Option 'useHLTFilter' is true, but 'hltRegexes' " "is empty: no events would be written out. Aborting!") elif not options.hltRegexes: print("[karmaSkim] WARNING: Option 'hltRegexes' is empty:" "no trigger information will be written out!") # -- General Event Information ---------------------------------------- from Karma.Skimming.EventProducer_cfi import karmaEventProducer process.add_module( 'karmaEvents', karmaEventProducer(isData=options.isData).clone( goodPrimaryVerticesSrc = cms.InputTag("goodOfflinePrimaryVertices"), hltProcessName = cms.string("HLT"), # interesting trigger paths must match one of these regexes: hltRegexes = cms.vstring(*options.hltRegexes), #hltRegexes = cms.vstring("HLT_(AK8)?PFJet[0-9]+_v[0-9]+", "HLT_DiPFJetAve[0-9]+_v[0-9]+"), metFiltersSrc = cms.InputTag("TriggerResults", "", options.metFiltersProcess), ), on_path='path', write_out=True, ) # filter out event if no interesting HLT path fired (if requested) if options.useHLTFilter: process.add_module( 'karmaEventHLTFilter', cms.EDFilter("EventHLTFilter", cms.PSet( karmaEventSrc = cms.InputTag("karmaEvents") ) ), on_path='path', write_out=False, # don't write out the TriggerResults object ) # -- MC-specific event information ------------------------------------ if not options.isData: from Karma.Skimming.GeneratorQCDInfoProducer_cfi import karmaGeneratorQCDInfoProducer process.add_module( 'karmaGeneratorQCDInfos', karmaGeneratorQCDInfoProducer.clone( genEventInfoProductSrc = cms.InputTag("generator"), ), on_path='path', write_out=True, ) # -- Trigger Objects -------------------------------------------------- from Karma.Skimming.TriggerObjectCollectionProducer_cfi import karmaTriggerObjectCollectionProducer process.add_module( 'karmaTriggerObjects', karmaTriggerObjectCollectionProducer.clone( karmaRunSrc = cms.InputTag("karmaEvents"), ), on_path='path', write_out=True, ) # -- Gen-Particles (MC only) ------------------------------------------ if not options.isData: from Karma.Skimming.GenParticleCollectionProducer_cfi import karmaGenParticleCollectionProducer process.add_module( 'karmaGenParticles', karmaGenParticleCollectionProducer.clone( inputCollection = cms.InputTag("prunedGenParticles"), ), on_path='path', write_out=True, ) # -- MET -------------------------------------------------------------- from Karma.Skimming.METCollectionProducer_cfi import karmaMETCollectionProducer process.add_module( 'karmaMETs', karmaMETCollectionProducer.clone( inputCollection = cms.InputTag("slimmedMETs"), ), on_path='path', write_out=True, ) # -- MET correction levels (as edm::ValueMaps) ------------------------ if options.withMETCorrectionLevels: from Karma.Skimming.METCorrectedLVValueMapProducer_cfi import karmaMETCorrectedLVValueMapProducer process.add_module( 'karmaMETCorrectedLVs', karmaMETCorrectedLVValueMapProducer.clone( inputCollection = cms.InputTag("karmaMETs"), associationSpec = cms.VPSet( # uncorrected MET cms.PSet( name = cms.string("Raw"), transientMapKey = cms.string("corP4Raw"), ), # uncorrected MET (from CHS candidates) cms.PSet( name = cms.string("RawCHS"), transientMapKey = cms.string("corP4RawCHS"), ), # uncorrected MET cms.PSet( name = cms.string("Type1"), transientMapKey = cms.string("corP4Type1"), ), ) ), on_path='path', write_out=True, ) from Karma.Skimming.METCorrectedSumEtValueMapProducer_cfi import karmaMETCorrectedSumEtValueMapProducer process.add_module( 'karmaMETCorrectedSumEts', karmaMETCorrectedSumEtValueMapProducer.clone( inputCollection = cms.InputTag("karmaMETs"), associationSpec = cms.VPSet( # uncorrected MET cms.PSet( name = cms.string("Raw"), transientMapKey = cms.string("corSumEtRaw"), ), # uncorrected MET (from CHS candidates) cms.PSet( name = cms.string("RawCHS"), transientMapKey = cms.string("corSumEtRawCHS"), ), # uncorrected MET cms.PSet( name = cms.string("Type1"), transientMapKey = cms.string("corSumEtType1"), ), ) ), on_path='path', write_out=True, ) # -- Jets ------------------------------------------------------------- from Karma.Skimming.JetCollectionProducer_cfi import karmaJets from Karma.Skimming.JetCorrectedLVValueMapProducer_cfi import karmaJetCorrectedLVValueMapProducer, karmaJetCorrectedLVValueMapProducerForPuppi from Karma.Skimming.JetIdValueMapProducers_cfi import karmaJetIdValueMapProducer, karmaJetPileupIdValueMapProducer, karmaJetPileupIdDiscriminantValueMapProducer # create "karma::Jet" collections from pat::Jets for _jet_collection_name in jet_collection_names: # add karma modules for producing the skimmed jet collections _module_name = "karma{}{}".format(_jet_collection_name[0].upper(), _jet_collection_name[1:]) process.add_module( _module_name, karmaJets.clone( inputCollection = cms.InputTag("{}WithJetIDUserData".format(_jet_collection_name)), ), on_path='path', write_out=True, ) # write out jet ID information to transients (used to fill value maps) _t = getattr(process, _module_name).transientInformationSpec _t.fromUserIntAsBool = cms.PSet( jetIdWinter16TightLepVeto = cms.string("jetIdWinter16TightLepVeto"), ) if 'AK4PFCHS' in _jet_collection_name: _t.fromUserFloat = cms.PSet( pileupJetId = cms.string("AK4PFCHSpileupJetIdEvaluator:fullDiscriminant"), ) _t.fromUserInt = cms.PSet( pileupJetId = cms.string("AK4PFCHSpileupJetIdEvaluator:fullId"), ) # add karma module for producing the Jet ID value map _valuemap_module_name = "karma{}{}JetIds".format(_jet_collection_name[0].upper(), _jet_collection_name[1:]) process.add_module( _valuemap_module_name, karmaJetIdValueMapProducer.clone( inputCollection = cms.InputTag(_module_name), ), on_path='path', write_out=True, ) # add karma modules for producing the pileup jet ID value maps (AK4CHS-only) if 'AK4PFCHS' in _jet_collection_name: _valuemap_module_name = "karma{}{}JetPileupIds".format(_jet_collection_name[0].upper(), _jet_collection_name[1:]) process.add_module( _valuemap_module_name, karmaJetPileupIdValueMapProducer.clone( inputCollection = cms.InputTag(_module_name), ), on_path='path', write_out=True, ) _valuemap_module_name = "karma{}{}JetPileupIdDiscriminants".format(_jet_collection_name[0].upper(), _jet_collection_name[1:]) process.add_module( _valuemap_module_name, karmaJetPileupIdDiscriminantValueMapProducer.clone( inputCollection = cms.InputTag(_module_name), ), on_path='path', write_out=True, ) if 'Puppi' in _jet_collection_name: _valuemap_producer = karmaJetCorrectedLVValueMapProducerForPuppi else: _valuemap_producer = karmaJetCorrectedLVValueMapProducer # add karma modules for producing the correction level value maps _valuemap_module_name = "karma{}{}JECs".format(_jet_collection_name[0].upper(), _jet_collection_name[1:]) process.add_module( _valuemap_module_name, _valuemap_producer.clone( inputCollection = cms.InputTag(_module_name), ), on_path='path', write_out=True, ) # -- Gen-Jets --------------------------------------------------------- if not options.isData: from Karma.Skimming.GenJetCollectionProducer_cfi import karmaGenJetsAK4, karmaGenJetsAK8 process.add_module( 'karmaGenJetsAK4', karmaGenJetsAK4.clone( inputCollection = cms.InputTag("ak4GenJetsNoNu"), ), on_path='path', write_out=True, ) process.add_module( 'karmaGenJetsAK8', karmaGenJetsAK8.clone( inputCollection = cms.InputTag("ak8GenJetsNoNu"), ), on_path='path', write_out=True, ) # -- Electrons -------------------------------------------------------- from Karma.Skimming.ElectronCollectionProducer_cfi import karmaElectronCollectionProducer process.add_module( 'karmaElectrons', karmaElectronCollectionProducer.clone(), on_path='path', write_out=True, ) # -- Electron IDs ----------------------------------------------------- from Karma.Skimming.ElectronIdValueMapProducer_cfi import karmaElectronIdValueMapProducer process.add_module( 'karmaElectronIds', karmaElectronIdValueMapProducer.clone( inputCollection = cms.InputTag("karmaElectrons") ), on_path='path', write_out=True ) # -- Muons ------------------------------------------------------------ from Karma.Skimming.MuonCollectionProducer_cfi import karmaMuonCollectionProducer process.add_module( 'karmaMuons', karmaMuonCollectionProducer.clone(), on_path='path', write_out=True, ) # -- Primary Vertices ------------------------------------------------- from Karma.Skimming.VertexCollectionProducer_cfi import karmaVertexCollectionProducer process.add_module( 'karmaVertices', karmaVertexCollectionProducer.clone(), on_path='path', write_out=True, ) # == END configure Karma modules ====================================== # selective writeout based on path decisions process.enable_selective_writeout('path') # just in case we need it return process
def getBaseConfig(globaltag, testfile="", maxevents=0, datatype="data"): """Default config for Z+jet skims with Kappa This is used in a cmssw config file via: import skim_base process = skim_base.getBaseConfig('START53_V12', "testfile.root") """ # Set the globalt tag and datatype for testing or by grid-control --------- data = datatype == "data" if data: testfile = "file:/storage/8/dhaitz/testfiles/data_AOD_2012A.root" if "@" in globaltag: globaltag = "FT53_V21A_AN6" maxevents = maxevents or 100 else: testfile = "file:/storage/8/dhaitz/testfiles/mc-2014.root" if "@" in globaltag: globaltag = "START53_V19F" maxevents = maxevents or 100 datatype = "mc" print "GT:", globaltag, "| TYPE:", datatype, "| maxevents:", maxevents, "| file:", testfile # Basic process setup ----------------------------------------------------- process = cms.Process("kappaSkim") process.source = cms.Source("PoolSource", fileNames=cms.untracked.vstring(testfile)) process.maxEvents = cms.untracked.PSet(input=cms.untracked.int32(maxevents)) # Includes + Global Tag --------------------------------------------------- process.load("FWCore.MessageService.MessageLogger_cfi") process.load("Configuration.StandardSequences.Services_cff") process.load("Configuration.StandardSequences.MagneticField_38T_cff") process.load("Configuration.Geometry.GeometryIdeal_cff") process.load("Configuration.Geometry.GeometryPilot2_cff") process.load("TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAny_cfi") process.load("TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi") process.load("TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi") process.load("RecoMuon.DetLayers.muonDetLayerGeometry_cfi") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") process.load("Configuration.StandardSequences.Reconstruction_cff") process.GlobalTag.globaltag = globaltag + "::All" # Reduce amount of messages ----------------------------------------------- process.MessageLogger.default = cms.untracked.PSet(ERROR=cms.untracked.PSet(limit=cms.untracked.int32(5))) process.MessageLogger.cerr.FwkReport.reportEvery = 40 # Produce PF muon isolation ----------------------------------------------- from CommonTools.ParticleFlow.Isolation.tools_cfi import isoDepositReplace process.pfmuIsoDepositPFCandidates = isoDepositReplace("muons", "particleFlow") process.pfMuonIso = cms.Path(process.pfmuIsoDepositPFCandidates) # Create good primary vertices to be used for PF association -------------- from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams=pvSelector.clone(minNdof=cms.double(4.0), maxZ=cms.double(24.0)), src=cms.InputTag("offlinePrimaryVertices"), ) process.ak5PFJets.srcPVs = cms.InputTag("goodOfflinePrimaryVertices") process.ak7PFJets.srcPVs = cms.InputTag("goodOfflinePrimaryVertices") process.kt4PFJets.srcPVs = cms.InputTag("goodOfflinePrimaryVertices") process.kt6PFJets.srcPVs = cms.InputTag("goodOfflinePrimaryVertices") # CHS Jets with the NoPU sequence ----------------------------------------- process.load("CommonTools.ParticleFlow.PFBRECO_cff") process.pfPileUp.Vertices = cms.InputTag("goodOfflinePrimaryVertices") process.pfPileUp.checkClosestZVertex = cms.bool(False) process.pfCHS = cms.Path(process.goodOfflinePrimaryVertices * process.PFBRECO) process.ak5PFJetsCHS = process.ak5PFJets.clone(src=cms.InputTag("pfNoPileUp")) process.ak7PFJetsCHS = process.ak7PFJets.clone(src=cms.InputTag("pfNoPileUp")) process.kt4PFJetsCHS = process.kt4PFJets.clone(src=cms.InputTag("pfNoPileUp")) process.kt6PFJetsCHS = process.kt6PFJets.clone(src=cms.InputTag("pfNoPileUp")) # Gen Jets without neutrinos ---------------------------------------------- if datatype == "mc": process.load("RecoJets.JetProducers.ak5GenJets_cfi") process.NoNuGenJets = cms.Path( process.genParticlesForJetsNoNu * process.genParticlesForJets * process.ak5GenJetsNoNu * process.ak7GenJetsNoNu * process.kt4GenJetsNoNu * process.kt4GenJets * process.kt6GenJetsNoNu * process.kt6GenJets ) # Path to Redo all Jets --------------------------------------------------- process.jetsRedo = cms.Path( process.ak5PFJets * process.ak7PFJets * process.kt4PFJets * process.kt6PFJets * process.ak5PFJetsCHS * process.ak7PFJetsCHS * process.kt4PFJetsCHS * process.kt6PFJetsCHS ) # QG TAGGER ---------------------------------------------------------------- process.load("QuarkGluonTagger.EightTeV.QGTagger_RecoJets_cff") process.QGTagger.srcJets = cms.InputTag("ak5PFJets") process.AK5PFJetsQGTagger = process.QGTagger process.AK5PFJetsCHSQGTagger = process.QGTagger.clone( srcJets=cms.InputTag("ak5PFJetsCHS"), useCHS=cms.untracked.bool(True) ) process.AK7PFJetsQGTagger = process.QGTagger.clone(srcJets=cms.InputTag("ak7PFJets")) process.AK7PFJetsCHSQGTagger = process.QGTagger.clone( srcJets=cms.InputTag("ak7PFJetsCHS"), useCHS=cms.untracked.bool(True) ) process.QGTagging = cms.Path( process.QuarkGluonTagger * process.AK5PFJetsQGTagger * process.AK5PFJetsCHSQGTagger * process.AK7PFJetsQGTagger * process.AK7PFJetsCHSQGTagger ) # B-Tagging ---------------------------------------------------------------- # b-tagging general configuration process.load("RecoJets.JetAssociationProducers.ic5JetTracksAssociatorAtVertex_cfi") process.load("RecoBTag.Configuration.RecoBTag_cff") ### AK5 # create a ak5PF jets and tracks association process.ak5PFJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone() process.ak5PFJetTracksAssociatorAtVertex.jets = "ak5PFJets" process.ak5PFJetTracksAssociatorAtVertex.tracks = "generalTracks" process.ak5PFImpactParameterTagInfos = process.impactParameterTagInfos.clone() process.ak5PFImpactParameterTagInfos.jetTracks = "ak5PFJetTracksAssociatorAtVertex" # secondary vertex b-tag process.ak5PFSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone() process.ak5PFSecondaryVertexTagInfos.trackIPTagInfos = "ak5PFImpactParameterTagInfos" process.ak5PFSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone() process.ak5PFSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag(cms.InputTag("ak5PFSecondaryVertexTagInfos")) process.ak5PFCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone() process.ak5PFCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak5PFImpactParameterTagInfos"), cms.InputTag("ak5PFSecondaryVertexTagInfos") ) process.ak5PFCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone() process.ak5PFCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak5PFImpactParameterTagInfos"), cms.InputTag("ak5PFSecondaryVertexTagInfos") ) # sequence for AK5 b-tagging process.ak5PFJetBtagging = cms.Sequence( process.ak5PFJetTracksAssociatorAtVertex * process.ak5PFImpactParameterTagInfos * process.ak5PFSecondaryVertexTagInfos * process.ak5PFSecondaryVertexTagInfos * ( process.ak5PFSimpleSecondaryVertexBJetTags + process.ak5PFCombinedSecondaryVertexBJetTags + process.ak5PFCombinedSecondaryVertexMVABJetTags ) ) ### AK5 CHS # create a ak5PFCHS jets and tracks association process.ak5PFCHSJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone() process.ak5PFCHSJetTracksAssociatorAtVertex.jets = "ak5PFJetsCHS" process.ak5PFCHSJetTracksAssociatorAtVertex.tracks = "generalTracks" process.ak5PFCHSImpactParameterTagInfos = process.impactParameterTagInfos.clone() process.ak5PFCHSImpactParameterTagInfos.jetTracks = "ak5PFCHSJetTracksAssociatorAtVertex" # secondary vertex b-tag process.ak5PFCHSSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone() process.ak5PFCHSSecondaryVertexTagInfos.trackIPTagInfos = "ak5PFCHSImpactParameterTagInfos" process.ak5PFCHSSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone() process.ak5PFCHSSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak5PFCHSSecondaryVertexTagInfos") ) process.ak5PFCHSCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone() process.ak5PFCHSCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak5PFCHSImpactParameterTagInfos"), cms.InputTag("ak5PFCHSSecondaryVertexTagInfos") ) process.ak5PFCHSCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone() process.ak5PFCHSCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak5PFCHSImpactParameterTagInfos"), cms.InputTag("ak5PFCHSSecondaryVertexTagInfos") ) # sequence for AK5CHS b-tagging process.ak5PFCHSJetBtagging = cms.Sequence( process.ak5PFCHSJetTracksAssociatorAtVertex * process.ak5PFCHSImpactParameterTagInfos * process.ak5PFCHSSecondaryVertexTagInfos * process.ak5PFCHSSecondaryVertexTagInfos * ( process.ak5PFCHSSimpleSecondaryVertexBJetTags + process.ak5PFCHSCombinedSecondaryVertexBJetTags + process.ak5PFCHSCombinedSecondaryVertexMVABJetTags ) ) ### AK7 # create a ak7PF jets and tracks association process.ak7PFJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone() process.ak7PFJetTracksAssociatorAtVertex.jets = "ak7PFJets" process.ak7PFJetTracksAssociatorAtVertex.tracks = "generalTracks" process.ak7PFImpactParameterTagInfos = process.impactParameterTagInfos.clone() process.ak7PFImpactParameterTagInfos.jetTracks = "ak7PFJetTracksAssociatorAtVertex" # secondary vertex b-tag process.ak7PFSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone() process.ak7PFSecondaryVertexTagInfos.trackIPTagInfos = "ak7PFImpactParameterTagInfos" process.ak7PFSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone() process.ak7PFSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag(cms.InputTag("ak7PFSecondaryVertexTagInfos")) process.ak7PFCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone() process.ak7PFCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak7PFImpactParameterTagInfos"), cms.InputTag("ak7PFSecondaryVertexTagInfos") ) process.ak7PFCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone() process.ak7PFCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak7PFImpactParameterTagInfos"), cms.InputTag("ak7PFSecondaryVertexTagInfos") ) # sequence for AK7 b-tagging process.ak7PFJetBtagging = cms.Sequence( process.ak7PFJetTracksAssociatorAtVertex * process.ak7PFImpactParameterTagInfos * process.ak7PFSecondaryVertexTagInfos * process.ak7PFSecondaryVertexTagInfos * ( process.ak7PFSimpleSecondaryVertexBJetTags + process.ak7PFCombinedSecondaryVertexBJetTags + process.ak7PFCombinedSecondaryVertexMVABJetTags ) ) ### AK7 CHS # create a ak7PFCHS jets and tracks association process.ak7PFCHSJetTracksAssociatorAtVertex = process.ic5JetTracksAssociatorAtVertex.clone() process.ak7PFCHSJetTracksAssociatorAtVertex.jets = "ak7PFJetsCHS" process.ak7PFCHSJetTracksAssociatorAtVertex.tracks = "generalTracks" process.ak7PFCHSImpactParameterTagInfos = process.impactParameterTagInfos.clone() process.ak7PFCHSImpactParameterTagInfos.jetTracks = "ak7PFCHSJetTracksAssociatorAtVertex" # secondary vertex b-tag process.ak7PFCHSSecondaryVertexTagInfos = process.secondaryVertexTagInfos.clone() process.ak7PFCHSSecondaryVertexTagInfos.trackIPTagInfos = "ak7PFCHSImpactParameterTagInfos" process.ak7PFCHSSimpleSecondaryVertexBJetTags = process.simpleSecondaryVertexBJetTags.clone() process.ak7PFCHSSimpleSecondaryVertexBJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak7PFCHSSecondaryVertexTagInfos") ) process.ak7PFCHSCombinedSecondaryVertexBJetTags = process.combinedSecondaryVertexBJetTags.clone() process.ak7PFCHSCombinedSecondaryVertexBJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak7PFCHSImpactParameterTagInfos"), cms.InputTag("ak7PFCHSSecondaryVertexTagInfos") ) process.ak7PFCHSCombinedSecondaryVertexMVABJetTags = process.combinedSecondaryVertexMVABJetTags.clone() process.ak7PFCHSCombinedSecondaryVertexMVABJetTags.tagInfos = cms.VInputTag( cms.InputTag("ak7PFCHSImpactParameterTagInfos"), cms.InputTag("ak7PFCHSSecondaryVertexTagInfos") ) # sequence for AK7CHS b-tagging process.ak7PFCHSJetBtagging = cms.Sequence( process.ak7PFCHSJetTracksAssociatorAtVertex * process.ak7PFCHSImpactParameterTagInfos * process.ak7PFCHSSecondaryVertexTagInfos * process.ak7PFCHSSecondaryVertexTagInfos * ( process.ak7PFCHSSimpleSecondaryVertexBJetTags + process.ak7PFCHSCombinedSecondaryVertexBJetTags + process.ak7PFCHSCombinedSecondaryVertexMVABJetTags ) ) # Add the modules for all the jet collections to the path process.BTagging = cms.Path( process.ak5PFJetBtagging * process.ak5PFCHSJetBtagging * process.ak7PFJetBtagging * process.ak7PFCHSJetBtagging ) # PU jet ID --------------------------------------------------------------- process.load("CMGTools.External.pujetidsequence_cff") # AK5 process.ak5PFPuJetId = process.puJetId.clone( jets=cms.InputTag("ak5PFJets"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False) ) process.ak5PFPuJetMva = process.puJetMva.clone( jets=cms.InputTag("ak5PFJets"), jetids=cms.InputTag("ak5PFPuJetId"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False), ) # AK5 CHS process.ak5PFCHSPuJetId = process.puJetIdChs.clone( jets=cms.InputTag("ak5PFJetsCHS"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False) ) process.ak5PFCHSPuJetMva = process.puJetMvaChs.clone( jets=cms.InputTag("ak5PFJetsCHS"), jetids=cms.InputTag("ak5PFCHSPuJetId"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False), ) # ak7 process.ak7PFPuJetId = process.puJetId.clone( jets=cms.InputTag("ak7PFJets"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False) ) process.ak7PFPuJetMva = process.puJetMva.clone( jets=cms.InputTag("ak7PFJets"), jetids=cms.InputTag("ak7PFPuJetId"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False), ) # ak7 CHS process.ak7PFCHSPuJetId = process.puJetIdChs.clone( jets=cms.InputTag("ak7PFJetsCHS"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False) ) process.ak7PFCHSPuJetMva = process.puJetMvaChs.clone( jets=cms.InputTag("ak7PFJetsCHS"), jetids=cms.InputTag("ak7PFCHSPuJetId"), applyJec=cms.bool(True), inputIsCorrected=cms.bool(False), ) process.PUJetID = cms.Path( process.ak5PFPuJetId * process.ak5PFPuJetMva * process.ak5PFCHSPuJetId * process.ak5PFCHSPuJetMva * process.ak7PFPuJetId * process.ak7PFPuJetMva * process.ak7PFCHSPuJetId * process.ak7PFCHSPuJetMva ) # MET filters ------------------------------------------------------------- process.load("RecoMET.METFilters.ecalLaserCorrFilter_cfi") # Create good vertices for the trackingFailure MET filter process.goodVertices = cms.EDFilter( "VertexSelector", filter=cms.bool(False), src=cms.InputTag("offlinePrimaryVertices"), cut=cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.rho < 2"), ) # The good primary vertex filter for other MET filters process.primaryVertexFilter = cms.EDFilter( "VertexSelector", filter=cms.bool(True), src=cms.InputTag("offlinePrimaryVertices"), cut=cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"), ) process.noscraping = cms.EDFilter( "FilterOutScraping", applyfilter=cms.untracked.bool(True), debugOn=cms.untracked.bool(False), numtrack=cms.untracked.uint32(10), thresh=cms.untracked.double(0.25), ) process.load("CommonTools.RecoAlgos.HBHENoiseFilter_cfi") process.load("RecoMET.METAnalyzers.CSCHaloFilter_cfi") process.load("RecoMET.METFilters.hcalLaserEventFilter_cfi") process.hcalLaserEventFilter.vetoByRunEventNumber = cms.untracked.bool(False) process.hcalLaserEventFilter.vetoByHBHEOccupancy = cms.untracked.bool(True) process.load("RecoMET.METFilters.EcalDeadCellTriggerPrimitiveFilter_cfi") process.EcalDeadCellTriggerPrimitiveFilter.tpDigiCollection = cms.InputTag("ecalTPSkimNA") process.load("RecoMET.METFilters.EcalDeadCellBoundaryEnergyFilter_cfi") process.load("RecoMET.METFilters.eeBadScFilter_cfi") process.load("RecoMET.METFilters.eeNoiseFilter_cfi") process.load("RecoMET.METFilters.ecalLaserCorrFilter_cfi") process.load("RecoMET.METFilters.trackingFailureFilter_cfi") process.load("RecoMET.METFilters.inconsistentMuonPFCandidateFilter_cfi") process.load("RecoMET.METFilters.greedyMuonPFCandidateFilter_cfi") process.hcalLaserEventFilter.taggingMode = cms.bool(True) process.EcalDeadCellTriggerPrimitiveFilter.taggingMode = cms.bool(True) process.EcalDeadCellBoundaryEnergyFilter.taggingMode = cms.bool(True) process.trackingFailureFilter.taggingMode = cms.bool(True) process.eeBadScFilter.taggingMode = cms.bool(True) process.eeNoiseFilter.taggingMode = cms.bool(True) process.ecalLaserCorrFilter.taggingMode = cms.bool(True) process.trackingFailureFilter.taggingMode = cms.bool(True) process.inconsistentMuonPFCandidateFilter.taggingMode = cms.bool(True) process.greedyMuonPFCandidateFilter.taggingMode = cms.bool(True) process.beamScrapingFilter = process.inconsistentMuonPFCandidateFilter.clone(ptMin=cms.double(5000.0)) process.hcalNoiseFilter = process.beamScrapingFilter.clone() process.beamHaloFilter = process.beamScrapingFilter.clone() process.filtersSeq = cms.Sequence( process.primaryVertexFilter * process.hcalLaserEventFilter + process.EcalDeadCellTriggerPrimitiveFilter + process.EcalDeadCellBoundaryEnergyFilter + process.eeBadScFilter + process.eeNoiseFilter + process.ecalLaserCorrFilter + process.goodVertices * process.trackingFailureFilter + process.inconsistentMuonPFCandidateFilter + process.greedyMuonPFCandidateFilter + process.noscraping * process.beamScrapingFilter + process.HBHENoiseFilter * process.hcalNoiseFilter + process.CSCTightHaloFilter * process.beamHaloFilter ) process.metFilters = cms.Path(process.filtersSeq) # MET correction ---------------------------------------------------------- process.load("JetMETCorrections.Type1MET.pfMETCorrections_cff") process.pfchsMETcorr.src = cms.InputTag("goodOfflinePrimaryVertices") # Type-0 process.pfMETCHS = process.pfType1CorrectedMet.clone( applyType1Corrections=cms.bool(False), applyType0Corrections=cms.bool(True) ) # MET Path process.metCorrections = cms.Path(process.producePFMETCorrections * process.pfMETCHS) # Require two good muons -------------------------------------------------- process.goodMuons = cms.EDFilter( "CandViewSelector", src=cms.InputTag("muons"), cut=cms.string("pt > 12.0 & abs(eta) < 8.0 & isGlobalMuon()") ) process.twoGoodMuons = cms.EDFilter("CandViewCountFilter", src=cms.InputTag("goodMuons"), minNumber=cms.uint32(2)) # Configure tuple generation ---------------------------------------------- process.load("Kappa.Producers.KTuple_cff") process.kappatuple = cms.EDAnalyzer( "KTuple", process.kappaTupleDefaultsBlock, outputFile=cms.string("skim.root"), PFTaggedJets=cms.PSet( process.kappaNoCut, process.kappaNoRegEx, taggers=cms.vstring( "QGlikelihood", "QGmlp", "CombinedSecondaryVertexBJetTags", "CombinedSecondaryVertexMVABJetTags", "puJetIDFullLoose", "puJetIDFullMedium", "puJetIDFullTight", "puJetIDCutbasedLoose", "puJetIDCutbasedMedium", "puJetIDCutbasedTight", ), AK5PFTaggedJets=cms.PSet( src=cms.InputTag("ak5PFJets"), QGtagger=cms.InputTag("AK5PFJetsQGTagger"), Btagger=cms.InputTag("ak5PF"), PUJetID=cms.InputTag("ak5PFPuJetMva"), PUJetID_full=cms.InputTag("full53x"), ), AK5PFTaggedJetsCHS=cms.PSet( src=cms.InputTag("ak5PFJetsCHS"), QGtagger=cms.InputTag("AK5PFJetsCHSQGTagger"), Btagger=cms.InputTag("ak5PFCHS"), PUJetID=cms.InputTag("ak5PFCHSPuJetMva"), PUJetID_full=cms.InputTag("full"), ), AK7PFTaggedJets=cms.PSet( src=cms.InputTag("ak7PFJets"), QGtagger=cms.InputTag("AK7PFJetsQGTagger"), Btagger=cms.InputTag("ak7PF"), PUJetID=cms.InputTag("ak7PFPuJetMva"), PUJetID_full=cms.InputTag("full53x"), ), AK7PFTaggedJetsCHS=cms.PSet( src=cms.InputTag("ak7PFJetsCHS"), QGtagger=cms.InputTag("AK7PFJetsCHSQGTagger"), Btagger=cms.InputTag("ak7PFCHS"), PUJetID=cms.InputTag("ak7PFCHSPuJetMva"), PUJetID_full=cms.InputTag("full"), ), ), ) process.kappatuple.verbose = cms.int32(0) process.kappatuple.active = cms.vstring( "LV", "Muons", "TrackSummary", "VertexSummary", "BeamSpot", "JetArea", "PFMET", "PFJets", "FilterSummary", "PFTaggedJets", ) if data: additional_actives = ["DataMetadata"] else: additional_actives = ["GenMetadata", "GenParticles"] for active in additional_actives: process.kappatuple.active.append(active) # custom whitelist, otherwise the HLT trigger bits are not sufficient! process.kappatuple.Metadata.hltWhitelist = cms.vstring( # matches 'HLT_Mu17_Mu8_v7' etc. "^HLT_(Double)?Mu([0-9]+)_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$", # matches 'HLT_DoubleMu7_v8' etc. "^HLT_(Double)?Mu([0-9]+)(_v[[:digit:]]+)?$", ) process.kappatuple.Metadata.tauDiscrProcessName = cms.untracked.string("XXXXXXXXX") process.kappatuple.GenParticles.genParticles.selectedStatus = cms.int32(31) # use the good objects not temporary ones process.kappatuple.VertexSummary.whitelist = cms.vstring(".*fflinePrimaryVertices") process.kappatuple.VertexSummary.blacklist += cms.vstring(".*QG.*") process.kappatuple.LV.whitelist += cms.vstring("recoCaloJets.*") process.kappatuple.LV.blacklist += cms.vstring("AK5TrackJets", ".*KT.*") process.kappatuple.PFJets.whitelist = cms.vstring("recoPFJets.*kappaSkim") process.kappatuple.PFMET.blacklist = cms.vstring("pfType1.*CorrectedMet") process.kappatuple.PFJets.blacklist = cms.vstring( ".*Tau.*", "recoPFJets_pfJets.*kappaSkim", ".*ak5.*", ".*ak7.*", ".*QG.*", ".*KT.*" ) del process.kappatuple.GenParticles.genStableMuons process.pathKappa = cms.Path(process.goodMuons * process.twoGoodMuons * process.kappatuple) # Process schedule -------------------------------------------------------- process.schedule = cms.Schedule( process.metFilters, process.pfCHS, process.jetsRedo, process.BTagging, process.QGTagging, process.PUJetID, process.pfMuonIso, process.metCorrections, process.pathKappa, ) if not data: process.schedule.insert(0, process.NoNuGenJets) return process
import FWCore.ParameterSet.Config as cms from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector as pvSel from PhysicsTools.SelectorUtils.jetIDSelector_cfi import jetIDSelector from PhysicsTools.SelectorUtils.pfJetIDSelector_cfi import pfJetIDSelector wplusjetsAnalysis = cms.PSet( # Primary vertex pvSelector=cms.PSet(pvSel.clone()), # input parameter sets muonSrc=cms.InputTag('selectedPatMuons'), electronSrc=cms.InputTag('selectedPatElectrons'), jetSrc=cms.InputTag('selectedPatJets'), jetClonesSrc=cms.InputTag('myClones'), metSrc=cms.InputTag('patMETs'), trigSrc=cms.InputTag('patTriggerEvent'), muTrig=cms.string('HLT_Mu9'), eleTrig=cms.string('HLT_Ele15_LW_L1R'), # tight muons muonIdTight=cms.PSet(version=cms.string('SPRING10'), Chi2=cms.double(10.0), D0=cms.double(0.02), ED0=cms.double(999.0), SD0=cms.double(999.0), NHits=cms.int32(11), NValMuHits=cms.int32(0), ECalVeto=cms.double(999.0), HCalVeto=cms.double(999.0), RelIso=cms.double(0.05), cutsToIgnore=cms.vstring('ED0', 'SD0', 'ECalVeto', 'HCalVeto'),
def baseconfig( globaltag, testfile, maxevents, nickname, outputfilename, channel='mm', is_data=None, ): # Config parameters ############################################## cmssw_version = os.environ["CMSSW_VERSION"].split('_') cmssw_version = tuple([int(i) for i in cmssw_version[1:4]] + cmssw_version[4:]) autostr = "" if globaltag.lower() == 'auto': from Configuration.AlCa.autoCond import autoCond globaltag = autoCond['startup'] autostr = " (from autoCond)" if is_data is None: data = ('DoubleMu' in testfile[0]) or ('SingleMu' in testfile[0]) else: data = is_data miniaod = False ## print information print "\n------- CONFIGURATION 1 ---------" print "input: ", testfile[0], "... (%d files)" % len(testfile) if len(testfile) > 1 else "" print "file type: ", "miniAOD" if miniaod else "AOD" print "data: ", data print "output: ", outputfilename print "nickname: ", nickname print "global tag: ", globaltag + autostr print "max events: ", maxevents print "cmssw version: ", '.'.join([str(i) for i in cmssw_version]) print "channel: ", channel print "---------------------------------" print # Basic Process Setup ############################################ process = cms.Process("KAPPA") process.path = cms.Path() process.maxEvents = cms.untracked.PSet( input=cms.untracked.int32(maxevents) ) process.options = cms.untracked.PSet( wantSummary=cms.untracked.bool(True) ) process.source = cms.Source("PoolSource", fileNames=cms.untracked.vstring(testfile) ) # message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 50 process.MessageLogger.default = cms.untracked.PSet( ERROR=cms.untracked.PSet(limit=cms.untracked.int32(5)) ) ## Geometry and Detector Conditions (needed for a few patTuple production steps) if cmssw_version > (7, 4, 0, 'pre8'): # https://twiki.cern.ch/twiki/bin/view/Sandbox/MyRootMakerFrom72XTo74X#DDVectorGetter_vectors_are_empty print "Use condDBv2 and GeometryRecoDB:" process.load("Configuration.Geometry.GeometryRecoDB_cff") process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_condDBv2_cff') else: process.load("Configuration.Geometry.GeometryIdeal_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") process.load("Configuration.StandardSequences.MagneticField_cff") process.GlobalTag.globaltag = cms.string(globaltag) # Kappa ########################################################## process.load('Kappa.Producers.KTuple_cff') process.kappaTuple = cms.EDAnalyzer('KTuple', process.kappaTupleDefaultsBlock, outputFile = cms.string(outputfilename), ) process.kappaTuple.verbose = 0 process.kappaOut = cms.Sequence(process.kappaTuple) process.kappaTuple.active = cms.vstring('VertexSummary', 'BeamSpot') if data: process.kappaTuple.active += cms.vstring('DataInfo') else: process.kappaTuple.active += cms.vstring('GenInfo', 'GenParticles') if cmssw_version >= (7, 4, 0): process.kappaTuple.Info.overrideHLTCheck = cms.untracked.bool(True) if channel == 'mm': process.kappaTuple.Info.hltWhitelist = cms.vstring( # HLT regex selection can be tested at https://regex101.com (with gm options) # single muon triggers, e.g. HLT_Mu50_v1 "^HLT_(Iso)?(Tk)?Mu[0-9]+(_eta2p1|_TrkIsoVVL)?_v[0-9]+$", # double muon triggers, e.g. HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_v1 "^HLT_Mu[0-9]+(_TrkIsoVVL)?_(Tk)?Mu[0-9]+(_TrkIsoVVL)?(_DZ)?_v[0-9]+$", ) # PFCandidates ################################################### ## Good offline PV selection: from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter('PrimaryVertexObjectFilter', filterParams = pvSelector.clone(maxZ = 24.0), # ndof >= 4, rho <= 2 ) ## ------------------------------------------------------------------------ ## TopProjections from CommonTools/ParticleFlow: process.load("CommonTools.ParticleFlow.pfNoPileUpIso_cff") process.load("CommonTools.ParticleFlow.pfNoPileUpIso_cff") process.load("CommonTools.ParticleFlow.pfParticleSelection_cff") ## pf candidate configuration for everything but CHS jets process.pfPileUpIso.PFCandidates = 'particleFlow' process.pfPileUpIso.Vertices = 'goodOfflinePrimaryVertices' process.pfPileUpIso.checkClosestZVertex = True process.pfNoPileUpIso.bottomCollection = 'particleFlow' ## pf candidate configuration for deltaBeta corrections for muons and electrons process.pfNoPileUpChargedHadrons = process.pfAllChargedHadrons.clone() process.pfNoPileUpNeutralHadrons = process.pfAllNeutralHadrons.clone() process.pfNoPileUpPhotons = process.pfAllPhotons.clone() process.pfPileUpChargedHadrons = process.pfAllChargedHadrons.clone(src = 'pfPileUpIso') ## pf candidate configuration for CHS jets process.pfPileUp.Vertices = 'goodOfflinePrimaryVertices' process.pfPileUp.checkClosestZVertex = False # Modifications for new particleFlow Pointers process.pfPileUp.PFCandidates = cms.InputTag("particleFlowPtrs") process.pfPileUpIso.PFCandidates = cms.InputTag("particleFlowPtrs") process.pfNoPileUp.bottomCollection = cms.InputTag("particleFlowPtrs") process.pfNoPileUpIso.bottomCollection = cms.InputTag("particleFlowPtrs") #process.pfJetTracksAssociatorAtVertex.jets= cms.InputTag("ak5PFJets") process.path *= ( process.goodOfflinePrimaryVertices #* process.goodOfflinePrimaryVertexEvents * process.pfParticleSelectionSequence ) # Muons ########################################################## if channel == 'mm': process.load('Kappa.Skimming.KMuons_run2_cff') process.muPreselection1 = cms.EDFilter('CandViewSelector', src = cms.InputTag('muons'), cut = cms.string("pt >8.0"), ) process.muPreselection2 = cms.EDFilter('CandViewCountFilter', src = cms.InputTag('muPreselection1'), minNumber = cms.uint32(2), ) process.kappaTuple.Muons.minPt = 8.0 process.kappaTuple.active += cms.vstring('Muons') process.path *= (process.muPreselection1 * process.muPreselection2 * process.makeKappaMuons) # Electrons ######################################################## # to be done if channel == 'ee': pass # Jets ########################################################### # Kappa jet processing process.kappaTuple.Jets.minPt = 5.0 process.kappaTuple.Jets.taggers = cms.vstring() # containers of objects to process jet_resources = [] cmssw_jets = {} # algoname: cmssw module kappa_jets = {} # algoname: kappa jet config # GenJets if not data: process.load('RecoJets.Configuration.GenJetParticles_cff') process.load('RecoJets.JetProducers.ak5GenJets_cfi') jet_resources.append(process.genParticlesForJetsNoNu) process.kappaTuple.active += cms.vstring('LV') process.kappaTuple.LV.whitelist = cms.vstring('ak5GenJetsNoNu') #default? genbase_jet = process.ak5GenJets.clone(src=cms.InputTag("genParticlesForJetsNoNu"), doAreaFastjet=True) ## PFBRECO? process.load("RecoJets.JetProducers.ak5PFJets_cfi") pfbase_jet = process.ak5PFJets.clone(srcPVs = 'goodOfflinePrimaryVertices', doAreaFastjet=True) ## PUPPI # creates reweighted PFCandidates collection 'puppi' process.load('CommonTools.PileupAlgos.Puppi_cff') jet_resources.append(process.puppi) if miniaod: process.puppi.candName = cms.InputTag('packedPFCandidates') process.puppi.vertexName = cms.InputTag('offlineSlimmedPrimaryVertices') # create Jet variants for param in (4, 5, 8): # PFJets for algo, input_tag in (("", 'particleFlow'), ("CHS", 'pfNoPileUp'), ("Puppi", 'puppi')): variant_name = "ak%dPFJets%s" % (param, algo) variant_mod = pfbase_jet.clone(src=cms.InputTag(input_tag), rParam=param/10.0) cmssw_jets[variant_name] = variant_mod # Full Kappa jet definition kappa_jets["ak%dPFJets%s"%(param, algo)] = cms.PSet( src = cms.InputTag(variant_name), PUJetID = cms.InputTag("ak%dPF%sPuJetMva" % (param, algo)), PUJetID_full = cms.InputTag("full"), QGtagger = cms.InputTag("AK%dPFJets%sQGTagger" % (param, algo)), Btagger = cms.InputTag("ak%dPF%s" % (param, algo)), ) # GenJets if not data: for collection in ("NoNu",): # TODO: add "NoMuNoNu", "" ? variant_name = "ak%sGenJets%s" % (param, collection) variant_mod = genbase_jet.clone(rParam=param/10.0) cmssw_jets[variant_name] = variant_mod # GenJets are just KLVs process.kappaTuple.LV.whitelist += cms.vstring(variant_name) # mount generated jets for processing for name, jet_module in cmssw_jets.iteritems(): setattr(process, name, jet_module) for name, pset in kappa_jets.iteritems(): setattr(process.kappaTuple.Jets, name, pset) process.path *= reduce(lambda a, b: a * b, jet_resources) * reduce(lambda a, b: a * b, sorted(cmssw_jets.values())) # Gluon tagging? - https://twiki.cern.ch/twiki/bin/viewauth/CMS/GluonTag # B-tagging (for ak5 jets)? - https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookBTagging#DifferentJets # B-tagging for (ak5 CHS jets)? - https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookBTagging#DifferentJets # PileupDensity ######################## from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets process.pileupDensitykt6PFJets = kt4PFJets.clone(rParam=0.6, doRhoFastjet=True, Rho_EtaMax=2.5) process.kappaTuple.active += cms.vstring('Jets', 'PileupDensity') process.kappaTuple.PileupDensity.rename = cms.vstring("fixedGridRhoFastjetAll => pileupDensity") process.path *= ( process.pileupDensitykt6PFJets ) # MET correction ---------------------------------------------------------- #TODO check type 0 corrections process.load("JetMETCorrections.Type1MET.correctionTermsPfMetType0PFCandidate_cff") process.load("JetMETCorrections.Type1MET.correctedMet_cff") process.pfMETCHS = process.pfMetT0pc.clone() # Puppi from RecoMET.METProducers.PFMET_cfi import pfMet process.pfMetPuppi = pfMet.clone(src=cms.InputTag('puppi')) process.kappaTuple.active += cms.vstring('MET') process.path *= ( process.correctionTermsPfMetType0PFCandidate * process.pfMetPuppi * process.pfMETCHS ) # Kappa Output ########################################################### process.path *= ( process.kappaOut ) # final information: print "------- CONFIGURATION 2 ---------" print "CMSSW producers:" for p in str(process.path).split('+'): print " %s" % p print "Kappa producers:" for p in sorted(process.kappaTuple.active): print " %s" % p print "---------------------------------" return process
def loadPF2PAT(process,mcInfo,jetMetCorrections,extMatch,doSusyTopProjection,postfix): #-- PAT standard config ------------------------------------------------------- process.load("PhysicsTools.PatAlgos.patSequences_cff") #-- Jet corrections ----------------------------------------------------------- process.patJetCorrFactors.levels = jetMetCorrections #-- PF2PAT config ------------------------------------------------------------- from PhysicsTools.PatAlgos.tools.pfTools import usePF2PAT #usePF2PAT(process,runPF2PAT=True, jetAlgo='AK5',runOnMC=(mcInfo==1),postfix=postfix, jetCorrections=('AK5PFchs', jetMetCorrections), pvCollection=cms.InputTag('goodOfflinePrimaryVertices')) usePF2PAT(process,runPF2PAT=True, jetAlgo='AK5',runOnMC=(mcInfo==1),postfix=postfix, jetCorrections=('AK5PFchs', jetMetCorrections)) # Get a list of good primary vertices, in 42x, these are DAF vertices from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ), src=cms.InputTag('offlinePrimaryVertices') ) #process.patJetsPF.embedGenJetMatch = False #process.patJetsPF.embedPFCandidates = False #drop tracks process.patElectronsPF.embedTrack = True process.patMuonsPF.embedTrack = True process.electronMatchPF.maxDeltaR = cms.double(0.2) process.electronMatchPF.maxDPtRel = cms.double(999999.) process.electronMatchPF.checkCharge = False process.muonMatchPF.maxDeltaR = cms.double(0.2) process.muonMatchPF.maxDPtRel = cms.double(999999.) process.muonMatchPF.checkCharge = False process.pfPileUpPF.checkClosestZVertex = False process.pfPileUpPF.Vertices = "goodOfflinePrimaryVertices" if extMatch: process.electronMatchPF.mcStatus = cms.vint32(1,5) process.electronMatchPF.matched = "mergedTruth" process.muonMatchPF.mcStatus = cms.vint32(1,5) process.muonMatchPF.matched = "mergedTruth" process.genParticlesForJets.src = "mergedTruth" process.genParticlesForJetsNoMuNoNu.src = "mergedTruth" process.genParticlesForJetsNoNu.src = "mergedTruth" process.patJetPartonMatchPF.matched = "mergedTruth" process.patJetPartonsPF.src = "mergedTruth" process.photonMatchPF.matched = "mergedTruth" #process.tauGenJetsPF.GenParticles = "mergedTruth" #process.tauMatchPF.matched = "mergedTruth" #Remove jet pt cut #process.pfJetsPF.ptMin = 0. #include tau decay mode in pat::Taus (elese it will just be uninitialized) #process.patTausPF.addDecayMode = True #process.patTausPF.decayModeSrc = "shrinkingConePFTauDecayModeProducerPF" #Set isolation cone to 0.3 for PF leptons # TODO: fix this for electrons and muons #process.pfElectrons.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFId")) #process.pfElectrons.deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFId") #process.pfElectrons.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("elPFIsoValueNeutral03PFId"), cms.InputTag("elPFIsoValueGamma03PFId")) #process.pfIsolatedElectrons.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFId")) #process.pfIsolatedElectrons.deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFId") #process.pfIsolatedElectrons.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("elPFIsoValueNeutral03PFId"), cms.InputTag("elPFIsoValueGamma03PFId")) #process.pfElectronsPF.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFIdPF")) #process.pfElectronsPF.deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFIdPF") #process.pfElectronsPF.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("elPFIsoValueNeutral03PFIdPF"), cms.InputTag("elPFIsoValueGamma03PFIdPF")) #process.pfIsolatedElectronsPF.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFIdPF")) #process.pfIsolatedElectronsPF.deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFIdPF") #process.pfIsolatedElectronsPF.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("elPFIsoValueNeutral03PFIdPF"), cms.InputTag("elPFIsoValueGamma03PFIdPF")) #process.pfMuons.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("muPFIsoValueCharged03mu03")) #process.pfMuons.deltaBetaIsolationValueMap = cms.InputTag("muPFIsoValuePU03") #process.pfMuons.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("muPFIsoValueNeutral03"), cms.InputTag("muPFIsoValueGamma03")) #process.pfIsolatedMuons.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("muPFIsoValueCharged03mu03")) #process.pfIsolatedMuons.deltaBetaIsolationValueMap = cms.InputTag("muPFIsoValuePU03") #process.pfIsolatedMuons.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("muPFIsoValueNeutral03"), cms.InputTag("muPFIsoValueGamma03")) #process.pfMuonsPF.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("muPFIsoValueCharged03mu03PF")) #process.pfMuonsPF.deltaBetaIsolationValueMap = cms.InputTag("muPFIsoValuePU03PF") #process.pfMuonsPF.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("muPFIsoValueNeutral03PF"), cms.InputTag("muPFIsoValueGamma03PF")) #process.pfIsolatedMuonsPF.isolationValueMapsCharged = cms.VInputTag(cms.InputTag("muPFIsoValueCharged03mu03PF")) #process.pfIsolatedMuonsPF.deltaBetaIsolationValueMap = cms.InputTag("muPFIsoValuePU03PF") #process.pfIsolatedMuonsPF.isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("muPFIsoValueNeutral03PF"), cms.InputTag("muPFIsoValueGamma03PF")) #-- Enable pileup sequence ------------------------------------------------------------- #Vertices process.goodVertices = cms.EDFilter("VertexSelector", src = cms.InputTag("offlinePrimaryVertices"), cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"), filter = cms.bool(False), ) #process.pfPileUpPF.Vertices = "goodVertices" #process.pfPileUpPF.Enable = True process.pfNoPileUpSequencePF.replace(process.pfPileUpPF, process.goodVertices + process.pfPileUpPF) if not doSusyTopProjection: return #-- Top projection selection ----------------------------------------------------------- #Electrons #relax all selectors *before* pat-lepton creation process.pfElectronsFromVertexPF.dzCut = 9999.0 process.pfElectronsFromVertexPF.d0Cut = 9999.0 process.pfSelectedElectronsPF.cut = "" process.pfRelaxedElectronsPF = process.pfIsolatedElectronsPF.clone(isolationCut = 3.) process.pfIsolatedElectronsPF.isolationCut = 0.15 process.pfElectronsFromGoodVertex = cms.EDFilter( "IPCutPFCandidateSelector", src = cms.InputTag("pfIsolatedElectronsPF"), # PFCandidate source vertices = cms.InputTag("goodVertices"), # vertices source d0Cut = cms.double(0.04), # transverse IP dzCut = cms.double(1.), # longitudinal IP d0SigCut = cms.double(99.), # transverse IP significance dzSigCut = cms.double(99.), # longitudinal IP significance ) electronSelection = "abs( eta ) < 2.5 & pt > 5" electronSelection += " & mva_e_pi > 0.4" # same as patElectron::mva() #electronSelection += " & (isEB & (sigmaIetaIeta < 0.024 & hadronicOverEm < 0.15) | isEE & (sigmaIetaIeta < 0.040 & hadronicOverEm < 0.10))" #caloIdVL #electronSelection += " & (isEB & (deltaPhiSuperClusterTrackAtVtx < 0.15 & deltaEtaSuperClusterTrackAtVtx < 0.01) | isEE & (deltaPhiSuperClusterTrackAtVtx < 0.10 & deltaEtaSuperClusterTrackAtVtx < 0.01))" #trkIdVL electronSelection += " & gsfTrackRef().isNonnull() & gsfTrackRef().trackerExpectedHitsInner().numberOfHits() <= 0" process.pfUnclusteredElectronsPF = cms.EDFilter( "GenericPFCandidateSelector", src = cms.InputTag("pfElectronsFromGoodVertex"), #pfSelectedElectronsPF cut = cms.string(electronSelection) ) process.pfElectronSequencePF.replace(process.pfIsolatedElectronsPF, process.pfIsolatedElectronsPF + process.goodVertices * process.pfElectronsFromGoodVertex + process.pfUnclusteredElectronsPF + process.pfRelaxedElectronsPF) process.patElectronsPF.pfElectronSource = "pfRelaxedElectronsPF" process.pfNoElectronPF.topCollection = "pfUnclusteredElectronsPF" #Muons #relaxe built-in preselection process.pfMuonsFromVertexPF.dzCut = 9999.0 process.pfMuonsFromVertexPF.d0Cut = 9999.0 process.pfSelectedMuonsPF.cut = "" process.pfRelaxedMuonsPF = process.pfIsolatedMuonsPF.clone(isolationCut = 3) process.pfIsolatedMuonsPF.isolationCut = 0.15 process.pfMuonsFromGoodVertex = cms.EDFilter( "IPCutPFCandidateSelector", src = cms.InputTag("pfIsolatedMuonsPF"), # PFCandidate source vertices = cms.InputTag("goodVertices"), # vertices source d0Cut = cms.double(0.02), # transverse IP dzCut = cms.double(1.), # longitudinal IP d0SigCut = cms.double(99.), # transverse IP significance dzSigCut = cms.double(99.), # longitudinal IP significance ) muonSelection = "abs( eta ) < 2.5 & pt > 5" #GlobalMuonPromptTight muonSelection += " & muonRef().isNonnull & muonRef().isGlobalMuon()" muonSelection += " & muonRef().isTrackerMuon() & muonRef().numberOfMatches > 1" muonSelection += " & muonRef().globalTrack().normalizedChi2() < 10" muonSelection += " & muonRef().track().numberOfValidHits() > 10" muonSelection += " & muonRef().globalTrack().hitPattern().numberOfValidMuonHits() > 0" muonSelection += " & muonRef().innerTrack().hitPattern().numberOfValidPixelHits() > 0" process.pfUnclusteredMuonsPF = cms.EDFilter( "GenericPFCandidateSelector", src = cms.InputTag("pfMuonsFromGoodVertex"), #pfSelectedMuonsPF cut = cms.string(muonSelection) ) process.pfMuonSequencePF.replace(process.pfIsolatedMuonsPF, process.pfIsolatedMuonsPF + process.goodVertices * process.pfMuonsFromGoodVertex + process.pfUnclusteredMuonsPF + process.pfRelaxedMuonsPF) process.patMuonsPF.pfMuonSource = "pfRelaxedMuonsPF" process.pfNoMuonPF.topCollection = "pfUnclusteredMuonsPF"
def initialise(runOnMC, decayMode, doOutModule=False, doPAT=True): process = cms.Process("KrAFT") process.load("Configuration.StandardSequences.Services_cff") process.load("Configuration.Geometry.GeometryDB_cff") process.load("Configuration.StandardSequences.MagneticField_cff") process.options = cms.untracked.PSet(wantSummary=cms.untracked.bool(True)) process.maxEvents = cms.untracked.PSet(input=cms.untracked.int32(-1)) process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 10000 process.source = cms.Source("PoolSource", fileNames=cms.untracked.vstring()) process.source.inputCommands = cms.untracked.vstring( "keep *", "drop *_MEtoEDMConverter_*_*") process.load( "Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") from Configuration.AlCa.autoCond import autoCond if runOnMC: process.GlobalTag.globaltag = autoCond['startup'] else: process.GlobalTag.globaltag = autoCond['com10'] outputModuleForTriggerMatch = "" outputModules = [] if doOutModule: from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning process.out = cms.OutputModule( "PoolOutputModule", fileName=cms.untracked.string("out.root"), outputCommands=cms.untracked.vstring( 'drop *', 'keep recoPFCandidates_particleFlow_*_*', *patEventContentNoCleaning)) process.outPath = cms.EndPath(process.out) outputModuleForTriggerMatch = "out" outputModules.append(process.out) ## Load PAT process.load("PhysicsTools.PatAlgos.patSequences_cff") ## Apply MVA process.load('EgammaAnalysis.ElectronTools.electronIdMVAProducer_cfi') process.eidMVASequence = cms.Sequence(process.mvaTrigV0 + process.mvaNonTrigV0) process.patElectrons.electronIDSources.mvaTrigV0 = cms.InputTag( "mvaTrigV0") process.patElectrons.electronIDSources.mvaNonTrigV0 = cms.InputTag( "mvaNonTrigV0") process.patDefaultSequence.replace( process.patElectrons, process.eidMVASequence * process.patElectrons) ## Load trigger matching process.load("KrAFT.Configuration.hltFilters_cff") #from PhysicsTools.PatAlgos.tools.trigTools import * #switchOnTriggerMatchEmbedding(process, outputModule="") ## Apply PF2PAT from PhysicsTools.PatAlgos.tools.pfTools import usePF2PAT if runOnMC: jecLevels = ['L1FastJet', 'L2Relative', 'L3Absolute'] else: jecLevels = ['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual'] postfix = "PFlow" #usePFBRECO(process,runPFBRECO=True, usePF2PAT(process, runPF2PAT=True, runOnMC=runOnMC, outputModules=outputModules, postfix=postfix, jetAlgo="AK5", jetCorrections=("AK5PFchs", jecLevels), pvCollection=cms.InputTag('goodOfflinePrimaryVertices'), typeIMetCorrections=True) # process.pfPileUpPFlow.checkClosestZVertex = cms.bool(False) # top projections in PF2PAT: process.pfNoPileUpPFlow.enable = True process.pfNoMuonPFlow.enable = True process.pfNoElectronPFlow.enable = True process.pfNoTauPFlow.enable = False process.pfNoJetPFlow.enable = False # verbose flags for the PF2PAT modules process.pfNoMuonPFlow.verbose = False # Use non-isolated muons and electrons process.patMuonsPFlow.pfMuonSource = "pfMuonsPFlow" process.patElectronsPFlow.pfElectronSource = "pfElectronsPFlow" # And turn on delta-beta corrections while building pfIsolated*PFlow process.pfIsolatedMuonsPFlow.doDeltaBetaCorrection = True process.pfIsolatedElectronsPFlow.doDeltaBetaCorrection = True # Change DR cone size to 0.3 process.pfIsolatedMuonsPFlow.isolationValueMapsCharged = cms.VInputTag( cms.InputTag('muPFIsoValueCharged03PFlow')) process.pfIsolatedMuonsPFlow.deltaBetaIsolationValueMap = cms.InputTag( 'muPFIsoValuePU03PFlow') process.pfIsolatedMuonsPFlow.isolationValueMapsNeutral = cms.VInputTag( cms.InputTag('muPFIsoValueNeutral03PFlow'), cms.InputTag('muPFIsoValueGamma03PFlow'), ) process.pfMuonsPFlow.isolationValueMapsCharged = cms.VInputTag( cms.InputTag('muPFIsoValueCharged03PFlow')) process.pfMuonsPFlow.deltaBetaIsolationValueMap = cms.InputTag( 'muPFIsoValuePU03PFlow') process.pfMuonsPFlow.isolationValueMapsNeutral = cms.VInputTag( cms.InputTag('muPFIsoValueNeutral03PFlow'), cms.InputTag('muPFIsoValueGamma03PFlow'), ) process.patMuonsPFlow.isolationValues.pfNeutralHadrons = cms.InputTag( 'muPFIsoValueNeutral03PFlow') process.patMuonsPFlow.isolationValues.pfChargedAll = cms.InputTag( 'muPFIsoValueChargedAll03PFlow') process.patMuonsPFlow.isolationValues.pfPUChargedHadrons = cms.InputTag( 'muPFIsoValuePU03PFlow') process.patMuonsPFlow.isolationValues.pfPhotons = cms.InputTag( 'muPFIsoValueGamma03PFlow') process.patMuonsPFlow.isolationValues.pfChargedHadrons = cms.InputTag( 'muPFIsoValueCharged03PFlow') process.pfIsolatedElectronsPFlow.isolationValueMapsCharged = cms.VInputTag( cms.InputTag('elPFIsoValueCharged03PFIdPFlow')) process.pfIsolatedElectronsPFlow.deltaBetaIsolationValueMap = cms.InputTag( 'elPFIsoValuePU03PFIdPFlow') process.pfIsolatedElectronsPFlow.isolationValueMapsNeutral = cms.VInputTag( cms.InputTag('elPFIsoValueNeutral03PFIdPFlow'), cms.InputTag('elPFIsoValueGamma03PFIdPFlow')) process.pfElectronsPFlow.isolationValueMapsCharged = cms.VInputTag( cms.InputTag('elPFIsoValueCharged03PFIdPFlow')) process.pfElectronsPFlow.deltaBetaIsolationValueMap = cms.InputTag( 'elPFIsoValuePU03PFIdPFlow') process.pfElectronsPFlow.isolationValueMapsNeutral = cms.VInputTag( cms.InputTag('elPFIsoValueNeutral03PFIdPFlow'), cms.InputTag('elPFIsoValueGamma03PFIdPFlow')) process.patElectronsPFlow.isolationValues.pfNeutralHadrons = cms.InputTag( 'elPFIsoValueNeutral03PFIdPFlow') process.patElectronsPFlow.isolationValues.pfChargedAll = cms.InputTag( 'elPFIsoValueChargedAll03PFIdPFlow') process.patElectronsPFlow.isolationValues.pfPUChargedHadrons = cms.InputTag( 'elPFIsoValuePU03PFIdPFlow') process.patElectronsPFlow.isolationValues.pfPhotons = cms.InputTag( 'elPFIsoValueGamma03PFIdPFlow') process.patElectronsPFlow.isolationValues.pfChargedHadrons = cms.InputTag( 'elPFIsoValueCharged03PFIdPFlow') ## Add common filters process.primaryVertexFilter = cms.EDFilter( "GoodVertexFilter", vertexCollection=cms.InputTag('offlinePrimaryVertices'), minimumNDOF=cms.uint32(4), maxAbsZ=cms.double(24), maxd0=cms.double(2)) from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams=pvSelector.clone(maxZ=cms.double(24.0)), src=cms.InputTag('offlinePrimaryVertices')) #process.load( "TopQuarkAnalysis.Configuration.patRefSel_goodVertex_cfi" ) #process.goodOfflinePrimaryVertices.filter = True process.load('TopQuarkAnalysis.Configuration.patRefSel_eventCleaning_cff') process.trackingFailureFilter.VertexSource = cms.InputTag( 'goodOfflinePrimaryVertices') if runOnMC: process.eventCleaning += process.eventCleaningMC else: process.eventCleaning += process.eventCleaningData #reason : removing many events. process.eventCleaning.remove(process.CSCTightHaloFilter) ## Lepton veto filters for L+J channels process.muonVetoFilter = cms.EDFilter( "PATCandViewCountFilter", src=cms.InputTag("selectedPatMuonsPFlow"), maxNumber=cms.uint32(0), minNumber=cms.uint32(0), ) process.electronVetoFilter = cms.EDFilter( "PATCandViewCountFilter", src=cms.InputTag("selectedPatElectronsPFlow"), maxNumber=cms.uint32(0), minNumber=cms.uint32(0), ) # event counters process.nEventsTotal = cms.EDProducer("EventCountProducer") process.nEventsClean = cms.EDProducer("EventCountProducer") process.nEventsPAT = cms.EDProducer("EventCountProducer") process.nEventsHLTElEl = cms.EDProducer("EventCountProducer") process.nEventsHLTMuMu = cms.EDProducer("EventCountProducer") process.nEventsHLTMuEl = cms.EDProducer("EventCountProducer") process.nEventsHLTMuJets = cms.EDProducer("EventCountProducer") process.nEventsHLTElJets = cms.EDProducer("EventCountProducer") ############################### ### Add AK5GenJetsNoNu #### ############################### #process.load("RecoJets.Configuration.GenJetParticles_cff") from RecoJets.Configuration.GenJetParticles_cff import genParticlesForJetsNoNu from RecoJets.JetProducers.ak5GenJets_cfi import ak5GenJets process.ak5GenJetsNoNu = ak5GenJets.clone( src=cms.InputTag("genParticlesForJetsNoNu")) process.ak5GenJetsSeq = cms.Sequence(process.genParticlesForJets * process.genParticlesForJetsNoNu * process.ak5GenJetsNoNu) # Flavor history stuff process.load("PhysicsTools.HepMCCandAlgos.flavorHistoryPaths_cfi") process.flavorHistoryFilter.pathToSelect = cms.int32(-1) process.cFlavorHistoryProducer.matchedSrc = cms.InputTag("ak5GenJetsNoNu") process.bFlavorHistoryProducer.matchedSrc = cms.InputTag("ak5GenJetsNoNu") #ptMinParticle = cms.double(0.0) #ptMinShower = cms.double(0.0) #process.load( "RecoJets.Configuration.GenJetParticles_cff") #process.load( "RecoJets.Configuration.RecoGenJets_cff") #process.ReGenJetSequence = cms.Sequence( # process.genParticlesForJets # + process.genParticlesForJetsNoNu # + process.ak5GenJets # + process.ak5GenJetsNoNu #) process.commonFilterSequence = cms.Sequence( process.goodOfflinePrimaryVertices * process.eventCleaning * process.ak5GenJetsSeq * process.primaryVertexFilter * process.nEventsClean * getattr(process, "patPF2PATSequence" + postfix) # main PF2PAT * process.nEventsPAT * process.flavorHistorySeq) # process.patSequenceComplete = cms.Sequence( # + process.patDefaultSequence # + process.patPFBRECOSequencePFlow # process.patPF2PATSequencePFlow # + process.nEventsPAT # ) process.load("KrAFT.GeneratorTools.ttbar2bFilter_cfi") ## Defile paths if decayMode in ("all", "dilepton", "ElEl", "ee"): process.pElEl = cms.Path( process.nEventsTotal * process.commonFilterSequence * process.ttbar2bFilter * process.hltElEl * process.nEventsHLTElEl) # if doPAT: process.pElEl += process.patSequenceComplete if decayMode in ("all", "dilepton", "MuMu", "mumu"): process.pMuMu = cms.Path(process.nEventsTotal * process.commonFilterSequence * process.hltMuMu * process.nEventsHLTMuMu) # if doPAT: process.pMuMu += process.patSequenceComplete if decayMode in ("all", "dilepton", "MuEl", "emu"): process.pMuEl = cms.Path(process.nEventsTotal * process.commonFilterSequence * process.hltMuEl * process.nEventsHLTMuEl) # if doPAT: process.pMuEl += process.patSequenceComplete if decayMode in ("all", "MuJets"): process.selectedPatMuonsPFlow.cut = 'isPFMuon && (isGlobalMuon || isTrackerMuon) && pt > 10 && abs(eta) < 2.5 && (chargedHadronIso + max(0.,neutralHadronIso+photonIso-0.5*puChargedHadronIso))/pt < 0.15' process.selectedPatElectronsPFlow.cut = 'pt > 20 && abs(eta) < 2.5 && electronID("mvaTrigV0") > 0. && (chargedHadronIso + max(0.,neutralHadronIso+photonIso-0.5*puChargedHadronIso))/pt < 0.15' process.muonVetoFilter.maxNumber = 1 process.pMuJets = cms.Path( process.nEventsTotal * process.commonFilterSequence * process.hltMuJets * process.nEventsHLTMuJets) # if doPAT: process.pMuJets += process.patSequenceComplete process.pMuJets *= process.muonVetoFilter process.pMuJets += process.electronVetoFilter if runOnMC: process.pMuJets.remove(process.hltMuJets) if decayMode in ("all", "ElJets"): process.selectedPatMuonsPFlow.cut = 'isPFMuon && (isGlobalMuon || isTrackerMuon) && pt > 10 && abs(eta) < 2.5 && (chargedHadronIso + max(0.,neutralHadronIso+photonIso-0.5*puChargedHadronIso))/pt < 0.15' process.selectedPatElectronsPFlow.cut = 'pt > 20 && abs(eta) < 2.5 && electronID("mvaTrigV0") > 0. && (chargedHadronIso + max(0.,neutralHadronIso+photonIso-0.5*puChargedHadronIso))/pt < 0.15' process.electronVetoFilter.maxNumber = 1 process.pElJets = cms.Path( process.nEventsTotal * process.commonFilterSequence * process.hltElJets * process.nEventsHLTElJets) # if doPAT: process.pElJets += process.patSequenceComplete process.pElJets *= process.muonVetoFilter process.pElJets += process.electronVetoFilter if runOnMC: process.pElJets.remove(process.hltElJets) return process
def addPATSequences(process,runMC): # Load the PAT config from PhysicsTools.PatAlgos.patEventContent_cff import patEventContent process.out = cms.OutputModule("PoolOutputModule", fileName = cms.untracked.string('patTuple.root'), SelectEvents = cms.untracked.PSet( SelectEvents = cms.vstring('pat_step') ), outputCommands = cms.untracked.vstring('drop *', *patEventContent ) ) ### process.load('PhysicsTools.PatAlgos.patSequences_cff') from PhysicsTools.PatAlgos.tools.pfTools import usePF2PAT postfix = "PFlow" jetAlgo="AK5" jetCorrections = None if runMC: jetCorrections = ('AK5PFchs', ['L1FastJet','L2Relative','L3Absolute']) else: jetCorrections = ('AK5PFchs', ['L1FastJet','L2Relative','L3Absolute','L2L3Residual']) usePF2PAT(process,runPF2PAT=True, jetAlgo=jetAlgo, runOnMC=runMC, postfix=postfix,jetCorrections=jetCorrections) #from PhysicsTools.PatAlgos.tools.coreTools import removeMCMatching #if not runMC: # removeMCMatching(process, ['All'],"") #-----------------Customization---------------- process.pfPileUpPFlow.Enable = True process.pfPileUpPFlow.checkClosestZVertex = False process.pfPileUpPFlow.Vertices = cms.InputTag('goodOfflinePrimaryVertices') process.pfPileUpPFlow.verbose = True process.pfJetsPFlow.doAreaFastjet = True process.pfJetsPFlow.doRhoFastjet = False from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ), src=cms.InputTag('offlinePrimaryVertices') ) # Compute the mean pt per unit area (rho) from the PFCHS inputs #from RecoJets.Configuration.RecoPFJets_cff import kt6PFJets,ak5PFJets #process.kt6PFJetsPFlow = kt6PFJets.clone( # src = cms.InputTag('pfNoElectron'+postfix), # doAreaFastjet = cms.bool(True), # doRhoFastjet = cms.bool(True) # ) #process.patJetCorrFactorsPFlow.rho = cms.InputTag("kt6PFJetsPFlow", "rho") from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets process.kt6PFJetsForPAT = kt4PFJets.clone( rParam = cms.double(0.6), doAreaFastjet = cms.bool(True), doRhoFastjet = cms.bool(True) ) process.patJetCorrFactorsPFlow.rho = cms.InputTag("kt6PFJetsForPAT", "rho") from RecoJets.JetProducers.ak5PFJets_cfi import ak5PFJets process.ak5PFJetsPileUp = ak5PFJets.clone( src = cms.InputTag('pfPileUp'+postfix) ) # Switch on PAT trigger from PhysicsTools.PatAlgos.tools.trigTools import switchOnTrigger #switchOnTrigger( process,triggerProducer = 'patTrigger', triggerEventProducer = 'patTriggerEvent', sequence = 'patPF2PATSequence',hltProcess = 'HLT', outputModule = 'out') switchOnTrigger( process ,sequence ='patPF2PATSequence'+postfix) process.patTrigger.addL1Algos = cms.bool( True ) switchOnTrigger( process ,sequence = 'patPF2PATSequence'+postfix) # to fix event content #------------------------------------------------------------------------------------------------------------- # Add modules to default sequence #if runMC: # getattr(process, "patElectrons"+postfix).embedGenMatch = True # getattr(process, "patMuons"+postfix).embedGenMatch = True #else: # getattr(process, "patElectrons"+postfix).embedGenMatch = False # getattr(process, "patMuons"+postfix).embedGenMatch = False # Add modules to default sequence getattr(process,"patPF2PATSequence"+postfix).replace( getattr(process,"pfNoElectron"+postfix), getattr(process,"pfNoElectron"+postfix)*process.kt6PFJetsForPAT ) getattr(process,"patPF2PATSequence"+postfix).replace( getattr(process,"pfNoPileUp"+postfix), getattr(process,"pfNoPileUp"+postfix) * process.ak5PFJetsPileUp ) #---------------------------------------------- # Let it run process.pat_step = cms.Path( process.goodOfflinePrimaryVertices * #process.patDefaultSequence + getattr(process,"patPF2PATSequence"+postfix) ) # Add PatTrigger output to the created file from PhysicsTools.PatAlgos.patEventContent_cff import patTriggerEventContent # Add PF2PAT output to the created file from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning patOutputCommands = cms.untracked.vstring('drop *', 'keep recoPFCandidates_particleFlow_*_*', *patEventContentNoCleaning) # Adjust the event content patOutputCommands += [ #'keep *_selectedPat*_*_*', 'keep *_genParticles*_*_*', 'keep *_offlinePrimaryVertices*_*_*', 'keep *_goodOfflinePrimaryVertices*_*_*', #'keep *_pileUpN*PrimaryVertices_*_*', #'keep *_pfPileUpExclN*_*_*', 'keep *_pfPileUpPFlow*_*_*', 'keep *_pfNoPileUpPFlow*_*_*', 'keep *_ak5PFJetsPileUp_*_*', 'keep *_ak5PFJets_*_*', 'keep recoTracks_generalTracks_*_*', 'keep HcalNoiseSummary_hcalnoise_*_*', 'keep *_BeamHaloSummary_*_*', #------- Trigger collections ------ 'keep edmTriggerResults_TriggerResults_*_*', 'keep *_hltTriggerSummaryAOD_*_*', 'keep L1GlobalTriggerObjectMapRecord_*_*_*', 'keep L1GlobalTriggerReadoutRecord_*_*_*', #------- CASTOR rec hits ------ 'keep *_logErrorHarvester_*_*', 'keep *_castorreco_*_*', #------- Calo towers (just for now) ------ 'keep *_towerMaker_*_*', #---------------PatTrigger---------------- 'keep patTriggerObjects_patTrigger*_*_*', 'keep patTriggerFilters_patTrigger*_*_*', 'keep patTriggerPaths_patTrigger*_*_*', 'keep patTriggerEvent_patTriggerEvent*_*_*' ] process.out.outputCommands = patOutputCommands # top projections in PF2PAT: getattr(process,"pfNoPileUp"+postfix).enable = True getattr(process,"pfNoMuon"+postfix).enable = True getattr(process,"pfNoElectron"+postfix).enable = True getattr(process,"pfNoTau"+postfix).enable = False getattr(process,"pfNoJet"+postfix).enable = True # verbose flags for the PF2PAT modules getattr(process,"pfNoJet"+postfix).verbose = False
def baseconfig( globaltag, input_files, maxevents, nickname, outputfilename, channel='mm', is_data=None, kappa_verbosity=0, ): """ Create the CMSSW/cmsRun config for the z+jet skim :param globaltag: CMS global tag for the data :param globaltag: str :param input_files: files to process :type input_files: list[str] :param maxevents: number of events to process; `-1` implies all events :type maxevents: int :param nickname: nickname of the skim :type nickname: str :param channel: decay channel of Z; either of `mm` , `em`, `ee` :type channel: str :param is_data: whether input is data or simulated; use `None` for autodetection :type is_data: bool or None """ # Config parameters ############################################## cmssw_version = os.environ["CMSSW_VERSION"].split('_') cmssw_version = tuple([int(i) for i in cmssw_version[1:4]] + cmssw_version[4:]) autostr = "" if globaltag.lower() == 'auto': from Configuration.AlCa.autoCond import autoCond globaltag = autoCond['startup'] autostr = " (from autoCond)" if is_data is None: data = ('Double' in input_files[0]) or ('Single' in input_files[0]) else: data = is_data miniaod = False add_puppi = (channel == 'mm') ## print information print "\n------- CONFIGURATION 1 ---------" print "input: ", input_files[0], "... (%d files)" % len(input_files) if len(input_files) > 1 else "" print "file type: ", "miniAOD" if miniaod else "AOD" print "data: ", data print "output: ", outputfilename print "nickname: ", nickname print "global tag: ", globaltag + autostr print "max events: ", maxevents if maxevents >= 0 else "all" print "cmssw version: ", '.'.join([str(i) for i in cmssw_version]) print "channel: ", channel print "add_puppi: ", add_puppi print "kappa verbosity:", kappa_verbosity print "---------------------------------" print # Basic Process Setup ############################################ process = cms.Process("KAPPA") process.path = cms.Path() process.maxEvents = cms.untracked.PSet( input=cms.untracked.int32(maxevents) ) process.options = cms.untracked.PSet( wantSummary=cms.untracked.bool(True) ) process.source = cms.Source("PoolSource", fileNames=cms.untracked.vstring(input_files) ) # message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 50 process.MessageLogger.default = cms.untracked.PSet( ERROR=cms.untracked.PSet(limit=cms.untracked.int32(5)) ) ## Geometry and Detector Conditions (needed for a few patTuple production steps) if cmssw_version > (7, 4, 0, 'pre8'): # https://twiki.cern.ch/twiki/bin/view/Sandbox/MyRootMakerFrom72XTo74X#DDVectorGetter_vectors_are_empty print "Use condDBv2 and GeometryRecoDB:" process.load("Configuration.Geometry.GeometryRecoDB_cff") process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_condDBv2_cff') else: process.load("Configuration.Geometry.GeometryIdeal_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") process.load("Configuration.StandardSequences.MagneticField_cff") process.GlobalTag.globaltag = cms.string(globaltag) # Kappa ########################################################## process.load('Kappa.Producers.KTuple_cff') process.kappaTuple = cms.EDAnalyzer('KTuple', process.kappaTupleDefaultsBlock, outputFile = cms.string(outputfilename), ) process.kappaTuple.verbose = kappa_verbosity process.kappaOut = cms.Sequence(process.kappaTuple) process.kappaTuple.active = cms.vstring('VertexSummary', 'BeamSpot') if data: process.kappaTuple.active += cms.vstring('DataInfo') else: process.kappaTuple.active += cms.vstring('GenInfo', 'GenParticles') if cmssw_version >= (7, 4, 0): process.kappaTuple.Info.overrideHLTCheck = cms.untracked.bool(True) # must be set explicitly for consume emchanic if cmssw_version >= (7, 6, 0): process.kappaTuple.Info.hltSource = cms.InputTag("TriggerResults", "", "HLT") if channel == 'mm': process.kappaTuple.Info.hltWhitelist = cms.vstring( # HLT regex selection can be tested at https://regex101.com (with gm options) # single muon triggers, e.g. HLT_Mu50_v1 "^HLT_(Iso)?(Tk)?Mu[0-9]+(_eta2p1|_TrkIsoVVL)?_v[0-9]+$", # double muon triggers, e.g. HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_v1 "^HLT_Mu[0-9]+(_TrkIsoVVL)?_(Tk)?Mu[0-9]+(_TrkIsoVVL)?(_DZ)?_v[0-9]+$", ) elif channel == 'ee': process.kappaTuple.Info.hltWhitelist = cms.vstring( "^HLT_Ele[0-9]+_Ele[0-9]+(_CaloIdL)?(_TrackIdL)?(_IsoVL)?(_DZ)?_v[0-9]+$", ) # Primary Input Collections ################################################### ## miniAOD has NOT been tested, I'm just guessing names - MF@20150907 if miniaod: input_PFCandidates = 'packedPFCandidates' input_PFCandidatePtrs = 'packedPFCandidatesPtrs' input_PrimaryVertices = 'offlineSlimmedPrimaryVertices' else: input_PFCandidates = 'particleFlow' input_PFCandidatePtrs = 'particleFlowPtrs' input_PrimaryVertices = 'goodOfflinePrimaryVertices' # PFCandidates ################################################### ## Good offline PV selection: from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter('PrimaryVertexObjectFilter', filterParams = pvSelector.clone(maxZ = 24.0), # ndof >= 4, rho <= 2 ) ## ------------------------------------------------------------------------ ## TopProjections from CommonTools/ParticleFlow: process.load("CommonTools.ParticleFlow.pfNoPileUpIso_cff") process.load("CommonTools.ParticleFlow.pfNoPileUpIso_cff") process.load("CommonTools.ParticleFlow.pfParticleSelection_cff") ## pf candidate configuration for everything but CHS jets process.pfPileUpIso.PFCandidates = cms.InputTag(input_PFCandidates) process.pfPileUpIso.Vertices = cms.InputTag(input_PrimaryVertices) process.pfPileUpIso.checkClosestZVertex = True process.pfNoPileUpIso.bottomCollection = cms.InputTag(input_PFCandidates) ## pf candidate configuration for deltaBeta corrections for muons and electrons process.pfNoPileUpChargedHadrons = process.pfAllChargedHadrons.clone() process.pfNoPileUpNeutralHadrons = process.pfAllNeutralHadrons.clone() process.pfNoPileUpPhotons = process.pfAllPhotons.clone() process.pfPileUpChargedHadrons = process.pfAllChargedHadrons.clone(src = 'pfPileUpIso') ## pf candidate configuration for CHS jets process.pfPileUp.Vertices = cms.InputTag(input_PrimaryVertices) process.pfPileUp.checkClosestZVertex = False # Modifications for new particleFlow Pointers process.pfPileUp.PFCandidates = cms.InputTag(input_PFCandidatePtrs) process.pfPileUpIso.PFCandidates = cms.InputTag(input_PFCandidatePtrs) process.pfNoPileUp.bottomCollection = cms.InputTag(input_PFCandidatePtrs) process.pfNoPileUpIso.bottomCollection = cms.InputTag(input_PFCandidatePtrs) process.path *= ( process.goodOfflinePrimaryVertices * process.pfParticleSelectionSequence ) if add_puppi: ## PUPPI - https://twiki.cern.ch/twiki/bin/viewauth/CMS/PUPPI # creates filtered PFCandidates collection 'puppi' process.load('CommonTools.PileupAlgos.Puppi_cff') process.puppi.candName = cms.InputTag(input_PFCandidates) process.puppi.vertexName = cms.InputTag(input_PrimaryVertices) # PFCandidates w/o muons for PUPPI - avoid misidentification from high-PT muons process.PFCandidatesNoMu = cms.EDFilter("CandPtrSelector", src = cms.InputTag(input_PFCandidates), cut = cms.string("abs(pdgId)!=13" ) ) process.PFCandidatesOnlyMu = cms.EDFilter("CandPtrSelector", src = cms.InputTag(input_PFCandidates), cut = cms.string("abs(pdgId)==13" ) ) # veto without any muons process.puppinomutmp = process.puppi.clone( candName = cms.InputTag('PFCandidatesNoMu') ) # nomu veto, muons merged back again for proper MET etc. process.puppinomu = cms.EDProducer("CandViewMerger", src = cms.VInputTag( "puppinomutmp", "PFCandidatesOnlyMu") ) process.path *= (process.puppi * (process.PFCandidatesNoMu * process.PFCandidatesOnlyMu * process.puppinomutmp * process.puppinomu)) # Muons ########################################################## if channel == 'mm': process.load('Kappa.Skimming.KMuons_run2_cff') process.muPreselection1 = cms.EDFilter('CandViewSelector', src = cms.InputTag('muons'), cut = cms.string("pt>8.0"), ) process.muPreselection2 = cms.EDFilter('CandViewCountFilter', src = cms.InputTag('muPreselection1'), minNumber = cms.uint32(2), ) process.kappaTuple.Muons.minPt = 8.0 process.kappaTuple.Muons.doPfIsolation = cms.bool(False) process.kappaTuple.active += cms.vstring('Muons') process.path *= (process.muPreselection1 * process.muPreselection2 * process.makeKappaMuons) # Electrons ######################################################## elif channel == 'ee': process.load('Kappa.Skimming.KElectrons_run2_cff') process.ePreselection1 = cms.EDFilter('CandViewSelector', src = cms.InputTag('patElectrons'), cut = cms.string("pt>8.0"), ) process.ePreselection2 = cms.EDFilter('CandViewCountFilter', src = cms.InputTag('ePreselection1'), minNumber = cms.uint32(2), ) process.kappaTuple.Electrons.minPt = 8.0 from Kappa.Skimming.KElectrons_run2_cff import setupElectrons process.kappaTuple.Electrons.ids = cms.vstring("cutBasedElectronID_Spring15_25ns_V1_standalone_loose", "cutBasedElectronID_Spring15_25ns_V1_standalone_medium", "cutBasedElectronID_Spring15_25ns_V1_standalone_tight", "cutBasedElectronID_Spring15_25ns_V1_standalone_veto", "ElectronMVAEstimatorRun2Spring15NonTrig25nsV1Values") setupElectrons(process) process.kappaTuple.active += cms.vstring('Electrons') process.path *= (process.makeKappaElectrons * process.ePreselection1 * process.ePreselection2) # Jets ########################################################### # Kappa jet processing process.kappaTuple.Jets.minPt = 5.0 process.kappaTuple.Jets.taggers = cms.vstring() # containers for objects to process jet_resources = [] cmssw_jets = {} # algoname: cmssw module kappa_jets = {} # algoname: kappa jet config # GenJets if not data: process.load('RecoJets.Configuration.GenJetParticles_cff') process.load('RecoJets.JetProducers.ak5GenJets_cfi') jet_resources.append(process.genParticlesForJetsNoNu) process.kappaTuple.active += cms.vstring('LV') process.kappaTuple.LV.whitelist = cms.vstring('ak5GenJetsNoNu') #default? genbase_jet = process.ak5GenJets.clone(src=cms.InputTag("genParticlesForJetsNoNu"), doAreaFastjet=True) ## PFBRECO? process.load("RecoJets.JetProducers.ak5PFJets_cfi") pfbase_jet = process.ak5PFJets.clone(srcPVs = 'goodOfflinePrimaryVertices', doAreaFastjet=True) # create Jet variants for param in (4, 5, 8): # PFJets algos_and_tags = [("", input_PFCandidates), ("CHS", 'pfNoPileUp')] if add_puppi: algos_and_tags += [("Puppi", 'puppi'),("PuppiNoMu", 'puppinomu')] for algo, input_tag in algos_and_tags: variant_name = "ak%dPFJets%s" % (param, algo) variant_mod = pfbase_jet.clone(src=cms.InputTag(input_tag), rParam=param/10.0) cmssw_jets[variant_name] = variant_mod # Full Kappa jet definition kappa_jets["ak%dPFJets%s"%(param, algo)] = cms.PSet( src = cms.InputTag(variant_name), PUJetID = cms.InputTag("ak%dPF%sPuJetMva" % (param, algo)), PUJetID_full = cms.InputTag("full"), QGtagger = cms.InputTag("AK%dPFJets%sQGTagger" % (param, algo)), Btagger = cms.InputTag("ak%dPF%s" % (param, algo)), ) # GenJets if not data: for collection in ("NoNu",): # TODO: add "NoMuNoNu", "" ? variant_name = "ak%sGenJets%s" % (param, collection) variant_mod = genbase_jet.clone(rParam=param/10.0) cmssw_jets[variant_name] = variant_mod # GenJets are just KLVs process.kappaTuple.LV.whitelist += cms.vstring(variant_name) # mount generated jets for processing for name, jet_module in cmssw_jets.iteritems(): setattr(process, name, jet_module) for name, pset in kappa_jets.iteritems(): setattr(process.kappaTuple.Jets, name, pset) process.path *= reduce(lambda a, b: a * b, jet_resources + sorted(cmssw_jets.values())) # Gluon tagging? - https://twiki.cern.ch/twiki/bin/viewauth/CMS/GluonTag # B-tagging (for ak5 jets)? - https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookBTagging#DifferentJets # B-tagging for (ak5 CHS jets)? - https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookBTagging#DifferentJets # PileupDensity ######################## from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets process.pileupDensitykt6PFJets = kt4PFJets.clone(rParam=0.6, doRhoFastjet=True, Rho_EtaMax=2.5) process.kappaTuple.active += cms.vstring('Jets', 'PileupDensity') process.kappaTuple.PileupDensity.rename = cms.vstring("fixedGridRhoFastjetAll => pileupDensity") process.path *= ( process.pileupDensitykt6PFJets ) # MET correction ---------------------------------------------------------- #TODO check type 0 corrections from RecoMET.METProducers.PFMET_cfi import pfMet process.pfMETCHS = pfMet.clone(src=cms.InputTag(input_PFCandidates)) process.kappaTuple.active += cms.vstring('MET') # MET without forward region process.PFCandidatesNoHF = cms.EDFilter("CandPtrSelector", src = cms.InputTag(input_PFCandidates), cut = cms.string("abs(eta) < 3" ) ) process.pfMETCHSNoHF = pfMet.clone(src=cms.InputTag('PFCandidatesNoHF')) process.path *= (process.pfMETCHS * process.PFCandidatesNoHF * process.pfMETCHSNoHF) if add_puppi: process.pfMetPuppi = pfMet.clone(src=cms.InputTag('puppi')) process.pfMetPuppiNoMu = pfMet.clone(src=cms.InputTag('puppinomu')) process.path *= ( process.pfMetPuppi * process.pfMetPuppiNoMu ) process.PuppiNoHF = cms.EDFilter("CandPtrSelector", src = cms.InputTag('puppi'), cut = cms.string("abs(eta) < 3" ) ) process.PuppiNoMuNoHF = cms.EDFilter("CandPtrSelector", src = cms.InputTag('puppinomu'), cut = cms.string("abs(eta) < 3" ) ) process.pfMetPuppiNoHF = pfMet.clone(src=cms.InputTag('PuppiNoHF')) process.pfMetPuppiNoMuNoHF = pfMet.clone(src=cms.InputTag('PuppiNoMuNoHF')) process.path *= ( process.PuppiNoHF * process.pfMetPuppiNoHF * process.PuppiNoMuNoHF * process.pfMetPuppiNoMuNoHF ) process.kappaTuple.MET.whitelist += cms.vstring('pfMetPuppiNoHF', 'pfMetPuppiNoMuNoHF') # Kappa Output ########################################################### process.path *= ( process.kappaOut ) # explicit declaration until white/blacklist works again - MF@160119 # note: extracted from running on CMSSW < 7_6 if cmssw_version >= (7, 6, 0): process.kappaTuple.BeamSpot.offlineBeamSpot = cms.PSet(src=cms.InputTag("offlineBeamSpot")) process.kappaTuple.VertexSummary.offlinePrimaryVerticesSummary = cms.PSet(src=cms.InputTag("offlinePrimaryVertices")) process.kappaTuple.VertexSummary.goodOfflinePrimaryVerticesSummary = cms.PSet(src=cms.InputTag("goodOfflinePrimaryVertices")) if not data: process.kappaTuple.LV.ak4GenJetsNoNu = cms.PSet(src=cms.InputTag("ak4GenJetsNoNu")) process.kappaTuple.LV.ak5GenJetsNoNu = cms.PSet(src=cms.InputTag("ak5GenJetsNoNu")) process.kappaTuple.LV.ak8GenJetsNoNu = cms.PSet(src=cms.InputTag("ak8GenJetsNoNu")) process.kappaTuple.PileupDensity.pileupDensity = cms.PSet(src=cms.InputTag("fixedGridRhoFastjetAll")) process.kappaTuple.PileupDensity.pileupDensityCalo = cms.PSet(src=cms.InputTag("fixedGridRhoFastjetAllCalo")) process.kappaTuple.MET.pfChMet = cms.PSet(src=cms.InputTag("pfChMet")) process.kappaTuple.MET.metCHS = cms.PSet(src=cms.InputTag("pfMETCHS")) process.kappaTuple.MET.metCHSNoHF = cms.PSet(src=cms.InputTag("pfMETCHSNoHF")) process.kappaTuple.MET.met = cms.PSet(src=cms.InputTag("pfMet")) process.kappaTuple.MET.metEI = cms.PSet(src=cms.InputTag("pfMetEI")) if channel == 'mm': process.kappaTuple.MET.metPuppi = cms.PSet(src=cms.InputTag("pfMetPuppi")) process.kappaTuple.MET.metPuppiNoHF = cms.PSet(src=cms.InputTag("pfMetPuppiNoHF")) # final information: print "------- CONFIGURATION 2 ---------" print "CMSSW producers:" for p in str(process.path).split('+'): print " %s" % p print "Kappa producers:" for p in sorted(process.kappaTuple.active): print " %s" % p print "---------------------------------" return process
def mvaMET_MuTau(process): from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams=pvSelector.clone(minNdof=cms.double(4.0), maxZ=cms.double(24.0)), src=cms.InputTag('offlinePrimaryVertices')) # Muons (definition stolen from Roger) process.mvaMETMuons = cms.EDFilter( "MuonSelector", src=cms.InputTag('muons'), cut=cms.string( "abs(eta)<2.1 & pt>15" + ## muon ID "& isTrackerMuon" + "& isPFMuon" + "& globalTrack.isNonnull" + "& innerTrack.hitPattern.numberOfValidPixelHits > 0" + "& innerTrack.normalizedChi2 < 10" + "& numberOfMatches > 0" + "& innerTrack.hitPattern.numberOfValidTrackerHits > 5" + "& globalTrack.hitPattern.numberOfValidHits > 0" + "& abs(innerTrack().dxy) <2.0" + ## muon isolation (w/o deltaBeta, therefore weaker selection criteria) "& (pfIsolationR03.sumChargedHadronPt+pfIsolationR03.sumNeutralHadronEt+pfIsolationR03.sumPhotonEt)/pt < 0.3" ), filter=cms.bool(False)) # Taus for Mu+Tau channel (definition stolen from Roger) process.mvaMETTausMT = cms.EDFilter( "PFTauSelector", src=cms.InputTag('hpsPFTauProducer'), BooleanOperator=cms.string("and"), discriminators=cms.VPSet( cms.PSet(discriminator=cms.InputTag( "hpsPFTauDiscriminationByDecayModeFinding"), selectionCut=cms.double(0.5)), cms.PSet(discriminator=cms.InputTag( "hpsPFTauDiscriminationByLooseCombinedIsolationDBSumPtCorr3Hits" ), selectionCut=cms.double(0.5)), cms.PSet(discriminator=cms.InputTag( "hpsPFTauDiscriminationByLooseElectronRejection"), selectionCut=cms.double(0.5)), cms.PSet(discriminator=cms.InputTag( "hpsPFTauDiscriminationByTightMuonRejection"), selectionCut=cms.double(0.5))), cut=cms.string("abs(eta) < 2.3 && pt > 20.0 "), filter=cms.bool(False)) # define MVA-Met producer (for Mu+Tau) from RecoJets.JetProducers.PileupJetIDParams_cfi import JetIdParams process.pfMetMVAMuTau = cms.EDProducer( "PFMETProducerMVA", srcCorrJets=cms.InputTag('ak5PFJetsCorr'), srcUncorrJets=cms.InputTag('ak5PFJets'), srcPFCandidates=cms.InputTag('particleFlow'), srcVertices=cms.InputTag('goodOfflinePrimaryVertices'), srcLeptons=cms.VInputTag("mvaMETMuons", "mvaMETTausMT"), minNumLeptons=cms.int32(0), srcRho=cms.InputTag('kt6PFJets', 'rho'), globalThreshold=cms.double(-1.), #pfMet.globalThreshold, minCorrJetPt=cms.double(-1.), inputFileNames=cms.PSet( U=cms.FileInPath( 'RecoMET/METPUSubtraction/data/gbrmet_53_June2013_type1.root'), DPhi=cms.FileInPath( 'RecoMET/METPUSubtraction/data/gbrmetphi_53_June2013_type1.root' ), CovU1=cms.FileInPath( 'RecoMET/METPUSubtraction/data/gbru1cov_53_Dec2012.root'), CovU2=cms.FileInPath( 'RecoMET/METPUSubtraction/data/gbru2cov_53_Dec2012.root')), loadMVAfromDB=cms.bool(False), is42=cms.bool( False ), # CV: set this flag to true if you are running mvaPFMET in CMSSW_4_2_x corrector=cms.string("ak5PFL1Fastjet"), useType1=cms.bool(True), useOld42=cms.bool(False), dZcut=cms.double(0.1), impactParTkThreshold=cms.double(0.), tmvaWeights=cms.string( "RecoJets/JetProducers/data/TMVAClassificationCategory_JetID_MET_53X_Dec2012.weights.xml" ), tmvaMethod=cms.string("JetID"), version=cms.int32(-1), cutBased=cms.bool(False), tmvaVariables=cms.vstring( "nvtx", "jetPt", "jetEta", "jetPhi", "dZ", "beta", "betaStar", "nCharged", "nNeutrals", "dR2Mean", "ptD", "frac01", "frac02", "frac03", "frac04", "frac05", ), tmvaSpectators=cms.vstring(), JetIdParams=JetIdParams, verbosity=cms.int32(0)) process.MVAMETMuTauSequence = cms.Sequence( process.goodOfflinePrimaryVertices * process.mvaMETMuons * process.mvaMETTausMT * process.pfMetMVAMuTau)
def createProcess(runOnMC, runCHS, correctMETWithT1, processCaloJets, globalTag): ## import skeleton process from PhysicsTools.PatAlgos.patTemplate_cfg import process # load the PAT config process.load("PhysicsTools.PatAlgos.patSequences_cff") process.load("JetMETCorrections.Configuration.JetCorrectionProducers_cff") # Do some CHS stuff process.ak5PFchsL1Fastjet = process.ak5PFL1Fastjet.clone(algorithm = 'AK5PFchs') process.ak5PFchsL2Relative = process.ak5PFL2Relative.clone(algorithm = 'AK5PFchs') process.ak5PFchsL3Absolute = process.ak5PFL3Absolute.clone(algorithm = 'AK5PFchs') process.ak5PFchsResidual = process.ak5PFResidual.clone(algorithm = 'AK5PFchs') process.ak5PFchsL1FastL2L3 = cms.ESProducer( 'JetCorrectionESChain', correctors = cms.vstring('ak5PFchsL1Fastjet', 'ak5PFchsL2Relative','ak5PFchsL3Absolute') ) from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector ## The good primary vertex filter ____________________________________________|| ## This filter throw events with no primary vertex process.primaryVertexFilter = cms.EDFilter( "VertexSelector", src = cms.InputTag("offlinePrimaryVertices"), cut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"), filter = cms.bool(True) ) process.goodOfflinePrimaryVertices = cms.EDFilter("PrimaryVertexObjectFilter", filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ), src = cms.InputTag('offlinePrimaryVertices') ) # Configure PAT to use PF2PAT instead of AOD sources # this function will modify the PAT sequences. from PhysicsTools.PatAlgos.tools.coreTools import removeSpecificPATObjects, removeMCMatching from PhysicsTools.PatAlgos.tools.pfTools import usePF2PAT, adaptPFIsoElectrons, adaptPVs, usePFIso #from PhysicsTools.PatAlgos.tools.metTools import * def usePF2PATForAnalysis(jetAlgo, postfix, useTypeIMET, usePFNoPU): # Jet corrections # No L2L3 Residual on purpose if usePFNoPU: jetCorrections = ("%sPFchs" % algo, ['L1FastJet', 'L2Relative', 'L3Absolute']) postfix += "chs" else: jetCorrections = ("%sPF" % algo, ['L1FastJet', 'L2Relative', 'L3Absolute']) #if not runOnMC: # jetCorrections[1].append('L2L3Residual') p = postfix usePF2PAT(process, runPF2PAT=True, jetAlgo=jetAlgo, runOnMC=runOnMC, postfix=p, jetCorrections=jetCorrections, typeIMetCorrections = useTypeIMET) getattr(process, "pfPileUp" + p).Enable = True getattr(process, "pfPileUp" + p).Vertices = 'goodOfflinePrimaryVertices' getattr(process, "pfPileUp" + p).checkClosestZVertex = cms.bool(False) getattr(process, "pfJets" + p).doAreaFastjet = cms.bool(True) getattr(process, "pfJets" + p).doRhoFastjet = False getattr(process, 'patJetCorrFactors' + p).rho = cms.InputTag("kt6PFJets", "rho") # Do not use kt6PFJetsPFlowAK5, it's not ok for L1FastJet. # top projections in PF2PAT: getattr(process,"pfNoPileUp" + p).enable = cms.bool(usePFNoPU) getattr(process,"pfNoMuon" + p).enable = True getattr(process,"pfNoElectron" + p).enable = True getattr(process,"pfNoTau" + p).enable = True getattr(process,"pfNoJet" + p).enable = True getattr(process,"patElectrons" + p).embedTrack = True getattr(process,"patMuons" + p).embedTrack = True # enable delta beta correction for muon selection in PF2PAT? getattr(process,"pfIsolatedMuons" + p).doDeltaBetaCorrection = True getattr(process, "patJets" + p).embedPFCandidates = False # Keep only jets with pt > 2 Gev getattr(process, "selectedPatJets" + p).cut = "pt > 2"; # Use a cone of 0.3 for photon isolation #adaptPFIsoPhotons(process, applyPostfix(process, "patPhotons", postfix), postfix, "03") # 2012 Photon ID # Electron conversion setattr(process, "patConversions" + p, cms.EDProducer("PATConversionProducer", # input collection electronSource = cms.InputTag("selectedPatElectrons" + p) )) # Switch electron isolation to dR = 0.3, for PF2PAT getattr(process, "pfIsolatedElectrons" + p).isolationValueMapsCharged = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFId" + p)) getattr(process, "pfIsolatedElectrons" + p).deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFId" + p) getattr(process, "pfIsolatedElectrons" + p).isolationValueMapsNeutral = cms.VInputTag(cms.InputTag("elPFIsoValueNeutral03PFId" + p), cms.InputTag("elPFIsoValueGamma03PFId" + p)) getattr(process, "pfElectrons" + p).isolationValueMapsCharged = cms.VInputTag(cms.InputTag("elPFIsoValueCharged03PFId" + p)) getattr(process, "pfElectrons" + p).deltaBetaIsolationValueMap = cms.InputTag("elPFIsoValuePU03PFId" + p) getattr(process, "pfElectrons" + p).isolationValueMapsNeutral = cms.VInputTag(cms.InputTag( "elPFIsoValueNeutral03PFId" + p), cms.InputTag("elPFIsoValueGamma03PFId" + p)) # ... And for PAT adaptPFIsoElectrons(process, getattr(process, "pfElectrons" + p), p, "03") ##there used to be a modulo to keep track of muons gen info, doesnt work anymore and we don't use that info - so removed for now. setattr(process, "patMuonsLoose" + p, getattr(process, "patMuons" + p).clone( pfMuonSource = cms.InputTag("pfMuons" + p), embedGenMatch = False, addGenMatch = False ) ) setattr(process, "selectedPatMuonsLoose" + p, getattr(process, "selectedPatMuons" + p).clone( src = cms.InputTag("patMuonsLoose" + p) ) ) sequence = getattr(process, "patDefaultSequence" + p) sequence += getattr(process, "patMuonsLoose" + p) sequence += (getattr(process, "selectedPatMuonsLoose" + p)) setattr(process, "patElectronsLoose" + p, getattr(process, "patElectrons" + p).clone( pfElectronSource = cms.InputTag("pfElectrons" + p) ) ) setattr(process, "selectedPatElectronsLoose" + p, getattr(process, "selectedPatElectrons" + p).clone( src = cms.InputTag("patElectronsLoose" + p) ) ) adaptPFIsoElectrons(process, getattr(process, "patElectronsLoose" + p), postfix, "03") sequence = getattr(process, "patDefaultSequence" + p) sequence += (getattr(process, "patElectronsLoose" + p) * getattr(process, "selectedPatElectronsLoose" + p)) # Setup quark gluon tagger #process.load('QuarkGluonTagger.EightTeV.QGTagger_RecoJets_cff') #cloneProcessingSnippet(process, process.QuarkGluonTagger, p) #getattr(process, "QGTagger" + p).srcJets = cms.InputTag("selectedPatJets" + p) #getattr(process, "QGTagger" + p).isPatJet = cms.untracked.bool(True) #getattr(process, "QGTagger" + p).useCHS = cms.untracked.bool(usePFNoPU) ## Remove the processing of primary vertices, as it's already what we do here #getattr(process, 'QGTagger' + p).srcPV = cms.InputTag('goodOfflinePrimaryVertices') #getattr(process, 'QuarkGluonTagger' + p).remove(getattr(process, 'goodOfflinePrimaryVerticesQG' + p)) if not runOnMC: if 'L2L3Residual' in jetCorrections: getattr(process, 'patPFJetMETtype1p2Corr' + p).jetCorrLabel = 'L2L3Residual' getattr(process, 'patPFMet' + p).addGenMET = cms.bool(False) names = ["Taus"] #if jetAlgo != "AK5": #names += ["Electrons", "Muons"] if len(names) > 0: removeSpecificPATObjects(process, names = names, outputModules = ['out'], postfix = p) adaptPVs(process, pvCollection = cms.InputTag("goodOfflinePrimaryVertices"), postfix = p) getattr(process, "patDefaultSequence" + p).replace(getattr(process, "selectedPatElectrons" + p), getattr(process, "selectedPatElectrons" + p) + getattr(process, "patConversions" + p)) #getattr(process, "patDefaultSequence" + p).replace(getattr(process, "selectedPatJets" + p), getattr(process, "selectedPatJets" + p) + getattr(process, "QuarkGluonTagger" + p)) return getattr(process, "patPF2PATSequence" + p) if correctMETWithT1: process.load("PhysicsTools.PatUtils.patPFMETCorrections_cff") from PhysicsTools.PatAlgos.tools.helpers import cloneProcessingSnippet print "##########################" print "PF jets with PF2PAT" print "Using Type I met" if correctMETWithT1 else "NOT using Type I met" print "##########################" #runCHS = False #postfixes = {'PFlowAK5': 'AK5', 'PFlowAK7': 'AK7'} postfixes = {'PFlowAK5': 'AK5'} # Setup quark gluon tagger process.load('QuarkGluonTagger.EightTeV.QGTagger_RecoJets_cff') process.sequence_chs = cms.Sequence() process.sequence_nochs = cms.Sequence() for p, algo in postfixes.items(): process.sequence_nochs += usePF2PATForAnalysis(jetAlgo=algo, postfix=p, usePFNoPU=False, useTypeIMET=correctMETWithT1) if runCHS: process.sequence_chs += usePF2PATForAnalysis(jetAlgo=algo, postfix=p, usePFNoPU=True, useTypeIMET=correctMETWithT1) setattr(process, 'QGTagger' + p, process.QGTagger.clone()) getattr(process, "QGTagger" + p).srcJets = cms.InputTag("selectedPatJets" + p) getattr(process, "QGTagger" + p).isPatJet = cms.untracked.bool(True) getattr(process, "QGTagger" + p).useCHS = cms.untracked.bool(False) process.QuarkGluonTagger.replace(process.QGTagger, getattr(process, 'QGTagger' + p)) if runCHS: chsP = p + "chs" setattr(process, 'QGTagger' + chsP, process.QGTagger.clone()) getattr(process, "QGTagger" + chsP).srcJets = cms.InputTag("selectedPatJets" + chsP) getattr(process, "QGTagger" + chsP).isPatJet = cms.untracked.bool(True) getattr(process, "QGTagger" + chsP).useCHS = cms.untracked.bool(True) process.QuarkGluonTagger.replace(getattr(process, 'QGTagger' + p), getattr(process, 'QGTagger' + p) + getattr(process, 'QGTagger' + chsP)) print "##########################" print "Calo jets" if processCaloJets else "No processing of calo jets" print "##########################" usePFIso(process, "") #adaptPFIsoPhotons(process, process.patPhotons, "", "03") if processCaloJets: # No L2L3 Residual on purpose jetCorrections = ('AK5Calo', ['L1Offset', 'L2Relative', 'L3Absolute']) addJetCollection(process, cms.InputTag('ak7CaloJets'), 'AK7', 'Calo', doJTA = True, doBTagging = True, jetCorrLabel = jetCorrections, doType1MET = correctMETWithT1, doL1Cleaning = False, doL1Counters = False, genJetCollection = cms.InputTag("ak7GenJets"), doJetID = True, jetIdLabel = "ak7" ) switchJetCollection(process, cms.InputTag('ak5CaloJets'), doJTA = True, doBTagging = True, jetCorrLabel = jetCorrections, doType1MET = correctMETWithT1, genJetCollection = cms.InputTag("ak5GenJets"), doJetID = True, jetIdLabel = "ak5" ) process.selectedPatJets.cut = "pt > 2" process.selectedPatJetsAK7Calo.cut = "pt > 2" else: removeSpecificPATObjects(process, names = ['Jets', 'METs']) if not runOnMC: # Remove MC Matching removeMCMatching(process, names = ["All"]) removeSpecificPATObjects(process, names = ['Electrons', 'Muons', 'Taus']) if runCHS: print "##########################" print "Running CHS sequence" print "##########################" process.analysisSequence = cms.Sequence() process.analysisSequence *= process.sequence_nochs if runCHS: process.analysisSequence *= process.sequence_chs # Quark Gluon tagging process.analysisSequence *= process.QuarkGluonTagger # Add default pat sequence to our path # This brings to life TcMET, Calo jets and Photons process.analysisSequence *= process.patDefaultSequence # Add our PhotonIsolationProducer to the analysisSequence. This producer compute pf isolations # for our photons process.photonPFIsolation = cms.EDProducer("PhotonIsolationProducer", src = cms.InputTag("selectedPatPhotons") ) process.analysisSequence *= process.photonPFIsolation # Filtering # require physics declared process.load('HLTrigger.special.hltPhysicsDeclared_cfi') process.hltPhysicsDeclared.L1GtReadoutRecordTag = 'gtDigis' # require scraping filter process.scrapingVeto = cms.EDFilter("FilterOutScraping", applyfilter = cms.untracked.bool(True), debugOn = cms.untracked.bool(False), numtrack = cms.untracked.uint32(10), thresh = cms.untracked.double(0.25) ) # Count events process.nEventsTotal = cms.EDProducer("EventCountProducer") process.nEventsFiltered = cms.EDProducer("EventCountProducer") # MET Filters process.load("RecoMET.METFilters.metFilters_cff") # HCAL Laser filter : work only on Winter13 rereco process.load("EventFilter.HcalRawToDigi.hcallaserFilterFromTriggerResult_cff") #needed fot photon energy regression calculation process.load('Calibration.EleNewEnergiesProducer.elenewenergiesproducer_cfi') #getattr(process,"patPhotons" + p) process.patPhotons.userData.userFloats.src = [ cms.InputTag("eleNewEnergiesProducer","energySCEleJoshPhoSemiParamV5ecorr") ] ## uncomment to run interactive ## process.eleNewEnergiesProducer.regrPhoJoshV5_SemiParamFile = cms.string('../../../../src/HiggsAnalysis/GBRLikelihoodEGTools/data/regweights_v5_forest_ph.root') ## process.eleNewEnergiesProducer.regrEleJoshV5_SemiParamFile = cms.string('../../../../src/HiggsAnalysis/GBRLikelihoodEGTools/data/regweights_v5_forest_ele.root') process.eleNewEnergiesProducer.electronCollection = getattr(process,"patPhotons" + p).photonSource # Let it run process.p = cms.Path( process.nEventsTotal + # Filters process.hcalfilter + process.primaryVertexFilter + process.scrapingVeto + process.metFilters + process.goodOfflinePrimaryVertices + # photon energy regression process.eleNewEnergiesProducer + # Physics process.analysisSequence + process.nEventsFiltered ) if runOnMC: process.p.remove(process.hcalfilter) process.p.remove(process.scrapingVeto) # Add PF2PAT output to the created file from PhysicsTools.PatAlgos.patEventContent_cff import patEventContentNoCleaning #process.load("CommonTools.ParticleFlow.PF2PAT_EventContent_cff") process.out.outputCommands = cms.untracked.vstring('drop *', 'keep *_photonCore_*_*', 'keep double_kt6*Jets*_rho_*', 'keep *_goodOfflinePrimaryVertices_*_*', 'keep recoPFCandidates_particleFlow_*_*', # Content of *patEventContentNoCleaning 'keep *_selectedPatPhotons*_*_*', 'keep *_selectedPatElectrons*_*_*', 'keep *_selectedPatMuons*_*_*', 'keep *_selectedPatTaus*_*_*', 'keep *_selectedPatJets*_*_*', 'drop *_selectedPatJets_pfCandidates_*', 'drop *_*PF_caloTowers_*', 'drop *_*JPT_pfCandidates_*', 'drop *_*Calo_pfCandidates_*', 'keep *_patMETs*_*_*', 'keep *_selectedPatPFParticles*_*_*', 'keep *_selectedPatTrackCands*_*_*', 'keep *_cleanPatPhotons*_*_*', 'keep *_cleanPatElectrons*_*_*', 'keep *_cleanPatMuons*_*_*', 'keep *_cleanPatTaus*_*_*', 'keep *_cleanPatJets*_*_*', 'keep *_cleanPatHemispheres*_*_*', 'keep *_cleanPatPFParticles*_*_*', 'keep *_cleanPatTrackCands*_*_*', 'drop *_*PFlow_caloTowers_*', # Type I residual 'drop *_selectedPatJetsForMET*_*_PAT', 'keep *_patPFMet*_*_PAT', # Keep raw met # Trigger 'keep *_TriggerResults_*_HLT', # Debug #'keep *_pf*_*_PAT' # Photon ID 'keep *_patConversions*_*_*', 'keep *_photonPFIsolation*_*_*', # Quark Gluon tagging 'keep *_QGTagger*_*_*', 'drop *_kt6PFJetsIsoQG_*_PAT', 'drop *_kt6PFJetsQG_*_PAT', # MC truth 'keep *_genParticles_*_*', # RecHits 'keep *EcalRecHit*_*_*_*', # Beam spot 'keep *_offlineBeamSpot_*_*', #photon energy regression 'keep *_eleNewEnergiesProducer_*_*' ) if runOnMC: process.out.outputCommands.extend(['keep *_addPileupInfo_*_*', 'keep *_generator_*_*']) # switch on PAT trigger # from PhysicsTools.PatAlgos.tools.trigTools import switchOnTrigger # switchOnTrigger( process ) ## ------------------------------------------------------ # In addition you usually want to change the following # parameters: ## ------------------------------------------------------ # process.GlobalTag.globaltag = "%s::All" % (globalTag) ## (according to https://twiki.cern.ch/twiki/bin/view/CMS/SWGuideFrontierConditions) # ## #process.source.fileNames = cms.untracked.vstring('file:input_data.root') ## (e.g. 'file:AOD.root') # ## process.maxEvents.input = 2500 # ## # process.out.outputCommands = [ ... ] ## (e.g. taken from PhysicsTools/PatAlgos/python/patEventContent_cff.py) # ## process.options.wantSummary = False ## (to suppress the long output at the end of the job) process.MessageLogger.cerr.FwkReport.reportEvery = 1000 # Remove annoying ecalLaser messages process.MessageLogger.suppressError = cms.untracked.vstring ('ecalLaserCorrFilter') return process
def applyFilters(process): ## The beam scraping filter __________________________________________________|| process.noscraping = cms.EDFilter("FilterOutScraping", applyfilter=cms.untracked.bool(True), debugOn=cms.untracked.bool(False), numtrack=cms.untracked.uint32(10), thresh=cms.untracked.double(0.25)) ## The iso-based HBHE noise filter ___________________________________________|| #process.load('CommonTools.RecoAlgos.HBHENoiseFilter_cfi') ## The CSC beam halo tight filter ____________________________________________|| #process.load('RecoMET.METAnalyzers.CSCHaloFilter_cfi') process.load("RecoMET.METFilters.metFilters_cff") ## The HCAL laser filter _____________________________________________________|| process.load("RecoMET.METFilters.hcalLaserEventFilter_cfi") process.hcalLaserEventFilter.vetoByRunEventNumber = cms.untracked.bool( False) process.hcalLaserEventFilter.vetoByHBHEOccupancy = cms.untracked.bool(True) ## The ECAL dead cell trigger primitive filter _______________________________|| process.load('RecoMET.METFilters.EcalDeadCellTriggerPrimitiveFilter_cfi') ## For AOD and RECO recommendation to use recovered rechits process.EcalDeadCellTriggerPrimitiveFilter.tpDigiCollection = cms.InputTag( "ecalTPSkimNA") ## The EE bad SuperCrystal filter ____________________________________________|| process.load('RecoMET.METFilters.eeBadScFilter_cfi') ## The Good vertices collection needed by the tracking failure filter ________|| process.goodVertices = cms.EDFilter( "VertexSelector", filter=cms.bool(False), src=cms.InputTag("offlinePrimaryVertices"), cut=cms.string( "!isFake && ndof > 4 && abs(z) <= 24 && position.rho < 2")) ## The tracking failure filter _______________________________________________|| process.load('RecoMET.METFilters.trackingFailureFilter_cfi') process.load('RecoMET.METFilters.trackingPOGFilters_cfi') # Tracking TOBTEC fakes filter ## # if true, only events passing filter (bad events) will pass process.tobtecfakesfilter.filter = cms.bool(False) ## The good primary vertex filter ____________________________________________|| pvSrc = 'offlinePrimaryVertices' process.primaryVertexFilter = cms.EDFilter( "VertexSelector", src=cms.InputTag("offlinePrimaryVertices"), cut=cms.string( "!isFake & ndof > 4 & abs(z) <= 24 & position.Rho <= 2"), filter=cms.bool(True)) from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams=pvSelector.clone( maxZ=cms.double(24.0), minNdof=cms.double(4.0) # this is >= 4 ), src=cms.InputTag(pvSrc))
def baseconfig( globaltag, input_files, maxevents, nickname, outputfilename, channel='mm', is_data=None, kappa_verbosity=0, ): """ Create the CMSSW/cmsRun config for the z+jet skim :param globaltag: CMS global tag for the data :param globaltag: str :param input_files: files to process :type input_files: list[str] :param maxevents: number of events to process; `-1` implies all events :type maxevents: int :param nickname: nickname of the skim :type nickname: str :param channel: decay channel of Z; either of `mm` , `em`, `ee` :type channel: str :param is_data: whether input is data or simulated; use `None` for autodetection :type is_data: bool or None """ # Config parameters ############################################## cmssw_version = os.environ["CMSSW_VERSION"].split('_') cmssw_version = tuple([int(i) for i in cmssw_version[1:4]] + cmssw_version[4:]) autostr = "" if globaltag.lower() == 'auto': from Configuration.AlCa.autoCond import autoCond globaltag = autoCond['startup'] autostr = " (from autoCond)" if is_data is None: data = ('Double' in input_files[0]) or ('Single' in input_files[0]) else: data = is_data miniaod = False add_puppi = (channel == 'mm') ## print information print "\n------- CONFIGURATION 1 ---------" print "input: ", input_files[0], "... (%d files)" % len(input_files) if len(input_files) > 1 else "" print "file type: ", "miniAOD" if miniaod else "AOD" print "data: ", data print "output: ", outputfilename print "nickname: ", nickname print "global tag: ", globaltag + autostr print "max events: ", maxevents if maxevents >= 0 else "all" print "cmssw version: ", '.'.join([str(i) for i in cmssw_version]) print "channel: ", channel print "add_puppi: ", add_puppi print "kappa verbosity:", kappa_verbosity print "---------------------------------" print # Basic Process Setup ############################################ process = cms.Process("KAPPA") process.path = cms.Path() process.maxEvents = cms.untracked.PSet( input=cms.untracked.int32(maxevents) ) process.options = cms.untracked.PSet( wantSummary=cms.untracked.bool(True) ) process.source = cms.Source("PoolSource", fileNames=cms.untracked.vstring(input_files) ) # message logger process.load("FWCore.MessageLogger.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 50 process.MessageLogger.default = cms.untracked.PSet( ERROR=cms.untracked.PSet(limit=cms.untracked.int32(5)) ) ## Geometry and Detector Conditions (needed for a few patTuple production steps) if cmssw_version > (7, 4, 0, 'pre8'): # https://twiki.cern.ch/twiki/bin/view/Sandbox/MyRootMakerFrom72XTo74X#DDVectorGetter_vectors_are_empty print "Use condDBv2 and GeometryRecoDB:" process.load("Configuration.Geometry.GeometryRecoDB_cff") process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_condDBv2_cff') else: process.load("Configuration.Geometry.GeometryIdeal_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") process.load("Configuration.StandardSequences.MagneticField_cff") process.GlobalTag.globaltag = cms.string(globaltag) # Kappa ########################################################## process.load('Kappa.Producers.KTuple_cff') process.kappaTuple = cms.EDAnalyzer('KTuple', process.kappaTupleDefaultsBlock, outputFile = cms.string(outputfilename), ) process.kappaTuple.verbose = kappa_verbosity process.kappaOut = cms.Sequence(process.kappaTuple) process.kappaTuple.active = cms.vstring('VertexSummary', 'BeamSpot') if data: process.kappaTuple.active += cms.vstring('DataInfo') else: process.kappaTuple.active += cms.vstring('GenInfo', 'GenParticles') if cmssw_version >= (7, 4, 0): process.kappaTuple.Info.overrideHLTCheck = cms.untracked.bool(True) # must be set explicitly for consume emchanic if cmssw_version >= (7, 6, 0): process.kappaTuple.Info.hltSource = cms.InputTag("TriggerResults", "", "HLT") if channel == 'mm': process.kappaTuple.Info.hltWhitelist = cms.vstring( # HLT regex selection can be tested at https://regex101.com (with gm options) # single muon triggers, e.g. HLT_Mu50_v1 "^HLT_(Iso)?(Tk)?Mu[0-9]+(_eta2p1|_TrkIsoVVL)?_v[0-9]+$", # double muon triggers, e.g. HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_v1 "^HLT_Mu[0-9]+(_TrkIsoVVL)?_(Tk)?Mu[0-9]+(_TrkIsoVVL)?(_DZ)?_v[0-9]+$", ) elif channel == 'ee': process.kappaTuple.Info.hltWhitelist = cms.vstring( "^HLT_Ele[0-9]+_Ele[0-9]+(_CaloIdL)?(_TrackIdL)?(_IsoVL)?(_DZ)?_v[0-9]+$", ) # Primary Input Collections ################################################### ## miniAOD has NOT been tested, I'm just guessing names - MF@20150907 if miniaod: input_PFCandidates = 'packedPFCandidates' input_PFCandidatePtrs = 'packedPFCandidatesPtrs' input_PrimaryVertices = 'offlineSlimmedPrimaryVertices' else: input_PFCandidates = 'particleFlow' input_PFCandidatePtrs = 'particleFlowPtrs' input_PrimaryVertices = 'goodOfflinePrimaryVertices' # PFCandidates ################################################### ## Good offline PV selection: from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter('PrimaryVertexObjectFilter', filterParams = pvSelector.clone(maxZ = 24.0), # ndof >= 4, rho <= 2 ) ## ------------------------------------------------------------------------ ## TopProjections from CommonTools/ParticleFlow: process.load("CommonTools.ParticleFlow.pfNoPileUpIso_cff") process.load("CommonTools.ParticleFlow.pfNoPileUpIso_cff") process.load("CommonTools.ParticleFlow.pfParticleSelection_cff") ## pf candidate configuration for everything but CHS jets process.pfPileUpIso.PFCandidates = cms.InputTag(input_PFCandidates) process.pfPileUpIso.Vertices = cms.InputTag(input_PrimaryVertices) process.pfPileUpIso.checkClosestZVertex = True process.pfNoPileUpIso.bottomCollection = cms.InputTag(input_PFCandidates) ## pf candidate configuration for deltaBeta corrections for muons and electrons process.pfNoPileUpChargedHadrons = process.pfAllChargedHadrons.clone() process.pfNoPileUpNeutralHadrons = process.pfAllNeutralHadrons.clone() process.pfNoPileUpPhotons = process.pfAllPhotons.clone() process.pfPileUpChargedHadrons = process.pfAllChargedHadrons.clone(src = 'pfPileUpIso') ## pf candidate configuration for CHS jets process.pfPileUp.Vertices = cms.InputTag(input_PrimaryVertices) process.pfPileUp.checkClosestZVertex = False # Modifications for new particleFlow Pointers process.pfPileUp.PFCandidates = cms.InputTag(input_PFCandidatePtrs) process.pfPileUpIso.PFCandidates = cms.InputTag(input_PFCandidatePtrs) process.pfNoPileUp.bottomCollection = cms.InputTag(input_PFCandidatePtrs) process.pfNoPileUpIso.bottomCollection = cms.InputTag(input_PFCandidatePtrs) process.path *= ( process.goodOfflinePrimaryVertices * process.pfParticleSelectionSequence ) if add_puppi: ## PUPPI - https://twiki.cern.ch/twiki/bin/viewauth/CMS/PUPPI # creates filtered PFCandidates collection 'puppi' process.load('CommonTools.PileupAlgos.Puppi_cff') process.puppi.candName = cms.InputTag(input_PFCandidates) process.puppi.vertexName = cms.InputTag(input_PrimaryVertices) # PFCandidates w/o muons for PUPPI - avoid misidentification from high-PT muons process.PFCandidatesNoMu = cms.EDFilter("CandPtrSelector", src = cms.InputTag(input_PFCandidates), cut = cms.string("abs(pdgId)!=13" ) ) process.PFCandidatesOnlyMu = cms.EDFilter("CandPtrSelector", src = cms.InputTag(input_PFCandidates), cut = cms.string("abs(pdgId)==13" ) ) # veto without any muons process.puppinomutmp = process.puppi.clone( candName = cms.InputTag('PFCandidatesNoMu') ) # nomu veto, muons merged back again for proper MET etc. process.puppinomu = cms.EDProducer("CandViewMerger", src = cms.VInputTag( "puppinomutmp", "PFCandidatesOnlyMu") ) process.path *= (process.puppi * (process.PFCandidatesNoMu * process.PFCandidatesOnlyMu * process.puppinomutmp * process.puppinomu)) # Muons ########################################################## if channel == 'mm': process.load('Kappa.Skimming.KMuons_run2_cff') process.muPreselection1 = cms.EDFilter('CandViewSelector', src = cms.InputTag('muons'), cut = cms.string("pt>8.0"), ) process.muPreselection2 = cms.EDFilter('CandViewCountFilter', src = cms.InputTag('muPreselection1'), minNumber = cms.uint32(2), ) process.kappaTuple.Muons.minPt = 8.0 process.kappaTuple.Muons.doPfIsolation = cms.bool(False) process.kappaTuple.active += cms.vstring('Muons') process.path *= (process.muPreselection1 * process.muPreselection2 * process.makeKappaMuons) # Electrons ######################################################## elif channel == 'ee': process.load('Kappa.Skimming.KElectrons_run2_cff') process.ePreselection1 = cms.EDFilter('CandViewSelector', src = cms.InputTag('patElectrons'), cut = cms.string("pt>8.0"), ) process.ePreselection2 = cms.EDFilter('CandViewCountFilter', src = cms.InputTag('ePreselection1'), minNumber = cms.uint32(2), ) process.kappaTuple.Electrons.minPt = 8.0 from Kappa.Skimming.KElectrons_run2_cff import setupElectrons process.kappaTuple.Electrons.ids = cms.VInputTag("cutBasedElectronID_Spring15_25ns_V1_standalone_loose", "cutBasedElectronID_Spring15_25ns_V1_standalone_medium", "cutBasedElectronID_Spring15_25ns_V1_standalone_tight", "cutBasedElectronID_Spring15_25ns_V1_standalone_veto", "ElectronMVAEstimatorRun2Spring15NonTrig25nsV1Values") setupElectrons(process) process.kappaTuple.active += cms.vstring('Electrons') process.path *= (process.makeKappaElectrons * process.ePreselection1 * process.ePreselection2) # Jets ########################################################### # Kappa jet processing process.kappaTuple.Jets.minPt = 5.0 process.kappaTuple.Jets.taggers = cms.vstring() # containers for objects to process jet_resources = [] cmssw_jets = {} # algoname: cmssw module kappa_jets = {} # algoname: kappa jet config # GenJets if not data: process.load('RecoJets.Configuration.GenJetParticles_cff') process.load('RecoJets.JetProducers.ak5GenJets_cfi') jet_resources.append(process.genParticlesForJetsNoNu) process.kappaTuple.active += cms.vstring('LV') process.kappaTuple.LV.whitelist = cms.vstring('ak5GenJetsNoNu') #default? genbase_jet = process.ak5GenJets.clone(src=cms.InputTag("genParticlesForJetsNoNu"), doAreaFastjet=True) ## PFBRECO? process.load("RecoJets.JetProducers.ak5PFJets_cfi") pfbase_jet = process.ak5PFJets.clone(srcPVs = 'goodOfflinePrimaryVertices', doAreaFastjet=True) # create Jet variants for param in (4, 5, 8): # PFJets algos_and_tags = [("", input_PFCandidates), ("CHS", 'pfNoPileUp')] if add_puppi: algos_and_tags += [("Puppi", 'puppi'),("PuppiNoMu", 'puppinomu')] for algo, input_tag in algos_and_tags: variant_name = "ak%dPFJets%s" % (param, algo) variant_mod = pfbase_jet.clone(src=cms.InputTag(input_tag), rParam=param/10.0) cmssw_jets[variant_name] = variant_mod # Full Kappa jet definition kappa_jets["ak%dPFJets%s"%(param, algo)] = cms.PSet( src = cms.InputTag(variant_name), PUJetID = cms.InputTag("ak%dPF%sPuJetMva" % (param, algo)), PUJetID_full = cms.InputTag("full"), QGtagger = cms.InputTag("AK%dPFJets%sQGTagger" % (param, algo)), Btagger = cms.InputTag("ak%dPF%s" % (param, algo)), ) # GenJets if not data: for collection in ("NoNu",): # TODO: add "NoMuNoNu", "" ? variant_name = "ak%sGenJets%s" % (param, collection) variant_mod = genbase_jet.clone(rParam=param/10.0) cmssw_jets[variant_name] = variant_mod # GenJets are just KLVs process.kappaTuple.LV.whitelist += cms.vstring(variant_name) # mount generated jets for processing for name, jet_module in cmssw_jets.iteritems(): setattr(process, name, jet_module) for name, pset in kappa_jets.iteritems(): setattr(process.kappaTuple.Jets, name, pset) process.path *= reduce(lambda a, b: a * b, jet_resources + sorted(cmssw_jets.values())) # Gluon tagging? - https://twiki.cern.ch/twiki/bin/viewauth/CMS/GluonTag # B-tagging (for ak5 jets)? - https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookBTagging#DifferentJets # B-tagging for (ak5 CHS jets)? - https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookBTagging#DifferentJets # PileupDensity ######################## from RecoJets.JetProducers.kt4PFJets_cfi import kt4PFJets process.pileupDensitykt6PFJets = kt4PFJets.clone(rParam=0.6, doRhoFastjet=True, Rho_EtaMax=2.5) process.kappaTuple.active += cms.vstring('Jets', 'PileupDensity') process.kappaTuple.PileupDensity.rename = cms.vstring("fixedGridRhoFastjetAll => pileupDensity") process.path *= ( process.pileupDensitykt6PFJets ) # MET correction ---------------------------------------------------------- #TODO check type 0 corrections from RecoMET.METProducers.PFMET_cfi import pfMet process.pfMETCHS = pfMet.clone(src=cms.InputTag(input_PFCandidates)) process.kappaTuple.active += cms.vstring('MET') # MET without forward region process.PFCandidatesNoHF = cms.EDFilter("CandPtrSelector", src = cms.InputTag(input_PFCandidates), cut = cms.string("abs(eta) < 3" ) ) process.pfMETCHSNoHF = pfMet.clone(src=cms.InputTag('PFCandidatesNoHF')) process.path *= (process.pfMETCHS * process.PFCandidatesNoHF * process.pfMETCHSNoHF) if add_puppi: process.pfMetPuppi = pfMet.clone(src=cms.InputTag('puppi')) process.pfMetPuppiNoMu = pfMet.clone(src=cms.InputTag('puppinomu')) process.path *= ( process.pfMetPuppi * process.pfMetPuppiNoMu ) process.PuppiNoHF = cms.EDFilter("CandPtrSelector", src = cms.InputTag('puppi'), cut = cms.string("abs(eta) < 3" ) ) process.PuppiNoMuNoHF = cms.EDFilter("CandPtrSelector", src = cms.InputTag('puppinomu'), cut = cms.string("abs(eta) < 3" ) ) process.pfMetPuppiNoHF = pfMet.clone(src=cms.InputTag('PuppiNoHF')) process.pfMetPuppiNoMuNoHF = pfMet.clone(src=cms.InputTag('PuppiNoMuNoHF')) process.path *= ( process.PuppiNoHF * process.pfMetPuppiNoHF * process.PuppiNoMuNoHF * process.pfMetPuppiNoMuNoHF ) process.kappaTuple.MET.whitelist += cms.vstring('pfMetPuppiNoHF', 'pfMetPuppiNoMuNoHF') # Kappa Output ########################################################### process.path *= ( process.kappaOut ) # explicit declaration until white/blacklist works again - MF@160119 # note: extracted from running on CMSSW < 7_6 if cmssw_version >= (7, 6, 0): process.kappaTuple.BeamSpot.offlineBeamSpot = cms.PSet(src=cms.InputTag("offlineBeamSpot")) process.kappaTuple.VertexSummary.offlinePrimaryVerticesSummary = cms.PSet(src=cms.InputTag("offlinePrimaryVertices")) process.kappaTuple.VertexSummary.goodOfflinePrimaryVerticesSummary = cms.PSet(src=cms.InputTag("goodOfflinePrimaryVertices")) if not data: process.kappaTuple.LV.ak4GenJetsNoNu = cms.PSet(src=cms.InputTag("ak4GenJetsNoNu")) process.kappaTuple.LV.ak5GenJetsNoNu = cms.PSet(src=cms.InputTag("ak5GenJetsNoNu")) process.kappaTuple.LV.ak8GenJetsNoNu = cms.PSet(src=cms.InputTag("ak8GenJetsNoNu")) process.kappaTuple.PileupDensity.pileupDensity = cms.PSet(src=cms.InputTag("fixedGridRhoFastjetAll")) process.kappaTuple.PileupDensity.pileupDensityCalo = cms.PSet(src=cms.InputTag("fixedGridRhoFastjetAllCalo")) process.kappaTuple.MET.pfChMet = cms.PSet(src=cms.InputTag("pfChMet")) process.kappaTuple.MET.metCHS = cms.PSet(src=cms.InputTag("pfMETCHS")) process.kappaTuple.MET.metCHSNoHF = cms.PSet(src=cms.InputTag("pfMETCHSNoHF")) process.kappaTuple.MET.met = cms.PSet(src=cms.InputTag("pfMet")) process.kappaTuple.MET.metEI = cms.PSet(src=cms.InputTag("pfMetEI")) if channel == 'mm': process.kappaTuple.MET.metPuppi = cms.PSet(src=cms.InputTag("pfMetPuppi")) process.kappaTuple.MET.metPuppiNoHF = cms.PSet(src=cms.InputTag("pfMetPuppiNoHF")) # final information: print "------- CONFIGURATION 2 ---------" print "CMSSW producers:" for p in str(process.path).split('+'): print " %s" % p print "Kappa producers:" for p in sorted(process.kappaTuple.active): print " %s" % p print "---------------------------------" return process
## The good primary vertex filter ____________________________________________|| process.primaryVertexFilter = cms.EDFilter( "VertexSelector", src = cms.InputTag("offlinePrimaryVertices"), cut = cms.string("!isFake & ndof > 4 & abs(z) <= 24 & position.Rho < 2"), filter = cms.bool(True) ) from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams = pvSelector.clone( maxZ = cms.double(24.0), minNdof = cms.double(4.0) # this is >= 4 ), src=cms.InputTag(pvSrc) ) process.trackingFailureFilter.VertexSource = 'primaryVertexFilter' process.filtersSeq = cms.Sequence( process.primaryVertexFilter * #process.noscraping * process.HBHENoiseFilter* process.CSCTightHaloFilter * process.hcalLaserEventFilter * process.EcalDeadCellTriggerPrimitiveFilter * process.trackingFailureFilter * process.eeBadScFilter *
import FWCore.ParameterSet.Config as cms from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector goodOnlinePrimaryVertices = cms.EDFilter("PrimaryVertexObjectFilter", filterParams = pvSelector.clone( minNdof = 4.0, maxZ = 24.0 ), src = cms.InputTag('offlinePrimaryVertices') )
process.kt6PFJets.doRhoFastjet = True ##-------------------- Turn-on the FastJet jet area calculation for your favorite algorithm ----------------------- #process.ak5PFJets.doAreaFastjet = True process.primaryVertexFilter = cms.EDFilter("GoodVertexFilter", vertexCollection = cms.InputTag('offlinePrimaryVertices'), minimumNDOF = cms.uint32(4) , maxAbsZ = cms.double(24), maxd0 = cms.double(2) ) from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams = pvSelector.clone( maxZ = cms.double(24.0) ), src=cms.InputTag('offlinePrimaryVertices') ) ############################### ########## Electron ID ######## ############################### process.load('RecoEgamma.ElectronIdentification.cutsInCategoriesElectronIdentificationV06_cfi') process.load("ElectroWeakAnalysis.WENu.simpleEleIdSequence_cff") process.patElectrons.electronIDSources = cms.PSet( #CiC eidVeryLooseMC = cms.InputTag("eidVeryLooseMC"),
def makeMiBiCommonNT(process, GlobalTag, HLT='HLT', MC=False, MCType='Other'): # Setup the process process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) process.load("FWCore.MessageService.MessageLogger_cfi") process.MessageLogger.cerr.FwkReport.reportEvery = 100 process.load('Configuration.StandardSequences.GeometryDB_cff') process.load("Configuration.StandardSequences.MagneticField_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") process.GlobalTag.globaltag = GlobalTag # Source process.source = cms.Source( "PoolSource", fileNames = cms.untracked.vstring() ) # Out process.out = cms.OutputModule( "PoolOutputModule", outputCommands = cms.untracked.vstring(), fileName = cms.untracked.string('file:./MiBiCommonPAT.root'), ) #process.e = cms.EndPath(process.out) process.load("PhysicsTools.NtupleUtils.PUDumper_cfi") process.PUDumper.mcFlag = cms.untracked.bool(MC) process.load("PhysicsTools.NtupleUtils.AllPassFilter_cfi") #-------------------------- # Counter1: All read events process.AllEvents = process.AllPassFilter.clone() #-------------------------- # Counter2: Scraping filter process.scrapingFilter = cms.EDFilter( "FilterOutScraping", applyfilter = cms.untracked.bool(True), debugOn = cms.untracked.bool(False), numtrack = cms.untracked.uint32(10), thresh = cms.untracked.double(0.25) ) process.NonScrapedEvents = process.AllPassFilter.clone() #----------------------------------- # Counter3: Filter on primary vertex # Get a list of good primary vertices, in 42x, these are DAF vertices from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams = pvSelector.clone( minNdof = cms.double(3.0), maxZ = cms.double(24.0) ), src=cms.InputTag('offlinePrimaryVertices') ) process.GoodVtxEvents = process.AllPassFilter.clone() #------------------------------------- # build muonless vertices #add track no muon producer process.load("PhysicsTools.MiBiCommonPAT.NoMuonTrackProducer_cfi") # re-do vertices process.load("TrackingTools/TransientTrack/TransientTrackBuilder_cfi") from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import * process.offlinePrimaryVerticesNoMu=offlinePrimaryVertices.clone() process.offlinePrimaryVerticesNoMu.TrackLabel = cms.InputTag("NoMuonTrackProducer") process.noMuonVertexReco = cms.Sequence(process.NoMuonTrackProducer*process.offlinePrimaryVerticesNoMu) #------------------------------------- # build electron less vertices #add track no electron producer process.load("PhysicsTools.MiBiCommonPAT.NoElectronTrackProducer_cfi") # re-do vertices process.load("TrackingTools/TransientTrack/TransientTrackBuilder_cfi") from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import * process.offlinePrimaryVerticesNoEle=offlinePrimaryVertices.clone() process.offlinePrimaryVerticesNoEle.TrackLabel = cms.InputTag("NoElectronTrackProducer") process.noElectronVertexReco = cms.Sequence(process.NoElectronTrackProducer*process.offlinePrimaryVerticesNoEle) #------------------------------------- # build electron+muon less vertices #add track no lepton producer process.load("PhysicsTools.MiBiCommonPAT.NoLeptonTrackProducer_cfi") # re-do vertices process.load("TrackingTools/TransientTrack/TransientTrackBuilder_cfi") from RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi import * process.offlinePrimaryVerticesNoLep=offlinePrimaryVertices.clone() process.offlinePrimaryVerticesNoLep.TrackLabel = cms.InputTag("NoLeptonTrackProducer") process.noLeptonVertexReco = cms.Sequence(process.NoLeptonTrackProducer*process.offlinePrimaryVerticesNoLep) #------------------ #Load PAT sequences process.load("PhysicsTools.PatAlgos.patSequences_cff") process.load("PhysicsTools.PatAlgos.tools.pfTools") postfix = "PFlow" if not MC: usePF2PAT(process, runPF2PAT=True, jetAlgo='AK5', runOnMC=MC, postfix = postfix, jetCorrections=('AK5PFchs', ['L1FastJet','L2Relative','L3Absolute','L2L3Residual']) ) if MC: usePF2PAT(process, runPF2PAT=True, jetAlgo='AK5', runOnMC=MC, postfix = postfix, jetCorrections=('AK5PFchs', ['L1FastJet','L2Relative','L3Absolute']) ) process.pfPileUpPFlow.Enable = True process.pfPileUpPFlow.Vertices = cms.InputTag('goodOfflinePrimaryVertices') process.pfPileUpPFlow.checkClosestZVertex = cms.bool(False) process.pfJetsPFlow.doAreaFastjet = True process.pfJetsPFlow.doRhoFastjet = False if not MC: removeMCMatching(process, ['All']) # remove taus from the sequence removeSpecificPATObjects( process, ['Taus'] ) process.patDefaultSequence.remove( process.patTaus ) #### jets #### process.load('JetMETCorrections.Configuration.DefaultJEC_cff') from RecoJets.JetProducers.kt4PFJets_cfi import * # compute FastJet rho to correct jets process.kt6PFJets = kt4PFJets.clone( rParam = cms.double(0.6), doAreaFastjet = cms.bool(True), doRhoFastjet = cms.bool(True) ) process.patJetCorrFactors.rho = cms.InputTag("kt6PFJets","rho") # compute CHS rho to correct jets process.kt6PFJetsPFlow = kt4PFJets.clone( rParam = cms.double(0.6), src = cms.InputTag('pfNoElectron'+postfix), doAreaFastjet = cms.bool(True), doRhoFastjet = cms.bool(True) ) process.patJetCorrFactorsPFlow.rho = cms.InputTag("kt6PFJetsPFlow", "rho") # compute FastJet rho to correct isolation process.kt6PFJetsForIsolation = kt4PFJets.clone( rParam = 0.6, doRhoFastjet = True ) process.kt6PFJetsForIsolation.Rho_EtaMax = cms.double(2.5) # compute area for ak5PFJets from RecoJets.JetProducers.ak5PFJets_cfi import * process.ak5PFJets = ak5PFJets.clone() process.ak5PFJets.doAreaFastjet = True # --------------- # add collections addTcMET(process, 'TC') addPfMET(process, 'PF') if not MC: addJetCollection( process, cms.InputTag('ak5PFJets'), 'AK5', 'PF', doJTA = True, doBTagging = True, jetCorrLabel = ('AK5PF', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual'])), doType1MET = True, doL1Cleaning = True, doL1Counters = False, genJetCollection=cms.InputTag("ak5GenJets"), doJetID = True, jetIdLabel = "ak5" ) if MC: addJetCollection( process, cms.InputTag('ak5PFJets'), 'AK5', 'PF', doJTA = True, doBTagging = True, jetCorrLabel = ('AK5PF', cms.vstring(['L1FastJet', 'L2Relative', 'L3Absolute'])), doType1MET = True, doL1Cleaning = True, doL1Counters = False, genJetCollection=cms.InputTag("ak5GenJets"), doJetID = True, jetIdLabel = "ak5" ) # ------------------- # pat selection layer process.selectedPatElectrons.cut = cms.string("pt > 17. & abs(eta) < 2.5") process.selectedPatElectronsPFlow.cut = cms.string("pt > 17. & abs(eta) < 2.5") process.selectedPatMuons.cut = cms.string("pt > 17. & abs(eta) < 2.5") process.selectedPatMuonsPFlow.cut = cms.string("pt > 17. & abs(eta) < 2.5") process.selectedPatJets.cut = cms.string("pt > 15. & abs(eta) < 5") process.selectedPatJetsPFlow.cut = cms.string("pt > 15. & abs(eta) < 5") process.selectedPatJetsAK5PF.cut = cms.string("pt > 15. & abs(eta) < 5") process.selectedPatPhotons.cut = cms.string("pt > 10. & abs(eta) < 5") process.selectedPatPhotonsPFlow.cut = cms.string("pt > 10. & abs(eta) < 5") # the HCAL Noise Filter process.load('CommonTools.RecoAlgos.HBHENoiseFilterResultProducer_cfi') # Add the KT6 producer to the sequence getattr(process,"patPF2PATSequence"+postfix).replace( getattr(process,"pfNoElectron"+postfix), getattr(process,"pfNoElectron"+postfix)*process.kt6PFJetsPFlow ) # the MiBiPAT path process.MiBiCommonPAT = cms.Sequence( process.PUDumper * process.AllEvents * # -> Counter process.scrapingFilter * process.NonScrapedEvents * # -> Counter process.goodOfflinePrimaryVertices * process.GoodVtxEvents * # -> Counter process.HBHENoiseFilterResultProducer * getattr(process,"patPF2PATSequence"+postfix) * process.kt6PFJets * process.kt6PFJetsForIsolation * process.ak5PFJets * process.patDefaultSequence ) #---------------------- # Lepton/Photon Filters process.load('PhysicsTools.PatAlgos.selectionLayer1.leptonCountFilter_cfi') process.LeptonsFilter = countPatLeptons.clone( electronSource = cms.InputTag("selectedPatElectrons"), muonSource = cms.InputTag("selectedPatMuons"), minNumber = cms.uint32(1) ) process.LeptonsFilterPFlow = countPatLeptons.clone( electronSource = cms.InputTag("selectedPatElectronsPFlow"), muonSource = cms.InputTag("selectedPatMuonsPFlow"), minNumber = cms.uint32(1) ) process.load('PhysicsTools.PatAlgos.selectionLayer1.photonCountFilter_cfi') process.PhotonsFilter = countPatPhotons.clone( src = cms.InputTag("selectedPatPhotons"), minNumber = cms.uint32(2) ) process.load('PhysicsTools.PatAlgos.selectionLayer1.electronCountFilter_cfi') process.ElectronsFilter = countPatElectrons.clone( src = cms.InputTag("selectedPatElectrons"), minNumber = cms.uint32(1) ) process.ElectronsPFlowFilter = countPatElectrons.clone( src = cms.InputTag("selectedPatElectronsPFlow"), minNumber = cms.uint32(1) ) process.load('PhysicsTools.PatAlgos.selectionLayer1.muonCountFilter_cfi') process.MuonsFilter = countPatMuons.clone( src = cms.InputTag("selectedPatMuons"), minNumber = cms.uint32(2) ) # add inv mass cut # build Z-> MuMu candidates process.dimuons = cms.EDProducer("CandViewShallowCloneCombiner", checkCharge = cms.bool(False), cut = cms.string('mass > 60.'), decay = cms.string("selectedPatMuons selectedPatMuons") ) # Z filter process.dimuonsFilter = cms.EDFilter("CandViewCountFilter", src = cms.InputTag("dimuons"), minNumber = cms.uint32(1) ) #------------ # Jet Filters process.load('PhysicsTools.PatAlgos.selectionLayer1.jetCountFilter_cfi') process.JetFilterAK5PF = countPatJets.clone( src = cms.InputTag("selectedPatJetsAK5PF"), minNumber = cms.uint32(2) ) process.JetFilterPFlow = countPatJets.clone( src = cms.InputTag("selectedPatJetsPFlow"), minNumber = cms.uint32(2) ) #----------- # Sequences & Other counters process.LeptonsFilterEvents = process.AllPassFilter.clone() process.LeptonsFilterPFlowEvents = process.AllPassFilter.clone() process.ElectronsFilterEvents = process.AllPassFilter.clone() process.ElectronsPFlowFilterEvents = process.AllPassFilter.clone() process.JetFilterAK5PFEvents = process.AllPassFilter.clone() process.JetFilterPFlowEvents = process.AllPassFilter.clone() process.PhotonsFilterEvents = process.AllPassFilter.clone() process.MuonsFilterEvents = process.AllPassFilter.clone() process.OneLeptonTwoJetsAK5PFSeq = cms.Sequence( process.LeptonsFilter* process.LeptonsFilterEvents* process.JetFilterAK5PF* process.JetFilterAK5PFEvents ) process.OneLeptonTwoJetsPFlowSeq = cms.Sequence( process.LeptonsFilterPFlow* process.LeptonsFilterPFlowEvents* process.JetFilterPFlow* process.JetFilterPFlowEvents ) process.OneEleSeq = cms.Sequence( process.ElectronsFilter* process.ElectronsFilterEvents ) process.OneElePFlowSeq = cms.Sequence( process.ElectronsPFlowFilter* process.ElectronsPFlowFilterEvents ) process.TwoPhotonsSeq = cms.Sequence( process.PhotonsFilter* process.PhotonsFilterEvents ) process.TwoMuonsSeq = cms.Sequence( process.MuonsFilter* process.dimuons* process.dimuonsFilter* process.MuonsFilterEvents ) process.TwoJetsPFlowSeq = cms.Sequence( process.JetFilterPFlow* process.JetFilterPFlowEvents ) process.TwoJetsAK5PFSeq = cms.Sequence( process.JetFilterAK5PF* process.JetFilterAK5PFEvents ) # the MiBiNTUPLE process.load("PhysicsTools.MiBiCommonPAT.SimpleNtuple_cfi") process.MiBiCommonNT = process.SimpleNtuple.clone() process.MiBiCommonNT.saveMCPU = cms.untracked.bool (MC) process.MiBiCommonNT.saveProcessId = cms.untracked.bool (MC) process.MiBiCommonNT.saveGenJet = cms.untracked.bool (MC) process.MiBiCommonNT.saveMCPtHat = cms.untracked.bool (MC) process.MiBiCommonNT.savePhotonsMother = cms.untracked.bool (False) process.MiBiCommonNT.saveMCTTBar = cms.untracked.bool (False) process.MiBiCommonNT.saveMCHiggs = cms.untracked.bool (False) process.MiBiCommonNT.saveMCHiggsWW = cms.untracked.bool (False) process.MiBiCommonNT.saveMCHiggsGammaGamma = cms.untracked.bool (False) process.MiBiCommonNT.saveMCZW = cms.untracked.bool (False) if MCType == 'TTBar': process.MiBiCommonNT.saveMCTTBar = cms.untracked.bool (True) if MCType == 'Higgs': process.MiBiCommonNT.saveMCHiggs = cms.untracked.bool (True) if MCType == 'HiggsWW': process.MiBiCommonNT.saveMCHiggs = cms.untracked.bool (True) process.MiBiCommonNT.saveMCHiggsWW = cms.untracked.bool (True) if MCType == 'HiggsGammaGamma': process.MiBiCommonNT.saveMCHiggs = cms.untracked.bool (True) process.MiBiCommonNT.saveMCHiggsGammaGamma = cms.untracked.bool (True) if MCType == 'ZW': process.MiBiCommonNT.saveMCZW = cms.untracked.bool (True) process.MiBiCommonNTOneLeptonTwoJetsAK5PF = process.MiBiCommonNT.clone() process.MiBiCommonNTOneLeptonTwoJetsAK5PF.JetTag = cms.InputTag("selectedPatJetsAK5PF") process.MiBiCommonNTTwoJetsAK5PF = process.MiBiCommonNT.clone() process.MiBiCommonNTTwoJetsAK5PF.JetTag = cms.InputTag("patJetsAK5PF") process.MiBiCommonNTOneLeptonTwoJetsPFlow = process.MiBiCommonNT.clone() process.MiBiCommonNTOneLeptonTwoJetsPFlow.TauTag = cms.InputTag("patTausPFlow") process.MiBiCommonNTOneLeptonTwoJetsPFlow.MuTag = cms.InputTag("patMuonsPFlow") process.MiBiCommonNTOneLeptonTwoJetsPFlow.EleTag = cms.InputTag("patElectronsPFlow") process.MiBiCommonNTOneLeptonTwoJetsPFlow.JetTag = cms.InputTag("selectedPatJetsPFlow") process.MiBiCommonNTOneLeptonTwoJetsPFlow.MetTag = cms.InputTag("patMETsPFlow") process.MiBiCommonNTTwoJetsPFlow = process.MiBiCommonNT.clone() process.MiBiCommonNTTwoJetsPFlow.MuTag = cms.InputTag("patMuonsPFlow") process.MiBiCommonNTTwoJetsPFlow.EleTag = cms.InputTag("patElectronsPFlow") process.MiBiCommonNTTwoJetsPFlow.JetTag = cms.InputTag("patJetsPFlow") process.MiBiCommonNTTwoJetsPFlow.MetTag = cms.InputTag("patMETsPFlow") process.MiBiCommonNTTwoPhotons = process.MiBiCommonNT.clone() process.MiBiCommonNTTwoPhotons.JetTag = cms.InputTag("patJetsAK5PF") process.MiBiCommonNTOneElectron = process.MiBiCommonNT.clone() process.MiBiCommonNTOneElectron.JetTag = cms.InputTag("patJetsAK5PF") process.MiBiCommonNTOneElectronPFlow = process.MiBiCommonNT.clone() process.MiBiCommonNTOneElectronPFlow.MuTag = cms.InputTag("patMuonsPFlow") process.MiBiCommonNTOneElectronPFlow.EleTag = cms.InputTag("patElectronsPFlow") process.MiBiCommonNTOneElectronPFlow.JetTag = cms.InputTag("patJetsPFlow") process.MiBiCommonNTOneElectronPFlow.MetTag = cms.InputTag("patMETsPFlow") #process.MiBiCommonNTOneElectronPFlow.PhotonTag = cms.InputTag("patPhotonsPFlow") # paths #process.MiBiPathAK5PF = cms.Path(process.MiBiCommonPAT) #process.MiBiPathAK5PF = cms.Path(process.MiBiCommonPAT*process.OneLeptonTwoJetsAK5PFSeq*process.MiBiCommonNTOneLeptonTwoJetsAK5PF) #process.MiBiPathPFlow = cms.Path(process.MiBiCommonPAT*process.OneLeptonTwoJetsPFlowSeq*process.MiBiCommonNTOneLeptonTwoJetsPFlow) # GammaGamma paths #process.Mibipathphotons = cms.Path(process.MiBiCommonPAT*process.TwoPhotonsSeq*process.MiBiCommonNTTwoPhotons) process.MiBiPathPhotons = cms.Path( process.noMuonVertexReco*process.MiBiCommonPAT*process.TwoMuonsSeq*process.MiBiCommonNTTwoPhotons)
from DQM.TrackingMonitorSource.dEdxAnalyzer_cff import * # temporary patch in order to have BXlumi from RecoLuminosity.LumiProducer.lumiProducer_cff import * # import v0 monitoring from DQM.TrackingMonitor.V0Monitor_cff import * # temporary test in order to temporary produce the "goodPrimaryVertexCollection" # define with a new name if changes are necessary, otherwise simply include # it from CommonTools/ParticleFlow/python/goodOfflinePrimaryVertices_cfi.py # uncomment when necessary from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector from CommonTools.ParticleFlow.goodOfflinePrimaryVertices_cfi import goodOfflinePrimaryVertices trackingDQMgoodOfflinePrimaryVertices = goodOfflinePrimaryVertices.clone() trackingDQMgoodOfflinePrimaryVertices.filterParams = pvSelector.clone( minNdof=cms.double(4.0), maxZ=cms.double(24.0)) trackingDQMgoodOfflinePrimaryVertices.src = cms.InputTag( 'offlinePrimaryVertices') trackingDQMgoodOfflinePrimaryVertices.filter = cms.bool(False) # Sequence TrackingDQMSourceTier0 = cms.Sequence() # dEdx monitoring TrackingDQMSourceTier0 += dedxHarmonicSequence * dEdxMonCommon * dEdxHitMonCommon # # temporary patch in order to have BXlumi # * lumiProducer # track collections for tracks in selectedTracks: if tracks != 'generalTracks': TrackingDQMSourceTier0 += sequenceName[tracks] label = 'TrackerCollisionSelectedTrackMonCommon' + str(tracks)
def pf2patChain(process, poolSource, runOnMC, postfix, GLOBAL_TAG): process.load("Configuration.StandardSequences.Geometry_cff") process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") process.source = poolSource process.GlobalTag.globaltag = GLOBAL_TAG process.load("Configuration.StandardSequences.MagneticField_cff") ## Standard PAT Configuration File process.load("PhysicsTools.PatAlgos.patSequences_cff") process.load("CommonTools.ParticleFlow.Isolation.pfIsolatedElectrons_cfi") process.pfIsolatedElectrons.isolationCut = cms.double(9999) ## Output Module Configuration (expects a path 'p') from PhysicsTools.PatAlgos.patEventContent_cff import patEventContent process.out = cms.OutputModule("PoolOutputModule", fileName = cms.untracked.string('patTuple.root'), # save only events passing the full path SelectEvents = cms.untracked.PSet( SelectEvents = cms.vstring('p') ), # save PAT Layer 1 output; you need a '*' to # unpack the list of commands 'patEventContent' outputCommands = cms.untracked.vstring('drop *', *patEventContent ) ) #Get a list of good primary vertices, in 42x, these are DAF vertices from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ), src=cms.InputTag('offlinePrimaryVertices') ) # Configure PAT to use PF2PAT instead of AOD sources # this function will modify the PAT sequences. It is currently # not possible to run PF2PAT+PAT and standart PAT at the same time from PhysicsTools.PatAlgos.tools.pfTools import * #runOnMC = False jetAlgo="AK5" if(runOnMC==False): usePF2PAT(process, runPF2PAT=True, jetAlgo='AK5', runOnMC=runOnMC, postfix = postfix, jetCorrections=('AK5PFchs', ['L1FastJet','L2Relative','L3Absolute','L2L3Residual']) ) else: usePF2PAT(process,runPF2PAT=True, jetAlgo=jetAlgo, runOnMC=True, postfix=postfix,jetCorrections=('AK5PFchs', ['L1FastJet','L2Relative','L3Absolute'])) process.pfPileUpPFlow.Enable = True process.pfPileUpPFlow.checkClosestZVertex = cms.bool(False) process.pfPileUpPFlow.Vertices = cms.InputTag('goodOfflinePrimaryVertices') process.pfJetsPFlow.doAreaFastjet = True process.pfJetsPFlow.doRhoFastjet = False if runOnMC == False: # removing MC matching for standard PAT sequence # for the PF2PAT+PAT sequence, it is done in the usePF2PAT function removeMCMatchingPF2PAT( process, '' ) #### jets #### process.load('JetMETCorrections.Configuration.DefaultJEC_cff') process.load('RecoJets.Configuration.RecoPFJets_cff') ##-------- Turn-on the FastJet density calculation ----------------------- from RecoJets.JetProducers.kt4PFJets_cfi import * process.kt6PFJets = kt4PFJets.clone( rParam = 0.6, doRhoFastjet = True, voronoiRfact = 0.9) process.kt6PFJets.Rho_EtaMax = cms.double(4.5) process.patJetCorrFactors.rho = cms.InputTag("kt6PFJets","rho") #to compute FastJet rho to correct isolation (note: EtaMax restricted to 2.5) process.kt6PFJetsForIsolation = kt4PFJets.clone( rParam = 0.6, doRhoFastjet = True, voronoiRfact = 0.9 ) process.kt6PFJetsForIsolation.Rho_EtaMax = cms.double(2.5) ##------- Turn-on the FastJet jet area calculation for your favorite algorithm ---- from RecoJets.JetProducers.ak5PFJets_cfi import * ak5PFJets.Rho_EtaMax = cms.double(4.5) ak5PFJets.doAreaFastjet = True # Compute the mean pt per unit area (rho) from the # PFchs inputs process.kt6PFJetsPFlow = kt4PFJets.clone( rParam = cms.double(0.6), src = cms.InputTag('pfNoElectron'+postfix), doAreaFastjet = cms.bool(True), doRhoFastjet = cms.bool(True) ) process.patJetCorrFactorsPFlow.rho = cms.InputTag("kt6PFJetsPFlow", "rho") process.primaryVertexFilter = cms.EDFilter("GoodVertexFilter", vertexCollection = cms.InputTag('offlinePrimaryVertices'), minimumNDOF = cms.uint32(4) , maxAbsZ = cms.double(15), maxd0 = cms.double(2) ) process.noscraping = cms.EDFilter("FilterOutScraping", applyfilter = cms.untracked.bool(True), debugOn = cms.untracked.bool(True), numtrack = cms.untracked.uint32(10), thresh = cms.untracked.double(0.25) ) # HBHENoiseFilter process.load('CommonTools/RecoAlgos/HBHENoiseFilter_cfi') #process.HBHENoiseFilter.maxRBXEMF = cms.double(0.01) # Add the PV selector and KT6 producer to the sequence getattr(process,"patPF2PATSequence"+postfix).replace( getattr(process,"pfNoElectron"+postfix), getattr(process,"pfNoElectron"+postfix)*process.kt6PFJetsPFlow ) # top projections in PF2PAT: getattr(process,"pfNoPileUp"+postfix).enable = True getattr(process,"pfNoMuon"+postfix).enable = True getattr(process,"pfNoElectron"+postfix).enable = True getattr(process,"pfNoTau"+postfix).enable = False getattr(process,"pfNoJet"+postfix).enable = True # enable delta beta correction for muon selection in PF2PAT? getattr(process,"pfIsolatedMuons"+postfix).doDeltaBetaCorrection = False
# pvSrc = 'offlinePrimaryVertices' # ### The good primary vertex filter ____________________________________________|| process.primaryVertexFilter = cms.EDFilter( "VertexSelector", src=cms.InputTag("offlinePrimaryVertices"), cut=cms.string("!isFake & ndof > 4 & abs(z) <= 24 & position.Rho <= 2"), filter=cms.bool(True)) from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams=pvSelector.clone( maxZ=cms.double(24.0), minNdof=cms.double(4.0) # this is >= 4 ), src=cms.InputTag(pvSrc)) ############################# ##### PATtuplizers ####### ############################# process.load('miniPAT.miniSubsPAT.PAT_ak5jets_simple_cff') process.load('miniPAT.miniSubsPAT.PAT_ak7jets_simple_cff') process.load('miniPAT.miniSubsPAT.PAT_ca8jets_simple_cff') ######################################## ###### Additional JEC for Data ###### ######################################## if options.useData: process.patJetCorrFactorsAK5CHS.levels.append('L2L3Residual')
import FWCore.ParameterSet.Config as cms from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector as pvSel from PhysicsTools.SelectorUtils.jetIDSelector_cfi import jetIDSelector from PhysicsTools.SelectorUtils.pfJetIDSelector_cfi import pfJetIDSelector wplusjetsAnalysis = cms.PSet( # Primary vertex pvSelector = cms.PSet( pvSel.clone() ), # input parameter sets muonSrc = cms.InputTag('selectedPatMuons'), electronSrc = cms.InputTag('selectedPatElectrons'), jetSrc = cms.InputTag('selectedPatJets'), jetClonesSrc = cms.InputTag('myClones'), metSrc = cms.InputTag('patMETs'), trigSrc = cms.InputTag('patTriggerEvent'), muTrig = cms.string('HLT_Mu9'), eleTrig = cms.string('HLT_Ele15_LW_L1R'), # tight muons muonIdTight = cms.PSet( version = cms.string('SPRING10'), Chi2 = cms.double(10.0), D0 = cms.double(0.02), ED0 = cms.double(999.0), SD0 = cms.double(999.0), NHits = cms.int32(11), NValMuHits = cms.int32(0), ECalVeto = cms.double(999.0), HCalVeto = cms.double(999.0),
#PAT has a hissy fit if this OutputModule isn't defined before we try and "removeMCMatching" from PhysicsTools.PatAlgos.patEventContent_cff import patEventContent process.out = cms.OutputModule("PoolOutputModule", fileName = cms.untracked.string('patTuple.root'), SelectEvents = cms.untracked.PSet( SelectEvents = cms.vstring('p') ), outputCommands = cms.untracked.vstring('drop *', *patEventContent ) ) ################################################################ ### Vertex Modules ################################################################ from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter( "PrimaryVertexObjectFilter", filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ), src=cms.InputTag('offlinePrimaryVertices') ) ################################################################ ### Start settting up the PAT default sequence ################################################################ process.load("PhysicsTools.PatAlgos.patSequences_cff") from PhysicsTools.PatAlgos.tools.coreTools import * from PhysicsTools.PatAlgos.tools.pfTools import * from PhysicsTools.PatAlgos.tools.tauTools import * from PhysicsTools.PatAlgos.tools.jetTools import * from PhysicsTools.PatAlgos.tools.trigTools import * from PhysicsTools.PatAlgos.tools.metTools import * switchOnTrigger(process, outputModule="", hltProcess="HLT")
def mvaMET_MuTau(process): from PhysicsTools.SelectorUtils.pvSelector_cfi import pvSelector process.goodOfflinePrimaryVertices = cms.EDFilter("PrimaryVertexObjectFilter", filterParams = pvSelector.clone( minNdof = cms.double(4.0), maxZ = cms.double(24.0) ), src=cms.InputTag('offlinePrimaryVertices') ) # Muons (definition stolen from Roger) process.mvaMETMuons = cms.EDFilter("MuonSelector", src = cms.InputTag('muons'), cut = cms.string( "abs(eta)<2.1 & pt>15" + ## muon ID "& isTrackerMuon" + "& isPFMuon" + "& globalTrack.isNonnull" + "& innerTrack.hitPattern.numberOfValidPixelHits > 0" + "& innerTrack.normalizedChi2 < 10" + "& numberOfMatches > 0" + "& innerTrack.hitPattern.numberOfValidTrackerHits > 5" + "& globalTrack.hitPattern.numberOfValidHits > 0" + "& abs(innerTrack().dxy) <2.0" + ## muon isolation (w/o deltaBeta, therefore weaker selection criteria) "& (pfIsolationR03.sumChargedHadronPt+pfIsolationR03.sumNeutralHadronEt+pfIsolationR03.sumPhotonEt)/pt < 0.3" ), filter = cms.bool(False) ) # Taus for Mu+Tau channel (definition stolen from Roger) process.mvaMETTausMT = cms.EDFilter("PFTauSelector", src = cms.InputTag('hpsPFTauProducer'), BooleanOperator = cms.string("and"), discriminators = cms.VPSet( cms.PSet( discriminator=cms.InputTag("hpsPFTauDiscriminationByDecayModeFinding" ), selectionCut=cms.double(0.5)), cms.PSet( discriminator=cms.InputTag("hpsPFTauDiscriminationByLooseCombinedIsolationDBSumPtCorr3Hits" ), selectionCut=cms.double(0.5)), cms.PSet( discriminator=cms.InputTag("hpsPFTauDiscriminationByLooseElectronRejection" ), selectionCut=cms.double(0.5)), cms.PSet( discriminator=cms.InputTag("hpsPFTauDiscriminationByTightMuonRejection" ), selectionCut=cms.double(0.5)) ), cut = cms.string("abs(eta) < 2.3 && pt > 20.0 "), filter = cms.bool(False) ) # define MVA-Met producer (for Mu+Tau) from RecoJets.JetProducers.PileupJetIDParams_cfi import JetIdParams process.pfMetMVAMuTau = cms.EDProducer("PFMETProducerMVA", srcCorrJets = cms.InputTag('ak5PFJetsCorr'), srcUncorrJets = cms.InputTag('ak5PFJets'), srcPFCandidates = cms.InputTag('particleFlow'), srcVertices = cms.InputTag('goodOfflinePrimaryVertices'), srcLeptons = cms.VInputTag("mvaMETMuons" , "mvaMETTausMT"), minNumLeptons = cms.int32(0), srcRho = cms.InputTag('kt6PFJets','rho'), globalThreshold = cms.double(-1.),#pfMet.globalThreshold, minCorrJetPt = cms.double(-1.), inputFileNames = cms.PSet( U = cms.FileInPath('RecoMET/METPUSubtraction/data/gbrmet_53_June2013_type1.root'), DPhi = cms.FileInPath('RecoMET/METPUSubtraction/data/gbrmetphi_53_June2013_type1.root'), CovU1 = cms.FileInPath('RecoMET/METPUSubtraction/data/gbru1cov_53_Dec2012.root'), CovU2 = cms.FileInPath('RecoMET/METPUSubtraction/data/gbru2cov_53_Dec2012.root') ), loadMVAfromDB = cms.bool(False), is42 = cms.bool(False), # CV: set this flag to true if you are running mvaPFMET in CMSSW_4_2_x corrector = cms.string("ak5PFL1Fastjet"), useType1 = cms.bool(True), useOld42 = cms.bool(False), dZcut = cms.double(0.1), impactParTkThreshold = cms.double(0.), tmvaWeights = cms.string("RecoJets/JetProducers/data/TMVAClassificationCategory_JetID_MET_53X_Dec2012.weights.xml"), tmvaMethod = cms.string("JetID"), version = cms.int32(-1), cutBased = cms.bool(False), tmvaVariables = cms.vstring( "nvtx", "jetPt", "jetEta", "jetPhi", "dZ", "beta", "betaStar", "nCharged", "nNeutrals", "dR2Mean", "ptD", "frac01", "frac02", "frac03", "frac04", "frac05", ), tmvaSpectators = cms.vstring(), JetIdParams = JetIdParams, verbosity = cms.int32(0) ) process.MVAMETMuTauSequence = cms.Sequence( process.goodOfflinePrimaryVertices * process.mvaMETMuons * process.mvaMETTausMT * process.pfMetMVAMuTau )