Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:31:43

0001 #ifndef CartesianState_H
0002 #define CartesianState_H
0003 
0004 #include "FWCore/Utilities/interface/Visibility.h"
0005 #include "DataFormats/GeometryVector/interface/Basic3DVector.h"
0006 #include "VectorDoublet.h"
0007 
0008 class dso_internal CartesianState {
0009 public:
0010   typedef double Scalar;
0011   typedef Basic3DVector<Scalar> Vector3D;
0012   typedef VectorDoublet<Vector3D, Vector3D> Vector;
0013 
0014   CartesianState() {}
0015   CartesianState(const Vector& v, Scalar s) : par_(v), charge_(s) {}
0016   CartesianState(const Vector3D& pos, const Vector3D& mom, Scalar s) : par_(pos, mom), charge_(s) {}
0017 
0018   const Vector3D& position() const { return par_.first(); }
0019   const Vector3D& momentum() const { return par_.second(); }
0020 
0021   const Vector& parameters() const { return par_; }
0022 
0023   Scalar charge() const { return charge_; }
0024 
0025 private:
0026   Vector par_;
0027   Scalar charge_;
0028 };
0029 
0030 inline CartesianState operator+(const CartesianState& a, const CartesianState& b) {
0031   return CartesianState(a.parameters() + b.parameters(), a.charge());
0032 }
0033 
0034 inline CartesianState operator-(const CartesianState& a, const CartesianState& b) {
0035   return CartesianState(a.parameters() - b.parameters(), a.charge());
0036 }
0037 
0038 inline CartesianState operator*(const CartesianState& v, const CartesianState::Scalar& s) {
0039   return CartesianState(v.parameters() * s, v.charge());
0040 }
0041 inline CartesianState operator*(const CartesianState::Scalar& s, const CartesianState& v) {
0042   return CartesianState(v.parameters() * s, v.charge());
0043 }
0044 
0045 inline CartesianState operator/(const CartesianState& v, const CartesianState::Scalar& s) {
0046   return CartesianState(v.parameters() / s, v.charge());
0047 }
0048 
0049 #endif