CMS 3D CMS Logo

DAFTrackProducerAlgorithm.h

Go to the documentation of this file.
00001 #ifndef DAFTrackProducerAlgorithm_h
00002 #define DAFTrackProducerAlgorithm_h
00003 
00004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00005 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h"
00006 #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h"
00007 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
00008 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
00009 
00010 class MagneticField;
00011 class TrackingGeometry;
00012 class TrajectoryFitter;
00013 class Trajectory;
00014 class TrajectoryStateOnSurface;
00015 class TransientTrackingRecHitBuilder;
00016 class MultiRecHitCollector;
00017 class SiTrackerMultiRecHitUpdator;
00018 namespace reco{
00019         class Track;
00020 }
00021 
00022 class DAFTrackProducerAlgorithm {
00023    
00024    typedef std::pair<Trajectory*, std::pair<reco::Track*,PropagationDirection> > AlgoProduct;
00025    typedef std::vector< AlgoProduct >  AlgoProductCollection;
00026   
00027  public:
00028 
00030   DAFTrackProducerAlgorithm(const edm::ParameterSet& pset):conf_(pset){}
00031 
00033   ~DAFTrackProducerAlgorithm() {}
00034   
00036   void runWithCandidate(const TrackingGeometry *, 
00037                         const MagneticField *, 
00038                         const TrackCandidateCollection&,
00039                         const TrajectoryFitter *,
00040                         const TransientTrackingRecHitBuilder*,
00041                         const MultiRecHitCollector* measurementTracker,
00042                         const SiTrackerMultiRecHitUpdator*,
00043                         const reco::BeamSpot&,
00044                         AlgoProductCollection &) const;
00045 
00046  private:
00048   bool buildTrack(const std::vector<Trajectory>&,
00049                   AlgoProductCollection& algoResults,
00050                   float,
00051                   const reco::BeamSpot&) const;
00052 
00054   void fit(const std::pair<TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface>& hits,
00055            const TrajectoryFitter * theFitter,
00056            std::vector<Trajectory>& vtraj) const;
00057 
00058   //calculates the ndof according to the DAF prescription
00059   float calculateNdof(const std::vector<Trajectory>& vtraj) const;
00060 
00061   //creates MultiRecHits out of a KF trajectory         
00062   std::pair<TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface>
00063   collectHits(const std::vector<Trajectory>& vtraj,
00064               const MultiRecHitCollector* measurementCollector) const;
00065 
00066   //updates the hits with the specified annealing factor
00067   std::pair<TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface>
00068   updateHits(const std::vector<Trajectory>& vtraj,
00069              const SiTrackerMultiRecHitUpdator* updator,
00070              double annealing) const; 
00071 
00072   //removes from the trajectory isolated hits with very low weight
00073   void filter(const TrajectoryFitter* fitter, 
00074               std::vector<Trajectory>& input, 
00075               int minhits, std::vector<Trajectory>& output) const;
00076 
00077   edm::ParameterSet conf_;
00078 };
00079 
00080 #endif

Generated on Tue Jun 9 17:45:59 2009 for CMSSW by  doxygen 1.5.4