Iterative Tracking

Complete: 5

Goal of the page

The reader of the page should become familiar with the iterative tracking approach, and be able to add tracking steps in the whole tracking chain.


Michele Pioppi:
Kevin Stenson:


The iterative tracking approach runs the standard CTF tracking algorithm multiple times. At each iteration, the hits used by previous iterations are removed from consideration and the CTF tracking algorithm is run again with progressively looser settings. The presentations below trace the development of the iterative tracking approach:
Tracking meeting 23 may 2007
PFlow meeting 05 july 2007
Tracking meeting 01 august 2007
ParticleFlow meeting 13 september 2007
Tracking meeting 31 january 2008
Tracking meeting 05 february 2008
Tracking meeting 14 february 2008
The results of the iterative tracking are summarized in the internal note 2007/065

Summary of the current iterative steps

The current (3_1_X) default tracking in CMS contains 6 iterations, labeled 0 through 5. The main distinction between the iterations is the track seeding algorithm which is shown in the table below.
Iteration Seeding Layers pT cut (GeV) d0 cut (cm) z0 cut (cm)
Zero pixel triplets 0.5 0.2 15.9
1 pixel pairs 0.9 0.2 0.2*
2 pixel triplets 0.075 0.2 17.5
3 pixel pairs 0.35 1.2 7.0
4 TIB1+2 & TID/TEC ring 1+2 0.5 2.0 10.0
5 TOB1+2 & TEC ring 5 0.8 5.0 10.0

In the table, d0 and z0 refer to the transverse and longitudinal impact parameters of seeds with respect to the nominal interaction point. The * indicates the impact parameter with respect to a pixel vertex. Using triplet seeding is much faster and has a lower fake rate than pairs. Therefore, pixel triplet seeding is run first (iteration 0), followed by pixel pairs (iteration 1) for additional efficiency. This is repeated in iterations 2-3 which is optimized to find lower momentum tracks and also tracks which may decay within a couple of cm of the production vertex. Iterations 4 and 5 do not use pixels to seed and are designed to find tracks which are significantly displaced from the beam line or tracks which do not leave sufficient pixel hits to be found in the earlier iterations. Other differences between iterations during track building include the minimum number of hits (3 for iterations 0-2, 4 for iteration 3, and 7 for iterations 4-5), the number of lost hits (1 for iterations 0-2 and 0 for iterations 3-5). The final cleaning stage is also different. The early steps have stricter requirements on tracks originating from the production vertex while the later steps have stricter requirements on the track quality. Details will eventually be found in the tracking note but for now they can be found in the Very Large Impact Parameter Track Reconstruction note or by looking in the configuration steps which are linked in the table above and annotated more below.

Usage of the algorithm

In each tracking iteration the user must:
  • Create a new cluster collection by removing the clusters used in the previous track collections
firstfilter = cms.EDFilter("QualityFilter",  # Selecting tracks from the previous iteration
    TrackQuality = cms.string('highPurity'),  # Just take the highPurity ones
    recTracks = cms.InputTag("preMergingFirstStepTracksWithQuality")
 secClusters = cms.EDFilter("TrackClusterRemover",
    oldClusterRemovalInfo = cms.InputTag("newClusters"), # clusters used in the previous iteration
    trajectories = cms.InputTag("firstfilter"),    # trajectories of the previous iteration
    pixelClusters = cms.InputTag("newClusters"), # pixel clusters used in the previous iteration
    stripClusters = cms.InputTag("newClusters"), # strip clusters used in the previous iteration
    Common = cms.PSet(
        maxChi2 = cms.double(30.0)

  • Create new pixel and strip collections with the new cluster collection
import RecoLocalTracker.SiPixelRecHits.SiPixelRecHits_cfi
secPixelRecHits = RecoLocalTracker.SiPixelRecHits.SiPixelRecHits_cfi.siPixelRecHits.clone(
    src = 'secClusters' 
import RecoLocalTracker.SiStripRecHitConverter.SiStripRecHitConverter_cfi
secStripRecHits = RecoLocalTracker.SiStripRecHitConverter.SiStripRecHitConverter_cfi.siStripMatchedRecHits.clone(
    ClusterProducer = 'secClusters'

  • Run the new tracking algorithm with the new cluster and hit collections.

  • The new hit and cluster collection must be put in the seeding
import RecoTracker.TkSeedingLayers.PixelLayerTriplets_cfi
seclayertriplets = RecoTracker.TkSeedingLayers.PixelLayerTriplets_cfi.pixellayertriplets.clone(
    ComponentName = 'SecLayerTriplets'
seclayertriplets.BPix.HitProducer = 'secPixelRecHits'
seclayertriplets.FPix.HitProducer = 'secPixelRecHits'

  • in the measurement tracker
import RecoTracker.MeasurementDet.MeasurementTrackerESProducer_cfi
secMeasurementTracker = RecoTracker.MeasurementDet.MeasurementTrackerESProducer_cfi.MeasurementTracker.clone(
    ComponentName = 'secMeasurementTracker',
    pixelClusterProducer = 'secClusters',
    stripClusterProducer = 'secClusters'
  • and in the fitter
import RecoTracker.TrackProducer.TrackProducer_cfi
secWithMaterialTracks = RecoTracker.TrackProducer.TrackProducer_cfi.TrackProducer.clone(
    AlgorithmName = cms.string('iter2'),
    src = 'secTrackCandidates',
    clusterRemovalInfo = 'secClusters'

Software architecture

The code for the hit removal is in the package RecoLocalTracker/SubCollectionProducers
Very good examples for the iterative tracking usage can be found in RecoTracker/IterativeTracking

Review status

Reviewer/Editor and Date (copy from screen) Comments
KatiLassilaPerini - 29 Jan 2008 created template page
KevinStenson - 06 Aug 2009 Added information on current iterative tracking steps

Responsible: KevinStenson
Last reviewed by: Most recent reviewer

Edit | Attach | Watch | Print version | History: r9 < r8 < r7 < r6 < r5 | Backlinks | Raw View | Raw edit | More topic actions...
Topic revision: r6 - 2009-08-06 - KevinStenson
    • Cern Search Icon Cern Search
    • TWiki Search Icon TWiki Search
    • Google Search Icon Google Search

    CMSPublic All webs login

This site is powered by the TWiki collaboration platform Powered by PerlCopyright & 2008-2020 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback