Complete: 1

ConfigurableVertexReconstructor is a VertexReconstructor which can be configured completely at runtime via a ParameterSet. Exchanging one algorithm in your analysis for another becomes a matter of changing a line in the config file. Any concrete VertexReconstructor can be used. Here is a sample cfg file:

 PSet vertexreco =
  string finder = "avr"
  double primcut = 3.0
  double seccut = 3.0
  double weightthreshold = 0.0
  bool smoothing = false

and sample code for your EDAnalyzer:

#include "RecoVertex/ConfigurableVertexReco/interface/ConfigurableVertexReconstructor.h"

class MakePatTuple : public edm::EDAnalyzer {

MyAnalyzer::MyAnalyzer(const edm::ParameterSet& iConfig) :  
vtxmaker_(vtxconfig_) {}

void MyAnalyzer::analyze(edm::Event& iEvent, const edm::EventSetup& iSetup) {
   vector t_tks = ...
   vector t_vtxs;
   t_vtxs = vtxmaker_.vertices(t_tks);

ParameterSet vtxconfig_;
ConfigurableVertexReconstructor vtxmaker_;

Note that also VertexFitters (and even LinearizationPointFinders!) are available via ConfigurableVertexReco.

The following algorithms are currently available:

  • avr: AdaptiveVertexReconstructor. Iterative adaptive method. n vertices. Currently our best choice.
  • mvf: MultiVertexFitter. Experimental method. If in doubt, do not use it!
  • tkf: TrimmedKalmanVertexFinder. Classical Kalman-based filter. Solid.

Note that every ConfigurableVertexFitter is available as a VertexReconstructor, also. The following example works for a ConfigurableVertexReconstructor (mind the "finder" instead of the "fitter")

 PSet vertexfit =
  string finder = "avf"
  double sigmacut =3.0


  • AdaptiveVertexReconstructor
  string finder = "avr"
  double primcut = 1.8 # "sigma-cut" on the primary vertex (see below)
  double seccut = 6.0  # "sigma-cut" on the subsequent vertices (see below)
  double primr = 0.25  # "annealing ratio" for the primary vertex
  double primT = 256. # initial temperature for the primary vertex
  double secr = 0.25   # "annealing ratio" for all subsequent vertices
  double secT = 256.  # initial temperature for all subsequent vertices
  double minweight = 0.5 # minimum weight to recycle a track
  bool smoothing = false # perform track smoothing?
  double weightthreshold = 0.001 # see below

The primary vertex" is the first one found by the vertex finder. This will usually be the one with the most tracks and correspond to the P.V. Sigma-cut in this context means that tracks with a reduced distance (a.k.a standardised residual) to the vertex candidate that equals this sigma-cut are assigned a weight (=an assignment probability) of 0.5. (Tracks at smaller/larger distances get a larger/smaller weight than this, where the weight is always in the range zero to one). The algorithm employs an annealing schedule to avoid falling prematurely into local minima (see e.g. CMS Note 2007/008). primr, primT, secr, secT define the annealing schedules for the primary vertex and all subsequent vertices, respectively.

Weightthreshold denotes the weight above which a track is considered "significant". (Its value is hard-wired to zero for secondary vertices). Vertices with fewer than two significant tracks are discarded in the procedure.

A reference to a CMS note on the AdaptiveVertexReconstructor will appear here in the near future.

  • MultiVertexFitter
  string finder="mvf"
  double sigmacut=9.0 # "sigma-cut", valid for all vertices
  double Tini=8.0 # initial annealing temperature
  ini = cms.PSet(
       finder = cms.string('avr') # Vertex-finder used to get initial set of vertices to be refined by multi-vertex-fitter.

The MultiVertexFitter is still in an experimental state and should not be used by the average user.

  • TrimmedKalmanVertexFinder
  string finder="tkf"
  double trkcutpv=0.05 # track "probability"-cut on primary vertex
  double trkcutsv=0.01 # track probability-cut on secondary vertices
  double vtxcut=0.01   #  probability-cut on vertex, for cleaning

The TrimmedKalmanVertexFinder is a solid, classical algorithm and can be used for everyday work, although the AdaptiveVertexReconstructor is likely to be more performant in most use cases.

Review status

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

Responsible: Main.walten
Last reviewed by: Reviewer

Edit | Attach | Watch | Print version | History: r7 < r6 < r5 < r4 < r3 | Backlinks | Raw View | WYSIWYG | More topic actions
Topic revision: r7 - 2011-06-13 - 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