17#ifndef ALICEO2_GPUCOMMON_TPCFASTTRANSFORMATION_Spline2DHelper_H
18#define ALICEO2_GPUCOMMON_TPCFASTTRANSFORMATION_Spline2DHelper_H
37template <
typename DataT>
60 double x1Min,
double x1Max,
double x2Min,
double x2Max,
61 std::function<
void(
double x1,
double x2,
double f[])> F,
62 int32_t nAuxiliaryDataPointsU1 = 4, int32_t nAuxiliaryDataPointsU2 = 4);
67 double x1Min,
double x1Max,
double x2Min,
double x2Max,
68 std::function<
void(
double x1,
double x2,
double f[])> F,
69 int32_t nAuxiliaryDataPointsU1 = 4, int32_t nAuxiliaryDataPointsU2 = 4);
74 const double dataPointX1[],
const double dataPointX2[],
75 const double dataPointF[],
const double dataPointWeight[], int32_t nDataPoints);
84 DataT* Fparameters,
double x1Min,
double x1Max,
double x2Min,
double x2Max,
85 std::function<
void(
double x1,
double x2,
double f[])> F)
const;
89 DataT* Fparameters,
double x1Min,
double x1Max,
double x2Min,
double x2Max,
90 std::function<
void(
const std::vector<double>&
x1,
const std::vector<double>& x2, std::vector<double>
f[])> F,
91 uint32_t batchsize)
const;
95 DataT* Fparameters,
const double DataPointF[])
const;
111#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE)
113 static int32_t test(const bool draw = 0, const bool drawDataPoints = 1);
118 void getScoefficients(int32_t iu, int32_t iv,
double u,
double v,
122 int32_t storeError(int32_t code,
const char*
msg);
124 std::string mError =
"";
125 int32_t mFdimensions;
134template <
typename DataT>
137 double x1Min,
double x1Max,
double x2Min,
double x2Max,
138 std::function<
void(
double x1,
double x2,
double f[])> F,
139 int32_t nAuxiliaryDataPointsU1, int32_t nAuxiliaryDataPointsU2)
142 setSpline(spline, nAuxiliaryDataPointsU1, nAuxiliaryDataPointsU2);
143 approximateFunction(spline.getParameters(), x1Min, x1Max, x2Min, x2Max, F);
144 spline.setXrange(x1Min, x1Max, x2Min, x2Max);
147template <
typename DataT>
156 mFdimensions = spline.getYdimensions();
157 if (mHelperU1.setSpline(spline.
getGridX1(), mFdimensions, nAuxiliaryPointsU) != 0) {
158 ret = storeError(-2,
"Spline2DHelper::setSpline2D: error by setting U axis");
160 if (mHelperU2.setSpline(spline.
getGridX2(), mFdimensions, nAuxiliaryPointsV) != 0) {
161 ret = storeError(-3,
"Spline2DHelper::setSpline2D: error by setting V axis");
Definition of Spline1DHelperOld class.
Definition of Spline1D class.
Definition of Spline2D class.
Forward declaration — specializations below select ClassDefNV based on FlatBase.
FlatBase & getGridX2() const
FlatBase & getGridX1() const
const Spline1DHelperOld< DataT > & getHelperU2() const
void approximateFunctionViaDataPoints(Spline2DContainerBase< DataT, FlatObject > &spline, double x1Min, double x1Max, double x2Min, double x2Max, std::function< void(double x1, double x2, double f[])> F, int32_t nAuxiliaryDataPointsU1=4, int32_t nAuxiliaryDataPointsU2=4)
void approximateFunction(Spline2DContainerBase< DataT, FlatObject > &spline, double x1Min, double x1Max, double x2Min, double x2Max, std::function< void(double x1, double x2, double f[])> F, int32_t nAuxiliaryDataPointsU1=4, int32_t nAuxiliaryDataPointsU2=4)
_______________ Main functionality ________________________
const char * getLastError() const
_______________ Utilities ________________________
int32_t setSpline(const Spline2DContainerBase< DataT, FlatObject > &spline, int32_t nAuxiliaryPointsU1, int32_t nAuxiliaryPointsU2)
_______________ Interface for a step-wise construction of the best-fit spline _______________________...
const Spline1DHelperOld< DataT > & getHelperU1() const
int32_t getNumberOfDataPoints() const
Spline2DHelper(const Spline2DHelper &)=delete
Copy constructor: disabled.
Spline2DHelper & operator=(const Spline2DHelper &)=delete
Assignment operator: disabled.
void approximateFunctionBatch(DataT *Fparameters, double x1Min, double x1Max, double x2Min, double x2Max, std::function< void(const std::vector< double > &x1, const std::vector< double > &x2, std::vector< double > f[])> F, uint32_t batchsize) const
approximate std::function, output in Fparameters. F calculates values for a batch of points.
void approximateDataPoints(Spline2DContainerBase< DataT, FlatObject > &spline, DataT *splineParameters, double x1Min, double x1Max, double x2Min, double x2Max, const double dataPointX1[], const double dataPointX2[], const double dataPointF[], const double dataPointWeight[], int32_t nDataPoints)
Create best-fit spline parameters for a given set of data points.
int32_t getNumberOfDataPointsU1() const
int32_t getNumberOfDataPointsU2() const
~Spline2DHelper()=default
Destructor.
Spline2DHelper()
_____________ Constructors / destructors __________________________
GLuint GLfloat GLfloat GLfloat x1
GLsizei GLenum const void * indices
uint64_t const void const *restrict const msg