17#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE)
23#if !defined(GPUCA_GPUCODE)
27#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE)
45template <
typename DataT>
53 mParameters =
nullptr;
57template <
typename DataT>
64 int32_t
offset =
sizeof(*mGrid) * mXdim;
65 for (int32_t
i = 0;
i < mXdim;
i++) {
66 offset = alignSize(
offset, mGrid[
i].getBufferAlignmentBytes());
67 mGrid[
i].setActualBufferAddress(mFlatBufferPtr +
offset);
68 offset += mGrid[
i].getFlatBufferSize();
70 offset = alignSize(
offset, getParameterAlignmentBytes());
71 mParameters =
reinterpret_cast<DataT*
>(mFlatBufferPtr +
offset);
74template <
typename DataT>
78 mParameters = relocatePointer(mFlatBufferPtr, futureFlatBufferPtr, mParameters);
79 for (int32_t
i = 0;
i < mXdim;
i++) {
80 char*
buffer = relocatePointer(mFlatBufferPtr, futureFlatBufferPtr, mGrid[
i].getFlatBufferPtr());
81 mGrid[
i].setFutureBufferAddress(
buffer);
83 mGrid = relocatePointer(mFlatBufferPtr, futureFlatBufferPtr, mGrid);
87template <
typename DataT>
90 printf(
" Irregular Spline %dD->%dD: \n", mXdim, mYdim);
91 for (int32_t
i = 0;
i < mXdim;
i++) {
92 printf(
" grid X%d: \n",
i);
97#if !defined(GPUCA_GPUCODE)
99template <
typename DataT>
111 for (int32_t
i = 0;
i < mXdim;
i++) {
119template <
typename DataT>
123 char* oldFlatBufferPtr = mFlatBufferPtr;
125 char* currFlatBufferPtr = mFlatBufferPtr;
126 mFlatBufferPtr = oldFlatBufferPtr;
127 setActualBufferAddress(currFlatBufferPtr);
130template <
typename DataT>
132 int32_t nXdim, int32_t nYdim,
const int32_t numberOfKnots[],
const int32_t*
const knots[])
143 for (int32_t
i = 0;
i < mXdim;
i++) {
145 vGrids[
i].recreate(0, numberOfKnots[
i], knots[
i]);
146 }
else if (numberOfKnots) {
147 vGrids[
i].recreate(0, numberOfKnots[
i]);
149 vGrids[
i].recreate(0, 2);
151 mNknots *= vGrids[
i].getNumberOfKnots();
156 for (int32_t
i = 0;
i < mXdim;
i++) {
157 offset = alignSize(
offset, vGrids[
i].getBufferAlignmentBytes());
158 offset += vGrids[
i].getFlatBufferSize();
161 offset = alignSize(
offset, getParameterAlignmentBytes());
162 offset += getSizeOfParameters();
170 for (int32_t
i = 0;
i < mXdim;
i++) {
172 offset = alignSize(
offset, mGrid[
i].getBufferAlignmentBytes());
173 mGrid[
i].cloneFromObject(vGrids[
i], mFlatBufferPtr +
offset);
174 offset += mGrid[
i].getFlatBufferSize();
177 offset = alignSize(
offset, getParameterAlignmentBytes());
178 mParameters =
reinterpret_cast<DataT*
>(mFlatBufferPtr +
offset);
179 offset += getSizeOfParameters();
181 for (int32_t
i = 0;
i < getNumberOfParameters();
i++) {
186template <
typename DataT>
188 int32_t nXdim, int32_t nYdim,
const int32_t numberOfKnots[])
191 recreate(nXdim, nYdim, numberOfKnots,
nullptr);
196#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE)
198template <
typename DataT>
201 std::function<
void(
const double x[],
double f[])> F,
202 const int32_t nAuxiliaryDataPoints[])
209template <
typename DataT>
216template <
typename DataT>
218 TFile& inpf,
const char*
name)
221 return FlatObject::readFromFile<SplineContainer<DataT>>(inpf,
name);
224template <
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)
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
Defining DataPointCompositeObject explicitly as copiable.