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
35{ // Forward track parameterization, kinematics only.
36 public:
37 TrackParFwd() = default;
38 ~TrackParFwd() = default;
39
40 TrackParFwd(const TrackParFwd& tp) = default;
41 TrackParFwd& operator=(const TrackParFwd& tp) = default;
44
46 Double_t getZ() const { return mZ; }
48 void setZ(Double_t z) { mZ = z; }
49 Double_t getX() const { return mParameters(0); }
50 void setX(Double_t x) { mParameters(0) = x; }
51
52 Double_t getY() const { return mParameters(1); }
53 void setY(Double_t y) { mParameters(1) = y; }
54
55 void setPhi(Double_t phi) { mParameters(2) = phi; }
56 Double_t getPhi() const { return mParameters(2); }
57
58 Double_t getSnp() const
59 {
60 return o2::math_utils::sin(mParameters(2));
61 }
62
63 Double_t getCsp2() const
64 {
65 auto snp = o2::math_utils::sin(mParameters(2));
66 Double_t csp;
67 csp = std::sqrt((1. - snp) * (1. + snp));
68 return csp * csp;
69 }
70
71 void setTanl(Double_t tanl) { mParameters(3) = tanl; }
72 Double_t getTanl() const { return mParameters(3); }
73
74 Double_t getTgl() const { return mParameters(3); } // for the sake of helixhelper
75
76 void setInvQPt(Double_t invqpt) { mParameters(4) = invqpt; }
77 Double_t getInvQPt() const { return mParameters(4); } // return Inverse charged pt
78 Double_t getPt() const { return TMath::Abs(1.f / mParameters(4)); }
79 Double_t getInvPt() const { return TMath::Abs(mParameters(4)); }
80 Double_t getPx() const { return TMath::Cos(getPhi()) * getPt(); } // return px
81 Double_t getPy() const { return TMath::Sin(getPhi()) * getPt(); } // return py
82 Double_t getPz() const { return getTanl() * getPt(); } // return pz
83 Double_t getP() const { return getPt() * TMath::Sqrt(1. + getTanl() * getTanl()); } // return total momentum
84 Double_t getInverseMomentum() const { return 1.f / getP(); }
85
86 Double_t getTheta() const { return TMath::PiOver2() - TMath::ATan(getTanl()); }
87 Double_t getEta() const { return -TMath::Log(TMath::Tan(getTheta() / 2)); } // return total momentum
88
89 Double_t getCurvature(double b) const
90 {
91 auto invqpt = getInvQPt();
92 return o2::constants::math::B2C * b * invqpt;
93 }
94
96 Double_t getCharge() const { return TMath::Sign(1., mParameters(4)); }
98 void setCharge(Double_t charge)
99 {
100 if (charge * mParameters(4) < 0.) {
101 mParameters(4) *= -1.;
102 }
103 }
104
106 const SMatrix5& getParameters() const { return mParameters; }
108 void setParameters(const SMatrix5& parameters) { mParameters = parameters; }
110 void addParameters(const SMatrix5& parameters) { mParameters += parameters; }
111
113 Double_t getTrackChi2() const { return mTrackChi2; }
115 void setTrackChi2(Double_t chi2) { mTrackChi2 = chi2; }
116
117 // Track parameter propagation
118 void propagateParamToZlinear(double zEnd);
119 void propagateParamToZquadratic(double zEnd, double zField);
120 void propagateParamToZhelix(double zEnd, double zField);
121 void getCircleParams(float bz, o2::math_utils::CircleXY<float>& c, float& sna, float& csa) const;
122
123 protected:
124 Double_t mZ = 0.;
125
133 Double_t mTrackChi2 = 0.;
134
136};
137
139{ // Forward track+error parameterization
140 public:
141 using TrackParFwd::TrackParFwd; // inherit base constructors
142
143 TrackParCovFwd() = default;
144 ~TrackParCovFwd() = default;
146 TrackParCovFwd(const Double_t z, const SMatrix5& parameters, const SMatrix55Sym& covariances, const Double_t chi2);
147
148 const SMatrix55Sym& getCovariances() const { return mCovariances; }
149 void setCovariances(const SMatrix55Sym& covariances) { mCovariances = covariances; }
150 void deleteCovariances() { mCovariances = SMatrix55Sym(); }
151
152 Double_t getSigma2X() const { return mCovariances(0, 0); }
153 Double_t getSigma2Y() const { return mCovariances(1, 1); }
154 Double_t getSigmaXY() const { return mCovariances(0, 1); }
155 Double_t getSigma2Phi() const { return mCovariances(2, 2); }
156 Double_t getSigma2Tanl() const { return mCovariances(3, 3); }
157 Double_t getSigma2InvQPt() const { return mCovariances(4, 4); }
158
159 // Propagate parameters and covariances matrix
160 void propagateToZlinear(double zEnd);
161 void propagateToZquadratic(double zEnd, double zField);
162 void propagateToZhelix(double zEnd, double zField);
163 void propagateToZ(double zEnd, double zField); // Parameters: helix; errors: quadratic
164
165 // Add Multiple Coulomb Scattering effects
166 void addMCSEffect(double x2X0);
167
168 // Kalman filter/fitting
169 bool update(const std::array<float, 2>& p, const std::array<float, 2>& cov);
170
171 // Propagate fwd track to vertex including MCS effects
172 bool propagateToVtxhelixWithMCS(double z, const std::array<float, 2>& p, const std::array<float, 2>& cov, double field, double x_over_X0);
173 bool propagateToVtxlinearWithMCS(double z, const std::array<float, 2>& p, const std::array<float, 2>& cov, double x_over_X0);
174
175 bool getCovXYZPxPyPzGlo(std::array<float, 21>& cv) const;
176
177 private:
184 SMatrix55Sym mCovariances{};
185 ClassDefNV(TrackParCovFwd, 1);
186};
187
188} // namespace o2::track
189
190#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:149
void propagateToZquadratic(double zEnd, double zField)
Definition TrackFwd.cxx:107
void propagateToZ(double zEnd, double zField)
Definition TrackFwd.cxx:245
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:443
Double_t getSigma2Y() const
Definition TrackFwd.h:153
void propagateToZhelix(double zEnd, double zField)
Definition TrackFwd.cxx:188
bool getCovXYZPxPyPzGlo(std::array< float, 21 > &cv) const
Definition TrackFwd.cxx:459
bool update(const std::array< float, 2 > &p, const std::array< float, 2 > &cov)
Definition TrackFwd.cxx:300
TrackParCovFwd & operator=(const TrackParCovFwd &tpf)=default
const SMatrix55Sym & getCovariances() const
Definition TrackFwd.h:148
Double_t getSigma2InvQPt() const
Definition TrackFwd.h:157
Double_t getSigma2Phi() const
Definition TrackFwd.h:155
void addMCSEffect(double x2X0)
Definition TrackFwd.cxx:385
Double_t getSigmaXY() const
Definition TrackFwd.h:154
bool propagateToVtxlinearWithMCS(double z, const std::array< float, 2 > &p, const std::array< float, 2 > &cov, double x_over_X0)
Definition TrackFwd.cxx:451
void propagateToZlinear(double zEnd)
Definition TrackFwd.cxx:51
Double_t getSigma2Tanl() const
Definition TrackFwd.h:156
Double_t getSigma2X() const
Definition TrackFwd.h:152
void propagateParamToZlinear(double zEnd)
Definition TrackFwd.cxx:31
void propagateParamToZquadratic(double zEnd, double zField)
Definition TrackFwd.cxx:81
Double_t getPx() const
Definition TrackFwd.h:80
void setCharge(Double_t charge)
set the charge (assumed forward motion)
Definition TrackFwd.h:98
void propagateParamToZhelix(double zEnd, double zField)
Definition TrackFwd.cxx:150
void setTanl(Double_t tanl)
Definition TrackFwd.h:71
void setInvQPt(Double_t invqpt)
Definition TrackFwd.h:76
Double_t getTanl() const
Definition TrackFwd.h:72
Double_t getInverseMomentum() const
Definition TrackFwd.h:84
Double_t getPt() const
Definition TrackFwd.h:78
SMatrix5 mParameters
Track parameters.
Definition TrackFwd.h:132
Double_t getTrackChi2() const
return the chi2 of the track when the associated cluster was attached
Definition TrackFwd.h:113
Double_t mTrackChi2
Chi2 of the track when the associated cluster was attached.
Definition TrackFwd.h:133
Double_t getTgl() const
Definition TrackFwd.h:74
Double_t getEta() const
Definition TrackFwd.h:87
Double_t getCsp2() const
Definition TrackFwd.h:63
Double_t getPhi() const
Definition TrackFwd.h:56
TrackParFwd & operator=(const TrackParFwd &tp)=default
Double_t getTheta() const
Definition TrackFwd.h:86
void setParameters(const SMatrix5 &parameters)
set track parameters
Definition TrackFwd.h:108
Double_t getZ() const
return Z coordinate (cm)
Definition TrackFwd.h:46
Double_t mZ
Z coordinate (cm)
Definition TrackFwd.h:124
void setPhi(Double_t phi)
Definition TrackFwd.h:55
void setX(Double_t x)
Definition TrackFwd.h:50
ClassDefNV(TrackParFwd, 1)
Double_t getCurvature(double b) const
Definition TrackFwd.h:89
void addParameters(const SMatrix5 &parameters)
add track parameters
Definition TrackFwd.h:110
Double_t getY() const
Definition TrackFwd.h:52
Double_t getInvPt() const
Definition TrackFwd.h:79
const SMatrix5 & getParameters() const
return track parameters
Definition TrackFwd.h:106
Double_t getP() const
Definition TrackFwd.h:83
void getCircleParams(float bz, o2::math_utils::CircleXY< float > &c, float &sna, float &csa) const
Definition TrackFwd.cxx:426
Double_t getCharge() const
return the charge (assumed forward motion)
Definition TrackFwd.h:96
Double_t getX() const
Definition TrackFwd.h:49
TrackParFwd(const TrackParFwd &tp)=default
void setZ(Double_t z)
set Z coordinate (cm)
Definition TrackFwd.h:48
Double_t getSnp() const
Definition TrackFwd.h:58
void setTrackChi2(Double_t chi2)
set the chi2 of the track when the associated cluster was attached
Definition TrackFwd.h:115
Double_t getInvQPt() const
Definition TrackFwd.h:77
TrackParFwd(TrackParFwd &&)=delete
void setY(Double_t y)
Definition TrackFwd.h:53
Double_t getPz() const
Definition TrackFwd.h:82
Double_t getPy() const
Definition TrackFwd.h:81
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