Go to the documentation of this file.00001 #ifndef TrajectorySegmentBuilder_H
00002 #define TrajectorySegmentBuilder_H
00003
00004
00005 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
00006 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
00007
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
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
00059 theLockHits(lockHits),theBestHitOnly(bestHitOnly)
00060 {}
00061
00063 ~TrajectorySegmentBuilder() {}
00064
00066
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
00093 void cleanCandidates (std::vector<TempTrajectory>& candidates) const;
00094
00095
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
00113 const Propagator& theGeomPropagator;
00114
00115 bool theLockHits;
00116 bool theBestHitOnly;
00117 ConstRecHitContainer theLockedHits;
00118
00119 bool theDbgFlg;
00120 };
00121
00122 #endif