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 {
109 return xfxQ2(
id, x, q*q);
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 {
177 std::map<int, double>
xfxQ2(
double x,
double q2)
const;
191 std::map<int, double>
xfxQ(
double x,
double q)
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;
226 return numeric_limits<double>::epsilon();
256 return (
info().
has_key(
"QMax")) ?
sqr(
info().get_entry_as<double>(
"QMax")) : numeric_limits<double>::max();
281 return x >= 0.0 && x <= 1.0;
375 assert(memname.length() > 5);
376 const int memid = lexical_cast<int>(memname.substr(memname.length()-4));
418 virtual const std::vector<int>&
flavors()
const {
Calculator interface for computing alpha_s(Q2) in various ways.
Definition: AlphaS.h:24
Generic unspecialised LHAPDF runtime error.
Definition: Exceptions.h:22
T get_entry_as(const std::string &key) const
Definition: Info.h:122
Metadata class for PDF members.
Definition: PDFInfo.h:18
const std::string & get_entry(const std::string &key) const
Retrieve a metadata string by key name.
Class for PDF set metadata and manipulation.
Definition: PDFSet.h:48
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
virtual const std::vector< int > & flavors() const
List of flavours defined by this PDF set.
Definition: PDF.h:418
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
void xfxQ2(double x, double q2, std::vector< double > &rtn) const
Get the PDF xf(x) value at (x,q2) for "standard" PIDs.
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*...
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.
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
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
virtual double qMax()
Maximum valid Q value for this PDF (in GeV).
Definition: PDF.h:244
PDFSet & set() const
Get the PDF set of which this is a member.
Definition: PDF.h:360
virtual double q2Max()
Maximum valid Q2 value for this PDF (in GeV2).
Definition: PDF.h:254
PDFInfo & info()
Get the info class that actually stores and handles the metadata.
Definition: PDF.h:352
const AlphaS & alphaS() const
Retrieve the AlphaS object for this PDF (const)
Definition: PDF.h:496
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
void xfxQ(double x, double q, std::vector< double > &rtn) const
Get the PDF xf(x) value at (x,q) for "standard" PIDs.
Definition: PDF.h:164
bool inPhysicalRangeXQ2(double x, double q2) const
Check whether the given (x,Q2) is physically valid.
Definition: PDF.h:299
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
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
AlphaS & alphaS()
Retrieve the AlphaS object for this PDF.
Definition: PDF.h:491
int memberID() const
PDF member local ID number.
Definition: PDF.h:373
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)
const PDFInfo & info() const
Get the info class that actually stores and handles the metadata (const version)
Definition: PDF.h:355
bool hasAlphaS() const
Check if an AlphaS calculator is set.
Definition: PDF.h:486
Problem exists between keyboard and chair.
Definition: Exceptions.h:110
AlphaS * mkAlphaS(const Info &info)
Make an AlphaS object from an Info object.
PDFSet & getPDFSet(const std::string &setname)
std::pair< std::string, int > lookupPDF(int lhaid)
bool has_key(const std::map< K, T > &container, const K &key)
Does the map<K,T> container have a key K key?
Definition: Utils.h:251
std::string to_str(const T &val)
Make a string representation of val.
Definition: Utils.h:61
std::string basename(const std::string &p)
Get the basename (i.e. terminal file name) from a path p.
Definition: Utils.h:175
N sqr(const N &x)
Convenience function for squaring (of any type)
Definition: Utils.h:208
std::string dirname(const std::string &p)
Get the dirname (i.e. path to the penultimate directory) from a path p.
Definition: Utils.h:181
std::string file_stem(const std::string &f)
Get the stem (i.e. part without a file extension) from a filename f.
Definition: Utils.h:187
std::string to_lower(const std::string &s)
Convert a string to lower-case (not in-place)
Definition: Utils.h:138
int verbosity()
Definition: Config.h:54
Namespace for all LHAPDF functions and classes.
Definition: AlphaS.h:14