CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_3/src/TrackingTools/GsfTools/interface/GsfPropagatorAdapter.h

Go to the documentation of this file.
00001 #ifndef GsfPropagatorAdapter_h_
00002 #define GsfPropagatorAdapter_h_
00003 
00004 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
00005 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
00006 #include "DataFormats/GeometryCommonDetAlgo/interface/DeepCopyPointerByClone.h"
00007 
00008 class MagneticField;
00009 
00014 class GsfPropagatorAdapter : public Propagator {
00015 
00016 public:
00018   GsfPropagatorAdapter (const Propagator& Propagator);
00019 
00020   ~GsfPropagatorAdapter() {}
00021 
00024   virtual TrajectoryStateOnSurface propagate (const TrajectoryStateOnSurface& tsos, 
00025                                               const Surface& surface) const
00026   {
00027     return Propagator::propagate(tsos,surface);
00028   }
00032   virtual TrajectoryStateOnSurface propagate (const TrajectoryStateOnSurface& tsos, 
00033                                               const Plane& plane) const
00034   {
00035     return propagateWithPath(tsos,plane).first;
00036   }
00040   virtual TrajectoryStateOnSurface propagate (const TrajectoryStateOnSurface& tsos, 
00041                                               const Cylinder& cylinder) const
00042   {
00043     return propagateWithPath(tsos,cylinder).first;
00044   }
00045 
00049   virtual std::pair<TrajectoryStateOnSurface,double> 
00050   propagateWithPath (const TrajectoryStateOnSurface& tsos, 
00051                      const Surface& surface) const
00052   {
00053     return Propagator::propagateWithPath(tsos,surface);
00054   }
00057   virtual std::pair<TrajectoryStateOnSurface,double> 
00058   propagateWithPath (const TrajectoryStateOnSurface&, 
00059                      const Plane&) const;
00062   virtual std::pair<TrajectoryStateOnSurface,double> 
00063   propagateWithPath (const TrajectoryStateOnSurface&, 
00064                      const Cylinder&) const;
00065 
00069   virtual TrajectoryStateOnSurface propagate (const FreeTrajectoryState& fts, 
00070                                               const Surface& surface) const
00071   {
00072     return Propagator::propagate(fts,surface);
00073   }
00078   virtual TrajectoryStateOnSurface propagate (const FreeTrajectoryState& fts, 
00079                                               const Plane& plane) const
00080   {
00081     return propagateWithPath(fts,plane).first;
00082   }
00087   virtual TrajectoryStateOnSurface propagate (const FreeTrajectoryState& fts, 
00088                                               const Cylinder& cylinder) const
00089   {
00090     return propagateWithPath(fts,cylinder).first;
00091   }
00092 
00097   virtual std::pair<TrajectoryStateOnSurface,double> propagateWithPath (const FreeTrajectoryState& fts, 
00098                                                                         const Surface& surface) const
00099   {
00100     return Propagator::propagateWithPath(fts,surface);
00101   }
00105   virtual std::pair<TrajectoryStateOnSurface,double> propagateWithPath (const FreeTrajectoryState&, 
00106                                                                         const Plane&) const;
00110   virtual std::pair<TrajectoryStateOnSurface,double> propagateWithPath (const FreeTrajectoryState&, 
00111                                                                         const Cylinder&) const;
00112 
00113   virtual bool setMaxDirectionChange( float phiMax) { 
00114     return thePropagator->setMaxDirectionChange(phiMax);
00115   }
00116 
00117  virtual void setPropagationDirection (PropagationDirection dir) const;
00118 
00120   inline const Propagator& propagator () const
00121   {
00122     return *thePropagator;
00123   }
00124 
00125   virtual GsfPropagatorAdapter* clone() const
00126   {
00127     return new GsfPropagatorAdapter(*thePropagator);
00128   }
00129 
00130   virtual const MagneticField* magneticField() const {
00131     return thePropagator->magneticField();
00132   }
00133 
00134 private:
00135   // Single state propagator
00136   DeepCopyPointerByClone<Propagator> thePropagator;
00137 };
00138 
00139 #endif