17#ifndef INCLUDE_RECONSTRUCTIONDATAFORMATS_TRACKPARAMETRIZATIONWITHERROR_H_
18#define INCLUDE_RECONSTRUCTIONDATAFORMATS_TRACKPARAMETRIZATIONWITHERROR_H_
28template <
typename value_T =
float>
37#ifndef GPUCA_GPUCODE_DEVICE
38 static_assert(std::is_floating_point_v<value_t>);
83 GPUd()
void printHexadecimal();
84#ifndef GPUCA_ALIGPUCODE
101 template <typename T>
103 template <typename T>
115 GPUd() value_T update(
const o2::dataformats::VertexBase& vtx, value_T maxChi2 = 1e15);
117 template <typename T>
124 GPUd()
void checkCorrelations();
149template <
typename value_T>
155template <
typename value_T>
156GPUdi() TrackParametrizationWithError<value_T>::TrackParametrizationWithError(value_t
x, value_t
alpha, const params_t& par,
157 const covMat_t& cov,
int charge, const
PID pid)
158 : TrackParametrization<value_T>{
168template <
typename value_T>
169GPUdi()
void TrackParametrizationWithError<value_T>::set(value_t
x, value_t
alpha, const params_t& par, const covMat_t& cov,
int charge, const
PID pid)
175template <
typename value_T>
176GPUdi()
void TrackParametrizationWithError<value_T>::set(value_t
x, value_t
alpha, const value_t* par, const value_t* cov,
int charge, const
PID pid)
178 TrackParametrization<value_T>::set(
x,
alpha, par,
charge, pid);
185template <
typename value_T>
186GPUdi() auto TrackParametrizationWithError<value_T>::getCov() const -> const covMat_t&
192template <
typename value_T>
193GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaY2() const -> value_t
199template <
typename value_T>
200GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaZY() const -> value_t
206template <
typename value_T>
207GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaZ2() const -> value_t
213template <
typename value_T>
214GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaSnpY() const -> value_t
220template <
typename value_T>
221GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaSnpZ() const -> value_t
227template <
typename value_T>
228GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaSnp2() const -> value_t
234template <
typename value_T>
235GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaTglY() const -> value_t
241template <
typename value_T>
242GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaTglZ() const -> value_t
248template <
typename value_T>
249GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaTglSnp() const -> value_t
255template <
typename value_T>
256GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaTgl2() const -> value_t
262template <
typename value_T>
263GPUdi() auto TrackParametrizationWithError<value_T>::getSigma1PtY() const -> value_t
269template <
typename value_T>
270GPUdi() auto TrackParametrizationWithError<value_T>::getSigma1PtZ() const -> value_t
276template <
typename value_T>
277GPUdi() auto TrackParametrizationWithError<value_T>::getSigma1PtSnp() const -> value_t
283template <
typename value_T>
284GPUdi() auto TrackParametrizationWithError<value_T>::getSigma1PtTgl() const -> value_t
290template <
typename value_T>
291GPUdi() auto TrackParametrizationWithError<value_T>::getSigma1Pt2() const -> value_t
297template <
typename value_T>
298GPUdi() auto TrackParametrizationWithError<value_T>::getCovarElem(
int i,
int j) const -> value_t
300 return mC[CovarMap[
i][
j]];
304template <
typename value_T>
305GPUdi() auto TrackParametrizationWithError<value_T>::getDiagError2(
int i) const -> value_t
307 return mC[DiagMap[
i]];
311template <
typename value_T>
313GPUdi() auto TrackParametrizationWithError<value_T>::getPredictedChi2(const BaseCluster<T>& p) const -> value_t
315 const dim2_t pyz = {value_T(p.getY()), value_T(p.getZ())};
316 const dim3_t cov = {value_T(p.getSigmaY2()), value_T(p.getSigmaYZ()), value_T(p.getSigmaZ2())};
317 return getPredictedChi2(pyz, cov);
321template <
typename value_T>
323GPUdi() auto TrackParametrizationWithError<value_T>::getPredictedChi2Quiet(const BaseCluster<T>& p) const -> value_t
325 const dim2_t pyz = {value_T(p.getY()), value_T(p.getZ())};
326 const dim3_t cov = {value_T(p.getSigmaY2()), value_T(p.getSigmaYZ()), value_T(p.getSigmaZ2())};
327 return getPredictedChi2Quiet(pyz, cov);
331template <
typename value_T>
332GPUdi() auto TrackParametrizationWithError<value_T>::getPredictedChi2(const dim2_t& p, const dim3_t& cov) const -> value_t
334 return getPredictedChi2(p.data(), cov.data());
338template <
typename value_T>
339GPUdi() auto TrackParametrizationWithError<value_T>::getPredictedChi2Quiet(const dim2_t& p, const dim3_t& cov) const -> value_t
341 return getPredictedChi2Quiet(p.data(), cov.data());
345template <
typename value_T>
346GPUdi() bool TrackParametrizationWithError<value_T>::update(const dim2_t& p, const dim3_t& cov)
348 return update(p.data(), cov.data());
352template <
typename value_T>
354GPUdi() bool TrackParametrizationWithError<value_T>::update(const BaseCluster<T>& p)
356 const dim2_t pyz = {value_T(p.getY()), value_T(p.getZ())};
357 const dim3_t cov = {value_T(p.getSigmaY2()), value_T(p.getSigmaYZ()), value_T(p.getSigmaZ2())};
358 return update(pyz, cov);
362template <
typename value_T>
363GPUdi()
void TrackParametrizationWithError<value_T>::setCov(value_t
v,
int i)
369template <
typename value_T>
370GPUdi()
void TrackParametrizationWithError<value_T>::setCov(value_t
v,
size_t i,
size_t j)
372 mC[CovarMap[
i][
j]] =
v;
375template <
typename value_T>
376GPUdi()
void TrackParametrizationWithError<value_T>::setCov(const covMat_t& cov)
382template <
typename value_T>
383GPUdi()
void TrackParametrizationWithError<value_T>::updateCov(value_t delta,
size_t i,
size_t j)
385 mC[CovarMap[
i][
j]] += delta;
389template <
typename value_T>
390GPUdi()
void TrackParametrizationWithError<value_T>::updateCov(value_t delta,
size_t i)
396template <
typename value_T>
397GPUdi()
void TrackParametrizationWithError<value_T>::updateCov(const covMat_t& delta)
405template <
typename value_T>
406GPUdi()
void TrackParametrizationWithError<value_T>::updateCov(const params_t delta2)
409 updateCov(delta2.data());
413template <
typename value_T>
414GPUdi()
void TrackParametrizationWithError<value_T>::updateCov(const value_t* delta2)
418 mC[DiagMap[
i]] += delta2[
i];
423template <
typename value_T>
424GPUdi()
void TrackParametrizationWithError<value_T>::updateCovCorr(const params_t delta2)
427 updateCovCorr(delta2.data());
431template <
typename value_T>
432GPUdi()
void TrackParametrizationWithError<value_T>::updateCovCorr(const value_t* delta2)
435#pragma GCC diagnostic push
436#pragma GCC diagnostic ignored "-Wuninitialized"
439 auto diagI = DiagMap[
i];
440 oldDiag[
i] = mC[diagI];
441 mC[diagI] += delta2[
i];
442 for (
int j = 0;
j <
i;
j++) {
443 mC[CovarMap[
i][
j]] *= gpu::CAMath::Sqrt(mC[diagI] * mC[DiagMap[
j]] / (oldDiag[
i] * oldDiag[
j]));
446#pragma GCC diagnostic pop
450template <
typename value_T>
451GPUdi()
void TrackParametrizationWithError<value_T>::updateCov(const params_t delta2,
bool preserveCorrelations)
454 updateCov(delta2.data(), preserveCorrelations);
458template <
typename value_T>
459GPUdi()
void TrackParametrizationWithError<value_T>::updateCov(const value_t* delta2,
bool preserveCorrelations)
462 if (preserveCorrelations) {
463 updateCovCorr(delta2);
value_t const params_t & par
GPUd() TrackParametrizationWithError(value_t x
const dim3_t const gpu::gpustd::array< value_t, kLabCovMatSize > int bool sectorAlpha
bool preserveCorrelations
value_t const params_t const covMat_t & cov
ClassDefNV(TrackParametrizationWithError, 2)
const dim3_t const gpu::gpustd::array< value_t, kLabCovMatSize > & cv
value_t const params_t const covMat_t int charge
GPUhd() TrackParametrizationWithError()
const MatrixDSym5 & covInv
gpu::gpustd::array< value_t, kCovMatSize > covMat_t
GPUdDefault() ~TrackParametrizationWithError()=default
const dim3_t const gpu::gpustd::array< value_t, kLabCovMatSize > int sign
std::string asString() const
value_t const params_t const covMat_t int const PID pid
std::string asStringHexadecimal()
GPUd() bool testRotate(value_t alpha) const
gpu::gpustd::array< value_t, kNParams > params_t
gpu::gpustd::array< value_t, 2 > dim2_t
gpu::gpustd::array< value_t, 3 > dim3_t
GLfloat GLfloat GLfloat alpha
GLboolean GLboolean GLboolean b
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
typename trackParam_t::dim3_t dim3_t
typename trackParam_t::dim2_t dim2_t
GPUhdi() uint16_t TrackParametrization< value_T >
GPUdi() TrackParametrization< value_T >
constexpr int kCovMatSize
constexpr int kLabCovMatSize
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...