7.2. Custom scale setterΒΆ
You can write a custom calculator to set the factorisation, renormalisation and
resummation scales. It has to be implemented as a C++ class which derives from
the Scale_Setter_Base
base class and implements only the constructor and
the Calculate
method.
Here is a snippet for a very simple one, which sets all three scales to the invariant mass of the two incoming partons.
#include "PHASIC++/Scales/Scale_Setter_Base.H"
#include "ATOOLS/Org/Message.H"
using namespace PHASIC;
using namespace ATOOLS;
namespace PHASIC {
class Custom_Scale_Setter: public Scale_Setter_Base {
protected:
public:
Custom_Scale_Setter(const Scale_Setter_Arguments &args) :
Scale_Setter_Base(args)
{
m_scale.resize(3); // by default three scales: fac, ren, res
// but you can add more if you need for COUPLINGS
SetCouplings(); // the default value of COUPLINGS is "Alpha_QCD 1", i.e.
// m_scale[1] is used for running alpha_s
// (counting starts at zero!)
}
double Calculate(const std::vector<ATOOLS::Vec4D> &p,
const size_t &mode)
{
double muF=(p[0]+p[1]).Abs2();
double muR=(p[0]+p[1]).Abs2();
double muQ=(p[0]+p[1]).Abs2();
m_scale[stp::fac] = muF;
m_scale[stp::ren] = muR;
m_scale[stp::res] = muQ;
// Switch on debugging output for this class with:
// Sherpa "OUTPUT=2[Custom_Scale_Setter|15]"
DEBUG_FUNC("Calculated scales:");
DEBUG_VAR(m_scale[stp::fac]);
DEBUG_VAR(m_scale[stp::ren]);
DEBUG_VAR(m_scale[stp::res]);
return m_scale[stp::fac];
}
};
}
// Some plugin magic to make it available for SCALES=CUSTOM
DECLARE_GETTER(Custom_Scale_Setter,"CUSTOM",
Scale_Setter_Base,Scale_Setter_Arguments);
Scale_Setter_Base *ATOOLS::Getter
<Scale_Setter_Base,Scale_Setter_Arguments,Custom_Scale_Setter>::
operator()(const Scale_Setter_Arguments &args) const
{
return new Custom_Scale_Setter(args);
}
void ATOOLS::Getter<Scale_Setter_Base,Scale_Setter_Arguments,
Custom_Scale_Setter>::
PrintInfo(std::ostream &str,const size_t width) const
{
str<<"Custom scale scheme";
}
If the code is compiled into a library called libCustomScale.so, then
this library is loaded dynamically at runtime with the switch
SHERPA_LDADD: CustomScale
either on the command line or in the run
section, cf. Customization. This then allows to use the custom
scale like a built-in scale setter by specifying SCALES:
CUSTOM
(cf. SCALES).