Back to home page

EIC code displayed by LXR

 
 

    


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   };// end of class Poincare
0048 
0049   class Poincare_Sequence: public std::vector<Poincare> {
0050   public:
0051 
0052     Vec4D operator*(const Vec4D &p) const;
0053     void Invert();
0054 
0055   };// end of class Poincare_Sequence
0056 
0057 }// end of namespace ATOOLS
0058 
0059 #endif