7 #ifndef LHAPDF_PDFSet_H
8 #define LHAPDF_PDFSet_H
10 #include "LHAPDF/Info.h"
11 #include "LHAPDF/Factories.h"
12 #include "LHAPDF/Version.h"
13 #include "LHAPDF/Config.h"
14 #include "LHAPDF/Utils.h"
40 PDFUncertainty(
double cent=0,
double eplus=0,
double eminus=0,
double esymm=0,
double scalefactor=1,
41 double eplus_pdf=0,
double eminus_pdf=0,
double esymm_pdf=0,
42 double eplus_par=0,
double eminus_par=0,
double esymm_par=0)
43 :
central(cent), errplus(eplus), errminus(eminus), errsymm(esymm), scale(scalefactor),
44 errplus_pdf(eplus_pdf), errminus_pdf(eminus_pdf), errsymm_pdf(esymm_pdf),
45 errplus_par(eplus_par), errminus_par(eminus_par), errsymm_par(esymm_par)
49 double central, errplus, errminus, errsymm, scale;
53 double errplus_par, errminus_par, errsymm_par;
69 PDFErrInfo(QuadParts parts,
double cl,
const std::string& errtypestr=
"")
129 return get_entry(
"SetDesc");
134 return get_entry_as<
int>(
"SetIndex", -1);
139 return get_entry_as<
int>(
"DataVersion", -1);
144 return to_lower(get_entry(
"ErrorType",
"UNKNOWN"));
161 return get_entry_as<
unsigned int>(
"NumMembers");
193 return LHAPDF::mkPDF(name(), member);
219 template <
typename PTR>
220 void mkPDFs(std::vector<PTR>& pdfs)
const {
221 const int v = verbosity();
223 std::cout <<
"LHAPDF " << version() <<
" loading all " << size() <<
" PDFs in set " << name() << std::endl;
224 this->print(std::cout, v);
225 if (
this->has_key(
"Note")) std::cout << get_entry(
"Note") << std::endl;
228 pdfs.reserve(size());
229 if (v < 2) setVerbosity(0);
230 for (size_t i = 0; i < size(); ++i) {
232 pdfs.push_back( PTR(mkPDF(i)) );
243 std::vector<PDF*> rtn;
250 template <
typename PTR>
252 std::vector<PTR> rtn;
268 std::vector<std::string> rtn = getConfig().keys();
269 for (
const std::string& k : keys_local()) {
270 if (!contains(rtn, k)) rtn.push_back(k);
277 return has_key_local(key) || getConfig().has_key(key);
282 if (has_key_local(key))
return get_entry_local(key);
283 return getConfig().get_entry(key);
288 return Info::get_entry(key, fallback);
331 double cl=
CL1SIGMA,
bool alternative=
false)
const {
333 uncertainty(rtn, values, cl, alternative);
357 const std::vector<
double>& values,
358 double cl=
CL1SIGMA,
bool alternative=
false)
const;
386 std::vector<PDFUncertainty> rtn;
387 uncertainties(rtn, observables_values, cl, alternative);
409 double correlation(
const std::vector<
double>& valuesA,
const std::vector<
double>& valuesB)
const;
435 double randomValueFromHessian(
const std::vector<
double>& values,
const std::vector<
double>& randoms,
bool symmetrise=
true)
const;