#include "PHASIC++/Process/Process_Info.H" #include "PHASIC++/Process/Virtual_ME2_Base.H" #include "EXTRA_XS/NLO/Logarithms.H" #include "MODEL/Main/Model_Base.H" #include "ATOOLS/Org/Run_Parameter.H" #include "ATOOLS/Org/Exception.H" using namespace PHASIC; using namespace ATOOLS; namespace EXTRAXS { class DY_QCD_Virtual : public PHASIC::Virtual_ME2_Base { private: int m_l1, m_l2; public: DY_QCD_Virtual(const Process_Info &pi,const Flavour_Vector &flavs): Virtual_ME2_Base(pi,flavs), m_l1(-1), m_l2(-1) { for (size_t i(0);isize();++i) { for (size_t j(i+1);jsize();++j) { size_t i1((*p_plist)[i]), i2((*p_plist)[j]); Vec4D p1(i1<2?-p[i1]:p[i1]); Vec4D p2(i2<2?-p[i2]:p[i2]); Complex l12=LnRat(m_mur2,-(p1+p2).Abs2()); m_res.IR2()-=-2.*(*p_dsij)[i][j]; m_res.IR()-=(-3.-2.*l12).real()*(*p_dsij)[i][j]; m_res.Finite()-=(-8.-3.*l12-sqr(l12)).real()*(*p_dsij)[i][j]; } } m_res*=1./(*p_dsij)[0][0]; } };// end of class Singlet_QCD_Virtual } using namespace EXTRAXS; DECLARE_VIRTUALME2_GETTER(DY_QCD_Virtual,"DY_QCD_Virtual") Virtual_ME2_Base *ATOOLS::Getter :: operator()(const Process_Info &pi) const { DEBUG_FUNC(pi); if (pi.m_loopgenerator!="Internal") return NULL; if (pi.m_fi.m_nlotype==nlo_type::loop) { if (pi.m_mincpl[0]!=1. || pi.m_maxcpl[0]!=1.) return NULL; if (pi.m_fi.m_nlocpl[0]!=1. || pi.m_fi.m_nlocpl[1]!=0.) return NULL; if (pi.m_mincpl[1]!=2. || pi.m_maxcpl[1]!=2.) { Flavour_Vector fl=pi.ExtractFlavours(); for (size_t i(0);i