Go to the documentation of this file.00001 #ifndef PathToPlane2Order_H
00002 #define PathToPlane2Order_H
00003
00004 #include "DataFormats/GeometryVector/interface/Basic3DVector.h"
00005 #include "TrackingTools/GeomPropagators/interface/HelixPlaneCrossing.h"
00006 #include "TrackPropagation/RungeKutta/interface/CartesianState.h"
00007 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
00008 #include "DataFormats/GeometrySurface/interface/Plane.h"
00009 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00010 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
00011
00018 class RKLocalFieldProvider;
00019
00020 class PathToPlane2Order {
00021 public:
00022
00023 typedef Plane::Scalar Scalar;
00024 typedef Basic3DVector<Scalar> Vector3D;
00025 typedef GloballyPositioned<Scalar> Frame;
00026
00027 PathToPlane2Order( const RKLocalFieldProvider& fld, const Frame* fieldFrame) :
00028 theField(fld), theFieldFrame(fieldFrame) {}
00029
00032 std::pair<bool,double> operator()( const Plane& plane,
00033 const Vector3D& position,
00034 const Vector3D& momentum,
00035 double charge,
00036 const PropagationDirection propDir = alongMomentum);
00037
00038 std::pair<bool,double> operator()( const Plane& plane,
00039 const GlobalPoint& position,
00040 const GlobalVector& momentum,
00041 double charge,
00042 const PropagationDirection propDir = alongMomentum) {
00043 return operator()( plane, theFieldFrame->toLocal(position).basicVector(),
00044 theFieldFrame->toLocal(momentum).basicVector(), charge, propDir);
00045 }
00046
00047 private:
00048
00049 const RKLocalFieldProvider& theField;
00050 const Frame* theFieldFrame;
00051 };
00052
00053 #endif