17#if !defined(GPUCA_STANDALONE)
25#if !defined(GPUCA_STANDALONE)
43template <
typename DataT>
51 mParameters =
nullptr;
55template <
typename DataT>
62 int32_t
offset =
sizeof(*mGrid) * mXdim;
63 for (int32_t
i = 0;
i < mXdim;
i++) {
64 offset = alignSize(
offset, mGrid[
i].getBufferAlignmentBytes());
65 mGrid[
i].setActualBufferAddress(mFlatBufferPtr +
offset);
66 offset += mGrid[
i].getFlatBufferSize();
68 offset = alignSize(
offset, getParameterAlignmentBytes());
69 mParameters =
reinterpret_cast<DataT*
>(mFlatBufferPtr +
offset);
72template <
typename DataT>
76 mParameters = relocatePointer(mFlatBufferPtr, futureFlatBufferPtr, mParameters);
77 for (int32_t
i = 0;
i < mXdim;
i++) {
78 char*
buffer = relocatePointer(mFlatBufferPtr, futureFlatBufferPtr, mGrid[
i].getFlatBufferPtr());
79 mGrid[
i].setFutureBufferAddress(
buffer);
81 mGrid = relocatePointer(mFlatBufferPtr, futureFlatBufferPtr, mGrid);
85template <
typename DataT>
88 printf(
" Irregular Spline %dD->%dD: \n", mXdim, mYdim);
89 for (int32_t
i = 0;
i < mXdim;
i++) {
90 printf(
" grid X%d: \n",
i);
95template <
typename DataT>
107 for (int32_t
i = 0;
i < mXdim;
i++) {
115template <
typename DataT>
119 char* oldFlatBufferPtr = mFlatBufferPtr;
121 char* currFlatBufferPtr = mFlatBufferPtr;
122 mFlatBufferPtr = oldFlatBufferPtr;
123 setActualBufferAddress(currFlatBufferPtr);
126template <
typename DataT>
128 int32_t nXdim, int32_t nYdim,
const int32_t numberOfKnots[],
const int32_t*
const knots[])
139 for (int32_t
i = 0;
i < mXdim;
i++) {
141 vGrids[
i].recreate(0, numberOfKnots[
i], knots[
i]);
142 }
else if (numberOfKnots) {
143 vGrids[
i].recreate(0, numberOfKnots[
i]);
145 vGrids[
i].recreate(0, 2);
147 mNknots *= vGrids[
i].getNumberOfKnots();
152 for (int32_t
i = 0;
i < mXdim;
i++) {
153 offset = alignSize(
offset, vGrids[
i].getBufferAlignmentBytes());
154 offset += vGrids[
i].getFlatBufferSize();
157 offset = alignSize(
offset, getParameterAlignmentBytes());
158 offset += getSizeOfParameters();
166 for (int32_t
i = 0;
i < mXdim;
i++) {
168 offset = alignSize(
offset, mGrid[
i].getBufferAlignmentBytes());
169 mGrid[
i].cloneFromObject(vGrids[
i], mFlatBufferPtr +
offset);
170 offset += mGrid[
i].getFlatBufferSize();
173 offset = alignSize(
offset, getParameterAlignmentBytes());
174 mParameters =
reinterpret_cast<DataT*
>(mFlatBufferPtr +
offset);
175 offset += getSizeOfParameters();
177 for (int32_t
i = 0;
i < getNumberOfParameters();
i++) {
182template <
typename DataT>
184 int32_t nXdim, int32_t nYdim,
const int32_t numberOfKnots[])
187 recreate(nXdim, nYdim, numberOfKnots,
nullptr);
190#if !defined(GPUCA_STANDALONE)
192template <
typename DataT>
195 std::function<
void(
const double x[],
double f[])> F,
196 const int32_t nAuxiliaryDataPoints[])
203template <
typename DataT>
210template <
typename DataT>
212 TFile& inpf,
const char*
name)
215 return FlatObject::readFromFile<SplineContainer<DataT>>(inpf,
name);
218template <
typename DataT>
Definition of SplineHelper class.
templateClassImp(o2::gpu::SplineContainer)
Definition of SplineSpec class.
void setFutureBufferAddress(char *futureFlatBufferPtr)
void destroy()
_______________ Utilities _______________________________________________
static T * relocatePointer(const char *oldBase, char *newBase, const T *ptr)
Relocates a pointer inside a buffer to the new buffer address.
void setActualBufferAddress(char *actualFlatBufferPtr)
_____________ Methods for moving the class with its external buffer to another location _____________...
static int32_t writeToFile(T &obj, TFile &outf, const char *name)
write a child class object to the file
void startConstruction()
_____________ Construction _________
void moveBufferTo(char *newBufferPtr)
void finishConstruction(int32_t flatBufferSize)
void cloneFromObject(const FlatObject &obj, char *newFlatBufferPtr)
Forward declaration — specializations below select ClassDefNV based on FlatBase.
int32_t mYdim
dimentionality of Y
int32_t mNknots
number of spline knots
int32_t writeToFile(TFile &outf, const char *name)
_______________ IO ________________________
void cloneFromObject(const SplineContainer &obj, char *newFlatBufferPtr)
static SplineContainer * readFromFile(TFile &inpf, const char *name)
read a class object from the file
void moveBufferTo(char *newBufferPtr)
void recreate(int32_t nXdim, int32_t nYdim, const int32_t nKnots[])
Constructor for a regular spline.
Spline1D< DataT > * mGrid
void setActualBufferAddress(char *actualFlatBufferPtr)
void setFutureBufferAddress(char *futureFlatBufferPtr)
int32_t mXdim
_____________ Data members ____________
DataT * mParameters
(transient!!) mXdim grids
void print() const
Print method.
void approximateFunction(const double xMin[], const double xMax[], std::function< void(const double x[], double f[])> F, const int32_t nAuxiliaryDataPoints[]=nullptr)
_______________ Construction interface ________________________
static int32_t test(const bool draw=0, const bool drawDataPoints=1)
_______________ Test tools _______________
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 test(const bool draw=0, const bool drawDataPoints=1)
Test the Spline class functionality.
GLuint const GLchar * name
TCanvas * drawDataPoints(TMultiGraph *mg, double min, double max)