File indexing completed on 2024-04-06 12:31:43
0001 #ifndef CartesianStateAdaptor_H
0002 #define CartesianStateAdaptor_H
0003 #include "FWCore/Utilities/interface/Visibility.h"
0004
0005 #include "RKSmallVector.h"
0006 #include "DataFormats/GeometryVector/interface/Basic3DVector.h"
0007
0008 class dso_internal CartesianStateAdaptor {
0009 public:
0010 typedef float Scalar;
0011 typedef Basic3DVector<Scalar> Vector3D;
0012
0013 CartesianStateAdaptor(const RKSmallVector<double, 6>& rk) : pos_(rk[0], rk[1], rk[2]), mom_(rk[3], rk[4], rk[5]) {}
0014
0015 const Vector3D& position() const { return pos_; }
0016 const Vector3D& momentum() const { return mom_; }
0017
0018 static Vector3D position(const RKSmallVector<double, 6>& rk) { return Vector3D(rk[0], rk[1], rk[2]); }
0019
0020 static Vector3D momentum(const RKSmallVector<double, 6>& rk) { return Vector3D(rk[3], rk[4], rk[5]); }
0021
0022 static RKSmallVector<double, 6> rkstate(const Vector3D& pos, const Vector3D& mom) {
0023 RKSmallVector<double, 6> res;
0024 res[0] = pos.x();
0025 res[1] = pos.y();
0026 res[2] = pos.z();
0027 res[3] = mom.x();
0028 res[4] = mom.y();
0029 res[5] = mom.z();
0030 return res;
0031 }
0032
0033 private:
0034 Vector3D pos_;
0035 Vector3D mom_;
0036 };
0037
0038 #endif