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