Project
Loading...
Searching...
No Matches
IrregularSpline2D3DCalibrator.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
17
18#ifndef ALICEO2_GPUCOMMON_TPCFASTTRANSFORMATION_IRREGULARSPLINE2D3DCALIBRATOR_H
19#define ALICEO2_GPUCOMMON_TPCFASTTRANSFORMATION_IRREGULARSPLINE2D3DCALIBRATOR_H
20
21#include "GPUCommonDef.h"
22#include "IrregularSpline2D3D.h"
23#include <memory>
24#include <list>
25#include <functional>
26
27namespace o2
28{
29namespace gpu
30{
31
33{
34 public:
35 struct KnotData {
36 int32_t uv; // is the knot on U or V coordinate axis
37 int32_t rasterKnot; // index of the raster knot
38 };
39
40 struct Action {
45 Move action; // action type
46 float cost; // deviation between the input function and the spline, which happens when applying this action
47 std::list<KnotData>::iterator iter; // pointer to the knot data
48 bool operator<(const Action& a)
49 {
50 return (cost < a.cost);
51 }
52 };
53
55
58
61
63 void setRasterSize(int32_t nKnotsU, int32_t nKnotsV);
64
66 void setMaxNKnots(int32_t nKnotsU, int32_t nKnotsV);
67
69 void setMaximalDeviation(float maxDeviation)
70 {
71 mMaxDeviation = maxDeviation;
72 }
73
77
78 std::unique_ptr<float[]> calibrateSpline(IrregularSpline2D3D& spline_uv, std::function<void(float, float, float&, float&, float&)> F);
79
80 // some getters and step-by-step calibration methods. Only for debugging.
81
83 {
84 return mRaster;
85 }
86 const float* getRasterData() const
87 {
88 return mRasterData.data();
89 }
90
92 {
93 return mSpline;
94 }
95
96 const float* getSplineData() const
97 {
98 return mSplineData.data();
99 }
100
101 void startCalibration(std::function<void(float, float, float&, float&, float&)> F);
102 bool doCalibrationStep();
103
104 private:
106
107 void createCurrentSpline();
108 void createActionSpline();
109 void createSpline(IrregularSpline2D3D& sp, std::vector<float>& data);
110
111 Action checkActionShift(std::list<KnotData>::iterator& knot);
112
113 Action checkActionRemove(std::list<KnotData>::iterator& knot);
114
115 void getRegionOfInfluence(std::list<KnotData>::iterator knot, int32_t& regionKnotFirst, int32_t& regionKnotLast) const;
116
117 double getMaxDeviationLine(const IrregularSpline2D3D& spline, const std::vector<float>& data, int32_t axis, int32_t knot) const;
118 double getMaxDeviationArea(const IrregularSpline2D3D& spline, const std::vector<float>& data,
119 int32_t axis, int32_t knotFirst, int32_t knotLast) const;
120 double getIntegralDeviationLine(const IrregularSpline2D3D& spline, const std::vector<float>& data, int32_t axis, int32_t knot) const;
121 double getIntegralDeviationArea(const IrregularSpline2D3D& spline, const std::vector<float>& data,
122 int32_t axis, int32_t knotFirst, int32_t knotLast) const;
123
125
126 int32_t mMaxNKnots[2] = {5, 5};
127
128 std::list<KnotData> mKnots[2];
129
130 IrregularSpline2D3D mRaster;
131 std::vector<float> mRasterData;
132
133 IrregularSpline2D3D mSpline;
134 std::vector<float> mSplineData;
135
136 IrregularSpline2D3D mActionSpline;
137 std::vector<float> mActionSplineData;
138
139 std::vector<float> mTemp[2];
140
141 float mMaxDeviation = 0.1;
142};
143
144} // namespace gpu
145} // namespace o2
146
147#endif
Definition of IrregularSpline2D3D class.
void setMaximalDeviation(float maxDeviation)
set maximal tolerated deviation between the spline and the input function
std::unique_ptr< float[]> calibrateSpline(IrregularSpline2D3D &spline_uv, std::function< void(float, float, float &, float &, float &)> F)
void startCalibration(std::function< void(float, float, float &, float &, float &)> F)
void setMaxNKnots(int32_t nKnotsU, int32_t nKnotsV)
set maximal size of the spline grid
IrregularSpline2D3DCalibrator()
_____________ Constructors / destructors __________________________
const IrregularSpline2D3D & getRaster() const
void setRasterSize(int32_t nKnotsU, int32_t nKnotsV)
set size of the raster grid
~IrregularSpline2D3DCalibrator()=default
Destructor.
const IrregularSpline2D3D & getSpline() const
GLboolean * data
Definition glcorearb.h:298
GLboolean GLboolean GLboolean GLboolean a
Definition glcorearb.h:1233
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
define the action to be done by the writer