CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/RecoTracker/CkfPattern/interface/BaseCkfTrajectoryBuilder.h

Go to the documentation of this file.
00001 #ifndef RecoTracker_CkfPattern_BaseCkfTrajectoryBuilder_h
00002 #define RecoTracker_CkfPattern_BaseCkfTrajectoryBuilder_h
00003 
00004 #include "TrackingTools/PatternTools/interface/TrajectoryMeasurement.h"
00005 #include "TrackingTools/PatternTools/interface/TrajectoryBuilder.h"
00006 #include "FWCore/Framework/interface/Event.h"
00007 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00008 
00009 #include<cassert>
00010 #include "TrackingTools/PatternTools/interface/TempTrajectory.h"
00011 
00012 class CkfDebugger;
00013 class Chi2MeasurementEstimatorBase;
00014 class DetGroup;
00015 class FreeTrajectoryState;
00016 class IntermediateTrajectoryCleaner;
00017 class LayerMeasurements;
00018 class MeasurementTracker;
00019 class MeasurementEstimator;
00020 class NavigationSchool;
00021 class Propagator;
00022 class TrajectoryStateUpdator;
00023 class TrajectoryMeasurement;
00024 class TrajectorySeed;
00025 class TrajectoryContainer;
00026 class TrajectoryStateOnSurface;
00027 class TrajectoryFitter;
00028 class TransientTrackingRecHitBuilder;
00029 class Trajectory;
00030 class TempTrajectory;
00031 class TrajectoryFilter;
00032 class TrackingRegion;
00033 class TrajectoryMeasurementGroup;
00034 class TrajectoryCleaner;
00035 
00036 #include "TrackingTools/PatternTools/interface/bqueue.h"
00037 #include "RecoTracker/CkfPattern/interface/PrintoutHelper.h"
00038 
00046 class BaseCkfTrajectoryBuilder : public TrajectoryBuilder {
00047 protected:
00048   // short names
00049   typedef FreeTrajectoryState         FTS;
00050   typedef TrajectoryStateOnSurface    TSOS;
00051   typedef TrajectoryMeasurement       TM;
00052   typedef std::pair<TSOS,std::vector<const DetLayer*> > StateAndLayers;
00053 
00054 public:
00055 
00056   typedef std::vector<Trajectory> TrajectoryContainer;
00057   typedef std::vector<TempTrajectory> TempTrajectoryContainer;
00058   typedef TrajectoryContainer::iterator TrajectoryIterator;
00059   
00060   BaseCkfTrajectoryBuilder(const edm::ParameterSet&              conf,
00061                            const TrajectoryStateUpdator*         updator,
00062                            const Propagator*                     propagatorAlong,
00063                            const Propagator*                     propagatorOpposite,
00064                            const Chi2MeasurementEstimatorBase*   estimator,
00065                            const TransientTrackingRecHitBuilder* RecHitBuilder,
00066                            const MeasurementTracker*             measurementTracker,
00067                            const TrajectoryFilter*               filter,
00068                            const TrajectoryFilter*               inOutFilter = 0);
00069 
00070   virtual ~BaseCkfTrajectoryBuilder();
00071 
00072   // new interface returning the start Trajectory...
00073   virtual TempTrajectory buildTrajectories (const TrajectorySeed& seed,
00074                                             TrajectoryContainer &ret,
00075                                             const TrajectoryFilter*) const  { assert(0==1); return TempTrajectory();}
00076   
00077   
00078   virtual void  rebuildTrajectories(TempTrajectory const& startingTraj, const TrajectorySeed& seed,
00079                                     TrajectoryContainer& result) const { assert(0==1);}
00080 
00081 
00082   virtual void setEvent(const edm::Event& event) const;
00083   virtual void unset() const;
00084 
00085   virtual void setDebugger( CkfDebugger * dbg) const {;}
00086  
00088   //  int               maxLostHit()            {return theMaxLostHit;}
00089 
00091   //  int               maxConsecLostHit()      {return theMaxConsecLostHit;}
00092 
00093  protected:    
00094   //methods for dubugging 
00095   virtual bool analyzeMeasurementsDebugger(Trajectory& traj, const std::vector<TrajectoryMeasurement>& meas,
00096                                            const MeasurementTracker* theMeasurementTracker, 
00097                                            const Propagator* theForwardPropagator, 
00098                                            const Chi2MeasurementEstimatorBase* theEstimator, 
00099                                            const TransientTrackingRecHitBuilder * theTTRHBuilder) const {return true;} 
00100   virtual bool analyzeMeasurementsDebugger(TempTrajectory& traj, const std::vector<TrajectoryMeasurement>& meas,
00101                                            const MeasurementTracker* theMeasurementTracker, 
00102                                            const Propagator* theForwardPropagator, 
00103                                            const Chi2MeasurementEstimatorBase* theEstimator, 
00104                                            const TransientTrackingRecHitBuilder * theTTRHBuilder) const {return true;} 
00105   virtual void fillSeedHistoDebugger(std::vector<TrajectoryMeasurement>::iterator begin, 
00106                                      std::vector<TrajectoryMeasurement>::iterator end) const {;}
00107 
00108  protected:
00109 
00110   TempTrajectory createStartingTrajectory( const TrajectorySeed& seed) const;
00111 
00113   // If inOut is true, this is being called part-way through tracking, after the in-out tracking phase is complete.
00114   // If inOut is false, it is called at the end of tracking.
00115   bool toBeContinued( TempTrajectory& traj, bool inOut = false) const;
00116 
00118   bool qualityFilter( const TempTrajectory& traj, bool inOut = false) const;
00119   
00120   void addToResult(boost::shared_ptr<const TrajectorySeed> const & seed, TempTrajectory& traj, TrajectoryContainer& result, bool inOut = false) const;    
00121   void addToResult( TempTrajectory const& traj, TempTrajectoryContainer& result, bool inOut = false) const;    
00122   void moveToResult( TempTrajectory&& traj, TempTrajectoryContainer& result, bool inOut = false) const;    
00123 
00124   StateAndLayers findStateAndLayers(const TrajectorySeed& seed, const TempTrajectory& traj) const;
00125   StateAndLayers findStateAndLayers(const TempTrajectory& traj) const;
00126 
00127  private:
00128   void seedMeasurements(const TrajectorySeed& seed, TempTrajectory & result) const;
00129 
00130 
00131 
00132  protected:
00133   const TrajectoryStateUpdator*         theUpdator;
00134   const Propagator*                     thePropagatorAlong;
00135   const Propagator*                     thePropagatorOpposite;
00136   const Chi2MeasurementEstimatorBase*   theEstimator;
00137   const TransientTrackingRecHitBuilder* theTTRHBuilder;
00138   const MeasurementTracker*             theMeasurementTracker;
00139   const LayerMeasurements*              theLayerMeasurements;
00140 
00141   // these may change from seed to seed
00142   mutable const Propagator*             theForwardPropagator;
00143   mutable const Propagator*             theBackwardPropagator;
00144 
00145  private:
00146   //  int theMaxLostHit;            /**< Maximum number of lost hits per trajectory candidate.*/
00147   //  int theMaxConsecLostHit;      /**< Maximum number of consecutive lost hits 
00148   //                                     per trajectory candidate. */
00149   //  int theMinimumNumberOfHits;   /**< Minimum number of hits for a trajectory to be returned.*/
00150   //  float theChargeSignificance;  /**< Value to declare (q/p)/sig(q/p) significant. Negative: ignore. */
00151 
00152   //  TrajectoryFilter*              theMinPtCondition;
00153   //  TrajectoryFilter*              theMaxHitsCondition;
00154   const TrajectoryFilter* theFilter; 
00155   const TrajectoryFilter* theInOutFilter; 
00157   bool skipClusters_;
00158   edm::InputTag clustersToSkip_;
00159 };
00160 
00161 
00162 #endif