ATLAS Offline Software
InDetPriVxFinderTool

Introduction:

InDetPriVxFinderTool is a package which contains an AlgTool to calculate one or more primary vertices (in case of pile up events) of an event. The package contains four different approaches to reconstruct primary vertices. InDetPriVxFinderTool.cxx makes use of the Billoir fitting AlgTools in the package TrkVertexBilloirTools. InDetAdaptivePriVxFinderTool.cxx and InDetAdaptiveMultiPriVxFinderTool.cxx make use of deterministic annealing methods. All units are in mm and MeV.

How it works:

  • InDetPriVxFinderTool.cxx It is a prototype usecase of the mathematical billoir fit AlgTools of the VxBilloirTools package. It is a typical tear down algorithm. It starts with a given collection of tracks, applies some quality cuts on tracks and feeds the fit AlgTool with all tracks which passed. The billoir tool stores the result in a VxCandidate object (see package Tracking/TrkEvent/VxVertex). After a first fit, InDetPriVxFinderTool.cxx loops again through tracks and selects them according to their \( \chi^{2} \) of the vertex fit. Tracks with too high \( \chi^{2} \) are rejected and the vertex is refittet. The result is stored in the VxContainer.

    There are two versions on how the algorithm handles the \( \chi^{2} \) cut:

    • Version 1: (chi2CutMethod = 1)
      • get rid of all tracks with \( \chi^{2} \) > m_maxChi2PerTrack in one go
      • no refit after removing one track
      • refit after all tracks with too high \( \chi^{2} \) were removed
    • Version 2: (chi2CutMethod = 2)
      • get rid of tracks one by one starting with the one with highest \( \chi^{2} \) > m_maxChi2PerTrack
      • refit after this track has been removed
        and do a \( \chi^{2} \) cut again until all \( \chi^{2} \) < m_maxChi2PerTrack

    The track quality cuts \( ( p_t, d_0, \frac{d_0}{\sigma_{d_0}}, z_0, \chi^{2} ) \) can be set via jobOptions as well as the billoir method to be used (FullFit/FastFit).

  • InDetAdaptivePriVxFinderTool.cxx

    This class provides an implementation for a primary vertex finding tool, which uses the Adaptive Vertex Fitter to reject outliers not belonging to the primary vertex interaction.

    The steps done are simply;

    • Tracks are selected according to the specified cuts
    • The Adaptive Vertex Finder is used to fit them

    Contrary to the InDetPriVxFinderTool, the outlier rejection is done by the fitter and not by the finder.

    One only vertex can be fit, so it is not suited (as a finder) when many minimum bias vertices can be expected. In this case please use the InDetPriVxFinderTool.

  • InDetAdaptiveMultiPriVxFinderTool.cxx

    This class provides an implementation for a primary vertex finding tool, which uses the Adaptive MultiVertex Fitter to solve the problem of finding the multiple interaction vertices and to find out the best possible assignment of the track to the vertices.

    The steps done are the following:

    • the selection cuts are applied

    then iteratively:

    • a new vertex is seeded with the remaining tracks (the seed finder is used)
    • all the tracks whose Z at PCA is closer to the seeded vertex by more than TracksMaxZinterval (by JobOption), are added to the new vertex candidate
    • the new vertex candidate is added on top of the previous fit and the AdaptiveMultiVertexFitter is used to fit all them together (more information in the
      TrkVertexFitters package).
    • the tracks already used are removed from the tracks from which the next seed would be obtained and if there are more than 2 left, a new iteration is started.

    when no more than 2 seeding tracks are left:

    • a vector of MVFVxCandidate is provided as result and according to the selection type, the order in which it is provided represents how high the probability of that particular vertex to come from the primary vertex is.

    In general the first VxCandidate* in the collection is the one with highest sqrt(N_tracks)*Sum Pt_track^2. This is the case if the selectiontype in the jobOptions is set to 0 (default).

    This finder is particularly suited for the high luminosities scenarios which will came up at LHC.

The jobOptions file:

The AlgTool is automatically configured (see genConf). Following properties can be set:

  • InDetPriVxFinderTool.cxx

    • Specifiy the name of the vertex fitter:
      'VertexFitterTool' : PublicToolHandle('Trk::FastVertexFitter')
      At the moment VxBilloirTools supports two fitting methods: FastFit and FullFit.
    • Specify the name of the track summary tool:
      'TrackSummaryTool' : PublicToolHandle('Trk::TrackSummaryTool')
    • VxPrimary.chi2CutMethod = 1;
      See above for the two possibilities.
      'maxChi2PerTrack' : 5.0
    • VxPrimary.maxchi2perTrack = 5.; // Maximum \( \chi^{2} \) of track to pass (applied after first vertex fit)
    • Track parameter quality cuts:
      • 'minPt' : 1000.0 // Minimal Pt(MeV)
      • 'maxZ0' : 150.0 // Maximal z0(mm)
      • 'maxD0' : 0.25 // Maximal d0(mm)
      • 'maxD0overSigmaD0' : 3.0 // Maximal d0/sigmad0
      • 'useSiHitCut' : 1 //Check if track has at least one b-layer hit and more than one pixel hit
    • Use a beam constraint: (bool)
      'useBeamConstraint' : False
    • In case of pile up:
      'enableMultipleVertices' : 0
      'clusterLength' : 3.0,

  • InDetAdaptivePriVxFinderTool.cxx

    • 'minPt' : 500.0 //Minimal Pt(MeV)
    • 'maxZ0' : 1000.0 //Maximal z0(mm)
    • 'maxD0' : 1 //Minimal d0(mm)
    • 'maxSigD0' : 0.35 //max transv error
    • 'maxSigZ0' : 2.5 //max long error
    • 'maxD0overSigmaD0' //max transv IP significance
    • 'useSiHitCut' : 1 // Do cuts on number of hits in tracker
    • 'minBHits' : 0 // Number of minimum B layer hits required
    • 'minPixelHits' : 1 // Number of minimum SCT hits required
    • 'minSCTHits' : 5 // Number of minimum SCT hits required
    • 'minPixelAndSCTHits' : 7 // Number of minimum sum of pixel + SCT hits required
    • 'maxTrkChi2' : 3.5 //Cut on the track chi2 from tracking algo for preselection

  • InDetAdaptiveMultiPriVxFinderTool.cxx
    • 'minPt' : 500.0 //Minimal Pt(MeV)
    • 'maxZ0' : 1000.0 //Maximal z0(mm)
    • 'maxD0' : 1 //Minimal d0(mm)
    • 'maxSigD0' : 0.35 //max transv error
    • 'maxSigZ0' : 2.5 //max long error
    • 'maxD0overSigmaD0' //max transv IP significance
    • 'useSiHitCut' : 1 // Do cuts on number of hits in tracker
    • 'minBHits' : 0 // Number of minimum B layer hits required
    • 'minPixelHits' : 1 // Number of minimum SCT hits required
    • 'minSCTHits' : 5 // Number of minimum SCT hits required
    • 'minPixelAndSCTHits' : 7 // Number of minimum sum of pixel + SCT hits required
    • 'maxTrkChi2' : 3.5 //Cut on the track chi2 from tracking algo for preselection
    • 'TracksMaxZinterval' 4 //Description: When adding a new vertex to the multi vertex fit, only the tracks whose Z at PCA is closer to the seeded vertex by more than this TracksMaxZinterval value are added to this new vertex. Default is 4 mm. If you cut too hard, you cut out the good cases where the seed finder is not reliable, but the fit would be still able to converge towards the right vertex. If you cut too soft, you consider a lot of tracks which just slow down the fit.
    • 'maxVertexChi2' 10 //Description: After having added one vertex to the fit and having performed the MultiVertex fit again, all the tracks which are compatible to the new vertex by more than this maxVertexChi2 (in units of chi2) value are eliminated from the tracks from which still to seed the next vertex.
    • 'cleaningZinterval' 2 //Description: In case the fit gets stuck (a new seed found but after the full fit of the new vertex, all the tracks are found not compatible with it), the fit will find a seed for a new vertex only after having eliminated from the game all tracks whose Z at PCA is nearer to the actual seeded vertex by more then the cleaningZinterval (by JO), given in mm.
    • 'finalCutMaxVertexChi2' 10 //Description: During the estimation of probability of vertex candidate to be the primary interaction vertex, only all the tracks which have chi2 in the vertex fit higher than this value are used for the sum of p_t^2 or as input for the Neural Network.
    • 'MinWeight' 0.001 //Description: Final limit on track weight (between 0 and 1) in the fit to have a track stored in the saved vertex candidate. (not all people will give a look at the stored track weight in the fit...)