19#if !defined(GPUCA_STANDALONE)
25#if !defined(GPUCA_GPUCODE) && !defined(GPUCA_STANDALONE)
26#include "NDPiecewisePolynomials.inc"
29 for (uint32_t
i = 0;
i < FFits;
i++) {
31 mCalibPolsqMax[
i].
dumpToTree(nSamplingPoints, outName, treename.data(),
false);
34 for (uint32_t
i = 0;
i < FFits;
i++) {
36 mCalibPolsqTot[
i].
dumpToTree(nSamplingPoints, outName, treename.data(),
false);
46 for (uint32_t
i = 0;
i < FFits;
i++) {
51 for (uint32_t
i = 0;
i < FFits;
i++) {
56 for (int32_t
i = 0;
i < FFits; ++
i) {
57 mScalingFactorsqTot[
i] = obj.mScalingFactorsqTot[
i];
58 mScalingFactorsqMax[
i] = obj.mScalingFactorsqMax[
i];
73 for (uint32_t
i = 0;
i < FFits;
i++) {
84 for (uint32_t
i = 0;
i < FFits;
i++) {
89 for (uint32_t
i = 0;
i < FFits;
i++) {
98 for (uint32_t
i = 0;
i < FFits;
i++) {
102 for (uint32_t
i = 0;
i < FFits;
i++) {
109#if !defined(GPUCA_STANDALONE)
111void CalibdEdxTrackTopologyPol::construct()
116 size_t offsets1[FFits];
117 size_t offsets2[FFits];
121 offsets1[
index] = buffSize;
126 offsets2[
index] = buffSize;
132 for (uint32_t
i = 0;
i < FFits;
i++) {
135 for (uint32_t
i = 0;
i < FFits;
i++) {
142 for (int32_t
i = 0;
i < FFits; ++
i) {
143 const uint32_t
n[FDim]{6, 5, 5, 5, 5};
146 const float minqMax[FDim]{0, 0, 0, 0, -0.5f};
147 const float maxqMax[FDim]{250, 1.5f, 0.9f, 0.5f, 0.5f};
148 mCalibPolsqMax[
i].
init(minqMax, maxqMax,
n);
152 const float minqTot[FDim]{0, 0, 0, 2, 30};
153 const float maxqTot[FDim]{250, 1.5f, 0.9f, 5, 200};
154 mCalibPolsqTot[
i].
init(minqTot, maxqTot,
n);
165 for (
const auto& par : mCalibPolsqTot) {
166 cont.
mCalibPols.emplace_back(par.getContainer());
169 for (
const auto& par : mCalibPolsqMax) {
170 cont.
mCalibPols.emplace_back(par.getContainer());
173 for (
const auto par : mScalingFactorsqTot) {
177 for (
const auto par : mScalingFactorsqMax) {
181 outf.WriteObject(&cont,
name);
186 if (2 * FFits != container.
mCalibPols.size()) {
187 LOGP(warning,
"wrong number of polynomials stored! this {} container {}", 2 * FFits, container.
mCalibPols.size());
192 if (2 * FFits != nFacCont) {
193 LOGP(warning,
"wrong number of scaling factors stored! this {} container {}", 2 * FFits, nFacCont);
197 for (int32_t
i = 0;
i < FFits; ++
i) {
201 for (int32_t
i = 0;
i < FFits; ++
i) {
205 for (int32_t
i = 0;
i < FFits; ++
i) {
214 TFile inpf(fileName,
"READ");
216 inpf.GetObject(
name, polTmp);
221 LOGP(info,
"couldnt load object {} from input file",
name);
227 for (int32_t ireg = 0; ireg < FFits; ++ireg) {
229 mCalibPolsqTot[ireg].
loadFromFile(inpf, polnameqTot.data());
231 mCalibPolsqMax[ireg].
loadFromFile(inpf, polnameqMax.data());
238 const std::string typeName[2] = {
"qMax",
"qTot"};
239 const std::string polname = fmt::format(
"polynomial_{}_region{}", typeName[
charge], region).data();
void setFutureBufferAddress(char *futureFlatBufferPtr)
void destroy()
_______________ Utilities _______________________________________________
static size_t alignSize(size_t sizeBytes, size_t alignmentBytes)
_______________ Generic utilities _______________________________________________
static constexpr size_t getBufferAlignmentBytes()
Gives minimal alignment in bytes required for the flat buffer.
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 _____________...
void startConstruction()
_____________ Construction _________
void moveBufferTo(char *newBufferPtr)
void finishConstruction(int32_t flatBufferSize)
void cloneFromObject(const FlatObject &obj, char *newFlatBufferPtr)
size_t getFlatBufferSize() const
Gives size of the flat buffer.
const char * getFlatBufferPtr() const
Gives pointer to the flat buffer.
void setActualBufferAddress(char *actualFlatBufferPtr)
set location of external flat buffer
void cloneFromObject(const NDPiecewisePolynomials &obj, char *newFlatBufferPtr)
========== FlatObject functionality, see FlatObject class for description =================
void moveBufferTo(char *newBufferPtr)
void setDefault()
setting default polynomials which just returns 1
void dumpToTree(const uint32_t nSamplingPoints[], const char *outName="debug.root", const char *treeName="tree", const bool recreateFile=true) const
void init(const float min[], const float max[], const uint32_t n[])
void destroy()
destroy the object (release internal flat buffer)
void loadFromFile(TFile &inpf, const char *name)
void setFromContainer(const NDPiecewisePolynomialContainer &container)
void setFutureBufferAddress(char *futureFlatBufferPtr)
set future location of the flat buffer
calibration class for the track topology correction of the dE/dx using multvariate polynomials
void loadFromFile(const char *fileName, const char *name)
static std::string getPolyName(const int32_t region, const ChargeType charge)
void dumpToTree(const uint32_t nSamplingPoints[], const char *outName="track_topology_corr_debug.root") const
void setDefaultPolynomials()
setting a default topology correction which just returns 1
void setPolynomialsFromFile(TFile &inpf)
void setFutureBufferAddress(char *futureFlatBufferPtr)
set future location of the flat buffer
void writeToFile(TFile &outf, const char *name="CalibdEdxTrackTopologyPol") const
void moveBufferTo(char *newBufferPtr)
void setFromContainer(const CalibdEdxTrackTopologyPolContainer &container)
void setActualBufferAddress(char *actualFlatBufferPtr)
set location of external flat buffer
void cloneFromObject(const CalibdEdxTrackTopologyPol &obj, char *newFlatBufferPtr)
========== FlatObject functionality, see FlatObject class for description =================
void destroy()
destroy the object (release internal flat buffer)
GLuint const GLchar * name
Global TPC definitions and constants.
simple struct to enable writing the MultivariatePolynomialCT to file
std::vector< float > mScalingFactorsqMax
value which is used to scale the result of the polynomial for qMax (can be used for normalization)
std::vector< float > mScalingFactorsqTot
value which is used to scale the result of the polynomial for qTot (can be used for normalization)
std::vector< gpu::NDPiecewisePolynomialContainer > mCalibPols
parameters of the polynomial