File indexing completed on 2025-04-19 09:09:50
0001 #ifndef ATOOLS_Math_Poincare_H
0002 #define ATOOLS_Math_Poincare_H
0003
0004 #include "ATOOLS/Math/Vector.H"
0005
0006 namespace ATOOLS {
0007
0008 class Poincare {
0009 private:
0010
0011 int m_type;
0012 Vec4D m_l, m_t;
0013 double m_rsq, m_omct, m_st;
0014
0015 public:
0016
0017 Poincare(const Vec4D &v=Vec4D(1.,0.,0.,0.),const double &rsq=-1.);
0018 Poincare(const Vec4D &v1,const Vec4D &v2,int mode=0);
0019
0020 void Boost(Vec4D &v) const;
0021 void BoostBack(Vec4D &v) const;
0022 void BoostBack(Vec4C &v) const;
0023
0024 void Rotate(Vec4D &v) const;
0025 void RotateBack(Vec4D &v) const;
0026
0027 void Lambda(Vec4D &v) const;
0028 void LambdaBack(Vec4D &v) const;
0029
0030 void Invert();
0031
0032 inline Vec4D operator*(const Vec4D &vin) const
0033 {
0034 Vec4D v(vin);
0035 if (m_type==1) Boost(v);
0036 if (m_type==2) Rotate(v);
0037 if (m_type==3) Lambda(v);
0038 return v;
0039 }
0040
0041 inline const Vec4D &PL() const { return m_l; }
0042 inline const Vec4D &PT() const { return m_t; }
0043
0044 inline double OMCTheta() const { return m_omct; }
0045 inline double SinTheta() const { return m_st; }
0046
0047 };
0048
0049 class Poincare_Sequence: public std::vector<Poincare> {
0050 public:
0051
0052 Vec4D operator*(const Vec4D &p) const;
0053 void Invert();
0054
0055 };
0056
0057 }
0058
0059 #endif