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
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
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
00089
00091
00092
00093 protected:
00094
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
00114
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
00142 mutable const Propagator* theForwardPropagator;
00143 mutable const Propagator* theBackwardPropagator;
00144
00145 private:
00146
00147
00148
00149
00150
00151
00152
00153
00154 const TrajectoryFilter* theFilter;
00155 const TrajectoryFilter* theInOutFilter;
00157 bool skipClusters_;
00158 edm::InputTag clustersToSkip_;
00159 };
00160
00161
00162 #endif