Trajectory Cleaning Algorithm

Complete: 1

Goal of the page

State what the reader is expected to learn from this page, e.g., This page is intended to familiarize you with ...



Usage of the algorithm

Explain what a user needs to know when using the algorithm:
  • when to use this algorithm
  • configuration sequences
  • default parameters and how (and why) to change them
  • products

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.


SWGuideTrajectoryCleaning for Combinatorial Track Finder

The CkfTrackCandidateMaker uses the CkfTrajectoryBuilder to perform a controlled pattern recognition. The result being a collection of Trajectory. This collection of trajectories, because of the internal combinatorics and redundancy of the pattern recognition, might contain duplicate of the same trajectory. To clean the collection of trajectory, the TrajectoryCleaner class is used.

Because the approach for cleaning the collection might depend on the environement and the type of track the user tries to reconstruct, the TrajectoryCleaner is made configurable. Furthermore, because this cleaner might involved complex method, it is accessed through the event setup.

Available TrajectoryCleaner

  • TrajectoryCleanerBySharedHits.
  • TrajectoryCleanerMerger is optimized for minimum bias tracking where the pixel seeds are very clean, hence one seed is expected to produce only a single global track. (It is not always the case because the extrapolation to the next layer may be in some cases problematic and there can be more than one compatible hit. The importance of inelastic interaction of primary particles should also be underlined, because the continuation of the original trajectory around the point of secondary vertex is difficult.) With this in view, if more trajectories share the same seed, only the one with most hits is kept, the others are removed. If there are more trajectories with same number of hits, the one with the smallest χ2 is kept. The name of the cleaner might change to TrajectoryCleanerBySharedSeeds.

How to 18X-on

disclaimer The following instructions are indicators of what to do and might not work out of the box in the future due to version synchronization and code development.

If you need a dedicated TrajectoryCleaner, you need to write a C++ class which inherits from TrajectoryCleaner [link] and overload the void clean(...) methods.

class myCleaner : public TrajectoryCleaner {
      //constructor, destructor

      // cleaning methods
      void clean(TrajectoryContainer&) const;
      void clean(TrajectoryPointerContainer&) const;

Putting a TrajectoryCleaner in Event Setup

Using Plugin Factory

If the constructor of your TrajectoryCleaner does not require any argument, you should declare you cleaner to the TrajectoryCleanerFactory with
#include "FWCore/PluginManager/interface/ModuleDef.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/Framework/interface/ModuleFactory.h"
#include "FWCore/Framework/interface/ESProducer.h"

#include "TrackingTools/TrajectoryCleaning/interface/TrajectoryCleanerFactory.h"
#include "myCleaner.h"

DEFINE_EDM_PLUGIN(TrajectoryCleanerFactory, myCleaner, "myCleaner");

You can then use the generic TrajectoryCleanerESProducer with

es_module myCleanerESproducer = trajectoryCleanerBySharedHits from "TrackingTools/TrajectoryCleaning/data/TrajectoryCleanerBySharedHits.cfi"
replace myCleanerESproducer.ComponentName = "myCleaner"

Using dedicated ESProducer

If your cleaner constructor needs argument or tools from the event setup, you should write a dedicated ESProducer to put your cleaner in the record TrajectoryCleaner::Record, which the user does not need to know (TrackingToolComponentsRecord for the time being) and the actual type of being subject to changes.

Accessing a TrajectoryCleaner

you should access the TrajectoryCleaner in Event Setup using in your code

    std::string trajectoryCleanerName = conf_.getParameter<std::string>("TrajectoryCleaner");
    edm::ESHandle<TrajectoryCleaner> trajectoryCleanerH;
    es.get<TrajectoryCleaner::Record>().get(trajectoryCleanerName, trajectoryCleanerH);

Or, if you are using the CkfTrackCandidateMaker, add in your configuration file

    replace ckfTrackCandidates.TrajectoryCleaner = "myCleaner"

Review status

Reviewer/Editor and Date (copy from screen) Comments
KatiLassilaPerini - 29 Jan 2008 created template page

Responsible: ResponsibleIndividual
Last reviewed by: Most recent reviewer

Edit | Attach | Watch | Print version | History: r4 < r3 < r2 < r1 | Backlinks | Raw View | WYSIWYG | More topic actions
Topic revision: r4 - 2009-04-22 - JeanrochVlimant
    • 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