def addMuonMCClassification(process): # Run and embed in the patMuons the classification of muons by # their GEANT hits. process.load('MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi') from MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi import addUserData as addClassByHits addClassByHits(process.patMuons,extraInfo=True) process.patDefaultSequence = cms.Sequence(process.muonClassificationByHits * process.patDefaultSequence._seq)
def addMuonMCClassification(process): # Run and embed in the patMuons the classification of muons by # their GEANT hits. process.load('MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi') from MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi import addUserData as addClassByHits addClassByHits(process.patMuons, extraInfo=True) process.patDefaultSequence = cms.Sequence(process.muonClassificationByHits * process.patDefaultSequence._seq)
def extensiveMatching(process): process.load("SimGeneral.TrackingAnalysis.trackingParticlesNoSimHits_cfi") # On RECO process.load("SimMuon.MCTruth.MuonAssociatorByHits_cfi") # On RECO process.mergedTruth = cms.EDProducer("GenPlusSimParticleProducer", src = cms.InputTag("g4SimHits"), # use "famosSimHits" for FAMOS setStatus = cms.int32(5), # set status = 8 for GEANT GPs filter = cms.vstring("pt > 0.0"), # just for testing (optional) genParticles = cms.InputTag("genParticles") # original genParticle list ) process.load("MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi") from MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi import addUserData as addClassByHits addClassByHits(process.patMuons,labels=['classByHitsGlb'],extraInfo=True) addClassByHits(process.patMuonsPF,labels=['classByHitsGlb'],extraInfo=True) process.extensiveMatching = cms.Sequence(process.mergedTruth+process.muonClassificationByHits)
embedStandAloneMuon=True, # then switch off some features we don't need #addTeVRefits = False, ## <<--- this doesn't work. PAT bug ?? embedPickyMuon=False, embedTpfmsMuon=False, userIsolation=cms.PSet( ), # no extra isolation beyond what's in reco::Muon itself isoDeposits=cms.PSet(), # no heavy isodeposits addGenMatch=False, embedGenMatch=False, ) process.load("MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi") from MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi import addUserData as addClassByHits addClassByHits(process.patMuons, extraInfo=True) # as an example, now we define yet another classification, only for TMLastStationLoose. # (the selection matters when you define ghosts) process.classByHitsTMLSLoose = process.classByHitsTM.clone( muonPreselection=cms.string("muonID('TMLastStationLoose')")) addClassByHits(process.patMuons, labels=["classByHitsTMLSLoose"], extraInfo=True) process.go = cms.Path( process.preFilter + process.filter + (process.mergedTruth * process.genMuons * process.muonMatch + process.muonClassificationByHits + process.classByHitsTMLSLoose) * process.patMuons)
process.patMuons.embedTrack = True #process.muonMatch.matched = "prunedGen" ####### PF & DetBased Iso #isoKinds4Muons = 'DetBased+PFlow' #skipVetoLeptonSeqence=True #skipSelectingPfCands=False ### OLD CUSTOM addMuonPFIso(process,process.patMuons) if isMC: if False: ## Turn this on to get extra info on muon MC origin, on GEN-SIM-RECO process.load("MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi") from MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi import addUserData as addClassByHits addClassByHits(process.patMuons, labels=['classByHitsGlb'], extraInfo = True) process.muonClassificationByHits = cms.Sequence(process.mix * process.trackingParticlesNoSimHits * process.classByHitsGlb ) process.preMuonSequence = cms.Sequence(process.muonMatch + process.patTrigger + process.muonClassificationByHits + process.MuonIsolationMakeIso) else: process.preMuonSequence = cms.Sequence(process.muonMatch + process.patTrigger #+ #process.MuonIsolationMakeIso ) else: process.preMuonSequence = cms.Sequence(process.patTrigger #+
#process.muonL1Info.useState = 'outermost' #process.muonMatchHLTL1.useTrack = 'global' #process.muonMatchHLTL1.useState = 'outermost' ### Adding MCtruth Info to the PATMuon from MuonAnalysis.MuonAssociators.patMuonsWithTrigger_8E29_cff import addMCinfo addMCinfo(process) ### Add MC classification by hits # Requires: # SimGeneral/TrackingAnalysis V04-01-00-02 (35X) or V04-01-03+ (37X+) # SimTracker/TrackAssociation V01-08-17 (35X+) # SimMuon/MCTruth V02-05-00-01 (35X) or V02-06-00+ (37X+) process.load("MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi") from MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi import addUserData as addClassByHits addClassByHits(process.patMuonsWithoutTrigger, extraInfo=True) ### Adding Info about the Muon Station involved to the PATMuon # Requires MuonAnalysis/Examples V00-03-00+ process.load("MuonAnalysis.Examples.muonStations_cfi") from MuonAnalysis.Examples.muonStations_cfi import addUserData as addStations addStations(process.patMuonsWithoutTrigger) process.p = cms.Path( process.preFilter + process.oneRecoMu + process.muonClassificationByHits + process.muonStations + process.patMuonsWithTriggerSequence )
process.patMuonsWithTrigger = cms.EDProducer( 'PATTriggerMatchMuonEmbedder', src = cms.InputTag( 'patMuons' ), matches = cms.VInputTag('muonTriggerMatchHLT') ) process.patMuons.embedPFCandidate = False process.patMuons.embedTrack = True process.muonMatch.matched = "prunedGen" if isMC: if False: ## Turn this on to get extra info on muon MC origin, on GEN-SIM-RECO process.load("MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi") from MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi import addUserData as addClassByHits addClassByHits(process.patMuons, labels=['classByHitsGlb'], extraInfo = True) process.muonClassificationByHits = cms.Sequence(process.mix * process.trackingParticlesNoSimHits * process.classByHitsGlb ) process.preMuonSequence = cms.Sequence(process.prunedGen * process.muonMatch + process.patTrigger # + process.muonClassificationByHits ) process.MessageLogger.suppressWarning += ['classByHitsGlb'] # kill stupid RPC hit associator warning else: process.preMuonSequence = cms.Sequence(process.prunedGen * process.muonMatch + process.patTrigger) else: removeMCMatching(process, ['Muons']) process.preMuonSequence = cms.Sequence(process.patTrigger )
#process.muonMatchHLTL1.useTrack = 'global' #process.muonMatchHLTL1.useState = 'outermost' ## === Switch off ambiguity resolution in trigger matching ==== ## can be a good idea if you're working with events with a single true muon + ghosts ## and you're applying the quality cuts that kill the ghosts only afterwards switchOffAmbiguityResolution(process) ### Adding MCtruth Info to the PATMuon from MuonAnalysis.MuonAssociators.patMuonsWithTrigger_8E29_cff import addMCinfo addMCinfo(process) ### Add MC classification by hits process.load("MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi") from MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi import addUserData as addClassByHits addClassByHits(process.patMuonsWithoutTrigger, extraInfo=True) ## add two other classifications with preselection, to get different ghosts process.classByHitsTMA = process.classByHitsTM.clone( muonPreselection=cms.string("muonID('TrackerMuonArbitrated')")) process.classByHitsGlbPT = process.classByHitsGlb.clone( muonPreselection=cms.string("muonID('GlobalMuonPromptTight')")) process.muonClassificationByHits.replace( process.classByHitsTM, process.classByHitsTM + process.classByHitsTMA) process.muonClassificationByHits.replace( process.classByHitsGlb, process.classByHitsGlb + process.classByHitsGlbPT) addClassByHits(process.patMuonsWithoutTrigger, labels=["classByHitsTMA", "classByHitsGlbPT"], extraInfo=False) ### Adding Info about the Muon Station involved to the PATMuon process.load("MuonAnalysis.Examples.muonStations_cfi")
embedCombinedMuon = True, embedStandAloneMuon = True, # then switch off some features we don't need #addTeVRefits = False, ## <<--- this doesn't work. PAT bug ?? embedPickyMuon = False, embedTpfmsMuon = False, userIsolation = cms.PSet(), # no extra isolation beyond what's in reco::Muon itself isoDeposits = cms.PSet(), # no heavy isodeposits addGenMatch = False, embedGenMatch = False, ) process.load("MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi") from MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi import addUserData as addClassByHits addClassByHits(process.patMuons, extraInfo=True) # as an example, now we define yet another classification, only for TMLastStationLoose. # (the selection matters when you define ghosts) process.classByHitsTMLSLoose = process.classByHitsTM.clone( muonPreselection = cms.string("muonID('TMLastStationLoose')") ) addClassByHits(process.patMuons, labels=["classByHitsTMLSLoose"], extraInfo=True) process.go = cms.Path( process.preFilter + process.filter + ( process.mergedTruth * process.genMuons * process.muonMatch +
#process.muonMatchHLTL1.useTrack = 'global' #process.muonMatchHLTL1.useState = 'outermost' ## === Switch off ambiguity resolution in trigger matching ==== ## can be a good idea if you're working with events with a single true muon + ghosts ## and you're applying the quality cuts that kill the ghosts only afterwards switchOffAmbiguityResolution(process) ### Adding MCtruth Info to the PATMuon from MuonAnalysis.MuonAssociators.patMuonsWithTrigger_8E29_cff import addMCinfo addMCinfo(process) ### Add MC classification by hits process.load("MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi") from MuonAnalysis.MuonAssociators.muonClassificationByHits_cfi import addUserData as addClassByHits addClassByHits(process.patMuonsWithoutTrigger, extraInfo=True) ## add two other classifications with preselection, to get different ghosts process.classByHitsTMA = process.classByHitsTM.clone( muonPreselection = cms.string("muonID('TrackerMuonArbitrated')") ) process.classByHitsGlbPT = process.classByHitsGlb.clone( muonPreselection = cms.string("muonID('GlobalMuonPromptTight')") ) process.muonClassificationByHits.replace(process.classByHitsTM, process.classByHitsTM + process.classByHitsTMA) process.muonClassificationByHits.replace(process.classByHitsGlb, process.classByHitsGlb + process.classByHitsGlbPT) addClassByHits(process.patMuonsWithoutTrigger, labels=["classByHitsTMA","classByHitsGlbPT"], extraInfo=False) ### Adding Info about the Muon Station involved to the PATMuon process.load("MuonAnalysis.Examples.muonStations_cfi") from MuonAnalysis.Examples.muonStations_cfi import addUserData as addStations addStations(process.patMuonsWithoutTrigger)