Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:10:07

0001 #ifndef METOOLS_Main_Polarization_Tools_H
0002 #define METOOLS_Main_Polarization_Tools_H
0003 
0004 #ifndef SQRT_05
0005 #define SQRT_05 0.70710678118654757
0006 #endif
0007 
0008 #include <map>
0009 #include <iostream>
0010 #include "ATOOLS/Math/MyComplex.H"
0011 #include "ATOOLS/Phys/Flavour.H"
0012 #include "ATOOLS/Phys/Spinor.H"
0013 #include "ATOOLS/Math/Vector.H"
0014 #include "ATOOLS/Math/Matrix.H"
0015 
0016 namespace METOOLS
0017 {
0018   typedef ATOOLS::Spinor<double> SpinorType;
0019 
0020   class Polarization_Vector : public std::vector<ATOOLS::Vec4C> {
0021     SpinorType m_kp;
0022     SpinorType m_km;
0023     ATOOLS::Vec4D m_k;
0024 
0025     void Init(ATOOLS::Vec4D p, ATOOLS::Vec4D ref_mom=ATOOLS::Vec4D(1.0,SQRT_05,SQRT_05,0.0));
0026     ATOOLS::Vec4C VT(const SpinorType &a,const SpinorType &b);
0027     ATOOLS::Vec4C EM(const ATOOLS::Vec4D &p);
0028     ATOOLS::Vec4C EP(const ATOOLS::Vec4D &p);
0029     ATOOLS::Vec4C EMM(const ATOOLS::Vec4D &p);
0030     ATOOLS::Vec4C EMP(const ATOOLS::Vec4D &p);
0031     ATOOLS::Vec4C EML(const ATOOLS::Vec4D &p);
0032   public:
0033     Polarization_Vector(ATOOLS::Vec4D p, double M2, bool anti=false, bool out=false);
0034     Polarization_Vector(ATOOLS::Vec4D p, bool anti=false, bool out=false);
0035     Polarization_Vector(ATOOLS::Vec4D p, ATOOLS::Vec4D ref_mom);
0036     void Test(ATOOLS::Vec4D p=ATOOLS::Vec4D(3.0399e+00, 1.7523e+00,-1.4883e-01, 3.1938e-01));
0037 
0038     vector<vector<Complex>> BasisTrafo(const Polarization_Vector& old_basis, bool pol_checks=0) const;
0039   };
0040 
0041   class Polarization_Tensor : public std::vector<ATOOLS::CMatrix> {
0042   public:
0043     Polarization_Tensor(ATOOLS::Vec4D p, double M2, bool anti=false, bool out=false);
0044     void Test(ATOOLS::Vec4D p=ATOOLS::Vec4D(3.0399e+00, 1.7523e+00,-1.4883e-01, 3.1938e-01));
0045   };
0046 
0047     /*!
0048       \file Polarization_Tools.H
0049       \brief Declares the class ATOOLS::Polarization_Vector and ATOOLS::Polarization_Tensor
0050       */
0051     /*!
0052       \class Polarization_Vectors
0053       \brief Calculation of polarization vectors used for matrix element calculation
0054       */
0055     /*!
0056     \fn Polarization_Vector::Init(ATOOLS::ATOOLS::Vec4D p, ATOOLS::Vec4D ref_mom=ATOOLS::Vec4D(1.0,SQRT_05,SQRT_05,0.0) )
0057     \brief Helper function of constructor; calculates complex circular polarization vectors of a massive spin-1 boson.
0058 
0059     Calculations according to arxiv: 9601359 eq. (25) or 9805445 eq. (3.19) (+ transformation back to vector
0060     representation);
0061     The ordering in the resulting Polarization_Vector is
0062     - \f$0 \to \epsilon^+\f$
0063     - \f$1 \to \epsilon^-\f$
0064     - \f$2 \to \epsilon^0\f$
0065     - \f$3 \to \epsilon^s\f$
0066     .
0067     BUT: currently transverse polarizations seems to be exchanged
0068     \param p momentum of particle
0069     \param ref_mom arbitrary, light-like reference momentum, defines spin axis for massive particles
0070     */
0071   /*!
0072   \fn Polarization_Vector::BasisTrafo(const Polarization_Vector& old_basis, bool pol_checks) ()
0073   \brief Method determine transformation coefficients from one basis (e.g. spin basis given by reference vector in
0074          Weyl-van-der-Waerden formalism or reference frame for defining the polarisation) for defining polarisation
0075          vectors to another, if the new polarization vectors can be determined as a linear combination of the ones
0076          defined in the old basis;
0077   \param old_basis Polarization vectors in old basis (in the most cases COMIX default polarization vectors)
0078   \param pol_checks Boolean specifies whether polarization consistency checks should be done (especially
0079                     unpol=polsum+int and checks whether transformation works properly and is unitary)
0080   */
0081   /*!
0082   \return \c vector<vector<Complex>>, which contains the transformation coefficients for each new polarization vector as
0083       one vector respectively, polarization ordering according to Polarization_Vector
0084   */
0085 }
0086 
0087 #endif