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.
 
TCanvas * drawDataPoints(TMultiGraph *mg, double min, double max)