#include "AMEGIC++/DipoleSubtraction/DipoleSplitting_Base.H" #include "AMEGIC++/Main/ColorSC.H" #include "MODEL/Main/Model_Base.H" #include "ATOOLS/Org/Run_Parameter.H" #include "ATOOLS/Org/Exception.H" #include "ATOOLS/Org/Message.H" #include "ATOOLS/Org/Shell_Tools.H" #include "ATOOLS/Org/MyStrStream.H" #include "ATOOLS/Org/Scoped_Settings.H" #include using namespace ATOOLS; using namespace AMEGIC; using namespace MODEL; using namespace std; #define SQRT_05 0.70710678118654757 DipoleSplitting_Base::DipoleSplitting_Base(sbt::subtype st, spt::splittingtype ft, dpt::dipoletype dt, int m,int i,int j,int k) : m_name(""), m_alpha(1.), m_kt2max(std::numeric_limits::max()), m_amin(max(ATOOLS::Accu(),1.e-8)), m_kappa(2./3.), m_Q2(0.), m_kt2(0.), m_a(-1.), m_sff(std::nan), m_av(std::nan), m_fac(1.), m_mcmode(-1), m_mcsign(-1), m_stype(st), m_dtype(dt), m_ftype(ft), m_i(i), m_j(j), m_k(k), m_tij(-1), m_tk(-1), m_m(m), m_es(-1), m_k0sqf(-1.), m_k0sqi(-1.), m_spfdef(0.), m_collVFF(true), m_Vsubmode(1), p_cpl(NULL) { p_nlomc=NULL; Settings& s = Settings::GetMainSettings(); m_subtype = s["DIPOLES"]["SCHEME"].Get(); m_name=ToString(m_dtype)+"["+ToString(m_ftype) +"("+ToString(m_i)+","+ToString(m_j)+")("+ToString(m_k)+")]" +"("+ToString(m_stype)+")"; DEBUG_FUNC(m_name); m_amin=s["DIPOLES"]["AMIN"].Get(); m_kappa=s["DIPOLES"]["KAPPA"].Get(); if (m_stype==sbt::qed) m_collVFF=false; m_collVFF=s["DIPOLES"]["COLLINEAR_VFF_SPLITTINGS"].Get(); m_Vsubmode=s["DIPOLES"]["V_SUBTRACTION_MODE"].Get(); if (m_Vsubmode<0 || m_Vsubmode>2) THROW(fatal_error,"Unknown mode."); std::string vsm(""); if (m_Vsubmode==0) vsm="scalar"; else if (m_Vsubmode==1) vsm="fermionic"; else if (m_Vsubmode==2) vsm="eikonal"; msg_Tracking()<<"Use "<VP subtraction term."<(); m_k0sqi = s["CSS_IS_PT2MIN"].Get(); m_es = s["CSS_EVOLUTION_SCHEME"].Get(); if (m_subtype==subscheme::Dire) m_kappa=1.0; } void DipoleSplitting_Base::SetCoupling(const MODEL::Coupling_Map *cpls) { std::string cplname(""); if (m_stype==sbt::qcd) cplname="Alpha_QCD"; else if (m_stype==sbt::qed) cplname="Alpha_QED"; else THROW(fatal_error,"Cannot set coupling for subtraction type" +ToString(m_stype)); msg_Debugging()<find(cplname)!=cpls->end()) p_cpl=cpls->find(cplname)->second; else THROW(fatal_error,"Coupling not found"); msg_Tracking()<0.0 && (m_kt2 DA = "< DA-DS = "<0.0 && (m_kt2 DA = "<m_alpha || m_kt2>m_kt2max; } double DipoleSplitting_Base::GetF() { DEBUG_FUNC("a="<0.0) return m_a>m_amin; return m_kt2>-m_amin; }