00001 #ifndef GsfTrajectorySmoother_H_ 00002 #define GsfTrajectorySmoother_H_ 00003 00004 #include "TrackingTools/PatternTools/interface/TrajectorySmoother.h" 00005 #include "TrackingTools/PatternTools/interface/TrajectoryStateUpdator.h" 00006 #include "TrackingTools/GeomPropagators/interface/Propagator.h" 00007 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h" 00008 #include "TrackingTools/PatternTools/interface/MeasurementEstimator.h" 00009 #include "TrackingTools/PatternTools/interface/TrajectoryMeasurement.h" 00010 #include "TrackingTools/GsfTracking/interface/GsfPropagatorWithMaterial.h" 00011 #include "TrackingTools/GsfTools/interface/GsfPropagatorAdapter.h" 00012 #include "TrackingTools/GsfTracking/interface/FullConvolutionWithMaterial.h" 00013 00014 class MultiTrajectoryStateMerger; 00015 00020 class GsfTrajectorySmoother : public TrajectorySmoother { 00021 00022 private: 00023 00024 typedef TrajectoryStateOnSurface TSOS; 00025 typedef TrajectoryMeasurement TM; 00026 00027 public: 00028 00032 GsfTrajectorySmoother(const GsfPropagatorWithMaterial& aPropagator, 00033 const TrajectoryStateUpdator& aUpdator, 00034 const MeasurementEstimator& aEstimator, 00035 const MultiTrajectoryStateMerger& merger, 00036 float errorRescaling, 00037 const bool materialBeforeUpdate = true); 00038 00039 virtual ~GsfTrajectorySmoother(); 00040 00041 virtual std::vector<Trajectory> trajectories(const Trajectory& aTraj) const; 00045 const Propagator* propagator() const { 00046 if ( thePropagator) return thePropagator; 00047 else return theGeomPropagator; 00048 } 00049 const TrajectoryStateUpdator* updator() const {return theUpdator;} 00050 const MeasurementEstimator* estimator() const {return theEstimator;} 00051 00052 virtual GsfTrajectorySmoother* clone() const 00053 { 00054 return new GsfTrajectorySmoother(*thePropagator,*theUpdator,*theEstimator, 00055 *theMerger,theErrorRescaling,theMatBeforeUpdate); 00056 } 00057 00058 private: 00059 GsfPropagatorWithMaterial* thePropagator; 00060 const GsfPropagatorAdapter* theGeomPropagator; 00061 const FullConvolutionWithMaterial* theConvolutor; 00062 const TrajectoryStateUpdator* theUpdator; 00063 const MeasurementEstimator* theEstimator; 00064 const MultiTrajectoryStateMerger* theMerger; 00065 00066 bool theTiming; 00067 bool theMatBeforeUpdate; 00068 float theErrorRescaling; 00069 }; 00070 00071 #endif //TR_GsfTrajectorySmoother_H_