Go to the documentation of this file.00001 #ifndef RKPropagatorInS_H
00002 #define RKPropagatorInS_H
00003
00004 #include "TrackingTools/GeomPropagators/interface/Propagator.h"
00005 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
00006 #include "DataFormats/GeometryVector/interface/Basic3DVector.h"
00007 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00008 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
00009 #include "DataFormats/TrajectoryState/interface/TrackCharge.h"
00010 #include "MagneticField/VolumeGeometry/interface/MagVolume.h"
00011 #include "FWCore/Utilities/interface/Visibility.h"
00012
00013
00014 class GlobalTrajectoryParameters;
00015 class GlobalParametersWithPath;
00016 class MagVolume;
00017 class RKLocalFieldProvider;
00018 class CartesianStateAdaptor;
00019
00020 class RKPropagatorInS : public Propagator {
00021 public:
00022
00023
00024
00025
00026
00027 explicit RKPropagatorInS( const MagVolume& vol, PropagationDirection dir = alongMomentum,
00028 double tolerance = 5.e-5) :
00029 Propagator(dir), theVolume( &vol), theTolerance( tolerance) {}
00030
00031 ~RKPropagatorInS() {}
00032
00033 using Propagator::propagate;
00034 using Propagator::propagateWithPath;
00035
00036 virtual TrajectoryStateOnSurface
00037 propagate (const FreeTrajectoryState&, const Plane&) const;
00038
00039 virtual TrajectoryStateOnSurface
00040 propagate (const FreeTrajectoryState&, const Cylinder&) const;
00041
00042 virtual std::pair< TrajectoryStateOnSurface, double>
00043 propagateWithPath (const FreeTrajectoryState&, const Plane&) const;
00044
00045 virtual std::pair< TrajectoryStateOnSurface, double>
00046 propagateWithPath (const FreeTrajectoryState&, const Cylinder&) const;
00047
00048 TrajectoryStateOnSurface propagate(const TrajectoryStateOnSurface& ts,
00049 const Plane& plane) const {
00050 return propagateWithPath( *ts.freeState(),plane).first;
00051 }
00052
00053
00054
00055 virtual Propagator * clone() const;
00056
00057 virtual const MagneticField* magneticField() const {return theVolume;}
00058
00059 private:
00060
00061 typedef std::pair<TrajectoryStateOnSurface,double> TsosWP;
00062
00063 const MagVolume* theVolume;
00064 double theTolerance;
00065
00066 GlobalTrajectoryParameters gtpFromLocal( const Basic3DVector<double>& lpos,
00067 const Basic3DVector<double>& lmom,
00068 TrackCharge ch, const Surface& surf) const dso_internal;
00069
00070 GlobalTrajectoryParameters gtpFromVolumeLocal( const CartesianStateAdaptor& state,
00071 TrackCharge charge) const dso_internal;
00072
00073 RKLocalFieldProvider fieldProvider() const;
00074 RKLocalFieldProvider fieldProvider( const Cylinder& cyl) const dso_internal;
00075
00076 PropagationDirection invertDirection( PropagationDirection dir) const dso_internal;
00077
00078 Basic3DVector<double> rkPosition( const GlobalPoint& pos) const dso_internal;
00079 Basic3DVector<double> rkMomentum( const GlobalVector& mom) const dso_internal;
00080 GlobalPoint globalPosition( const Basic3DVector<double>& pos) const dso_internal;
00081 GlobalVector globalMomentum( const Basic3DVector<double>& mom) const dso_internal;
00082
00083 GlobalParametersWithPath propagateParametersOnPlane( const FreeTrajectoryState& ts,
00084 const Plane& plane) const dso_internal;
00085 GlobalParametersWithPath propagateParametersOnCylinder( const FreeTrajectoryState& ts,
00086 const Cylinder& cyl) const dso_internal;
00087
00088 };
00089
00090 #endif