21 #include <type_traits>
67 template <typename Tag, typename Reader = typename DefaultPDFImplementations<Tag>::Reader,
74 : m_pdfName(pdfName), m_setNumber(setNumber)
89 if constexpr (std::is_same_v<Tag, CollinearPDFTag>)
92 return m_interpolator.interpolate(flavor, x,
mu2);
93 return m_extrapolator.extrapolate(flavor, x,
mu2);
97 throw std::logic_error(
98 "pdf(PartonFlavor, double, double) is not supported for this tag.");
113 void pdf(
double x,
double mu2, std::array<double, DEFAULT_TOTAL_PDFS> &output)
const
115 if constexpr (std::is_same_v<Tag, CollinearPDFTag>)
118 return m_interpolator.interpolate(x,
mu2, output);
119 return m_extrapolator.extrapolate(x,
mu2, output);
123 throw std::logic_error(
"pdf(double, double, std::array<double, DEFAULT_TOTAL_PDFS>&) "
124 "is not supported for this tag.");
128 : m_pdfName(std::move(other.m_pdfName)), m_setNumber(other.m_setNumber),
129 m_reader(std::move(other.m_reader)), m_interpolator(std::move(other.m_interpolator)),
130 m_extrapolator(std::move(other.m_extrapolator)), m_stdInfo(std::move(other.m_stdInfo))
132 m_interpolator.initialize(&m_reader);
135 m_extrapolator.setInterpolator(&m_interpolator);
144 m_pdfName = std::move(other.m_pdfName);
145 m_setNumber = other.m_setNumber;
146 m_reader = std::move(other.m_reader);
147 m_interpolator = std::move(other.m_interpolator);
148 m_extrapolator = std::move(other.m_extrapolator);
149 m_stdInfo = std::move(other.m_stdInfo);
152 m_interpolator.initialize(&m_reader);
155 m_extrapolator.setInterpolator(&m_interpolator);
161 : m_pdfName(other.m_pdfName), m_setNumber(other.m_setNumber), m_reader(other.m_reader),
162 m_interpolator(other.m_interpolator), m_extrapolator(other.m_extrapolator),
163 m_stdInfo(other.m_stdInfo)
165 m_interpolator.initialize(&m_reader);
168 m_extrapolator.setInterpolator(&m_interpolator);
177 m_pdfName = other.m_pdfName;
178 m_setNumber = other.m_setNumber;
179 m_reader = other.m_reader;
180 m_interpolator = other.m_interpolator;
181 m_extrapolator = other.m_extrapolator;
182 m_stdInfo = other.m_stdInfo;
185 m_interpolator.initialize(&m_reader);
188 m_extrapolator.setInterpolator(&m_interpolator);
201 if constexpr (std::is_same_v<Tag, TMDPDFTag>)
204 return m_interpolator.interpolate(flavor, x,
kt2,
mu2);
206 return m_extrapolator.extrapolate(flavor, x,
kt2,
mu2);
210 throw std::logic_error(
211 "pdf(double, double, std::array<double, 13>&) is not supported for this tag.");
226 void tmd(
double x,
double kt2,
double mu2, std::array<double, DEFAULT_TOTAL_PDFS> &output)
228 if constexpr (std::is_same_v<Tag, TMDPDFTag>)
231 : m_extrapolator.extrapolate(x,
kt2,
mu2, output);
235 throw std::logic_error(
236 "pdf(double, double, std::array<double, 13>&) is not supported for this tag.");
250 void loadStandardInfo()
255 if constexpr (std::is_same_v<Tag, TMDPDFTag>)
260 m_stdInfo = *pdfStandardInfo.first;
262 else if constexpr (std::is_same_v<Tag, CollinearPDFTag>)
266 throw InvalidFormatException(
"Invalid standard info file " + *infoPathPair.first);
267 m_stdInfo = *pdfStandardInfo.first;
271 static_assert(!std::is_same_v<Tag, Tag>,
"Unsupported Tag");
276 m_reader.read(m_pdfName, m_setNumber);
277 m_interpolator.initialize(&m_reader);
278 if constexpr (std::is_same_v<Tag, CollinearPDFTag>)
280 if constexpr (std::is_base_of_v<IcAdvancedPDFExtrapolator<Extrapolator>, Extrapolator>)
282 m_extrapolator.setInterpolator(&m_interpolator);
286 std::string m_pdfName;
289 Interpolator m_interpolator;
290 Extrapolator m_extrapolator;
291 YamlStandardTMDInfo m_stdInfo;
Definition: CDefaultLHAPDFFileReader.h:10
Definition: CLHAPDFBicubicInterpolator.h:12
Definition: Exception.h:23
Definition: GenericPDF.h:71
double tmd(PartonFlavor flavor, double x, double kt2, double mu2)
Evaluates the TMD PDF value for a specific parton flavor.
Definition: GenericPDF.h:199
void pdf(double x, double mu2, std::array< double, DEFAULT_TOTAL_PDFS > &output) const
Evaluate the array of Collinear PDF values for {tbar, bbar, cbar, sbar, ubar, dbar,...
Definition: GenericPDF.h:113
void tmd(double x, double kt2, double mu2, std::array< double, DEFAULT_TOTAL_PDFS > &output)
Evaluates the vector of TMD PDF values for {tbar, bbar, cbar, sbar, ubar, dbar, g,...
Definition: GenericPDF.h:226
GenericPDF(const GenericPDF &other)
Definition: GenericPDF.h:160
GenericPDF(const std::string &pdfName, int setNumber)
Definition: GenericPDF.h:73
GenericPDF(GenericPDF &&other) noexcept
Definition: GenericPDF.h:127
YamlStandardTMDInfo getStdPDFInfo() const
Retrieves the standard PDF info.
Definition: GenericPDF.h:244
GenericPDF & operator=(GenericPDF &&other) noexcept
Definition: GenericPDF.h:138
GenericPDF & operator=(const GenericPDF &other)
Definition: GenericPDF.h:171
double pdf(PartonFlavor flavor, double x, double mu2) const
Retrieves the collinear PDF value for a specific parton flavor.
Definition: GenericPDF.h:87
Definition: TDefaultLHAPDF_TMDReader.h:10
Definition: TTrilinearInterpolator.h:16
Definition: AllFlavorsShape.h:14
std::pair< std::optional< YamlStandardTMDInfo >, ErrorType > YamlStandardPDFInfoReader(const std::string &yamlInfoPath)
bool isInRange(const Reader &reader, double x, double mu2)
Definition: PDFUtils.h:23
PartonFlavor
Definition: PartonUtils.h:58
std::pair< std::optional< std::string >, ErrorType > StandardInfoFilePath(const std::string &pdfSetName)
int mu2
Definition: pdfset_tutorial.py:14
int kt2
Definition: pdfset_tutorial.py:15
Definition: GenericPDF.h:30
Tag types for PDF implementations.
Definition: GenericPDF.h:49
Definition: GenericPDF.h:27
Definition: YamlStandardPDFInfo.h:26