The Adaptive Vertex Reconstructor

Complete: 2


The AdaptiveVertexReconstructor iteratively uses the AdaptiveVertexFitter to find and fit interaction vertices. A detailed description can be found in note CMS AN 2006/104. It can therefore return several vertices for any given collection of input tracks.

The fitter is implemented in the package RecoVertex/AdaptiveVertexFinder


The method is used like any other VertexReconstructor.

AdaptiveVertexReconstructor finder;
vector<TransientVertex> vertices = finder.vertices ( vector<TransientTrack> tracks );

You can also pass an optional beam-spot constraint to the fitter as a second argument.

Note that ConfigurableVertexReconstructor can instead be used as a very convenient "frontend". The method is known as "avr" to the ConfigurableVertexReconstructor (string finder="avr"). This also allows one to easily set various configuration parameters.


The following parameters can be defined by the constructor (or via the ParameterSet):

  • primcut (default 3.0): defines the cutoff parameter (in multiples of sigma) for associating tracks to the primary vertex. (Tracks at this distance from the vertex are assigned a weight of 0.5).
  • seccut (default 5.0): defines the cutoff parameter (in multiples of sighma) for assigning tracks to subsequent (non-primary) vertices. (Tracks at this distance from the vertex are assigned a weight of 0.5).
  • minweight (default 0.5): if a track is assigned a weight greater than this to belong to a vertex, then it is locked and will not be assigned to any subsequent vertices found. N.B. Tracks with weight below this will still be assigned to a vertex, but will still be used to form subsequent vertices.

Additional (less important) parameters can also be set via the ParameterSet:

  • primtT (256.)
  • primr (0.25)
  • secT = cms.double(256.0),
  • secr = cms.double(0.25),
  • weightthreshold = cms.double(0.001),

These correspond to the AdaptiveVertexFitter parameters for the primary and subsequent vertices. (Parameter weightthreshold applies to both).


The output is returned as a vector. Note that:

  • Atlhough TransientVertex::originalTracks().size() will tell you the number of tracks in each vertex, many of these may have very small weights, meaning that they are unlikely to belong to it. Therefore you should check the individual tracks weights using TransientVertex::trackWeight(trk).
  • TransientVertex::degreesOfFreedom() is defined as twice the sum of the tracks weights minus 3. If many of the track weights are small, this can be negative ! Similarly, the vertex chi2 is calculated including the weights. It can therefore be very different from that obtained using a KalmanVertexFit. There is no good reason why it should have a chi2 distribution.
  • Vertices will only be kept if at least two tracks have weights exceeding parameter weightthreshold. Note that some of the found vertices may therefore have many/all tracks with very small weights. These should be treated with some distrust.

Review status

Reviewer/Editor and Date (copy from screen) Comments
Main.walten - 22 Jun 2007 page author
Main.tomalin - 22 July 2009 updated

Responsible: Main.walten
Last reviewed by: Reviewer

Edit | Attach | Watch | Print version | History: r5 < r4 < r3 < r2 < r1 | Backlinks | Raw View | WYSIWYG | More topic actions
Topic revision: r5 - 2009-07-22 - 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-2021 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
or Ideas, requests, problems regarding TWiki? use Discourse or Send feedback