LHAPDF
6.5.5
include
LHAPDF
Interpolator.h
1
// -*- C++ -*-
2
//
3
// This file is part of LHAPDF
4
// Copyright (C) 2012-2024 The LHAPDF collaboration (see AUTHORS for details)
5
//
6
#
pragma
once
7
#
ifndef
LHAPDF_Interpolator_H
8
#
define
LHAPDF_Interpolator_H
9
10
#
include
"LHAPDF/Utils.h"
11
#
include
"LHAPDF/KnotArray.h"
12
13
namespace
LHAPDF
{
14
15
16
// Forward declaration
17
class
GridPDF
;
18
19
20
/// The general interface for interpolating between grid points
21
class
Interpolator
{
22
public
:
23
24
/// Destructor to allow inheritance
25
virtual
~
Interpolator
() { }
26
27
28
/// @name Binding to a PDF object
29
///@{
30
31
/// Bind to a GridPDF
32
void
bind
(
const
GridPDF
* pdf) { _pdf = pdf; }
33
34
/// Unbind from GridPDF
35
void
unbind
() { _pdf = 0; }
36
37
/// Identify whether this Interpolator has an associated PDF
38
bool
hasPDF
() {
return
_pdf != 0; }
39
40
/// Get the associated GridPDF
41
const
GridPDF
&
pdf
()
const
{
return
*_pdf; }
42
43
///@}
44
45
46
/// @name Interpolation methods
47
///@{
48
49
/// Interpolate a single-point in (x,Q)
50
double
interpolateXQ
(
int
id,
double
x,
double
q)
const
{
51
return
interpolateXQ2
(
id
,
x
,
q*q
)
;
52
}
53
54
/// Interpolate a single-point in (x,Q2)
55
double
interpolateXQ2
(
int
id,
double
x,
double
q2)
const
;
56
57
void
interpolateXQ2(
double
x,
double
q2, std::vector<
double
>& ret)
const
;
58
59
/// @todo Make an all-PID version of interpolateQ and Q2?
60
61
///@}
62
63
/// The name of this type of interpolator
64
///
65
/// @todo Would name() or scheme() be a better name? "Type" maybe confuses with the language type-system
66
std
::
string
type
()
const
{
67
return
_type;
68
}
69
70
/// Set the interpolation type
71
void
setType
(std::string t) {
72
_type = t;
73
}
74
75
76
protected
:
77
78
/// @brief Interpolate a single-point in (x,Q2), given x/Q2 values and subgrid indices.
79
///
80
/// The key function to be overridden in derived classes: the subgrid and
81
/// x/Q2 index lookup (and their caching) are done centrally in the
82
/// Interpolator base class so do not need to be re-implemented in each
83
/// flavour of interpolator.
84
virtual
double
_interpolateXQ2
(
const
KnotArray& grid,
double
x, size_t ix,
double
q2, size_t iq2,
int
id)
const
= 0;
85
86
virtual
void
_interpolateXQ2(
const
KnotArray& grid,
double
x, size_t ix,
double
q2, size_t iq2, std::vector<
double
>& ret)
const
= 0;
87
88
89
private
:
90
const
GridPDF
* _pdf;
91
std::string _type;
92
};
93
94
95
}
96
97
#
endif
Generated by
1.9.1