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");
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));
PDF is the general interface for access to parton density information.
Definition PDF.h:40
bool inPhysicalRangeQ2(double q2) const
Check whether the given Q2 is physically valid.
Definition PDF.h:287
bool inRangeXQ2(double x, double q2) const
Combined range check for x and Q2.
Definition PDF.h:341
double xfxQ(int id, double x, double q) const
Get the PDF xf(x) value at (x,q) for the given PID.
Definition PDF.h:108
double xfxQ2(int id, double x, double q2) const
Get the PDF xf(x) value at (x,q2) for the given PID.
int forcePositive() const
Check whether the PDF is set to only return positive (definite) values or not.
Definition PDF.h:265
std::string _setname() const
Get the set name from the member data file path (for internal use only)
Definition PDF.h:527
std::string type() const
Get the type of PDF member that this object represents (central, error)
Definition PDF.h:396
AlphaSPtr _alphas
Optionally loaded AlphaS object (mutable for laziness/caching)
Definition PDF.h:541
unique_ptr< AlphaS > AlphaSPtr
Internal convenience typedef for the AlphaS object handle.
Definition PDF.h:44
virtual double xMin()
Minimum valid x value for this PDF.
Definition PDF.h:223
int orderQCD() const
Order of QCD at which this PDF has been constructed.
Definition PDF.h:444
void setAlphaS(AlphaSPtr alphas)
Set the AlphaS calculator by smart pointer.
Definition PDF.h:481
std::map< int, double > xfxQ2(double x, double q2) const
Get the PDF xf(x) value at (x,q2) for all supported PIDs.
void setFlavors(std::vector< int > const &flavors)
Manually set/override the list of flavours defined by this PDF set.
Definition PDF.h:429
std::string _mempath
Member data file path.
Definition PDF.h:532
bool inPhysicalRangeXQ(double x, double q) const
Check whether the given (x,Q) is physically valid.
Definition PDF.h:304
int dataversion() const
Version of this PDF's data file.
Definition PDF.h:391
int lhapdfID() const
PDF member global LHAPDF ID number.
double quarkThreshold(int id) const
Get a flavor scale threshold in GeV by PDG code (|PID| = 1-6 only) Convenience interface to the Mass*...
AlphaS & alphaS()
Retrieve the AlphaS object for this PDF.
Definition PDF.h:491
virtual double _xfxQ2(int id, double x, double q2) const =0
Calculate the PDF xf(x) value at (x,q2) for the given PID.
double alphasQ2(double q2) const
Value of alpha_s(Q2) used by this PDF.
Definition PDF.h:512
void print(std::ostream &os=std::cout, int verbosity=1) const
Summary printout.
void xfxQ2(double x, double q2, std::map< int, double > &rtn) const
Get the PDF xf(x) value at (x,q2) for all supported PIDs.
void xfxQ(double x, double q, std::map< int, double > &rtn) const
Get the PDF xf(x) value at (x,q) for all supported PIDs.
Definition PDF.h:132
virtual bool inRangeQ2(double q2) const =0
Grid range check for Q2.
PDFSet & set() const
Get the PDF set of which this is a member.
Definition PDF.h:360
virtual ~PDF()
Virtual destructor, to allow unfettered inheritance.
Definition PDF.h:53
void setForcePositive(int mode)
Set whether the PDF will only return positive (definite) values or not.
Definition PDF.h:271
virtual bool inRangeQ(double q) const
Grid range check for Q.
Definition PDF.h:315
virtual const std::vector< int > & flavors() const
List of flavours defined by this PDF set.
Definition PDF.h:418
void setAlphaS(AlphaS *alphas)
Set the AlphaS calculator by pointer.
Definition PDF.h:476
vector< int > _flavors
Locally cached list of supported PIDs (mutable for laziness/caching)
Definition PDF.h:538
virtual double q2Min()
Minimum valid Q2 value for this PDF (in GeV2).
Definition PDF.h:249
double alphasQ(double q) const
Value of alpha_s(Q2) used by this PDF.
Definition PDF.h:504
const AlphaS & alphaS() const
Retrieve the AlphaS object for this PDF (const)
Definition PDF.h:496
virtual double qMax()
Maximum valid Q value for this PDF (in GeV).
Definition PDF.h:244
virtual double q2Max()
Maximum valid Q2 value for this PDF (in GeV2).
Definition PDF.h:254
const PDFInfo & info() const
Get the info class that actually stores and handles the metadata (const version)
Definition PDF.h:355
bool inPhysicalRangeX(double x) const
Check whether the given x is physically valid.
Definition PDF.h:280
std::string description() const
Description of this PDF member.
Definition PDF.h:386
bool inPhysicalRangeXQ2(double x, double q2) const
Check whether the given (x,Q2) is physically valid.
Definition PDF.h:299
virtual double xMax()
Maximum valid x value for this PDF.
Definition PDF.h:230
bool hasFlavor(int id) const
Checks whether id is a valid parton for this PDF.
int _forcePos
Cached flag for whether to return only positive (or positive definite) PDF values.
Definition PDF.h:548
int qcdOrder() const
Definition PDF.h:448
virtual double qMin()
Definition PDF.h:238
virtual bool inRangeXQ(double x, double q) const
Combined range check for x and Q.
Definition PDF.h:336
bool inPhysicalRangeQ(double q) const
Check whether the given Q is physically valid.
Definition PDF.h:294
PDF()
Force initialization of the only non-class member.
Definition PDF.h:47
PDFInfo & info()
Get the info class that actually stores and handles the metadata.
Definition PDF.h:352
int memberID() const
PDF member local ID number.
Definition PDF.h:373
std::map< int, double > xfxQ(double x, double q) const
Get the PDF xf(x) value at (x,q) for all supported PIDs.
Definition PDF.h:191
PDFInfo _info
Metadata container.
Definition PDF.h:535
virtual bool inRangeX(double x) const =0
Grid range check for x.
double quarkMass(int id) const
Get a quark mass in GeV by PDG code (|PID| = 1-6 only)
bool hasAlphaS() const
Check if an AlphaS calculator is set.
Definition PDF.h:486
Namespace for all LHAPDF functions and classes.
Definition AlphaS.h:14