Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Displaced Global Muon Reconstruction #7531

Merged
merged 9 commits into from Feb 5, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion RecoHI/HiMuonAlgos/python/HiRecoMuon_cff.py
Expand Up @@ -24,7 +24,7 @@

#don't modify somebody else's sequence, create a new one if needed
#standalone muon tracking is already done... so remove standalonemuontracking from muontracking
muonreco_plus_isolation_PbPb = muonreco_plus_isolation.copyAndExclude(standalonemuontracking._seq._collection)
muonreco_plus_isolation_PbPb = muonreco_plus_isolation.copyAndExclude(standalonemuontracking._seq._collection + displacedGlobalMuonTracking._seq._collection)
muonreco_plus_isolation_PbPb.replace(muons1stStep, muons)


Expand Down
123 changes: 123 additions & 0 deletions RecoMuon/Configuration/python/DisplacedMuonSeededStep_cff.py
@@ -0,0 +1,123 @@
import FWCore.ParameterSet.Config as cms

###### Muon reconstruction module #####
from RecoMuon.MuonIdentification.earlyMuons_cfi import earlyDisplacedMuons
from RecoTracker.IterativeTracking.MuonSeededStep_cff import *

###### SEEDER MODELS ######
#for displaced global muons
muonSeededSeedsOutInDisplaced = RecoTracker.SpecialSeedGenerators.outInSeedsFromStandaloneMuons_cfi.outInSeedsFromStandaloneMuons.clone(
src = "earlyDisplacedMuons",
)
muonSeededSeedsOutInDisplaced.fromVertex = cms.bool(False)
###------------- MeasurementEstimator, defining the searcgh window for pattern recongnition ----------------
#for displaced global muons
muonSeededMeasurementEstimatorForOutInDisplaced = TrackingTools.KalmanUpdators.Chi2MeasurementEstimatorESProducer_cfi.Chi2MeasurementEstimator.clone(
ComponentName = cms.string('muonSeededMeasurementEstimatorForOutInDisplaced'),
MaxChi2 = cms.double(30.0), ## was 30 ## TO BE TUNED
nSigma = cms.double(3.), ## was 3 ## TO BE TUNED
)

###------------- TrajectoryFilter, defining selections on the trajectories while building them ----------------
#for displaced global muons
muonSeededTrajectoryFilterForOutInDisplaced = muonSeededTrajectoryFilterForInOut.clone()
muonSeededTrajectoryFilterForOutInDisplaced.constantValueForLostHitsFractionFilter = 10 ## allow more lost hits
muonSeededTrajectoryFilterForOutInDisplaced.minimumNumberOfHits = 5 ## allow more lost hits
###------------- TrajectoryBuilders ----------------
#for displaced global muons
muonSeededTrajectoryBuilderForOutInDisplaced = RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi.GroupedCkfTrajectoryBuilder.clone(
foundHitBonus = cms.double(1000.0),
lostHitPenalty = cms.double(1.0),
maxCand = cms.int32(3),
estimator = cms.string('muonSeededMeasurementEstimatorForOutInDisplaced'),
trajectoryFilter = cms.PSet(refToPSet_ = cms.string('muonSeededTrajectoryFilterForOutInDisplaced')),
inOutTrajectoryFilter = cms.PSet(refToPSet_ = cms.string('muonSeededTrajectoryFilterForOutInDisplaced')), # not sure if it is used
minNrOfHitsForRebuild = cms.int32(5),
requireSeedHitsInRebuild = cms.bool(True),
keepOriginalIfRebuildFails = cms.bool(False),
)
######## TRACK CANDIDATE MAKERS
#for displaced global muons
muonSeededTrackCandidatesOutInDisplaced = RecoTracker.CkfPattern.CkfTrackCandidates_cfi.ckfTrackCandidates.clone(
src = cms.InputTag("muonSeededSeedsOutInDisplaced"),
TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string("muonSeededTrajectoryBuilderForOutInDisplaced")),
TrajectoryCleaner = cms.string('muonSeededTrajectoryCleanerBySharedHits'),
numHitsForSeedCleaner = cms.int32(50),
onlyPixelHitsForSeedCleaner = cms.bool(False),
)

######## TRACK PRODUCERS
#for displaced global muon
muonSeededTracksOutInDisplaced = RecoTracker.TrackProducer.TrackProducer_cfi.TrackProducer.clone(
src = cms.InputTag("muonSeededTrackCandidatesOutInDisplaced"),
AlgorithmName = cms.string('muonSeededStepOutIn'),
Fitter = cms.string("muonSeededFittingSmootherWithOutliersRejectionAndRK"),
)

#for displaced global muons
muonSeededTracksOutInDisplacedSelector = RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.multiTrackSelector.clone(
src='muonSeededTracksOutInDisplaced',
trackSelectors= cms.VPSet(
RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone(
name = 'muonSeededTracksOutInDisplacedLoose',
applyAdaptedPVCuts = cms.bool(False),
chi2n_par = 10.0,
minNumberLayers = 3,
min_nhits = 5,
maxNumberLostLayers = 4,
minNumber3DLayers = 0,
minHitsToBypassChecks = 7
),
RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.tightMTS.clone(
name = 'muonSeededTracksOutInDisplacedTight',
preFilterName = 'muonSeededTracksOutInDisplacedLoose',
applyAdaptedPVCuts = cms.bool(False),
chi2n_par = 1.0,
minNumberLayers = 5,
min_nhits = 6,
maxNumberLostLayers = 3,
minNumber3DLayers = 2,
minHitsToBypassChecks = 10
),
RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.highpurityMTS.clone(
name = 'muonSeededTracksOutInDisplacedHighPurity',
preFilterName = 'muonSeededTracksOutInDisplacedTight',
applyAdaptedPVCuts = cms.bool(False),
chi2n_par = 0.4,
minNumberLayers = 5,
min_nhits = 7,
maxNumberLostLayers = 2,
minNumber3DLayers = 2,
minHitsToBypassChecks = 20
),
) #end of vpset
) #end of clone

#for displaced global muons
muonSeededStepCoreDisplaced = cms.Sequence(
muonSeededSeedsInOut + muonSeededTrackCandidatesInOut + muonSeededTracksInOut +
muonSeededSeedsOutInDisplaced + muonSeededTrackCandidatesOutInDisplaced + muonSeededTracksOutInDisplaced
)

#for displaced global muons
muonSeededStepExtraDisplaced = cms.Sequence(
muonSeededTracksInOutSelector +
muonSeededTracksOutInDisplacedSelector
)
#for displaced global muons
muonSeededStepDisplaced = cms.Sequence(
earlyDisplacedMuons +
muonSeededStepCoreDisplaced +
muonSeededStepExtraDisplaced
)

##### MODULES FOR DEBUGGING ###############3
#for displaced global muons
muonSeededSeedsOutInDisplacedAsTracks = cms.EDProducer("FakeTrackProducerFromSeed", src = cms.InputTag("muonSeededSeedsOutInDisplaced"))
#for displaced global muons
muonSeededTrackCandidatesOutInDisplacedAsTracks = cms.EDProducer("FakeTrackProducerFromCandidate", src = cms.InputTag("muonSeededTrackCandidatesOutInDisplaced"))
#for displaced global muons
muonSeededStepDebugDisplaced = cms.Sequence(
muonSeededSeedsOutInDisplacedAsTracks + muonSeededTrackCandidatesOutInDisplacedAsTracks +
muonSeededSeedsInOutAsTracks + muonSeededTrackCandidatesInOutAsTracks
)
@@ -0,0 +1,39 @@
import FWCore.ParameterSet.Config as cms

from RecoTracker.FinalTrackSelectors.MergeTrackCollections_cff import *

#for displaced global muons
duplicateDisplacedTrackCandidates = RecoTracker.FinalTrackSelectors.DuplicateTrackMerger_cfi.duplicateTrackMerger.clone(
source=cms.InputTag("preDuplicateMergingDisplacedTracks"),
useInnermostState = cms.bool(True),
ttrhBuilderName = cms.string("WithAngleAndTemplate")
)
#for displaced global muons
mergedDuplicateDisplacedTracks = RecoTracker.TrackProducer.TrackProducer_cfi.TrackProducer.clone(
src = cms.InputTag("duplicateDisplacedTrackCandidates","candidates"),
)
#for displaced global muons
duplicateDisplacedTrackSelector = RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.multiTrackSelector.clone(
src='mergedDuplicateDisplacedTracks',
trackSelectors= cms.VPSet(
RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone(
name = 'duplicateDisplacedTrackSelectorLoose',
minHitsToBypassChecks = cms.uint32(0),
),
)
)

#for displaced global muons
displacedTracks = RecoTracker.FinalTrackSelectors.DuplicateTrackMerger_cfi.duplicateListMerger.clone(
originalSource = cms.InputTag("preDuplicateMergingDisplacedTracks"),
mergedSource = cms.InputTag("mergedDuplicateDisplacedTracks"),
mergedMVAVals = cms.InputTag("duplicateDisplacedTrackSelector","MVAVals"),
candidateSource = cms.InputTag("duplicateDisplacedTrackCandidates","candidateMap")
)
#for displaced global muons
displacedTracksSequence = cms.Sequence(
duplicateDisplacedTrackCandidates*
mergedDuplicateDisplacedTracks*
duplicateDisplacedTrackSelector*
displacedTracks
)
7 changes: 6 additions & 1 deletion RecoMuon/Configuration/python/RecoMuonPPonly_cff.py
Expand Up @@ -22,6 +22,10 @@

# Global muon track producer
from RecoMuon.GlobalMuonProducer.GlobalMuonProducer_cff import *
from RecoMuon.Configuration.iterativeTkDisplaced_cff import *
displacedGlobalMuons = globalMuons.clone()
displacedGlobalMuons.MuonCollectionLabel = cms.InputTag("displacedStandAloneMuons","")
displacedGlobalMuons.TrackerCollectionLabel = cms.InputTag("displacedTracks")

# TeV refinement
from RecoMuon.GlobalMuonProducer.tevMuons_cfi import *
Expand All @@ -45,7 +49,8 @@

# Muon Tracking sequence
standalonemuontracking = cms.Sequence(standAloneMuonSeeds*standAloneMuons*refittedStandAloneMuons*displacedMuonSeeds*displacedStandAloneMuons)
globalmuontracking = cms.Sequence(globalMuons*tevMuons)
displacedGlobalMuonTracking = cms.Sequence(iterDisplcedTracking*displacedGlobalMuons)
globalmuontracking = cms.Sequence(globalMuons*tevMuons*displacedGlobalMuonTracking)
muontracking = cms.Sequence(standalonemuontracking*globalmuontracking)

# Muon Reconstruction
Expand Down
5 changes: 5 additions & 0 deletions RecoMuon/Configuration/python/RecoMuon_EventContent_cff.py
Expand Up @@ -36,7 +36,12 @@
'keep recoTracks_tevMuons_*_*',
'keep recoTrackExtras_tevMuons_*_*',
'keep recoTracks_generalTracks_*_*',
'keep recoTracks_displacedTracks_*_*',
'keep recoTracksToOnerecoTracksAssociation_tevMuons_*_*',
# Displaced Global Muons
'keep recoTracks_displacedGlobalMuons_*_*',
'keep recoTrackExtras_displacedGlobalMuons_*_*',
'keep TrackingRecHitsOwned_displacedGlobalMuons_*_*',
# Cosmics
'keep recoTracks_cosmicMuons_*_*',
'keep recoTracks_globalCosmicMuons_*_*',
Expand Down
10 changes: 10 additions & 0 deletions RecoMuon/Configuration/python/iterativeTkDisplaced_cff.py
@@ -0,0 +1,10 @@
import FWCore.ParameterSet.Config as cms

from RecoMuon.Configuration.DisplacedMuonSeededStep_cff import *
from RecoMuon.Configuration.preDuplicateMergingDisplacedTracks_cfi import *
from RecoMuon.Configuration.MergeDisplacedTrackCollections_cff import *

iterDisplcedTracking = cms.Sequence(muonSeededStepDisplaced*
preDuplicateMergingDisplacedTracks*
displacedTracksSequence
)
@@ -0,0 +1,28 @@
import FWCore.ParameterSet.Config as cms
#only merge muonSeededTracksInOut and muonSeededTracksOutInDisplaced.
import RecoTracker.FinalTrackSelectors.earlyGeneralTracks_cfi
preDuplicateMergingDisplacedTracks = RecoTracker.FinalTrackSelectors.earlyGeneralTracks_cfi.earlyGeneralTracks.clone(
TrackProducers = cms.VInputTag(
#cms.InputTag("earlyGeneralTracks"),
cms.InputTag("muonSeededTracksInOut"),
cms.InputTag("muonSeededTracksOutInDisplaced"),
),
#hasSelector = cms.vint32(0,1,1),
hasSelector = cms.vint32(1,1),
selectedTrackQuals = cms.VInputTag(
# cms.InputTag("muonSeededTracksInOutSelector","muonSeededTracksInOutHighPurity"), # not used but needed
cms.InputTag("muonSeededTracksInOutSelector","muonSeededTracksInOutHighPurity"),
cms.InputTag("muonSeededTracksOutInDisplacedSelector","muonSeededTracksOutInDisplacedHighPurity"),
),
mvaValueTags = cms.VInputTag(
#cms.InputTag("earlyGeneralTracks","MVAVals"),
cms.InputTag("muonSeededTracksInOutSelector","MVAVals"),
cms.InputTag("muonSeededTracksOutInDisplacedSelector","MVAVals"),
),
#setsToMerge = cms.VPSet(cms.PSet(pQual = cms.bool(False), tLists = cms.vint32(0, 1,2))),
setsToMerge = cms.VPSet(cms.PSet(pQual = cms.bool(False), tLists = cms.vint32(1,2))),
FoundHitBonus = 100.0,
LostHitPenalty = 1.0,
)


4 changes: 3 additions & 1 deletion RecoMuon/MuonIdentification/python/earlyMuons_cfi.py
Expand Up @@ -19,4 +19,6 @@
earlyMuons.TrackAssociatorParameters.useEcal = cms.bool(False)
earlyMuons.TrackAssociatorParameters.useHcal = cms.bool(False)


earlyDisplacedMuons = earlyMuons.clone(
inputCollectionLabels = cms.VInputTag(cms.InputTag("earlyGeneralTracks"),cms.InputTag("displacedStandAloneMuons","")),
)
Expand Up @@ -6,8 +6,8 @@
source=cms.InputTag("preDuplicateMergingGeneralTracks"),
useInnermostState = cms.bool(True),
ttrhBuilderName = cms.string("WithAngleAndTemplate")
)
)

import RecoTracker.TrackProducer.TrackProducer_cfi
mergedDuplicateTracks = RecoTracker.TrackProducer.TrackProducer_cfi.TrackProducer.clone(
src = cms.InputTag("duplicateTrackCandidates","candidates"),
Expand Down