Flow Process
The flow of processes defined in the HLT menu are as follows:
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
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.
After this we run produces
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
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