File indexing completed on 2025-04-19 09:10:12
0001 #ifndef PHOTONS_MEs_PHOTONS_ME_Base_H
0002 #define PHOTONS_MEs_PHOTONS_ME_Base_H
0003
0004 #include "ATOOLS/Math/MyComplex.H"
0005 #include "ATOOLS/Math/Vector.H"
0006 #include "ATOOLS/Math/Poincare.H"
0007 #include "ATOOLS/Math/MyComplex.H"
0008 #include "ATOOLS/Phys/Flavour.H"
0009 #include "METOOLS/Main/Polarization_Tools.H"
0010 #include "ATOOLS/Org/Getter_Function.H"
0011 #include "PHOTONS++/Main/Dipole_Type.H"
0012
0013 namespace ATOOLS {
0014 class Flavour;
0015 class Poincare;
0016 }
0017
0018 namespace PHOTONS {
0019
0020 class PHOTONS_ME_Base {
0021 protected:
0022 std::string m_name;
0023
0024 unsigned int m_nV;
0025 unsigned int m_nR;
0026 double m_alpha;
0027 double m_e;
0028 double m_sW;
0029 double m_cW;
0030 double m_GF;
0031 double m_sqrt2;
0032 Complex m_i;
0033
0034 Complex m_cL;
0035 Complex m_cR;
0036
0037 ATOOLS::Poincare * p_boost;
0038 ATOOLS::Poincare * p_rot;
0039
0040 ATOOLS::Flavour m_flavs[9];
0041 double m_masses[9];
0042 ATOOLS::Vec4D * m_moms;
0043 ATOOLS::Vec4D m_moms0[9];
0044 ATOOLS::Vec4D m_moms1[9][9];
0045 ATOOLS::Vec4D m_moms2[9][9];
0046 int m_spins[9];
0047
0048 const Particle_Vector_Vector& m_pvv_zero;
0049
0050 virtual void BoostOriginalPVVToMultipoleCMS() = 0;
0051
0052 virtual Complex InfraredSubtractedME_0_0() = 0;
0053 virtual Complex InfraredSubtractedME_0_1() = 0;
0054 virtual Complex InfraredSubtractedME_0_2() = 0;
0055
0056 virtual Complex InfraredSubtractedME_1_05(unsigned int) = 0;
0057 virtual Complex InfraredSubtractedME_1_15(unsigned int) = 0;
0058
0059 virtual Complex InfraredSubtractedME_2_1(unsigned int,
0060 unsigned int) = 0;
0061
0062 public:
0063 PHOTONS_ME_Base(const Particle_Vector_Vector&);
0064 virtual ~PHOTONS_ME_Base();
0065
0066
0067 virtual double GetBeta_0_0() = 0;
0068 virtual double GetBeta_0_1() = 0;
0069 virtual double GetBeta_0_2() = 0;
0070
0071 virtual double GetBeta_1_1(unsigned int) = 0;
0072 virtual double GetBeta_1_2(unsigned int) = 0;
0073
0074 virtual double GetBeta_2_2(unsigned int, unsigned int) = 0;
0075
0076 virtual void FillMomentumArrays(const Particle_Vector_Vector&) = 0;
0077 virtual double Smod(unsigned int) = 0;
0078
0079 inline std::string Name() { return m_name; }
0080
0081 static PHOTONS_ME_Base * GetIRsubtractedME
0082 (const Particle_Vector_Vector& pvv);
0083 static PHOTONS_ME_Base * GetIRsubtractedME
0084 (const std::string& tag,
0085 const Particle_Vector_Vector& pvv);
0086 };
0087 }
0088
0089 #define DECLARE_PHOTONS_ME_GETTER(NAME,TAG) \
0090 DECLARE_GETTER(NAME,TAG,PHOTONS::PHOTONS_ME_Base,PHOTONS::Particle_Vector_Vector); \
0091 void ATOOLS::Getter<PHOTONS::PHOTONS_ME_Base,PHOTONS::Particle_Vector_Vector,NAME>:: \
0092 PrintInfo(std::ostream &str,const size_t width) const \
0093 { \
0094 str<<#TAG; \
0095 }
0096
0097 typedef ATOOLS::Getter_Function<PHOTONS::PHOTONS_ME_Base,PHOTONS::Particle_Vector_Vector>
0098 PHOTONS_ME_Getter;
0099
0100 #endif