17#ifndef ALICEO2_GPUCOMMON_TPCFASTTRANSFORMATION_SPLINEHELPER_H
18#define ALICEO2_GPUCOMMON_TPCFASTTRANSFORMATION_SPLINEHELPER_H
37template <
typename DataT>
59 const double xMin[],
const double xMax[],
60 std::function<
void(
const double x[],
double f[])> F,
61 const int32_t nAxiliaryDataPoints[] =
nullptr);
70 DataT* Fparameters,
const double xMin[],
const double xMax[],
71 std::function<
void(
const double x[],
double f[])> F)
const;
75 DataT* Fparameters,
const double xMin[],
const double xMax[],
76 std::function<
void(
const std::vector<double>
x[],
double f[])> F,
77 uint32_t batchsize)
const;
81 DataT* Fparameters,
const double DataPointF[])
const;
94#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE)
99 static int32_t
arraytopoints(int32_t point, int32_t
result[],
const int32_t numbers[], int32_t dim);
105 int32_t storeError(Int_t code,
const char*
msg);
108 int32_t mXdimensions;
109 int32_t mFdimensions;
110 int32_t mNumberOfParameters;
111 int32_t mNumberOfDataPoints;
112 std::vector<Spline1DHelperOld<DataT>> mHelpers;
115template <
typename DataT>
118 const double xMin[],
const double xMax[],
119 std::function<
void(
const double x[],
double f[])> F,
120 const int32_t nAxiliaryDataPoints[])
123 setSpline(spline, nAxiliaryDataPoints);
124 approximateFunction(spline.getParameters(), xMin, xMax, F);
125 DataT xxMin[spline.getXdimensions()];
126 DataT xxMax[spline.getXdimensions()];
127 for (int32_t
i = 0;
i < spline.getXdimensions();
i++) {
131 spline.setXrange(xxMin, xxMax);
134template <
typename DataT>
143 mXdimensions = spline.getXdimensions();
144 mFdimensions = spline.getYdimensions();
145 mNumberOfParameters = spline.getNumberOfParameters();
146 mNumberOfDataPoints = 1;
148 mHelpers.resize(mXdimensions);
149 for (int32_t
i = 0;
i < mXdimensions;
i++) {
150 int32_t np = (nAxiliaryPoints !=
nullptr) ? nAxiliaryPoints[
i] : 4;
151 if (mHelpers[
i].setSpline(spline.getGrid(
i), mFdimensions, np) != 0) {
152 ret = storeError(-2,
"SplineHelper::setSpline: error by setting an axis");
154 mNumberOfDataPoints *= mHelpers[
i].getNumberOfDataPoints();
Definition of Spline1DHelperOld class.
Definition of Spline1D class.
Definition of Spline class.
void approximateFunction(SplineContainer< DataT > &spline, const double xMin[], const double xMax[], std::function< void(const double x[], double f[])> F, const int32_t nAxiliaryDataPoints[]=nullptr)
_______________ Main functionality ________________________
static int32_t pointstoarray(const int32_t indices[], const int32_t numbers[], int32_t dim)
SplineHelper()
_____________ Constructors / destructors __________________________
int32_t getNumberOfDataPoints(int32_t dimX) const
int32_t getNumberOfDataPoints() const
static int32_t arraytopoints(int32_t point, int32_t result[], const int32_t numbers[], int32_t dim)
void approximateFunctionBatch(DataT *Fparameters, const double xMin[], const double xMax[], std::function< void(const std::vector< double > x[], double f[])> F, uint32_t batchsize) const
approximate std::function, output in Fparameters. F calculates values for a batch of points.
int32_t setSpline(const SplineContainer< DataT > &spline, const int32_t nAxiliaryPoints[])
_______________ Interface for a step-wise construction of the best-fit spline _______________________...
SplineHelper & operator=(const SplineHelper &)=delete
Assignment operator: disabled.
const char * getLastError() const
_______________ Utilities ________________________
~SplineHelper()=default
Destructor.
const Spline1DHelperOld< DataT > & getHelper(int32_t dimX) const
SplineHelper(const SplineHelper &)=delete
Copy constructor: disabled.
GLsizei GLenum const void * indices
FIXME: do not use data model tables.
TCanvas * drawDataPoints(TMultiGraph *mg, double min, double max)
uint64_t const void const *restrict const msg