// Required parameter settings for each calculation mode
if (as->type() == "ode") {
/// @todo Handle FFNS / VFNS
if ( (!info.has_key("AlphaS_MZ") || !info.has_key("MZ")) || (!info.has_key("AlphaS_MassReference") || !info.has_key("AlphaS_Reference")) )
throw MetadataError("Requested ODE AlphaS but there is no reference point given: define either AlphaS_MZ and MZ, or AlphaS_MassReference and AlphaS_Reference. The latter is given preference if both are defined.");
if (info.has_key("AlphaS_MZ")) as->setAlphaSMZ(info.get_entry_as<double>("AlphaS_MZ"));
if (info.has_key("MZ"))as->setMZ(info.get_entry_as<double>("MZ"));
if (info.has_key("AlphaS_Reference"))as->setAlphaSReference(info.get_entry_as<double>("AlphaS_Reference"));
if (info.has_key("AlphaS_MassReference"))as->setMassReference(info.get_entry_as<double>("AlphaS_MassReference"));
if (info.has_key("AlphaS_Qs")) {
AlphaS_ODE* as_o = dynamic_cast<AlphaS_ODE*>(as);
if (info.has_key("AlphaS_Qs")) as_o->setQValues( info.get_entry_as< vector<double> >("AlphaS_Qs"));
}
}
else if (as->type() == "analytic") {
/// @todo Handle FFNS / VFNS
if (!info.has_key("AlphaS_Lambda5") && !info.has_key("AlphaS_Lambda4") && !info.has_key("AlphaS_Lambda3") )
throw MetadataError("Requested analytic AlphaS but the required parameters are not defined.");
if (info.has_key("AlphaS_Lambda3")) as->setLambda(3, info.get_entry_as<double>("AlphaS_Lambda3"));
if (info.has_key("AlphaS_Lambda4")) as->setLambda(4, info.get_entry_as<double>("AlphaS_Lambda4"));
if (info.has_key("AlphaS_Lambda5")) as->setLambda(5, info.get_entry_as<double>("AlphaS_Lambda5"));
}
else if (as->type() == "ipol") {
if (!info.has_key("AlphaS_Qs") || !info.has_key("AlphaS_Vals") )
throw MetadataError("Requested ipol AlphaS but the required parameters are not defined.");
/// @todo Statically pre-compute the whole nx * nq gradiant array? I.e. _dxf_dlogx for all points in all subgrids. Memory ~doubling :-/ Could cache them as they are used...