Project
Loading...
Searching...
No Matches
TrackFwd.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
16
17#ifndef ALICEO2_BASE_TRACKFWD
18#define ALICEO2_BASE_TRACKFWD
19
20#include <Rtypes.h>
21#include <TMath.h>
22#include "Math/SMatrix.h"
23#include "MathUtils/Utils.h"
26
27namespace o2::track
28{
29
33
34template <typename value_T>
35class TrackParametrization; // fwd declaration for conversion method
36
37template <typename value_T>
38class TrackParametrizationWithError; // fwd declaration for conversion method
39
41{ // Forward track parameterization, kinematics only.
42 public:
43 TrackParFwd() = default;
44 ~TrackParFwd() = default;
45
46 TrackParFwd(const TrackParFwd& tp) = default;
47 TrackParFwd& operator=(const TrackParFwd& tp) = default;
50
51 template <typename T>
53
55 Double_t getZ() const { return mZ; }
57 void setZ(Double_t z) { mZ = z; }
58 Double_t getX() const { return mParameters(0); }
59 void setX(Double_t x) { mParameters(0) = x; }
60
61 Double_t getY() const { return mParameters(1); }
62 void setY(Double_t y) { mParameters(1) = y; }
63
64 void setPhi(Double_t phi) { mParameters(2) = phi; }
65 Double_t getPhi() const { return mParameters(2); }
66
67 Double_t getSnp() const
68 {
69 return o2::math_utils::sin(mParameters(2));
70 }
71
72 Double_t getCsp2() const
73 {
74 auto snp = o2::math_utils::sin(mParameters(2));
75 Double_t csp;
76 csp = std::sqrt((1. - snp) * (1. + snp));
77 return csp * csp;
78 }
79
80 void setTanl(Double_t tanl) { mParameters(3) = tanl; }
81 Double_t getTanl() const { return mParameters(3); }
82
83 Double_t getTgl() const { return mParameters(3); } // for the sake of helixhelper
84
85 void setInvQPt(Double_t invqpt) { mParameters(4) = invqpt; }
86 Double_t getInvQPt() const { return mParameters(4); } // return Inverse charged pt
87 Double_t getPt() const { return TMath::Abs(1.f / mParameters(4)); }
88 Double_t getInvPt() const { return TMath::Abs(mParameters(4)); }
89 Double_t getPx() const { return TMath::Cos(getPhi()) * getPt(); } // return px
90 Double_t getPy() const { return TMath::Sin(getPhi()) * getPt(); } // return py
91 Double_t getPz() const { return getTanl() * getPt(); } // return pz
92 Double_t getP() const { return getPt() * TMath::Sqrt(1. + getTanl() * getTanl()); } // return total momentum
93 Double_t getInverseMomentum() const { return 1.f / getP(); }
94
95 Double_t getTheta() const { return TMath::PiOver2() - TMath::ATan(getTanl()); }
96 Double_t getEta() const { return -TMath::Log(TMath::Tan(getTheta() / 2)); } // return total momentum
97
98 Double_t getCurvature(double b) const
99 {
100 auto invqpt = getInvQPt();
101 return o2::constants::math::B2C * b * invqpt;
102 }
103
105 Double_t getCharge() const { return TMath::Sign(1., mParameters(4)); }
107 void setCharge(Double_t charge)
108 {
109 if (charge * mParameters(4) < 0.) {
110 mParameters(4) *= -1.;
111 }
112 }
113
115 const SMatrix5& getParameters() const { return mParameters; }
117 void setParameters(const SMatrix5& parameters) { mParameters = parameters; }
119 void addParameters(const SMatrix5& parameters) { mParameters += parameters; }
120
122 Double_t getTrackChi2() const { return mTrackChi2; }
124 void setTrackChi2(Double_t chi2) { mTrackChi2 = chi2; }
125
126 // Track parameter propagation
127 void propagateParamToZlinear(double zEnd);
128 void propagateParamToZquadratic(double zEnd, double zField);
129 void propagateParamToZhelix(double zEnd, double zField);
130 void getCircleParams(float bz, o2::math_utils::CircleXY<float>& c, float& sna, float& csa) const;
131
132 protected:
133 Double_t mZ = 0.;
134
142 Double_t mTrackChi2 = 0.;
143
145};
146
148{ // Forward track+error parameterization
149 public:
150 using TrackParFwd::TrackParFwd; // inherit base constructors
151
152 TrackParCovFwd() = default;
153 ~TrackParCovFwd() = default;
155 TrackParCovFwd(const Double_t z, const SMatrix5& parameters, const SMatrix55Sym& covariances, const Double_t chi2);
156
157 template <typename T>
159
160 const SMatrix55Sym& getCovariances() const { return mCovariances; }
161 void setCovariances(const SMatrix55Sym& covariances) { mCovariances = covariances; }
162 void deleteCovariances() { mCovariances = SMatrix55Sym(); }
163
164 Double_t getSigma2X() const { return mCovariances(0, 0); }
165 Double_t getSigma2Y() const { return mCovariances(1, 1); }
166 Double_t getSigmaXY() const { return mCovariances(0, 1); }
167 Double_t getSigma2Phi() const { return mCovariances(2, 2); }
168 Double_t getSigma2Tanl() const { return mCovariances(3, 3); }
169 Double_t getSigma2InvQPt() const { return mCovariances(4, 4); }
170
171 // Propagate parameters and covariances matrix
172 void propagateToZlinear(double zEnd);
173 void propagateToZquadratic(double zEnd, double zField);
174 void propagateToZhelix(double zEnd, double zField);
175 void propagateToZ(double zEnd, double zField); // Parameters: helix; errors: quadratic
176 void propagateToDCAhelix(double zField, const std::array<double, 3>& p, std::array<double, 3>& dca);
177
178 // Add Multiple Coulomb Scattering effects
179 void addMCSEffect(double x2X0);
180
181 // Kalman filter/fitting
182 bool update(const std::array<float, 2>& p, const std::array<float, 2>& cov);
183
184 // Propagate fwd track to vertex including MCS effects
185 bool propagateToVtxhelixWithMCS(double z, const std::array<float, 2>& p, const std::array<float, 2>& cov, double field, double x_over_X0);
186 bool propagateToVtxlinearWithMCS(double z, const std::array<float, 2>& p, const std::array<float, 2>& cov, double x_over_X0);
187
188 bool getCovXYZPxPyPzGlo(std::array<float, 21>& cv) const;
189
190 private:
197 SMatrix55Sym mCovariances{};
198 ClassDefNV(TrackParCovFwd, 1);
199};
200
201} // namespace o2::track
202
203#endif
General auxilliary methods.
int16_t charge
Definition RawEventData.h:5
Declarations of 2D primitives.
uint32_t c
Definition RawData.h:2
void setCovariances(const SMatrix55Sym &covariances)
Definition TrackFwd.h:161
void propagateToZquadratic(double zEnd, double zField)
Definition TrackFwd.cxx:110
void propagateToZ(double zEnd, double zField)
Definition TrackFwd.cxx:248
bool propagateToVtxhelixWithMCS(double z, const std::array< float, 2 > &p, const std::array< float, 2 > &cov, double field, double x_over_X0)
Definition TrackFwd.cxx:446
Double_t getSigma2Y() const
Definition TrackFwd.h:165
void propagateToZhelix(double zEnd, double zField)
Definition TrackFwd.cxx:191
bool getCovXYZPxPyPzGlo(std::array< float, 21 > &cv) const
Definition TrackFwd.cxx:462
bool update(const std::array< float, 2 > &p, const std::array< float, 2 > &cov)
Definition TrackFwd.cxx:303
TrackParCovFwd & operator=(const TrackParCovFwd &tpf)=default
const SMatrix55Sym & getCovariances() const
Definition TrackFwd.h:160
Double_t getSigma2InvQPt() const
Definition TrackFwd.h:169
Double_t getSigma2Phi() const
Definition TrackFwd.h:167
void addMCSEffect(double x2X0)
Definition TrackFwd.cxx:388
Double_t getSigmaXY() const
Definition TrackFwd.h:166
bool propagateToVtxlinearWithMCS(double z, const std::array< float, 2 > &p, const std::array< float, 2 > &cov, double x_over_X0)
Definition TrackFwd.cxx:454
void propagateToZlinear(double zEnd)
Definition TrackFwd.cxx:54
Double_t getSigma2Tanl() const
Definition TrackFwd.h:168
void toBarrelTrackParCov(TrackParametrizationWithError< T > &t) const
Definition TrackFwd.cxx:593
void propagateToDCAhelix(double zField, const std::array< double, 3 > &p, std::array< double, 3 > &dca)
Definition TrackFwd.cxx:511
Double_t getSigma2X() const
Definition TrackFwd.h:164
void propagateParamToZlinear(double zEnd)
Definition TrackFwd.cxx:34
void propagateParamToZquadratic(double zEnd, double zField)
Definition TrackFwd.cxx:84
Double_t getPx() const
Definition TrackFwd.h:89
void setCharge(Double_t charge)
set the charge (assumed forward motion)
Definition TrackFwd.h:107
void propagateParamToZhelix(double zEnd, double zField)
Definition TrackFwd.cxx:153
void setTanl(Double_t tanl)
Definition TrackFwd.h:80
void setInvQPt(Double_t invqpt)
Definition TrackFwd.h:85
Double_t getTanl() const
Definition TrackFwd.h:81
Double_t getInverseMomentum() const
Definition TrackFwd.h:93
Double_t getPt() const
Definition TrackFwd.h:87
SMatrix5 mParameters
Track parameters.
Definition TrackFwd.h:141
Double_t getTrackChi2() const
return the chi2 of the track when the associated cluster was attached
Definition TrackFwd.h:122
Double_t mTrackChi2
Chi2 of the track when the associated cluster was attached.
Definition TrackFwd.h:142
Double_t getTgl() const
Definition TrackFwd.h:83
Double_t getEta() const
Definition TrackFwd.h:96
Double_t getCsp2() const
Definition TrackFwd.h:72
Double_t getPhi() const
Definition TrackFwd.h:65
TrackParFwd & operator=(const TrackParFwd &tp)=default
Double_t getTheta() const
Definition TrackFwd.h:95
void setParameters(const SMatrix5 &parameters)
set track parameters
Definition TrackFwd.h:117
Double_t getZ() const
return Z coordinate (cm)
Definition TrackFwd.h:55
Double_t mZ
Z coordinate (cm)
Definition TrackFwd.h:133
void setPhi(Double_t phi)
Definition TrackFwd.h:64
void toBarrelTrackPar(TrackParametrization< T > &t) const
Definition TrackFwd.cxx:578
void setX(Double_t x)
Definition TrackFwd.h:59
ClassDefNV(TrackParFwd, 1)
Double_t getCurvature(double b) const
Definition TrackFwd.h:98
void addParameters(const SMatrix5 &parameters)
add track parameters
Definition TrackFwd.h:119
Double_t getY() const
Definition TrackFwd.h:61
Double_t getInvPt() const
Definition TrackFwd.h:88
const SMatrix5 & getParameters() const
return track parameters
Definition TrackFwd.h:115
Double_t getP() const
Definition TrackFwd.h:92
void getCircleParams(float bz, o2::math_utils::CircleXY< float > &c, float &sna, float &csa) const
Definition TrackFwd.cxx:429
Double_t getCharge() const
return the charge (assumed forward motion)
Definition TrackFwd.h:105
Double_t getX() const
Definition TrackFwd.h:58
TrackParFwd(const TrackParFwd &tp)=default
void setZ(Double_t z)
set Z coordinate (cm)
Definition TrackFwd.h:57
Double_t getSnp() const
Definition TrackFwd.h:67
void setTrackChi2(Double_t chi2)
set the chi2 of the track when the associated cluster was attached
Definition TrackFwd.h:124
Double_t getInvQPt() const
Definition TrackFwd.h:86
TrackParFwd(TrackParFwd &&)=delete
void setY(Double_t y)
Definition TrackFwd.h:62
Double_t getPz() const
Definition TrackFwd.h:91
Double_t getPy() const
Definition TrackFwd.h:90
TrackParFwd & operator=(TrackParFwd &&)=delete
GLint GLenum GLint x
Definition glcorearb.h:403
GLboolean GLboolean GLboolean b
Definition glcorearb.h:1233
GLint y
Definition glcorearb.h:270
GLdouble GLdouble GLdouble z
Definition glcorearb.h:843
constexpr float B2C
const value_T x
Definition TrackUtils.h:136
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > SMatrix55Sym
Definition TrackFwd.h:30