Track Building Modifications for Displaced Tracks

Complete: 3

Goal of the page

Before reading this page, you should already have familiarised yourself with the algorithm used to build tracks produced near the beam-line: GroupedCkfTrajectoryBuilder.

This page will explain modifications to this standard track building algorithm, which allow it to find particles produced at distances of up to 50 cm from the beam-line. These are run by default in CMSSW 3.1 and are used to produce the general track collection. These modifications will only work when combined with the modified seeding algorithms described here.

It is written for CMSSW 3.1


I.Tomalin, K.Stenson


Usage of the algorithm

Track building for used with Pixel-Pair Seeding for Displaced Tracks

The modified pixel-pair seeding for dispaced tracks that is described here makes the a priori assumption that the track curvature is approximately zero. In the early stages of the track building, when only a few hits have been added, the estimated track curvature is therefore still close to zero. If the standard propagator is used, then this infers that the rms multiple scattering must be close to zero, and so underestimates the window size in which hits must be searched for in the next layer when track building.

Therefore if you are using the modified pixel-pair seeding, you must use a modified propagator that takes into account the uncertainty in the reconstructed Pt when estimating the rms multiple scattering. Use of this is illustrated in RecoTracker/IterativeTracking/python/ In particular, note how the modified propagator is declared for inwards and outwards directions:

import TrackingTools.MaterialEffects.MaterialPropagator_cfi
MaterialPropagatorPtMin035 = TrackingTools.MaterialEffects.MaterialPropagator_cfi.MaterialPropagator.clone(
    ComponentName = 'PropagatorWithMaterialPtMin035',
    ptMin = 0.35

import TrackingTools.MaterialEffects.OppositeMaterialPropagator_cfi
OppositeMaterialPropagatorPtMin035 = TrackingTools.MaterialEffects.OppositeMaterialPropagator_cfi.OppositeMaterialPropagator.clone(
    ComponentName = 'PropagatorWithMaterialOppositePtMin035',
    ptMin = 0.35

The parameter ptMin specifies the minimum allowed Track Pt. The estimated rms scattering will never be allowed to exceed that of a track of this Pt. (This avoids wasting CPU for tracks which have a very large uncertainty in their reconstructed Pt). (N.B. If ptMin is given a value less than zero, then one would obtain the conventional propagator, which neglects the uncertainty in reconstructed Pt).

This propagator must be used both by the seed-finder:

import RecoTracker.TkSeedGenerator.SeedFromConsecutiveHitsStraightLineCreator_cfi
thPLSeeds.SeedCreatorPSet = RecoTracker.TkSeedGenerator.SeedFromConsecutiveHitsStraightLineCreator_cfi.SeedFromConsecutiveHitsStraightLineCreator.clone(
    propagator = cms.string('PropagatorWithMaterialPtMin035')

and by the track builder:

import RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilderESProducer_cfi
thCkfTrajectoryBuilder = RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilderESProducer_cfi.GroupedCkfTrajectoryBuilder.clone(
    propagatorAlong = cms.string('PropagatorWithMaterialPtMin01'),
    propagatorOpposite = cms.string('PropagatorWithMaterialOppositePtMin01')

Note that in both cases, the ptMin values used in the propagator must correspond to the minimum allowed Pt that the seed finder or track builder have been configured to use.

Track building for used with Strip Tracker-Pair Seeding for Displaced Tracks

As explained here, particles produced outside the Pixel Tracker can only be reconstructed by seeding them in the Strip Tracker. The track building starts by building the track outwards from the seed. When track building is complete in this direction, several track candidates are typically found starting from each seed. The track builder fits each of these with the Kalman Filter to obtain an estimate of the track parameters in the seeding region and then extrapolates this through the seeding region inwards, continuing to build the track by adding more hits.

As illustrated in RecoTracker/IterativeTracking/python/ a number of configuration parameters help improve the performance of the track building in this case.

By default, a single trajectory filter would be used for both the inwards and outward track building phases. But this doesn't work very well, particularly for TOB-TEC seeded tracks, since one expects the tracks to have relatively few hits after the outwards building phase, so it doesn't make sense to require a large number of hits at the end of this phase. For TOB-TEC seeded tracks, it is therefore recommended to use two trajectory filters, one for the inwards and one for the outwards track building phases. This is configured as follows:

import RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilderESProducer_cfi
fifthCkfTrajectoryBuilder = RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilderESProducer_cfi.GroupedCkfTrajectoryBuilder.clone(
    trajectoryFilterName = 'fifthCkfTrajectoryFilter',
    inOutTrajectoryFilterName = 'fifthCkfInOutTrajectoryFilter',
# If the following is false, two trajectory filters will be used. Otherwise only one.
    useSameTrajFilter = False

In the example .cff file, note that the trajectory filter fifthCkfInOutTrajectoryFilter used for the outwards building phase requires that the track have relatively few hits at the end of this phase (minimumNumberOfHits=4), wherease that used for inwards building fifthCkfTrajectoryFilter requires more.

By default, at the end of the outwards building phase, only the best track candidate obtained from each seed is then kept for inwards building. However, since it can be difficult to select the correct track candidate at the end of the outwards phase (since they have so few hits), it is possible to keep all of them. This can be done as follows, but wins relatively little extra performance and is quite CPU expensive.

import RecoTracker.CkfPattern.CkfTrackCandidates_cfi
fifthTrackCandidates = RecoTracker.CkfPattern.CkfTrackCandidates_cfi.ckfTrackCandidates.clone(
    cleanTrajectoryAfterInOut = False

Software architecture

Explain the design of the algorithm to ensure that the software can be maintained once the existing authors have left:
  • design arguments - why this is done as it is done
  • description of algorithm.


Review status

Reviewer/Editor and Date (copy from screen) Comments
IanTomalin - 7 Apr 2009 created template page
IanTomalin - 7 Apr 2009 Added documentation

Responsible: ResponsibleIndividual
Last reviewed by: Most recent reviewer

-- IanTomalin - 09 Apr 2009

Edit | Attach | Watch | Print version | History: r2 < r1 | Backlinks | Raw View | WYSIWYG | More topic actions
Topic revision: r2 - 2009-04-09 - IanTomalin
    • 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-2018 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback