CMS 3D CMS Logo

CMSSW_4_4_3_patch1/src/TrackingTools/GeomPropagators/interface/BeamHaloPropagator.h

Go to the documentation of this file.
00001 #ifndef GeomPropagators_BeamHaloPropagator_H
00002 #define GeomPropagators_BeamHaloPropagator_H
00003 
00014 /* Collaborating Class Declarations */
00015 #include "TrackingTools/TrajectoryState/interface/FreeTrajectoryState.h"
00016 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
00017 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
00018 #include "MagneticField/Engine/interface/MagneticField.h"
00019 #include "DataFormats/GeometrySurface/interface/ReferenceCounted.h"
00020 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
00021 
00022 /* Class BeamHaloPropagator Interface */
00023 
00024 class BeamHaloPropagator : public Propagator {
00025 
00026   public:
00027 
00028     /* Constructor */ 
00030     BeamHaloPropagator(Propagator* aEndCapTkProp, Propagator* aCrossTkProp, const MagneticField* field,
00031                        PropagationDirection dir = alongMomentum);
00032 
00034     BeamHaloPropagator(const Propagator& aEndCapTkProp,const Propagator& aCrossTkProp, const MagneticField* field,
00035                        PropagationDirection dir = alongMomentum);
00036 
00037 
00039     BeamHaloPropagator( const BeamHaloPropagator& );
00040 
00042     virtual ~BeamHaloPropagator() ;
00043 
00045     virtual BeamHaloPropagator* clone() const {
00046       return new BeamHaloPropagator(getEndCapTkPropagator(),getCrossTkPropagator(),magneticField(),propagationDirection());
00047     }
00048 
00049 
00050     void setPropagationDirection (PropagationDirection dir) const
00051     {
00052       Propagator::setPropagationDirection(dir);
00053       getEndCapTkPropagator()->setPropagationDirection(dir);
00054       getCrossTkPropagator()->setPropagationDirection(dir);
00055     }
00056 
00057 
00058 
00059     /* Operations as propagator*/ 
00060     TrajectoryStateOnSurface propagate(const FreeTrajectoryState& fts, 
00061                                        const Surface& surface) const;
00062 
00063     TrajectoryStateOnSurface propagate(const TrajectoryStateOnSurface& tsos, 
00064                                        const Surface& surface) const {
00065       return Propagator::propagate(tsos,surface);
00066     }
00067 
00068     TrajectoryStateOnSurface propagate(const FreeTrajectoryState& fts,
00069                                        const Plane& plane) const;
00070 
00071     TrajectoryStateOnSurface propagate(const TrajectoryStateOnSurface& tsos,
00072                                        const Plane& plane) const {
00073       return Propagator::propagate(tsos, plane);
00074     }
00075 
00076     TrajectoryStateOnSurface propagate(const FreeTrajectoryState& fts, 
00077                                        const Cylinder& cylinder) const;
00078 
00079     TrajectoryStateOnSurface propagate(const TrajectoryStateOnSurface& tsos, 
00080                                        const Cylinder& cylinder) const {
00081       return Propagator::propagate(tsos, cylinder);
00082     }
00083 
00084     std::pair<TrajectoryStateOnSurface,double> 
00085       propagateWithPath(const FreeTrajectoryState& fts, 
00086                         const Surface& surface) const {
00087         return Propagator::propagateWithPath(fts,surface);
00088       }
00089 
00090     std::pair<TrajectoryStateOnSurface,double> 
00091       propagateWithPath(const TrajectoryStateOnSurface& tsos, 
00092                         const Surface& surface) const {
00093         return Propagator::propagateWithPath(tsos,surface);
00094       }
00095 
00096     std::pair<TrajectoryStateOnSurface,double> 
00097       propagateWithPath(const FreeTrajectoryState& fts, 
00098                         const Plane& plane) const;
00099 
00100     std::pair<TrajectoryStateOnSurface,double> 
00101       propagateWithPath(const TrajectoryStateOnSurface& tsos, 
00102                         const Plane& plane) const {
00103         return Propagator::propagateWithPath(tsos, plane);
00104       }
00105 
00106     std::pair<TrajectoryStateOnSurface,double> 
00107       propagateWithPath(const FreeTrajectoryState& fts, 
00108                         const Cylinder& cylinder) const;
00109 
00110     std::pair<TrajectoryStateOnSurface,double> 
00111       propagateWithPath(const TrajectoryStateOnSurface& tsos, 
00112                         const Cylinder& cylinder) const {
00113         return Propagator::propagateWithPath(tsos, cylinder);
00114       }
00115 
00117       bool crossingTk(const FreeTrajectoryState& fts, const Plane& plane)  const ;
00118 
00120     Propagator* getEndCapTkPropagator() const ;
00122     Propagator* getCrossTkPropagator() const ;
00124     virtual const MagneticField* magneticField() const {return theField;}
00125 
00126   private:
00127     void directionCheck(PropagationDirection dir)const;
00128 
00129     mutable Propagator* theEndCapTkProp;
00130     mutable Propagator* theCrossTkProp;
00131     const MagneticField* theField;
00132     
00133   protected:
00134 
00135 };
00136 
00137 #endif 
00138 
00139