Go to the documentation of this file.00001 #ifndef CartesianState_H
00002 #define CartesianState_H
00003
00004 #include "FWCore/Utilities/interface/Visibility.h"
00005 #include "DataFormats/GeometryVector/interface/Basic3DVector.h"
00006 #include "VectorDoublet.h"
00007
00008 class dso_internal CartesianState {
00009 public:
00010
00011 typedef double Scalar;
00012 typedef Basic3DVector<Scalar> Vector3D;
00013 typedef VectorDoublet<Vector3D,Vector3D> Vector;
00014
00015 CartesianState() {}
00016 CartesianState( const Vector& v, Scalar s) : par_(v), charge_(s) {}
00017 CartesianState( const Vector3D& pos, const Vector3D& mom, Scalar s) :
00018 par_(pos,mom), charge_(s) {}
00019
00020 const Vector3D& position() const { return par_.first();}
00021 const Vector3D& momentum() const { return par_.second();}
00022
00023 const Vector& parameters() const { return par_;}
00024
00025 Scalar charge() const { return charge_;}
00026
00027 private:
00028
00029 Vector par_;
00030 Scalar charge_;
00031
00032 };
00033
00034 inline CartesianState
00035 operator+( const CartesianState& a, const CartesianState& b) {
00036 return CartesianState(a.parameters()+b.parameters(), a.charge());
00037 }
00038
00039 inline CartesianState
00040 operator-( const CartesianState& a, const CartesianState& b) {
00041 return CartesianState(a.parameters()-b.parameters(), a.charge());
00042 }
00043
00044 inline CartesianState operator*( const CartesianState& v, const CartesianState::Scalar& s) {
00045 return CartesianState( v.parameters()*s, v.charge());
00046 }
00047 inline CartesianState operator*( const CartesianState::Scalar& s, const CartesianState& v) {
00048 return CartesianState( v.parameters()*s, v.charge());
00049 }
00050
00051 inline CartesianState operator/( const CartesianState& v, const CartesianState::Scalar& s) {
00052 return CartesianState( v.parameters()/s, v.charge());
00053 }
00054
00055
00056 #endif