10 #include "LHAPDF/PDFInfo.h"
11 #include "LHAPDF/PDFIndex.h"
12 #include "LHAPDF/Factories.h"
13 #include "LHAPDF/AlphaS.h"
14 #include "LHAPDF/Utils.h"
15 #include "LHAPDF/Paths.h"
16 #include "LHAPDF/Exceptions.h"
17 #include "LHAPDF/Version.h"
18 #include "LHAPDF/Config.h"
28 ATOP = -6, ABOTTOM = -5, ACHARM = -4, ASTRANGE = -3, AUP = -2, ADOWN = -1,
30 DOWN = 1, UP = 2, STRANGE = 3, CHARM = 4, BOTTOM = 5, TOP = 6
62 void _loadInfo(
const std::string& mempath);
64 void _loadInfo(
const std::string& setname,
int member) {
65 const string searchpath = findpdfmempath(setname, member);
66 if (searchpath.empty())
67 throw UserError(
"Can't find a valid PDF " + setname +
"/" + to_str(member));
68 _loadInfo(searchpath);
71 void _loadInfo(
int lhaid) {
72 const pair<string,
int> setname_memid = lookupPDF(lhaid);
73 if (setname_memid.second == -1)
74 throw IndexError(
"Can't find a PDF with LHAPDF ID = " + to_str(lhaid));
75 _loadInfo(setname_memid.first, setname_memid.second);
95 double xfxQ2(
int id,
double x,
double q2)
const;
108 double xfxQ(
int id,
double x,
double q)
const {
121 void xfxQ2(
double x,
double q2, std::map<
int,
double>& rtn)
const;
132 void xfxQ(
double x,
double q, std::map<
int,
double>& rtn)
const {
149 void xfxQ2(
double x,
double q2, std::vector<
double>& rtn)
const;
164 void xfxQ(
double x,
double q, std::vector<
double>& rtn)
const {
192 return xfxQ2(x, q*q);
210 virtual double _xfxQ2(
int id,
double x,
double q2)
const = 0;
212 virtual void _xfxQ2(
double x,
double q2, std::vector<
double>& ret)
const = 0;
224 if (info().has_key(
"XMin"))
225 return info().get_entry_as<
double>(
"XMin");
226 return numeric_limits<
double>::epsilon();
231 if (info().has_key(
"XMax"))
232 return info().get_entry_as<
double>(
"XMax");
239 return info().get_entry_as<
double>(
"QMin", 0);
245 return info().get_entry_as<
double>(
"QMax", numeric_limits<
double>::max());
256 return (info().has_key(
"QMax")) ? sqr(info().get_entry_as<
double>(
"QMax")) : numeric_limits<
double>::max();
267 _forcePos = info().get_entry_as<
unsigned int>(
"ForcePositive", 0);
281 return x >= 0.0 && x <= 1.0;
361 return getPDFSet(_setname());
374 const string memname = file_stem(_mempath);
375 assert(memname.length() > 5);
376 const int memid = lexical_cast<
int>(memname.substr(memname.length()-4));
387 return info().get_entry(
"MemDesc", info().get_entry(
"PdfDesc",
""));
392 return info().get_entry_as<
int>(
"DataVersion", -1);
397 return to_lower(info().get_entry(
"MemType", info().get_entry(
"PdfType")));
419 if (_flavors.empty()) {
420 _flavors = info().get_entry_as< vector<
int> >(
"Flavors");
421 sort(_flavors.begin(), _flavors.end());
431 sort(_flavors.begin(), _flavors.end());
445 return info().get_entry_as<
int>(
"OrderQCD");
477 _alphas.reset(alphas);
482 _alphas = std::move(alphas);
513 if (!
hasAlphaS())
throw Exception(
"No AlphaS pointer has been set");
523 _alphas.reset( mkAlphaS(info()) );
528 return basename(dirname(_mempath));