File indexing completed on 2025-04-19 09:10:17
0001 #ifndef YFS_Main_Define_Dipoles_H
0002 #define YFS_Main_Define_Dipoles_H
0003
0004 #include "ATOOLS/Phys/Particle.H"
0005 #include "YFS/Tools/Dipole.H"
0006 #include "YFS/Main/YFS_Base.H"
0007 #include "YFS/Main/YFS_Form_Factor.H"
0008
0009
0010 namespace MODEL {
0011 class Single_Vertex;
0012 typedef std::vector<Single_Vertex *> Vertex_List;
0013 }
0014
0015
0016
0017 namespace YFS {
0018 typedef std::vector<YFS::Dipole> Dipole_Vector;
0019
0020
0021
0022
0023 class Define_Dipoles : YFS_Base {
0024 public:
0025 bool m_success;
0026 bool m_photonsadded;
0027 int m_N;
0028 std::map<ATOOLS::Flavour, ATOOLS::Vec4D> m_test_dip, m_born_dip;
0029 std::map<ATOOLS::Flavour, int> m_flav_label;
0030
0031 ATOOLS::Vec4D_Vector m_chargedinparticles;
0032 ATOOLS::Vec4D_Vector m_neutralinparticles;
0033 ATOOLS::Vec4D_Vector m_chargedoutparticles;
0034 ATOOLS::Vec4D_Vector m_neutraloutparticles;
0035 ATOOLS::Vec4D_Vector m_softphotons, m_bornmomenta;
0036 ATOOLS::Vec4D m_softphotonSum;
0037 Dipole_Vector m_dipoles, m_olddipoles, m_newdipoles, m_dipolesII, m_dipolesFF, m_dipolesIF;
0038 std::vector<std::vector<int>> m_dip;
0039 std::map<std::string,MODEL::Vertex_List> m_proc_restab_map;
0040 YFS::YFS_Form_Factor *p_yfsFormFact;
0041
0042
0043 YFS::dipoletype m_type;
0044 Define_Dipoles();
0045 ~Define_Dipoles();
0046
0047 int m_in, m_out;
0048 std::vector<double> m_massInC, m_massInN;
0049 std::vector<double> m_massOutC, m_massOutN;
0050
0051 ATOOLS::Flavour_Vector m_dipoleFlav;
0052 ATOOLS::Vec4D_Vector m_dipoleMom;
0053 void AddRadiation();
0054 void MakeDipolesII(ATOOLS::Flavour_Vector const &fl, ATOOLS::Vec4D_Vector const &mom, ATOOLS::Vec4D_Vector const &born);
0055 void MakeDipolesIF(ATOOLS::Flavour_Vector const &fl, ATOOLS::Vec4D_Vector const mom, ATOOLS::Vec4D_Vector const born);
0056 void MakeDipoles(ATOOLS::Flavour_Vector const &fl, ATOOLS::Vec4D_Vector const &mom, ATOOLS::Vec4D_Vector const &born);
0057 void MakeDipolesFF(ATOOLS::Flavour_Vector const &fl, ATOOLS::Vec4D_Vector const &mom,ATOOLS::Vec4D_Vector const &born);
0058 void Dipole_II(ATOOLS::Flavour_Vector const &fl, ATOOLS::Vec4D_Vector const &mom);
0059 void Dipole_FF(ATOOLS::Flavour_Vector const &fl, ATOOLS::Vec4D_Vector const &mom);
0060 void Dipole_IF(ATOOLS::Flavour_Vector const &fl, ATOOLS::Vec4D_Vector const &mom, ATOOLS::Vec4D_Vector const &born);
0061 void CleanInParticles();
0062 void CleanOutParticles();
0063
0064 void Get4Mom(ATOOLS::Flavour_Vector const &fl,ATOOLS::Vec4D_Vector mom);
0065 bool CheckMasses();
0066 void IsResonant(YFS::Dipole &D);
0067 double CalculateRealSub(const Vec4D &k);
0068 double CalculateRealSubIF(const Vec4D &k);
0069 double CalculateRealSubEEX(const Vec4D &k);
0070 double CalculateVirtualSub();
0071 double CalculateRealVirtualSub(const Vec4D & k);
0072 double CalculateEEX();
0073 double CalculateEEXVirtual();
0074 double CalculateEEX(const Vec4D & k1, const Vec4D & k2);
0075 double CalculateFlux(const Vec4D &k);
0076 double CalculateFlux(const Vec4D &k, const Vec4D &kk);
0077 double Propagator(const double &s, int width=0);
0078 double CalculateVirtualSubTchannel();
0079 double FormFactor();
0080 double TFormFactor();
0081 void generate_pairings(std::vector<std::vector<int>>& pairings, std::vector<int>& curr_pairing, std::vector<int>& available_nums);
0082 void CleanUp();
0083 std::ostream& operator<<(std::ostream &out);
0084 inline bool DoneSuccessfully() { return m_success; }
0085 inline bool AddedAnything() { return m_photonsadded; }
0086 inline void AddSoftPhotons(ATOOLS::Vec4D k) { m_softphotonSum +=k; }
0087 inline Dipole_Vector Old() { return m_olddipoles; }
0088 inline Dipole_Vector New() { return m_newdipoles; }
0089 inline Dipole * GetDipoleII() { return &m_dipolesII[0]; }
0090 inline Dipole_Vector * GetDipoleFF() { return &m_dipolesFF; }
0091 inline Dipole_Vector * GetDipoleIF() { return &m_dipolesIF; }
0092 inline void SetProcResMap(std::map<std::string,MODEL::Vertex_List> map) {m_proc_restab_map=map;}
0093 };
0094
0095
0096 }
0097 #endif