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