Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef YFS_Main_YFS_Handler_H
0002 #define YFS_Main_YFS_Handler_H
0003 
0004 #include "YFS/Main/YFS_Base.H"
0005 #include "YFS/Main/ISR.H"
0006 #include "YFS/Main/FSR.H"
0007 #include "YFS/Main/Coulomb.H"
0008 #include "YFS/Tools/Debug.H"
0009 #include "YFS/NLO/NLO_Base.H"
0010 #include "BEAM/Main/Beam_Base.H"
0011 #include "BEAM/Main/Beam_Spectra_Handler.H"
0012 #include "MODEL/Main/Model_Base.H"
0013 #include "YFS/Main/Define_Dipoles.H"
0014 #include "YFS/CEEX/Ceex_Base.H"
0015 #include "YFS/NLO/NLO_Base.H"
0016 #include "ATOOLS/Phys/Momenta_Stretcher.H"
0017 #include "PHOTONS++/PhotonSplitter/Photon_Splitter.H"
0018 
0019 
0020 
0021 #include <iostream>
0022 #include <fstream>
0023 namespace ATOOLS { class Blob_Data_Base; }
0024 namespace YFS    {class Real_ff;         }
0025 namespace YFS    {class Coulomb;         }
0026 
0027 
0028 namespace YFS {
0029 
0030     class YFS_Handler : public YFS_Base {
0031 
0032     public:
0033          // constructor
0034         YFS_Handler();
0035 
0036         // destructor
0037         ~YFS_Handler();
0038         double m_splimits[3];
0039         double m_yfsweight, m_form, m_fsrW;
0040         bool   m_setparticles, m_asymbeams;
0041         double m_real, m_virt;
0042         double m_nbar, m_formfactor, m_betatWW, m_coulSub, m_ww_formfact;
0043 
0044         YFS::Coulomb *p_coulomb;
0045         PHASIC::Process_Base *proc;
0046         ATOOLS::Particle_Vector m_particles;
0047         ATOOLS::ParticleMomMap m_inparticles, m_outparticles;
0048 
0049         // std::string m_name, m_type, m_debugDIR_ISR, m_debugDIR_FSR;
0050         ATOOLS::Poincare m_cmsboost;
0051         ATOOLS::Vec4D   m_Wm, m_Wp;
0052         Vec4D_Vector m_plab, m_reallab, m_FSRPhotons, m_ISRPhotons, m_bornMomenta;
0053         ATOOLS::Flavour_Vector m_flavs;
0054         std::vector<double> m_mass;
0055         ATOOLS::Momenta_Stretcher m_stretcher;
0056         BEAM::Beam_Spectra_Handler *p_beams;
0057         PHOTONS::Photon_Splitter *p_splitter;
0058 
0059     public:
0060 
0061         YFS::ISR *p_isr;
0062         YFS::Debug *p_debug;
0063         ATOOLS::nlo_type::code m_nlotype;
0064         YFS::Define_Dipoles *p_dipole;
0065         Vec4D m_photonSumISR, m_photonSumFSR;
0066         Vec4D_Vector m_fsrphotonsforME, m_isrphotonsforME;
0067         Flavour_Vector m_inflav;
0068         Flavour_Vector m_outflav;
0069         
0070         YFS::NLO_Base *p_nlo;
0071         YFS::FSR *p_fsr;
0072         YFS::YFS_Form_Factor *p_yfsFormFact;
0073         YFS::Define_Dipoles *p_dipoles;
0074         YFS::Ceex_Base *p_ceex;
0075 
0076         void Init(std::vector<double> &splimits, const Flavour_Vector &fl);
0077 
0078         // bool On();
0079         bool MakeYFS(ATOOLS::Vec4D_Vector &p);
0080         bool MakeYFS();
0081         void SetLimits(const double &smin);
0082         void SetFlavours(const Flavour_Vector &fl);
0083         void SetMomenta(const ATOOLS::Vec4D_Vector &plab);
0084         void SetBornMomenta(const ATOOLS::Vec4D_Vector &plab);
0085         void InitializeCEEX(const ATOOLS::Flavour_Vector &fl);
0086         void CalculateBeta();
0087         void GenerateWeight();
0088         void CreatMomentumMap();
0089         void MakeCEEX();
0090         Vec4D_Vector GetPhotons();
0091         inline double GetWeight() const      { return m_yfsweight;  }
0092         inline ATOOLS::Vec4D GetPhotonSum() const      { return m_photonSumISR;  }
0093         inline ATOOLS::Vec4D GetPhotonSumFSR() const      { return m_photonSumFSR;  }
0094         inline ATOOLS::Vec4D_Vector GetISRPhotons() const      { return m_ISRPhotons;  }
0095         inline ATOOLS::Vec4D_Vector GetFSRPhotons() const      { return m_FSRPhotons;  }
0096         inline ATOOLS::Flavour GetFlavour(const int i) const { return m_flavs[i];  }
0097         inline void SetBorn(double b) { m_born = b; }
0098         inline double GetBorn() { return m_born; }
0099 
0100         inline yfsmode::code  Mode()   const {return m_mode; }
0101 
0102         inline bool UsingLoopTool()   const {return m_looptool; }
0103         inline bool FillBlob()   const {return m_fillblob; }
0104         inline Vec4D_Vector GetMomenta() { return m_plab; }
0105         inline Vec4D GetMomenta(int i) { return m_plab[i]; }
0106         inline Vec4D_Vector BornMomenta() { return m_bornMomenta; }
0107 
0108         inline void SetInFlav(Flavour &fl) {m_inflav.push_back(fl);}
0109         inline Flavour GetInFlav(int i) {return m_inflav[i];}
0110         inline void SetNLOType(ATOOLS::nlo_type::code nlo_type) {m_nlotype = nlo_type;}
0111         inline NLO_Base *NLO() {return p_nlo; }
0112 
0113         void SetBeam(BEAM::Beam_Spectra_Handler *beam);
0114         inline void SetSprime(double sp) { m_sp = sp; }
0115         inline void SetRunMode(const int &rmode) { m_rmode = rmode; }
0116 
0117         double Eikonal(Vec4D k);
0118         double CalculateNLO();
0119         bool CalculateFSR();
0120         bool CalculateISR();
0121         bool CalculateFSR(Vec4D_Vector &k);
0122         bool CheckMomentumConservation();
0123         void CheckMasses();
0124         void Reset();
0125         void AddFormFactor();
0126         void MakeWWVecs(ATOOLS::Vec4D_Vector p);
0127         void CalculateCoulomb();
0128         void CalculateWWForm();
0129         void YFSDebug(double W);
0130         void SplitPhotons(ATOOLS::Blob * blob);
0131     };// end of class YFS_Handler
0132 
0133 
0134 
0135 }// end of namespace YFS
0136 
0137 #endif