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"
37 using ErrPairs = std::vector<std::pair<double,double>>;
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;
64 using EnvPart = std::pair<std::string, size_t>;
65 using EnvParts = std::vector<EnvPart>;
66 using QuadParts = std::vector<EnvParts>;
69 PDFErrInfo(QuadParts parts,
double cl,
const std::string& errtypestr=
"")
114 PDFSet(
const std::string& setname);
134 return get_entry_as<int>(
"SetIndex", -1);
139 return get_entry_as<int>(
"DataVersion", -1);
161 return get_entry_as<unsigned int>(
"NumMembers");
219 template <
typename PTR>
220 void mkPDFs(std::vector<PTR>& pdfs)
const {
223 std::cout <<
"LHAPDF " <<
version() <<
" loading all " <<
size() <<
" PDFs in set " <<
name() << std::endl;
224 this->
print(std::cout, v);
228 pdfs.reserve(
size());
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;
267 std::vector<std::string>
keys()
const {
270 if (!
contains(rtn, k)) rtn.push_back(k);
281 const std::string&
get_entry(
const std::string& key)
const {
287 const std::string&
get_entry(
const std::string& key,
const std::string& fallback)
const {
331 double cl=
CL1SIGMA,
bool alternative=
false)
const {
357 const std::vector<double>& values,
358 double cl=
CL1SIGMA,
bool alternative=
false)
const;
384 std::vector<PDFUncertainty>
uncertainties(
const std::vector<std::vector<double>>& observables_values,
385 double cl=
CL1SIGMA,
bool alternative=
false)
const {
386 std::vector<PDFUncertainty> rtn;
397 const std::vector<std::vector<double>>& observables_values,
398 double cl=
CL1SIGMA,
bool alternative=
false)
const;
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;
443 void _checkPdfType(
const std::vector<string>& pdftypes)
const;
double errplus_pdf
Variables for separate PDF and parameter variation errors with combined sets.
Definition: PDFSet.h:52
std::string version()
Get the LHAPDF library version code (as a string)
Definition: Version.h:33
size_t nmemCore() const
Number of core-set members.
PDF is the general interface for access to parton density information.
Definition: PDF.h:40
std::vector< PTR > mkPDFs() const
Definition: PDFSet.h:251
double central
Variables for the central value, +ve, -ve & symmetrised errors, and a CL scalefactor.
Definition: PDFSet.h:49
int verbosity()
Definition: Config.h:56
PDFUncertainty(double cent=0, double eplus=0, double eminus=0, double esymm=0, double scalefactor=1, double eplus_pdf=0, double eminus_pdf=0, double esymm_pdf=0, double eplus_par=0, double eminus_par=0, double esymm_par=0)
Constructor.
Definition: PDFSet.h:40
PDF * mkPDF(const std::string &setname, size_t member)
size_t size() const
Number of members in this set.
Definition: PDFSet.h:160
std::string _setname
Name of this set.
Definition: PDFSet.h:451
virtual const std::string & get_entry(const std::string &key) const
Definition: Info.h:119
const std::string & get_entry_local(const std::string &key) const
Retrieve a metadata string by key name, as defined on this specific object.
Definition: Info.h:106
const double CL1SIGMA
CL percentage for a Gaussian 1-sigma.
Definition: PDFSet.h:20
std::string description() const
Description of the set.
Definition: PDFSet.h:128
size_t errSize() const
Definition: PDFSet.h:173
bool contains(const std::string &s, const std::string &sub)
Does a string s contain the sub substring?
Definition: Utils.h:110
QuadParts qparts
Error-set quadrature parts.
Definition: PDFSet.h:77
std::vector< std::string > qpartNames() const
Calculated names of all quadrature parts.
PDFErrInfo _errinfo
Cached PDF error-info breakdown struct.
Definition: PDFSet.h:454
size_t nmemPar() const
Number of par-set members.
ErrPairs errparts
Full error-breakdown of all quadrature uncertainty components, as (+,-) pairs.
Definition: PDFSet.h:57
std::vector< std::string > keys() const
Get the keys defined on this object or higher.
Definition: PDFSet.h:267
PDFSet()
Definition: PDFSet.h:110
bool has_key(const std::string &key) const
Can this Info object return a value for the given key? (it may be defined non-locally) ...
Definition: PDFSet.h:276
void mkPDFs(std::vector< PTR > &pdfs) const
Definition: PDFSet.h:220
Structure encoding the structure of the PDF error-set.
Definition: PDFSet.h:63
std::string qpartName(size_t iq) const
Calculated name of a quadrature part.
PDFUncertainty uncertainty(const std::vector< double > &values, double cl=CL1SIGMA, bool alternative=false) const
Calculate the central value and PDF uncertainty on an observable.
Definition: PDFSet.h:330
double err_par
Definition: PDFSet.h:54
std::string to_lower(const std::string &s)
Convert a string to lower-case (not in-place)
Definition: Utils.h:138
PDFErrInfo(QuadParts parts, double cl, const std::string &errtypestr="")
Constructor.
Definition: PDFSet.h:69
std::string errorType() const
Get the type of PDF errors in this set (replicas, symmhessian, hessian, custom, etc.)
Definition: PDFSet.h:143
void print(std::ostream &os=std::cout, int verbosity=1) const
Summary printout.
std::string name() const
PDF set name.
Definition: PDFSet.h:123
std::vector< PDFUncertainty > uncertainties(const std::vector< std::vector< double >> &observables_values, double cl=CL1SIGMA, bool alternative=false) const
Calculate PDF uncertainties on multiple observables at once.
Definition: PDFSet.h:384
void setVerbosity(int v)
Definition: Config.h:65
Class for PDF-set metadata and manipulation.
Definition: PDFSet.h:105
void _checkPdfType(const std::vector< string > &pdftypes) const
const std::string & get_entry(const std::string &key) const
Retrieve a metadata string by key name.
Definition: PDFSet.h:281
virtual bool has_key(const std::string &key) const
Definition: Info.h:100
int dataversion() const
Version of this PDF set's data files.
Definition: PDFSet.h:138
std::string coreType() const
Calculated name of a quadrature part.
Definition: PDFSet.h:86
PDFErrInfo errorInfo() const
Get the structured decomposition of the error-type string.
std::vector< std::string > keys() const
Definition: Info.h:82
PDF * mkPDF(size_t member) const
Definition: PDFSet.h:192
double errorConfLevel() const
Get the confidence level of the Hessian eigenvectors, in percent.
std::vector< std::string > keys_local() const
Get the keys defined on this specific object.
Definition: Info.h:70
size_t errorSize() const
Definition: PDFSet.h:167
const std::string & get_entry(const std::string &key, const std::string &fallback) const
Retrieve a metadata string by key name, with a fallback.
Definition: PDFSet.h:287
Metadata base class for PDFs, PDF sets, or global configuration.
Definition: Info.h:29
bool has_key_local(const std::string &key) const
Is a value defined for the given key on this specific object?
Definition: Info.h:87
Structure for storage of uncertainty info calculated over a PDF error set.
Definition: PDFSet.h:36
std::vector< PDF * > mkPDFs() const
Definition: PDFSet.h:242
int lhapdfID() const
First LHAPDF global index in this PDF set.
Definition: PDFSet.h:133
std::string errtype
Error-type annotation.
Definition: PDFSet.h:83
double randomValueFromHessian(const std::vector< double > &values, const std::vector< double > &randoms, bool symmetrise=true) const
Generate a random value from Hessian values and Gaussian random numbers.
double conflevel
Default confidence-level.
Definition: PDFSet.h:80
double correlation(const std::vector< double > &valuesA, const std::vector< double > &valuesB) const
Calculate the PDF correlation between valuesA and valuesB using appropriate formulae for this set...
PDFErrInfo()
Default constructor (for STL, Cython, etc.)
Definition: PDFSet.h:74