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