CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/RecoTracker/CkfPattern/interface/TrajectorySegmentBuilder.h

Go to the documentation of this file.
00001 #ifndef TrajectorySegmentBuilder_H
00002 #define TrajectorySegmentBuilder_H
00003 
00004 //B.M. #include "CommonDet/DetUtilities/interface/DetExceptions.h"
00005 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
00006 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
00007 //B.M.#include "TrackingTools/GeomPropagators/interface/AnalyticalPropagator.h"
00008 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
00009 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h"
00010 #include "RecoTracker/MeasurementDet/interface/MeasurementTracker.h"
00011 #include "TrackingTools/MeasurementDet/interface/LayerMeasurements.h"
00012 #include <vector>                                        
00013 
00014 class TrajectoryStateUpdator;
00015 class MeasurementEstimator;
00016 class Trajectory;
00017 class TrajectoryMeasurement;
00018 class TrajectoryMeasurementGroup;
00019 class FreeTrajectoryState;
00020 class TrajectoryStateOnSurface;
00021 class DetGroup;
00022 class DetLayer;
00023 class TempTrajectory;
00024 
00028 class TrajectorySegmentBuilder {
00029 
00030 private:
00031   // short names
00032   typedef FreeTrajectoryState FTS;
00033   typedef TrajectoryStateOnSurface TSOS;
00034   typedef TrajectoryMeasurement TM;
00035   typedef TrajectoryMeasurementGroup TMG;
00036   typedef std::vector<Trajectory> TrajectoryContainer;
00037   typedef std::vector<TempTrajectory> TempTrajectoryContainer;
00038   typedef TransientTrackingRecHit::ConstRecHitContainer ConstRecHitContainer;
00039   typedef TransientTrackingRecHit::ConstRecHitPointer   ConstRecHitPointer;
00040   
00041 public:
00042   
00044   TrajectorySegmentBuilder (const MeasurementTracker* theInputMeasurementTracker,
00045                             const LayerMeasurements*  theInputLayerMeasurements,
00046                             const DetLayer& layer,
00047                             const Propagator& propagator,
00048                             const TrajectoryStateUpdator& updator,
00049                             const MeasurementEstimator& estimator,
00050                             bool lockHits, bool bestHitOnly) :
00051     theMeasurementTracker(theInputMeasurementTracker),
00052     theLayerMeasurements(theInputLayerMeasurements),
00053     theLayer(layer),
00054     theFullPropagator(propagator),
00055     theUpdator(updator),
00056     theEstimator(estimator),
00057     theGeomPropagator(propagator),
00058 //     theGeomPropagator(propagator.propagationDirection()),
00059     theLockHits(lockHits),theBestHitOnly(bestHitOnly)
00060   {}
00061 
00063   ~TrajectorySegmentBuilder() {}
00064 
00066   //std::vector<Trajectory> segments (const TSOS startingState);
00067   TempTrajectoryContainer segments (const TSOS startingState);
00068 
00069 private:
00071   void updateTrajectory (TempTrajectory& traj, const TM& tm) const;
00072  
00074   void updateCandidates (TempTrajectory& traj, const std::vector<TM>& measurements,
00075                          TempTrajectoryContainer& candidates);
00076 
00078   void updateCandidatesWithBestHit (TempTrajectory& traj, const std::vector<TM>& measurements,
00079                                     TempTrajectoryContainer& candidates);
00080 
00082   std::vector<TrajectoryMeasurement> redoMeasurements (const TempTrajectory& traj,
00083                                                   const DetGroup& detGroup) const;
00084 
00086   std::vector<TrajectoryMeasurement> unlockedMeasurements (const std::vector<TM>& measurements) const;
00087 
00089   void lockMeasurement (const TM& measurement);
00090 
00092   //B.M to be ported later
00093   void cleanCandidates (std::vector<TempTrajectory>& candidates) const;
00094 
00095 // public:
00096 
00097   std::vector<TempTrajectory> addGroup( TempTrajectory& traj,
00098                                std::vector<TrajectoryMeasurementGroup>::const_iterator begin,
00099                                std::vector<TrajectoryMeasurementGroup>::const_iterator end);
00100     
00101   void updateWithInvalidHit (TempTrajectory& traj,
00102                              const std::vector<TMG>& groups,
00103                              TempTrajectoryContainer& candidates) const;
00104   
00105 private:
00106   const MeasurementTracker*     theMeasurementTracker;
00107   const LayerMeasurements*      theLayerMeasurements;
00108   const DetLayer&               theLayer;
00109   const Propagator&             theFullPropagator;
00110   const TrajectoryStateUpdator& theUpdator;
00111   const MeasurementEstimator&   theEstimator;
00112 //   AnalyticalPropagator theGeomPropagator;
00113   const Propagator&             theGeomPropagator;
00114 
00115   bool theLockHits;
00116   bool theBestHitOnly;
00117   ConstRecHitContainer theLockedHits;
00118 
00119   bool theDbgFlg;
00120 };
00121 
00122 #endif