CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_4_5_patch3/src/TrackingTools/GsfTracking/interface/GsfTrajectorySmoother.h

Go to the documentation of this file.
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 #include "TrackingTools/DetLayers/interface/DetLayerGeometry.h"
00014 
00015 class MultiTrajectoryStateMerger;
00016 
00021 class GsfTrajectorySmoother : public TrajectorySmoother {
00022 
00023 private:
00024 
00025   typedef TrajectoryStateOnSurface TSOS;
00026   typedef TrajectoryMeasurement TM;
00027 
00028 public:
00029 
00033   GsfTrajectorySmoother(const GsfPropagatorWithMaterial& aPropagator,
00034                         const TrajectoryStateUpdator& aUpdator,
00035                         const MeasurementEstimator& aEstimator,
00036                         const MultiTrajectoryStateMerger& merger,
00037                         float errorRescaling,
00038                         const bool materialBeforeUpdate = true,
00039                         const DetLayerGeometry* detLayerGeometry=0);
00040 
00041   virtual ~GsfTrajectorySmoother();
00042 
00043   virtual std::vector<Trajectory> trajectories(const Trajectory& aTraj) const;
00047   const Propagator* propagator() const {
00048     if ( thePropagator) return thePropagator;
00049     else  return theGeomPropagator;
00050   }
00051   const TrajectoryStateUpdator* updator() const {return theUpdator;}
00052   const MeasurementEstimator* estimator() const {return theEstimator;}
00053 
00054   virtual GsfTrajectorySmoother* clone() const
00055   {
00056     return new GsfTrajectorySmoother(*thePropagator,*theUpdator,*theEstimator,
00057                                      *theMerger,theErrorRescaling,theMatBeforeUpdate,theGeometry);
00058   }
00059 
00060 private:
00061   GsfPropagatorWithMaterial* thePropagator;
00062   const GsfPropagatorAdapter* theGeomPropagator;
00063   const FullConvolutionWithMaterial* theConvolutor;
00064   const TrajectoryStateUpdator* theUpdator;
00065   const MeasurementEstimator* theEstimator;
00066   const MultiTrajectoryStateMerger* theMerger;
00067   
00068   bool theTiming;
00069   bool theMatBeforeUpdate;
00070   float theErrorRescaling;
00071 
00072   const DetLayerGeometry dummyGeometry;
00073   const DetLayerGeometry* theGeometry;
00074 
00075 };
00076 
00077 #endif //TR_GsfTrajectorySmoother_H_