Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #ifndef YFS_NLO_BASE_H
0002 #define YFS_NLO_BASE_H
0003 
0004 #include "YFS/Main/YFS_Base.H"
0005 #include "YFS/NLO/Virtual.H"
0006 #include "YFS/NLO/Real.H"
0007 #include "YFS/Main/YFS_Form_Factor.H"
0008 #include "YFS/Main/Define_Dipoles.H"
0009 #include "ATOOLS/Math/Histogram_2D.H"
0010 #include "ATOOLS/Math/Histogram.H"
0011 
0012 #include "PHASIC++/Process/Single_Process.H"
0013 #include "ATOOLS/Phys/Momenta_Stretcher.H"
0014 
0015 
0016 
0017 
0018 namespace YFS {
0019 typedef std::map<std::string, ATOOLS::Histogram_2D *> histograms2d;
0020 typedef std::map<std::string, ATOOLS::Histogram *> histograms1d;
0021 
0022 class NLO_Base : YFS_Base {
0023 public:
0024 
0025   NLO_Base();
0026   ~NLO_Base();
0027 
0028   YFS::Virtual     *p_virt;
0029   YFS::Real        *p_real;
0030   YFS::Define_Dipoles *p_nlodipoles;
0031   YFS::YFS_Form_Factor *p_yfsFormFact;
0032   PHASIC::Single_Process *p_born;
0033   YFS::Define_Dipoles *p_dipoles;
0034   Vec4D_Vector m_plab, m_reallab, m_FSRPhotons, m_ISRPhotons, m_bornMomenta, m_eikmom;
0035   Vec4D m_nvec;
0036   ATOOLS::Flavour_Vector m_flavs;
0037   histograms2d m_histograms2d;
0038   histograms1d m_histograms1d;
0039   ATOOLS::Momenta_Stretcher m_stretcher;
0040 
0041   double m_evts, m_recola_evts, m_ranTheta, m_ranPhi;
0042   int m_is_isr;
0043 
0044   void Init(Flavour_Vector &flav, Vec4D_Vector &plab, Vec4D_Vector &born);
0045   void InitializeVirtual(const PHASIC::Process_Info& pi);
0046   void InitializeReal(const PHASIC::Process_Info& pi);
0047   double CalculateVirtual();
0048   double CalculateReal();
0049   double CalculateReal(Vec4D k, int submode=0);
0050   void MakeHardMomenta();
0051   void MapMomenta(ATOOLS::Vec4D_Vector &p, ATOOLS::Vec4D &k);
0052   void CheckMassReg();
0053   double CalculateNLO();
0054   bool CheckPhotonForReal(const Vec4D &k);
0055   void CheckMasses(Vec4D_Vector &p, int realmode=0);
0056   bool CheckMomentumConservation(Vec4D_Vector p);
0057   void CheckRealSub(Vec4D k);
0058   void RandomRotate(Vec4D &k);
0059 
0060   inline void SetBorn(double b) { m_born = b;}
0061   inline void SetMomentum(Vec4D_Vector &p) { m_plab = p;}
0062   inline void SetBornProc(PHASIC::Single_Process *p) {p_born = p;}
0063 
0064 };
0065 
0066 
0067 }
0068 #endif