void OpenLoops_Virtual::Calc(const Vec4D_Vector& momenta) { Vec4D_Vector m_moms(momenta); s_interface->SetParameter("alpha", AlphaQED()); s_interface->SetParameter("alphas", AlphaQCD()); s_interface->SetParameter("mu", sqrt(m_mur2)); s_interface->FlushParameters(); double M2L0; vector<double> M2L1(3), M2L2(5), IRL1(3), IRL2(5); MyTiming* timing; if (msg_LevelIsDebugging()) { timing = new MyTiming(); timing->Start(); } m_permutationfunc(&m_permutation[0]); m_amp2(&m_moms[0][0], &M2L0, &M2L1[0], &IRL1[0], &M2L2[0], &IRL2[0]); if (msg_LevelIsDebugging()) { timing->Stop(); PRINT_INFO(momenta[2][0]<<" "<<m_flavs<<" user="******" real="<<timing->RealTime()<<" sys="<<timing->SystemTime()); } double B(M2L0), V_finite(M2L1[0]), V_eps(M2L1[1]), V_eps2(M2L1[2]); // factor which by Sherpa convention has to be divided out at this stage double factor=B*AlphaQCD()/2.0/M_PI; m_born=B; m_res.Finite()=(V_finite/factor); m_res.IR()=(V_eps/factor); m_res.IR2()=(V_eps2/factor); }
double OpenLoops_Born::Calc(const Vec4D_Vector& momenta) { Vec4D_Vector m_moms(momenta); s_interface->SetParameter("alpha", AlphaQED()); s_interface->SetParameter("alphas", AlphaQCD()); s_interface->FlushParameters(); double M2L0; std::vector<double> M2L1(3), M2L2(5), IRL1(3), IRL2(5); m_permutationfunc(&m_permutation[0]); m_amp2(&m_moms[0][0], &M2L0, &M2L1[0], &IRL1[0], &M2L2[0], &IRL2[0]); if (IsZero(M2L1[1]) && IsZero(M2L1[2]) && IsZero(IRL1[1]) && IsZero(IRL1[2]) && IsZero(M2L2[1]) && IsZero(M2L2[2]) && IsZero(M2L2[3]) && IsZero(M2L2[4]) && IsZero(IRL2[1]) && IsZero(IRL2[2]) && IsZero(IRL2[3]) && IsZero(IRL2[4])) { // OL returns ME2 including 1/symfac, but Calc is supposed to return it // without 1/symfac, thus multiplying with symfac here if (IsZero(M2L0)) return m_symfac*M2L2[0]; else return m_symfac*M2L0; } else { PRINT_INFO("Poles non-zero. Returning 0."); return 0.0; } }
double OpenLoops_Born::Calc(const Vec4D_Vector& momenta) { OpenLoops_Interface::SetParameter("alpha", AlphaQED()); OpenLoops_Interface::SetParameter("alphas", AlphaQCD()); double result; if (m_amptype==1) OpenLoops_Interface::EvaluateTree(m_ol_id, momenta, result); if (m_amptype==12) OpenLoops_Interface::EvaluateLoop2(m_ol_id, momenta, result); // OL returns ME2 including 1/symfac, but Calc is supposed to return it // without 1/symfac, thus multiplying with symfac here return m_symfac*result; }