Child pages
  • L3 Muon Structure
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »

Flow Process

 

The flow of processes defined in the HLT menu are as follows:

e.g. in Mu40:
... process.hltL2fL1sMu16L1f0L2Filtered16Q + process.HLTL3muonrecoSequence + process.hltL3fL1sMu16L1f0L2f16QL3Filtered40Q ...

process.hltL2fL1sMu16L1f0L2Filtered16Q = cms.EDFilter( "HLTMuonL2PreFilter",
saveTags = cms.bool( True ),
MaxDr = cms.double( 9999.0 ),
CutOnChambers = cms.bool( False ),
PreviousCandTag = cms.InputTag( "hltL1fL1sMu16L1Filtered0" ),
MinPt = cms.double( 16.0 ),
MinN = cms.int32( 1 ),
SeedMapTag = cms.InputTag( "hltL2Muons" ),
MaxEta = cms.double( 2.5 ),
MinNhits = cms.vint32( 0, 1, 0, 1 ),
MinDxySig = cms.double( -1.0 ),
MinNchambers = cms.vint32( 0 ),
AbsEtaBins = cms.vdouble( 0.9, 1.5, 2.1, 5.0 ),
MaxDz = cms.double( 9999.0 ),
CandTag = cms.InputTag( "hltL2MuonCandidates" ),
BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ),
MinDr = cms.double( -1.0 ),
NSigmaPt = cms.double( 0.0 ),
MinNstations = cms.vint32( 0, 2, 0, 2 )
)

process.HLTL3muonrecoSequence = cms.Sequence(
process.HLTL3muonrecoNocandSequence
process.hltL3MuonCandidates
)

process.HLTL3muonrecoNocandSequence = cms.Sequence(
process.HLTL3muonTkCandidateSequence
process.hltL3TkTracksFromL2
process.hltL3MuonsLinksCombination
process.hltL3Muons
)

process.HLTL3muonTkCandidateSequence = cms.Sequence(
process.HLTDoLocalPixelSequence
process.HLTDoLocalStripSequence
process.hltL3TrajSeedOIState
process.hltL3TrackCandidateFromL2OIState
process.hltL3TkTracksFromL2OIState
process.hltL3MuonsOIState
process.hltL3TrajSeedOIHit
process.hltL3TrackCandidateFromL2OIHit
process.hltL3TkTracksFromL2OIHit
process.hltL3MuonsOIHit
process.hltL3TkFromL2OICombination
process.hltL3TrajSeedIOHit
process.hltL3TrackCandidateFromL2IOHit
process.hltL3TkTracksFromL2IOHit
process.hltL3MuonsIOHit
process.hltL3TrajectorySeed
process.hltL3TrackCandidateFromL2
)

process.hltL3TkTracksFromL2 = cms.EDProducer( "L3TrackCombiner",
labels = cms.VInputTag( 'hltL3TkTracksFromL2IOHit','hltL3TkTracksFromL2OIHit','hltL3TkTracksFromL2OIState' )
)
process.hltL3MuonsLinksCombination = cms.EDProducer( "L3TrackLinksCombiner",
labels = cms.VInputTag( 'hltL3MuonsOIState','hltL3MuonsOIHit','hltL3MuonsIOHit' )
)
process.hltL3Muons = cms.EDProducer( "L3TrackCombiner",
labels = cms.VInputTag( 'hltL3MuonsOIState','hltL3MuonsOIHit','hltL3MuonsIOHit' )
)
process.hltL3MuonCandidates = cms.EDProducer( "L3MuonCandidateProducer",
InputLinksObjects = cms.InputTag( "hltL3MuonsLinksCombination" ),
InputObjects = cms.InputTag( "hltL3Muons" ),
MuonPtOption = cms.string( "Tracker" )
)
process.hltL3fL1sMu16L1f0L2f16QL3Filtered40Q = cms.EDFilter( "HLTMuonL3PreFilter",
MaxNormalizedChi2 = cms.double( 20.0 ),
saveTags = cms.bool( True ),
PreviousCandTag = cms.InputTag( "hltL2fL1sMu16L1f0L2Filtered16Q" ),
MinNmuonHits = cms.int32( 0 ),
MinN = cms.int32( 1 ),
MinTrackPt = cms.double( 0.0 ),
MaxEta = cms.double( 2.5 ),
MaxDXYBeamSpot = cms.double( 0.1 ),
MinNhits = cms.int32( 0 ),
MinDxySig = cms.double( -1.0 ),
NSigmaPt = cms.double( 0.0 ),
MaxDz = cms.double( 9999.0 ),
MaxPtDifference = cms.double( 9999.0 ),
MaxDr = cms.double( 2.0 ),
CandTag = cms.InputTag( "hltL3MuonCandidates" ),
MinDr = cms.double( -1.0 ),
BeamSpotTag = cms.InputTag( "hltOnlineBeamSpot" ),
MinPt = cms.double( 40.0 )
)

 

 

HLTDoLocalPixelSequence
HLTDoLocalStripSequence

hltL3TrajSeedOIState
hltL3TrackCandidateFromL2OIState
hltL3TkTracksFromL2OIState
hltL3MuonsOIState

hltL3TrajSeedOIHit
hltL3TrackCandidateFromL2OIHit
hltL3TkTracksFromL2OIHit
hltL3MuonsOIHit

hltL3TkFromL2OICombination

hltL3TrajSeedIOHit
hltL3TrackCandidateFromL2IOHit
hltL3TkTracksFromL2IOHit
hltL3MuonsIOHit

hltL3TrajectorySeed
hltL3TrackCandidateFromL2

 

After the local pixel and strip sequences the three different seeding algorithms are visited in the sequence: OIState, OIHit and IOHit.
The steps for each algorithm is described below starting with the creation of L3 muon trajectory seeds from the hltL3TrajSeed.

 


hltL3TrajSeed


hltL3TrajSeed runs cms.EDProducer( "TSGFromL2Muon" ): RecoMuon/TrackerSeedGenerator/plugins/TSGFromL2Muon.cc

In the TSGFromL2Muon constructor if MuonTrackingRegionBuilder pset is not empty then create a new MuonTrackingRegionBuilder: theRegionBuilder
Assign theTkSeedGenerator = TrackerSeedGeneratorFactory::get()->create(seedGenName, seedGenPSet). Where seedGenName = DualByL2TSG.
If TrackerSeedCleaner pset is not empty then create a new TrackerSeedCleaner: theSeedCleaner

 

TSGFromL2Muon::produce(){
Create a L3MuonTrajectorySeedCollection (L3MuonTrajectorySeed inherits from TrajectorySeed)
MuonServiceProxy->update()
TrackerSeedGenerator->setEvent()
if (theRegionBuilder) MuonTrackingRegionBuilder->setEvent()
if (theSeedCleaner) TrackerSeedCleaner->setEvent()
loop over reco::TrackCollection l2muonH:
MuonTrackingRegionBuilder->region()
TrackerSeedGenerator->trackerSeeds()
TrackerSeedCleaner->clean()
loop over TrackerSeeds:
create L3MuonTrajectorySeeds and add to the L3MuonTrajectorySeedCollection
}

hltL3TrackCandidateFromL2


hltL3TrackCandidateFromL2 run cms.EDProducer("CkfTrajectoryMaker"):
RecoTracker/CkfPattern/interface/CkfTrajectoryMaker.h
RecoTracker/CkfPattern/src/CkfTrackCandidateMakerBase.cc

 

hltL3TkTracksFromL2

 

hltL3TkTracksFromL2 runs cms.EDProducer("TrackProducer")

 

hltL3Muons


hltL3Muons runs cms.EDProducer("L3MuonProducer"): RecoMuon/L3MuonProducer/src/L3MuonProducer.cc
From the L3MuonProducer constructor we create a new MuonTrackLoader and L3MuonTrajectoryBuilder using the trackLoaderParameters and trajectoryBuilderParameters respectively.
Then we create a new MuonTrackFinder using the newly created L3MuonTrajectoryBuilder and MuonTrackLoader.
In the MuonTrackFinder constructor we create a new MuonTrajectoryCleaner.

In L3MuonProducer::produce a vector of MuonTrajectoryBuilder::TrackCand's is created: L2TrackCands.
A loop over the TrajTrackAssociationCollection: L2AssoMap is then performed.


In MuonTrackFinder::reconstruct:
Loop over a vector of TrackCand, create a CandidateContainer (muonCands_temp) using the theTrajBuilder->trajectories(TrackCand). This calls L3MuonTrajectoryBuilder->trajectories function. L3MuonTrajectoryBuilder::trajectories() then calls L3MuonTrajectoryBuilder::makeTkCandCollection() in which the filters are applied.

Then store CandidateContainer (muonCands_temp) in muonCandidates.


 

hltL3TkFromL2OICombination

 

hltL3TkFromL2OICombination runs cms.EDProducer( "L3TrackCombiner"): typedef CollectionCombiner<reco::TrackCollection> L3TrackCombiner;

This is defined in RecoMuon/TrackerSeedGenerator/plugins/SealModule.cc

 

Additional notes

 

Typedefs to be aware of:
RecoMuon/TrackingTools/interface/MuonTrajectoryBuilder.h:
typedef std::pair<const Trajectory*, reco::TrackRef> TrackCand;

TrackingTools/PatternTools/interface/TrajTrackAssociation.h
typedef edm::AssociationMap<edm::OneToOne< std::vector<Trajectory> ,reco::TrackCollection,unsigned short> > TrajTrackAssociationCollection;

RecoMuon/TrackerSeedGenerator/interface/TrackerSeedGeneratorFactory.h
typedef edmplugin::PluginFactory< TrackerSeedGenerator* (const edm::ParameterSet&,edm::ConsumesCollector& iC) > TrackerSeedGeneratorFactory;

Note:
TkSeedGenerator = cms.PSet(
PSetNames = cms.vstring( 'skipTSG',
'iterativeTSG' ),
L3TkCollectionA = cms.InputTag( "hltL3MuonsOIState" ),
...)
Stops this processes from running

 

  • No labels