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>);
41 using covMat_t = std::array<value_t, kCovMatSize>;
83 GPUd()
void printHexadecimal();
84#ifndef GPUCA_ALIGPUCODE
106 template <typename T>
108 template <typename T>
120 GPUd() value_T update(
const o2::dataformats::VertexBase& vtx, value_T maxChi2 = 1e15);
122 template <typename T>
129 GPUd()
void checkCorrelations();
154template <
typename value_T>
160template <
typename value_T>
161GPUdi() TrackParametrizationWithError<value_T>::TrackParametrizationWithError(value_t
x, value_t
alpha, const params_t& par,
162 const covMat_t& cov,
int charge, const
PID pid)
163 : TrackParametrization<value_T>{
173template <
typename value_T>
174GPUdi()
void TrackParametrizationWithError<value_T>::set(value_t
x, value_t
alpha, const params_t& par, const covMat_t& cov,
int charge, const
PID pid)
180template <
typename value_T>
181GPUdi()
void TrackParametrizationWithError<value_T>::set(value_t
x, value_t
alpha, const value_t* par, const value_t* cov,
int charge, const
PID pid)
183 TrackParametrization<value_T>::set(
x,
alpha, par,
charge, pid);
190template <
typename value_T>
191GPUdi() auto TrackParametrizationWithError<value_T>::getCov() const -> const covMat_t&
197template <
typename value_T>
198GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaY2() const -> value_t
204template <
typename value_T>
205GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaZY() const -> value_t
211template <
typename value_T>
212GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaZ2() const -> value_t
218template <
typename value_T>
219GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaSnpY() const -> value_t
225template <
typename value_T>
226GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaSnpZ() const -> value_t
232template <
typename value_T>
233GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaSnp2() const -> value_t
239template <
typename value_T>
240GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaTglY() const -> value_t
246template <
typename value_T>
247GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaTglZ() const -> value_t
253template <
typename value_T>
254GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaTglSnp() const -> value_t
260template <
typename value_T>
261GPUdi() auto TrackParametrizationWithError<value_T>::getSigmaTgl2() const -> value_t
267template <
typename value_T>
268GPUdi() auto TrackParametrizationWithError<value_T>::getSigma1PtY() const -> value_t
274template <
typename value_T>
275GPUdi() auto TrackParametrizationWithError<value_T>::getSigma1PtZ() const -> value_t
281template <
typename value_T>
282GPUdi() auto TrackParametrizationWithError<value_T>::getSigma1PtSnp() const -> value_t
288template <
typename value_T>
289GPUdi() auto TrackParametrizationWithError<value_T>::getSigma1PtTgl() const -> value_t
295template <
typename value_T>
296GPUdi() auto TrackParametrizationWithError<value_T>::getSigma1Pt2() const -> value_t
302template <
typename value_T>
303GPUdi() auto TrackParametrizationWithError<value_T>::getCovarElem(
int i,
int j) const -> value_t
305 return mC[CovarMap[
i][
j]];
309template <
typename value_T>
310GPUdi() auto TrackParametrizationWithError<value_T>::getDiagError2(
int i) const -> value_t
312 return mC[DiagMap[
i]];
316template <
typename value_T>
318GPUdi() auto TrackParametrizationWithError<value_T>::getPredictedChi2(const BaseCluster<T>& p) const -> value_t
320 const dim2_t pyz = {value_T(
p.getY()), value_T(
p.getZ())};
321 const dim3_t cov = {value_T(
p.getSigmaY2()), value_T(
p.getSigmaYZ()), value_T(
p.getSigmaZ2())};
322 return getPredictedChi2(pyz, cov);
326template <
typename value_T>
328GPUdi() auto TrackParametrizationWithError<value_T>::getPredictedChi2Quiet(const BaseCluster<T>& p) const -> value_t
330 const dim2_t pyz = {value_T(
p.getY()), value_T(
p.getZ())};
331 const dim3_t cov = {value_T(
p.getSigmaY2()), value_T(
p.getSigmaYZ()), value_T(
p.getSigmaZ2())};
332 return getPredictedChi2Quiet(pyz, cov);
336template <
typename value_T>
337GPUdi() auto TrackParametrizationWithError<value_T>::getPredictedChi2(const dim2_t& p, const dim3_t& cov) const -> value_t
339 return getPredictedChi2(
p.data(), cov.data());
343template <
typename value_T>
344GPUdi() auto TrackParametrizationWithError<value_T>::getPredictedChi2Quiet(const dim2_t& p, const dim3_t& cov) const -> value_t
346 return getPredictedChi2Quiet(
p.data(), cov.data());
350template <
typename value_T>
351GPUdi() bool TrackParametrizationWithError<value_T>::update(const dim2_t& p, const dim3_t& cov)
353 return update(
p.data(), cov.data());
357template <
typename value_T>
359GPUdi() bool TrackParametrizationWithError<value_T>::update(const BaseCluster<T>& p)
361 const dim2_t pyz = {value_T(
p.getY()), value_T(
p.getZ())};
362 const dim3_t cov = {value_T(
p.getSigmaY2()), value_T(
p.getSigmaYZ()), value_T(
p.getSigmaZ2())};
363 return update(pyz, cov);
367template <
typename value_T>
368GPUdi()
void TrackParametrizationWithError<value_T>::setCov(value_t
v,
int i)
374template <
typename value_T>
375GPUdi()
void TrackParametrizationWithError<value_T>::setCov(value_t
v,
size_t i,
size_t j)
377 mC[CovarMap[
i][
j]] =
v;
380template <
typename value_T>
381GPUdi()
void TrackParametrizationWithError<value_T>::setCov(const covMat_t& cov)
387template <
typename value_T>
388GPUdi()
void TrackParametrizationWithError<value_T>::updateCov(value_t delta,
size_t i,
size_t j)
390 mC[CovarMap[
i][
j]] += delta;
394template <
typename value_T>
395GPUdi()
void TrackParametrizationWithError<value_T>::updateCov(value_t delta,
size_t i)
401template <
typename value_T>
402GPUdi()
void TrackParametrizationWithError<value_T>::updateCov(const covMat_t& delta)
410template <
typename value_T>
411GPUdi()
void TrackParametrizationWithError<value_T>::updateCov(const params_t delta2)
414 updateCov(delta2.data());
418template <
typename value_T>
419GPUdi()
void TrackParametrizationWithError<value_T>::updateCov(const value_t* delta2)
423 mC[DiagMap[
i]] += delta2[
i];
428template <
typename value_T>
429GPUdi()
void TrackParametrizationWithError<value_T>::updateCovCorr(const params_t delta2)
432 updateCovCorr(delta2.data());
436template <
typename value_T>
437GPUdi()
void TrackParametrizationWithError<value_T>::updateCovCorr(const value_t* delta2)
440#pragma GCC diagnostic push
441#pragma GCC diagnostic ignored "-Wuninitialized"
444 auto diagI = DiagMap[
i];
445 oldDiag[
i] = mC[diagI];
446 mC[diagI] += delta2[
i];
447 for (
int j = 0;
j <
i;
j++) {
448 mC[CovarMap[
i][
j]] *= gpu::CAMath::Sqrt(mC[diagI] * mC[DiagMap[
j]] / (oldDiag[
i] * oldDiag[
j]));
451#pragma GCC diagnostic pop
455template <
typename value_T>
456GPUdi()
void TrackParametrizationWithError<value_T>::updateCov(const params_t delta2,
bool preserveCorrelations)
459 updateCov(delta2.data(), preserveCorrelations);
463template <
typename value_T>
464GPUdi()
void TrackParametrizationWithError<value_T>::updateCov(const value_t* delta2,
bool preserveCorrelations)
467 if (preserveCorrelations) {
468 updateCovCorr(delta2);
const dim3_t const std::array< value_t, kLabCovMatSize > int bool sectorAlpha
value_t const params_t & par
const dim3_t const std::array< value_t, kLabCovMatSize > & cv
GPUd() TrackParametrizationWithError(value_t x
const dim3_t const std::array< value_t, kLabCovMatSize > int sign
bool preserveCorrelations
value_t const params_t const covMat_t & cov
ClassDefNV(TrackParametrizationWithError, 2)
std::array< value_t, kCovMatSize > covMat_t
value_t const params_t const covMat_t int charge
GPUhd() TrackParametrizationWithError()
const MatrixDSym5 & covInv
GPUdDefault() ~TrackParametrizationWithError()=default
TrackParametrization< value_T > & linRef
std::string asString() const
std::string asStringHexadecimal()
value_t const params_t const covMat_t int const PID pid
TrackParametrization< value_T > value_t bz
GPUd() bool testRotate(value_t alpha) const
std::array< value_t, 2 > dim2_t
std::array< value_t, kNParams > params_t
std::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
typename trackParam_t::value_t value_t
Node par(int index)
Parameters.
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 ...
Defining DataPointCompositeObject explicitly as copiable.