#include "OpenLoops_Virtual.H" #include "AddOns/OpenLoops/OpenLoops_Interface.H" #include "MODEL/Main/Model_Base.H" #include "ATOOLS/Org/Run_Parameter.H" #include "ATOOLS/Org/Exception.H" #include "ATOOLS/Org/MyStrStream.H" #include "ATOOLS/Org/Library_Loader.H" #include "ATOOLS/Math/Poincare.H" using namespace OpenLoops; using namespace PHASIC; using namespace ATOOLS; using namespace std; OpenLoops_Virtual::OpenLoops_Virtual(const Process_Info& pi, const Flavour_Vector& flavs, int ol_id) : Virtual_ME2_Base(pi, flavs), m_ol_id(ol_id), m_ismapped(false), m_modebackup(m_mode), m_ol_asscontribs(OpenLoops_Interface::ConvertAssociatedContributions(pi.m_fi.m_asscontribs)) { DEBUG_FUNC(""); msg_Debugging()< "<Start(); } OpenLoops_Interface::EvaluateLoop(m_ol_id, momenta, m_born, m_res); // factor which by Sherpa convention has to be divided out at this stage // if both types of subtraction, still take alphas out double coupling(1.); if (m_stype&sbt::qcd) coupling=AlphaQCD(); else if (m_stype&sbt::qed) coupling=AlphaQED(); else THROW(fatal_error,"Unknown coupling."); if (shouldprinttime) { timing->Stop(); PRINT_INFO(momenta[2][0]<<" "< "< "< "<Start(); OpenLoops_Interface::EvaluateAssociated(m_ol_id, momenta, i+1, m_asscontribs[i]); if (shouldprinttime) { timing->Stop(); PRINT_INFO(momenta[2][0]<<" "<:: operator()(const PHASIC::Process_Info &pi) const { DEBUG_FUNC(pi); if (pi.m_loopgenerator!="OpenLoops") return NULL; if (!(pi.m_fi.m_nlotype==nlo_type::loop)) return NULL; DEBUG_VAR(pi.m_maxcpl[0]-pi.m_fi.m_nlocpl[0]); DEBUG_VAR(pi.m_fi.m_nlocpl[0]); DEBUG_VAR(pi.m_maxcpl[1]-pi.m_fi.m_nlocpl[1]); DEBUG_VAR(pi.m_fi.m_nlocpl[1]); int addmaxew=0; if (MODEL::s_model->Name()=="HEFT") addmaxew+=pi.m_maxcpl[2]; OpenLoops_Interface::SetParameter ("coupling_qcd_0", (int) pi.m_maxcpl[0]-pi.m_fi.m_nlocpl[0]); OpenLoops_Interface::SetParameter ("coupling_qcd_1", (int) pi.m_fi.m_nlocpl[0]); OpenLoops_Interface::SetParameter ("coupling_ew_0", (int) addmaxew+pi.m_maxcpl[1]-pi.m_fi.m_nlocpl[1]); OpenLoops_Interface::SetParameter ("coupling_ew_1", (int) pi.m_fi.m_nlocpl[1]); int id = OpenLoops_Interface::RegisterProcess(pi.m_ii, pi.m_fi, 11); if (id>0) { Flavour_Vector flavs = pi.ExtractFlavours(); return new OpenLoops_Virtual(pi, flavs, id); } else { return NULL; } }