CbmRoot
Loading...
Searching...
No Matches
KfTrackParam.h
Go to the documentation of this file.
1/* Copyright (C) 2007-2023 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Igor Kulakov [committer], Maksym Zyzak, Sergei Zharko */
4
5
10
11#ifndef KF_CORE_KfTrackParam_h
12#define KF_CORE_KfTrackParam_h 1
13
14#include "KfDefs.h"
15#include "KfMath.h"
16#include "KfSimd.h"
17#include "KfUtils.h"
18
19#include <boost/serialization/access.hpp>
20
21#include <string>
22
23#if !defined(NO_ROOT) && !XPU_IS_HIP_CUDA
24#include <Rtypes.h> // for ClassDef
25#endif
26
27namespace cbm::algo::kf
28{
37 template<typename T>
38 class alignas(VcMemAlign) TrackParamBase {
39
40 public:
41 friend class boost::serialization::access;
42
43 static constexpr int kNtrackParam{7};
44 static constexpr int kNcovParam{(kNtrackParam) * (kNtrackParam + 1) / 2};
45
46 typedef std::array<T, kNcovParam> CovMatrix_t;
47
48 TrackParamBase() = default;
49
50 template<typename T1>
52 {
53 Set(tr);
54 }
55
59 template<typename T1>
60 void Set(const TrackParamBase<T1>& Tb)
61 {
63 }
64
67 void Set(const TrackParamBase<fvec>& Tb, const int ib) { CopyBase<fvec, true, false>(0, Tb, ib); }
68
71 template<typename T1>
72 void SetOneEntry(const int ia, const TrackParamBase<T1>& Tb)
73 {
75 }
76
79 void SetOneEntry(const int ia, const TrackParamBase<fvec>& Tb, const int ib)
80 {
82 }
83
87
89 T Z() const { return fZ; }
90
92 T X() const { return fX; }
93
95 T Y() const { return fY; }
96
98 T Tx() const { return fTx; }
99
101 T Ty() const { return fTy; }
102
104 T Qp() const { return fQp; }
105
107 T Time() const { return fT; }
108
110 T Vi() const { return fVi; }
111
113 T ChiSq() const { return fChiSq; }
114
116 T Ndf() const { return fNdf; }
117
119 T ChiSqTime() const { return fChiSqTime; }
120
122 T NdfTime() const { return fNdfTime; }
123
128 T C(int i, int j) const
129 {
130 int ind = (j <= i) ? i * (1 + i) / 2 + j : j * (1 + j) / 2 + i;
131 return fCovMatrix[ind];
132 }
133
138 template<int i, int j>
139 T C() const
140 {
141 constexpr int ind = (j <= i) ? i * (1 + i) / 2 + j : j * (1 + j) / 2 + i;
142 return fCovMatrix[ind];
143 }
144
148 T C00() const { return C<0, 0>(); }
149 T C01() const { return C<0, 1>(); }
150 T C02() const { return C<0, 2>(); }
151 T C03() const { return C<0, 3>(); }
152 T C04() const { return C<0, 4>(); }
153 T C05() const { return C<0, 5>(); }
154 T C06() const { return C<0, 6>(); }
155
156 T C10() const { return C<1, 0>(); }
157 T C11() const { return C<1, 1>(); }
158 T C12() const { return C<1, 2>(); }
159 T C13() const { return C<1, 3>(); }
160 T C14() const { return C<1, 4>(); }
161 T C15() const { return C<1, 5>(); }
162 T C16() const { return C<1, 6>(); }
163
164 T C20() const { return C<2, 0>(); }
165 T C21() const { return C<2, 1>(); }
166 T C22() const { return C<2, 2>(); }
167 T C23() const { return C<2, 3>(); }
168 T C24() const { return C<2, 4>(); }
169 T C25() const { return C<2, 5>(); }
170 T C26() const { return C<2, 6>(); }
171
172 T C30() const { return C<3, 0>(); }
173 T C31() const { return C<3, 1>(); }
174 T C32() const { return C<3, 2>(); }
175 T C33() const { return C<3, 3>(); }
176 T C34() const { return C<3, 4>(); }
177 T C35() const { return C<3, 5>(); }
178 T C36() const { return C<3, 6>(); }
179
180 T C40() const { return C<4, 0>(); }
181 T C41() const { return C<4, 1>(); }
182 T C42() const { return C<4, 2>(); }
183 T C43() const { return C<4, 3>(); }
184 T C44() const { return C<4, 4>(); }
185 T C45() const { return C<4, 5>(); }
186 T C46() const { return C<4, 6>(); }
187
188 T C50() const { return C<5, 0>(); }
189 T C51() const { return C<5, 1>(); }
190 T C52() const { return C<5, 2>(); }
191 T C53() const { return C<5, 3>(); }
192 T C54() const { return C<5, 4>(); }
193 T C55() const { return C<5, 5>(); }
194 T C56() const { return C<5, 6>(); }
195
196 T C60() const { return C<6, 0>(); }
197 T C61() const { return C<6, 1>(); }
198 T C62() const { return C<6, 2>(); }
199 T C63() const { return C<6, 3>(); }
200 T C64() const { return C<6, 4>(); }
201 T C65() const { return C<6, 5>(); }
202 T C66() const { return C<6, 6>(); }
203
207
209 T GetZ() const { return fZ; }
210
212 T GetX() const { return fX; }
213
215 T GetXError() const { return sqrt(C00()); }
216
218 T GetY() const { return fY; }
219
221 T GetYError() const { return sqrt(C11()); }
222
224 T GetTx() const { return fTx; }
225
227 T GetTxError() const { return sqrt(C22()); }
228
230 T GetTy() const { return fTy; }
231
233 T GetTyError() const { return sqrt(C33()); }
234
236 T GetQp() const { return fQp; }
237
239 T GetQpError() const { return sqrt(C44()); }
240
242 T GetTime() const { return fT; }
243
245 T GetTimeError() const { return sqrt(C55()); }
246
248 T GetVi() const { return fVi; }
249
251 T GetViError() const { return sqrt(C66()); }
252
254 const CovMatrix_t& GetCovMatrix() const { return fCovMatrix; }
255
260 T GetCovariance(int i, int j) const { return C(i, j); }
261
263 T GetChiSq() const { return fChiSq; }
264
266 T GetNdf() const { return fNdf; }
267
269 T GetChiSqTime() const { return fChiSqTime; }
270
272 T GetNdfTime() const { return fNdfTime; }
273
275 T GetCharge() const { return utils::iif(GetQp() > T(0.), T(1.), T(-1.)); }
276
278 T GetPhi() const { return atan2(GetTy(), GetTx()); }
279
281 T GetPhiError() const;
282
284 T GetTheta() const { return atan(sqrt(GetTx() * GetTx() + GetTy() * GetTy())); }
285
287 T GetThetaError() const;
288
290 T GetP() const { return utils::iif(utils::fabs(GetQp()) > T(1.e-4), T(1.) / utils::fabs(GetQp()), T(1.e4)); }
291
293 T GetPz() const { return GetP() / sqrt(T(1.) + GetTx() * GetTx() + GetTy() * GetTy()); }
294
296 T GetPx() const { return GetPz() * GetTx(); }
297
299 T GetPy() const { return GetPz() * GetTy(); }
300
302 T GetPt() const
303 {
304 T t2 = GetTx() * GetTx() + GetTy() * GetTy();
305 return GetP() * sqrt(t2 / (T(1.) + t2));
306 }
307
311
313 void SetZ(T v) { fZ = v; }
314
316 void SetX(T v) { fX = v; }
317
319 void SetY(T v) { fY = v; }
320
322 void SetTx(T v) { fTx = v; }
323
325 void SetTy(T v) { fTy = v; }
326
328 void SetQp(T v) { fQp = v; }
329
331 void SetTime(T v) { fT = v; }
332
334 void SetVi(T v) { fVi = v; }
335
337 void SetChiSq(T v) { fChiSq = v; }
338
340 void SetNdf(T v) { fNdf = v; }
341
343 void SetChiSqTime(T v) { fChiSqTime = v; }
344
346 void SetNdfTime(T v) { fNdfTime = v; }
347
349 void SetCovMatrix(const CovMatrix_t& val) { fCovMatrix = val; }
350
355 void SetCovariance(int i, int j, T val)
356 {
357 int ind = (j <= i) ? i * (1 + i) / 2 + j : j * (1 + j) / 2 + i;
358 fCovMatrix[ind] = val;
359 }
360
365 template<int i, int j>
366 void SetCovariance(T val)
367 {
368 constexpr int ind = (j <= i) ? i * (1 + i) / 2 + j : j * (1 + j) / 2 + i;
369 fCovMatrix[ind] = val;
370 }
371
374 void SetC00(T val) { SetCovariance<0, 0>(val); }
375 void SetC10(T val) { SetCovariance<1, 0>(val); }
376 void SetC11(T val) { SetCovariance<1, 1>(val); }
377 void SetC20(T val) { SetCovariance<2, 0>(val); }
378 void SetC21(T val) { SetCovariance<2, 1>(val); }
379 void SetC22(T val) { SetCovariance<2, 2>(val); }
380 void SetC30(T val) { SetCovariance<3, 0>(val); }
381 void SetC31(T val) { SetCovariance<3, 1>(val); }
382 void SetC32(T val) { SetCovariance<3, 2>(val); }
383 void SetC33(T val) { SetCovariance<3, 3>(val); }
384 void SetC40(T val) { SetCovariance<4, 0>(val); }
385 void SetC41(T val) { SetCovariance<4, 1>(val); }
386 void SetC42(T val) { SetCovariance<4, 2>(val); }
387 void SetC43(T val) { SetCovariance<4, 3>(val); }
388 void SetC44(T val) { SetCovariance<4, 4>(val); }
389 void SetC50(T val) { SetCovariance<5, 0>(val); }
390 void SetC51(T val) { SetCovariance<5, 1>(val); }
391 void SetC52(T val) { SetCovariance<5, 2>(val); }
392 void SetC53(T val) { SetCovariance<5, 3>(val); }
393 void SetC54(T val) { SetCovariance<5, 4>(val); }
394 void SetC55(T val) { SetCovariance<5, 5>(val); }
395 void SetC60(T val) { SetCovariance<6, 0>(val); }
396 void SetC61(T val) { SetCovariance<6, 1>(val); }
397 void SetC62(T val) { SetCovariance<6, 2>(val); }
398 void SetC63(T val) { SetCovariance<6, 3>(val); }
399 void SetC64(T val) { SetCovariance<6, 4>(val); }
400 void SetC65(T val) { SetCovariance<6, 5>(val); }
401 void SetC66(T val) { SetCovariance<6, 6>(val); }
402
407
409 T& Z() { return fZ; }
410
412 T& X() { return fX; }
413
415 T& Y() { return fY; }
416
418 T& Tx() { return fTx; }
419
421 T& Ty() { return fTy; }
422
424 T& Qp() { return fQp; }
425
427 T& Time() { return fT; }
428
430 T& Vi() { return fVi; }
431
434
436 T& ChiSq() { return fChiSq; }
437
439 T& Ndf() { return fNdf; }
440
442 T& ChiSqTime() { return fChiSqTime; }
443
445 T& NdfTime() { return fNdfTime; }
446
451 T& C(int i, int j) { return fCovMatrix[math::SymIndex(i, j)]; }
452
457 template<int i, int j>
458 T& C()
459 {
460 return fCovMatrix[math::SymIndex(i, j)];
461 }
462
465 T& C00() { return C<0, 0>(); }
466 T& C01() { return C<0, 1>(); }
467 T& C02() { return C<0, 2>(); }
468 T& C03() { return C<0, 3>(); }
469 T& C04() { return C<0, 4>(); }
470 T& C05() { return C<0, 5>(); }
471 T& C06() { return C<0, 6>(); }
472
473 T& C10() { return C<1, 0>(); }
474 T& C11() { return C<1, 1>(); }
475 T& C12() { return C<1, 2>(); }
476 T& C13() { return C<1, 3>(); }
477 T& C14() { return C<1, 4>(); }
478 T& C15() { return C<1, 5>(); }
479 T& C16() { return C<1, 6>(); }
480
481 T& C20() { return C<2, 0>(); }
482 T& C21() { return C<2, 1>(); }
483 T& C22() { return C<2, 2>(); }
484 T& C23() { return C<2, 3>(); }
485 T& C24() { return C<2, 4>(); }
486 T& C25() { return C<2, 5>(); }
487 T& C26() { return C<2, 6>(); }
488
489 T& C30() { return C<3, 0>(); }
490 T& C31() { return C<3, 1>(); }
491 T& C32() { return C<3, 2>(); }
492 T& C33() { return C<3, 3>(); }
493 T& C34() { return C<3, 4>(); }
494 T& C35() { return C<3, 5>(); }
495 T& C36() { return C<3, 6>(); }
496
497 T& C40() { return C<4, 0>(); }
498 T& C41() { return C<4, 1>(); }
499 T& C42() { return C<4, 2>(); }
500 T& C43() { return C<4, 3>(); }
501 T& C44() { return C<4, 4>(); }
502 T& C45() { return C<4, 5>(); }
503 T& C46() { return C<4, 6>(); }
504
505 T& C50() { return C<5, 0>(); }
506 T& C51() { return C<5, 1>(); }
507 T& C52() { return C<5, 2>(); }
508 T& C53() { return C<5, 3>(); }
509 T& C54() { return C<5, 4>(); }
510 T& C55() { return C<5, 5>(); }
511 T& C56() { return C<5, 6>(); }
512
513 T& C60() { return C<6, 0>(); }
514 T& C61() { return C<6, 1>(); }
515 T& C62() { return C<6, 2>(); }
516 T& C63() { return C<6, 3>(); }
517 T& C64() { return C<6, 4>(); }
518 T& C65() { return C<6, 5>(); }
519 T& C66() { return C<6, 6>(); }
520
521
524
533 void ResetErrors(T c00, T c11, T c22, T c33, T c44, T c55, T c66);
534
537 std::string ToString(int i = -1) const;
538
541 std::string ToStringCorrelations(int i = -1) const;
542
544 bool IsFinite(bool printWhenWrong) const;
545
547 bool IsEntryConsistent(bool printWhenWrong, int i) const;
548
550 bool IsConsistent(bool printWhenWrong, int nFilled) const;
551
554
555
559 template<class Archive>
560 void serialize(Archive& ar, const unsigned int /*version*/)
561 {
562 ar& fX;
563 ar& fY;
564 ar& fTx;
565 ar& fTy;
566 ar& fQp;
567 ar& fZ;
568 ar& fT;
569 ar& fVi;
570 ar& fCovMatrix;
571 ar& fChiSq;
572 ar& fNdf;
573 ar& fChiSqTime;
574 ar& fNdfTime;
575 }
576
577 private:
585 template<typename T1, bool TDoAllA, bool TDoAllB>
586 void CopyBase(const int ia, const TrackParamBase<T1>& Tb, const int ib);
587
588
589 private:
592
593 // Initializing parameters with NANs spoils the track fit where
594 // the masked-out SIMD entries are suppressed by a multication by 0.
595 // Therefore, we initialize the data members here with finite numbers.
596 // For the numerical safety, with some reasonable numbers.
597
598 // clang-format off
600 0., 1.,
601 0., 0., 1.,
602 0., 0., 0., 1.,
603 0., 0., 0., 0., 1.,
604 0., 0., 0., 0., 0., 1.,
605 0., 0., 0., 0., 0., 0., 1.};
606 // clang-format on
607
608 T fX{0.};
609 T fY{0.};
610 T fZ{0.};
611 T fTx{0.};
612 T fTy{0.};
613 T fQp{0.};
614 T fT{0.};
615 T fVi{0.};
616
617 T fChiSq{0.};
618 T fNdf{0.};
620 T fNdfTime{0.};
621
622#if !defined(NO_ROOT) && !XPU_IS_HIP_CUDA
624#endif
625
626 }; // class TrackParamBase
627
628
633 template<typename T>
635 public:
637
640 T GetEta() const { return -log(tan(this->GetTheta() * T(0.5))); }
641
642#if !defined(NO_ROOT) && !XPU_IS_HIP_CUDA
644#endif
645 };
646
647
648 // ---------------------------------------------------------------------------------------------------------------------
650
654 template<typename T>
656 public:
658
659#if !defined(NO_ROOT) && !XPU_IS_HIP_CUDA
661#endif
662 };
663
664 template<>
665 class TrackParam<fvec> : public TrackParamBase<fvec> {
666 public:
668
669#if !defined(NO_ROOT) && !XPU_IS_HIP_CUDA
670 ClassDefNV(TrackParam<fvec>, 1);
671#endif
672 };
673
674
678
679
682
683
686 template<typename T>
688 {
689 // phi = atan( tx / ty ); }
690
691 T phiDdenom = GetTx() * GetTx() + GetTy() * GetTy();
692 T phiDTx = -GetTy() / phiDdenom; // partial derivative of phi over Tx
693 T phiDTy = +GetTx() / phiDdenom; // partial derivative of phi over Ty
694
695 T varTx = C22(); // variance of Tx
696 T varTy = C33(); // variance of Ty
697 T covTxTy = C32(); // covariance of Tx and Ty
698
699 T varPhi = phiDTx * phiDTx * varTx + phiDTy * phiDTy * varTy + T(2.) * phiDTx * phiDTy * covTxTy;
700 return sqrt(varPhi);
701 }
702
703
706 template<typename T>
708 {
709 // theta = atan(sqrt( tx * tx + ty * ty) )
710
711 T sumSqSlopes = GetTx() * GetTx() + GetTy() * GetTy();
712 T thetaDdenom = sqrt(sumSqSlopes) * (T(1.) + sumSqSlopes);
713 T thetaDTx = GetTx() / thetaDdenom;
714 T thetaDTy = GetTy() / thetaDdenom;
715
716 T varTx = C22(); // variance of Tx
717 T varTy = C33(); // variance of Ty
718 T covTxTy = C32(); // covariance of Tx and Ty
719
720 T varTheta = thetaDTx * thetaDTx * varTx + thetaDTy * thetaDTy * varTy + T(2.) * thetaDTx * thetaDTy * covTxTy;
721
722 return sqrt(varTheta);
723 }
724
725
726 // ---------------------------------------------------------------------------------------------------------------------
727 //
728 template<typename TdataA>
729 template<typename TdataB, bool TDoAllA, bool TDoAllB>
730 inline void TrackParamBase<TdataA>::CopyBase(const int ia, const TrackParamBase<TdataB>& Tb, const int ib)
731 {
732 auto copy = [&](TdataA& a, const TdataB& b) {
734 };
735
736 copy(fX, Tb.GetX());
737 copy(fY, Tb.GetY());
738 copy(fTx, Tb.GetTx());
739 copy(fTy, Tb.GetTy());
740 copy(fQp, Tb.GetQp());
741 copy(fZ, Tb.GetZ());
742 copy(fT, Tb.GetTime());
743 copy(fVi, Tb.GetVi());
744
745 for (int i = 0; i < kNcovParam; ++i) {
746 copy(fCovMatrix[i], Tb.GetCovMatrix()[i]);
747 }
748
749 copy(fChiSq, Tb.GetChiSq());
750 copy(fNdf, Tb.GetNdf());
751 copy(fChiSqTime, Tb.GetChiSqTime());
752 copy(fNdfTime, Tb.GetNdfTime());
753
754 } // CopyBase
755
756
757 // ---------------------------------------------------------------------------------------------------------------------
758 //
759 template<typename T>
760 inline void TrackParamBase<T>::ResetErrors(T c00, T c11, T c22, T c33, T c44, T c55, T c66)
761 {
762 fCovMatrix.fill(0.);
763
764 SetC00(c00);
765 SetC11(c11);
766 SetC22(c22);
767 SetC33(c33);
768 SetC44(c44);
769 SetC55(c55);
770 SetC66(c66);
771
772 SetChiSq(0.);
773 SetNdf(-5.);
774 SetChiSqTime(0.);
775 SetNdfTime(-2.);
776 }
777
778 // ---------------------------------------------------------------------------------------------------------------------
779 //
780 template<typename T>
782 {
783 // initialise the velocity range with respect to the minimal momentum minP {GeV/c}
784 using defs::ProtonMass;
786 fscal maxVi = sqrt(1. + (ProtonMass<double> / minP) * (ProtonMass<double> / minP)) * SpeedOfLightInv<double>;
787 fscal minVi = SpeedOfLightInv<fscal>;
788 fscal vmean = minVi + 0.4 * (maxVi - minVi);
789 fscal dvi = (maxVi - vmean) / 3.;
790 SetVi(vmean);
791 SetC66(dvi * dvi);
792 }
793
794} // namespace cbm::algo::kf
795
796#endif // KF_CORE_KfTrackParam_h
std::string ToString(CbmCutId id)
Convert CbmCutId to a string representation.
Definition CbmCutId.cxx:7
Common constant definitions for the Kalman Filter library.
Collection of generic mathematical methods.
friend fvec sqrt(const fvec &a)
fscal v[fmask::Size]
Definition KfSimdPseudo.h:4
friend fvec log(const fvec &a)
Implementation selection for the SIMD utilities (VS or pseudo)
Scalar version of TrackParamBase.
T GetEta() const
Gets pseudo-rapidity.
ClassDefNV(TrackParamBaseScalar, 1)
It is a technical base class of kf::TrackParam.
T GetPx() const
Gets x-component of the momentum [GeV/ec].
T C00() const
Individual getters for covariance matrix elements.
void SetOneEntry(const int ia, const TrackParamBase< fvec > &Tb, const int ib)
void SetChiSqTime(T v)
Sets Chi-square of time measurements.
T Ndf() const
Gets NDF of track fit model.
T Vi() const
Gets inverse velocity [ns/cm].
T fChiSq
chi^2 of track fit, spatial measurements
T GetPhiError() const
Gets azimuthal angle error [rad].
T GetTxError() const
Gets error of slope along x-axis.
T GetVi() const
Gets inverse velocity [ns/cm] in downstream direction.
void SetCovariance(int i, int j, T val)
Get covariance matrix element.
void SetTx(T v)
Sets slope along x-axis.
T & Ndf()
Reference to NDF of track fit model.
T fQp
charge over momentum [ec/GeV]
T GetXError() const
Gets x position error [cm].
T GetPy() const
Gets y-component of the momentum [GeV/ec].
void Set(const TrackParamBase< fvec > &Tb, const int ib)
T NdfTime() const
Gets NDF of time measurements.
T GetYError() const
Gets y position error [cm].
const CovMatrix_t & GetCovMatrix() const
Gets covariance matrix.
T GetTy() const
Gets slope along y-axis.
T C() const
Get covariance matrix element when indices are known at compile time.
T GetTimeError() const
Gets time error [ns].
T & Tx()
Reference to slope along x-axis.
T GetCharge() const
Gets charge.
void SetCovMatrix(const CovMatrix_t &val)
Sets covariance matrix.
void SetZ(T v)
Sets z position [cm].
T GetThetaError() const
Gets polar angle error [rad].
T & Time()
Reference to time [ns].
static constexpr int kNcovParam
N of covariance matrix parameters.
T GetPz() const
Gets z-component of the momentum [GeV/ec].
T GetZ() const
Gets z position [cm].
T & C(int i, int j)
Get a reference to the covariance matrix element.
T GetP() const
Gets momentum [GeV/ec]. For the straight tracks returns 1.e4 [GeV/ec].
void ResetErrors(T c00, T c11, T c22, T c33, T c44, T c55, T c66)
Resets variances of track parameters and chi2, ndf values.
T ChiSq() const
Gets Chi-square of track fit model.
static constexpr int kNtrackParam
N of variable track parameters: {x, y, tx, ty, q/p, t, vi}.
T & Qp()
Reference to charge over momentum [ec/GeV].
T fChiSqTime
chi^2 of track fit, time measurements
T GetPhi() const
Gets azimuthal angle [rad].
bool IsConsistent(bool printWhenWrong, int nFilled) const
T Tx() const
Gets slope along x-axis.
T GetTime() const
Gets time [ns].
void SetC00(T val)
Individual setters for covariance matrix elements.
std::string ToStringCorrelations(int i=-1) const
T GetTyError() const
Gets error of slope along y-axis.
void SetY(T v)
Sets y position [cm].
void CopyBase(const int ia, const TrackParamBase< T1 > &Tb, const int ib)
Copies all/one entries from the other class.
void SetChiSq(T v)
Sets Chi-square of track fit model.
T X() const
Gets x position [cm].
T & Z()
Reference to z position [cm].
T GetTheta() const
Gets polar angle [rad].
void serialize(Archive &ar, const unsigned int)
void SetVi(T v)
Sets inverse velocity [ns/cm].
T ChiSqTime() const
Gets Chi-square of time measurements.
T GetTx() const
Gets slope along x-axis.
T & ChiSq()
Reference to Chi-square of track fit model.
T & Ty()
Reference to slope along y-axis.
T & NdfTime()
Reference to NDF of time measurements.
T & C()
Get a reference to the covariance matrix element when indices are known at compile time.
std::array< T, kNcovParam > CovMatrix_t
covariance matrix type
T GetViError() const
Gets inverse velocity error [ns/cm].
void SetNdf(T v)
Sets NDF of track fit model.
CovMatrix_t fCovMatrix
covariance matrix
T & Y()
Reference to y position [cm].
T GetNdfTime() const
Gets NDF of time measurements.
T GetQp() const
Gets charge over momentum [ec/GeV].
T Y() const
Gets y position [cm].
void SetOneEntry(const int ia, const TrackParamBase< T1 > &Tb)
T GetChiSqTime() const
Gets Chi-square of time measurements.
T Qp() const
Gets charge over momentum [ec/GeV].
T Z() const
Gets z position [cm].
void InitVelocityRange(fscal minP)
Initializes inverse velocity range.
T GetPt() const
Gets transverse momentum.
T GetNdf() const
Gets NDF of track fit model.
T GetQpError() const
Gets error of charge over momentum [ec/GeV].
T Time() const
Gets time [ns].
T GetY() const
Gets y position [cm].
T & Vi()
Reference to inverse velocity [ns/cm].
T C(int i, int j) const
Get covariance matrix element.
void SetX(T v)
Sets x position [cm].
void SetNdfTime(T v)
Sets NDF of time measurements.
void SetTy(T v)
Sets slope along y-axis.
ClassDefNV(TrackParamBase, 1)
void SetCovariance(T val)
Get covariance matrix element when indices are known at compile time.
bool IsFinite(bool printWhenWrong) const
T & ChiSqTime()
Reference to Chi-square of time measurements.
CovMatrix_t & CovMatrix()
Reference to covariance matrix.
T fNdfTime
NDF of track fit, time measurements.
T fVi
inverse velocity in downstream direction [ns/cm]
T fNdf
NDF of track fit, spatial measurements.
T GetCovariance(int i, int j) const
Get covariance matrix element.
void Set(const TrackParamBase< T1 > &Tb)
TrackParamBase(const TrackParamBase< T1 > &tr)
T GetChiSq() const
Gets Chi-square of track fit model.
T & C00()
Individual references to covariance matrix elements.
T Ty() const
Gets slope along y-axis.
void SetQp(T v)
Sets charge over momentum [ec/GeV].
T & X()
Reference to x position [cm].
bool IsEntryConsistent(bool printWhenWrong, int i) const
void SetTime(T v)
Sets time [ns].
T GetX() const
Gets x position [cm].
TrackParam classes of different types.
ClassDefNV(TrackParam, 1)
static void CopyEntries(TdataA &a, int ia, const TdataB &b, int ib)
Definition KfUtils.h:181
constexpr auto SpeedOfLightInv
Inverse speed of light [ns/cm].
Definition KfDefs.h:210
constexpr auto ProtonMass
Proton mass [GeV/c2] (PDG 11.08.2022)
Definition KfDefs.h:204
constexpr int SymIndex(int i, int j)
Get matrix element for a symmetrix matrix stored in a low-triangular array.
Definition KfMath.h:21
fvec iif(const fmask &m, const fvec &t, const fvec &f)
Definition KfUtils.h:29
fvec fabs(const fvec &v)
Definition KfUtils.h:30
TrackParam< double > TrackParamD
TrackParam< fvec > TrackParamV
TrackParam< fscal > TrackParamS