Project
Loading...
Searching...
No Matches
Spline1DHelper.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
14
16
17#ifndef ALICEO2_GPUCOMMON_TPCFASTTRANSFORMATION_Spline1DHelper_H
18#define ALICEO2_GPUCOMMON_TPCFASTTRANSFORMATION_Spline1DHelper_H
19
20#include "GPUCommonDef.h"
21#include "GPUCommonRtypes.h"
22#include "Spline1D.h"
23
24#include <vector>
25#include <string>
26
27namespace o2::gpu
28{
32template <typename DataT>
34{
35 public:
37
40
42 Spline1DHelper(const Spline1DHelper&) = default;
43
46
48 ~Spline1DHelper() = default;
49
51
54 double xMin, double xMax,
55 const double vx[], const double vf[], int32_t nDataPoints);
56
59 Spline1DContainer<DataT, FlatObject>& spline, double xMin, double xMax, std::function<void(double x, double f[/*spline.getFdimensions()*/])> F,
60 int32_t nAuxiliaryDataPoints = 4);
61
64 const double vx[], const double vf[], int32_t nDataPoints);
65
67 Spline1DContainer<DataT, FlatObject>& spline, double xMin, double xMax, std::function<void(double x, double f[/*spline.getFdimensions()*/])> F,
68 int32_t nAuxiliaryDataPoints);
69
72 double xMin, double xMax, std::function<void(double x, double f[/*spline.getFdimensions()*/])> F);
73
75
76 const Spline1D<double>& getSpline() const { return mSpline; }
77
80 static void getScoefficients(const typename Spline1D<double>::KnotType& knotL, double u,
81 double& cSl, double& cDl, double& cSr, double& cDr);
82
83 static void getDScoefficients(const typename Spline1D<double>::KnotType& knotL, double u,
84 double& cSl, double& cDl, double& cSr, double& cDr);
85
86 static void getDDScoefficients(const typename Spline1D<double>::KnotType& knotL, double u,
87 double& cSl, double& cDl, double& cSr, double& cDr);
88
89 static void getDDScoefficientsLeft(const typename Spline1D<double>::KnotType& knotL,
90 double& cSl, double& cDl, double& cSr, double& cDr);
91
92 static void getDDScoefficientsRight(const typename Spline1D<double>::KnotType& knotL,
93 double& cSl, double& cDl, double& cSr, double& cDr);
94 static void getDDDScoefficients(const typename Spline1D<double>::KnotType& knotL,
95 double& cSl, double& cDl, double& cSr, double& cDr);
96
98 const char* getLastError() const { return mError.c_str(); }
99
100#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE) // code invisible on GPU and in the standalone compilation
102 static int32_t test(const bool draw = 0, const bool drawDataPoints = 1);
103#endif
104
105 private:
107 int32_t storeError(int32_t code, const char* msg);
108
109 std::string mError = "";
110
111 void setSpline(const Spline1DContainer<DataT, FlatObject>& spline);
112
113 void makeDataPoints(Spline1DContainer<DataT, FlatObject>& spline, double xMin, double xMax, std::function<void(double x, double f[/*spline.getFdimensions()*/])> F,
114 int32_t nAuxiliaryDataPoints, std::vector<double>& vx, std::vector<double>& vf);
115
117
118 Spline1D<double> mSpline;
119
120 ClassDefNV(Spline1DHelper, 0);
121};
122
123} // namespace o2::gpu
124
125#endif
Definition of Spline1D class.
Spline1DHelper(const Spline1DHelper &)=default
Copy constructor: disabled.
static void getScoefficients(const typename Spline1D< double >::KnotType &knotL, double u, double &cSl, double &cDl, double &cSr, double &cDr)
void approximateDataPoints(Spline1DContainer< DataT, FlatObject > &spline, double xMin, double xMax, const double vx[], const double vf[], int32_t nDataPoints)
_______________ Main functionality ________________________
const char * getLastError() const
Gives error string.
static void getDScoefficients(const typename Spline1D< double >::KnotType &knotL, double u, double &cSl, double &cDl, double &cSr, double &cDr)
void approximateFunction(Spline1DContainer< DataT, FlatObject > &spline, double xMin, double xMax, std::function< void(double x, double f[])> F, int32_t nAuxiliaryDataPoints=4)
Create best-fit spline parameters for a function F.
static void getDDScoefficients(const typename Spline1D< double >::KnotType &knotL, double u, double &cSl, double &cDl, double &cSr, double &cDr)
static void getDDScoefficientsRight(const typename Spline1D< double >::KnotType &knotL, double &cSl, double &cDl, double &cSr, double &cDr)
Spline1DHelper()
_____________ Constructors / destructors __________________________
void approximateFunctionGradually(Spline1DContainer< DataT, FlatObject > &spline, double xMin, double xMax, std::function< void(double x, double f[])> F, int32_t nAuxiliaryDataPoints)
Spline1DHelper & operator=(const Spline1DHelper &)=default
Assignment operator: disabled.
void approximateFunctionClassic(Spline1DContainer< DataT, FlatObject > &spline, double xMin, double xMax, std::function< void(double x, double f[])> F)
Create classic spline parameters for a given input function F.
static void getDDDScoefficients(const typename Spline1D< double >::KnotType &knotL, double &cSl, double &cDl, double &cSr, double &cDr)
const Spline1D< double > & getSpline() const
_______________ Utilities ________________________
static void getDDScoefficientsLeft(const typename Spline1D< double >::KnotType &knotL, double &cSl, double &cDl, double &cSr, double &cDr)
void approximateDerivatives(Spline1DContainer< DataT, FlatObject > &spline, const double vx[], const double vf[], int32_t nDataPoints)
Approximate only derivatives assuming the spline values at knozts are already set.
~Spline1DHelper()=default
Destructor.
Forward declaration — specializations below select ClassDefNV based on FlatBase.
Definition Spline1D.h:171
GLint GLenum GLint x
Definition glcorearb.h:403
GLdouble f
Definition glcorearb.h:310
uint64_t const void const *restrict const msg
Definition x9.h:153