Project
Loading...
Searching...
No Matches
TrackFwd.cxx
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
13#include "Math/MatrixFunctions.h"
14
15namespace o2
16{
17namespace track
18{
19using namespace std;
20
21//_________________________________________________________________________
22TrackParCovFwd::TrackParCovFwd(const Double_t z, const SMatrix5& parameters, const SMatrix55Sym& covariances, const Double_t chi2)
23{
24 setZ(z);
25 setParameters(parameters);
26 setCovariances(covariances);
27 setTrackChi2(chi2);
28}
29
30//__________________________________________________________________________
32{
33 // Track parameters linearly extrapolated to the plane at "zEnd".
34
35 if (getZ() == zEnd) {
36 return; // nothing to be done if same z
37 }
38
39 // Compute track parameters
40 auto dZ = (zEnd - getZ());
41 auto phi0 = getPhi();
42 auto [sinphi0, cosphi0] = o2::math_utils::sincosd(phi0);
43 auto invtanl0 = 1.0 / getTanl();
44 auto n = dZ * invtanl0;
45 mParameters(0) += n * cosphi0;
46 mParameters(1) += n * sinphi0;
47 mZ = zEnd;
48}
49
50//__________________________________________________________________________
52{
53 // Track parameters and their covariances linearly extrapolated to the plane at "zEnd".
54
55 // Calculate the jacobian related to the track parameters extrapolated to "zEnd"
56 auto dZ = (zEnd - getZ());
57 auto phi0 = getPhi();
58 auto tanl0 = getTanl();
59 auto invtanl0 = 1.0 / tanl0;
60 auto [sinphi0, cosphi0] = o2::math_utils::sincosd(phi0);
61 auto n = dZ * invtanl0;
62 auto m = n * invtanl0;
63
64 // Extrapolate track parameters to "zEnd"
65 mParameters(0) += n * cosphi0;
66 mParameters(1) += n * sinphi0;
67 setZ(zEnd);
68
69 // Calculate Jacobian
70 SMatrix55Std jacob = ROOT::Math::SMatrixIdentity();
71 jacob(0, 2) = -n * sinphi0;
72 jacob(0, 3) = -m * cosphi0;
73 jacob(1, 2) = n * cosphi0;
74 jacob(1, 3) = -m * sinphi0;
75
76 // Extrapolate track parameter covariances to "zEnd"
77 setCovariances(ROOT::Math::Similarity(jacob, mCovariances));
78}
79
80//__________________________________________________________________________
81void TrackParFwd::propagateParamToZquadratic(double zEnd, double zField)
82{
83 // Track parameters extrapolated to the plane at "zEnd" considering a helix
84
85 if (getZ() == zEnd) {
86 return; // nothing to be done if same z
87 }
88
89 // Compute track parameters
90 auto dZ = (zEnd - getZ());
91 auto phi0 = getPhi();
92 auto [sinphi0, cosphi0] = o2::math_utils::sincosd(phi0);
93 auto invtanl0 = 1.0 / getTanl();
94 auto invqpt0 = getInvQPt();
95 auto Hz = std::copysign(1, zField);
96 auto k = TMath::Abs(o2::constants::math::B2C * zField);
97 auto n = dZ * invtanl0;
98 auto theta = -invqpt0 * dZ * k * invtanl0;
99
100 mParameters(0) += n * cosphi0 - 0.5 * n * theta * Hz * sinphi0;
101 mParameters(1) += n * sinphi0 + 0.5 * n * theta * Hz * cosphi0;
102 mParameters(2) += Hz * theta;
103 setZ(zEnd);
104}
105
106//__________________________________________________________________________
107void TrackParCovFwd::propagateToZquadratic(double zEnd, double zField)
108{
109 // Extrapolate track parameters and covariances matrix to "zEnd"
110 // using quadratic track model
111
112 if (getZ() == zEnd) {
113 return; // nothing to be done if same z
114 }
115
116 // Compute track parameters
117 auto dZ = (zEnd - getZ());
118 auto phi0 = getPhi();
119 auto [sinphi0, cosphi0] = o2::math_utils::sincosd(phi0);
120 auto invtanl0 = 1.0 / getTanl();
121 auto invqpt0 = getInvQPt();
122 auto Hz = std::copysign(1, zField);
123 auto k = TMath::Abs(o2::constants::math::B2C * zField);
124 auto n = dZ * invtanl0;
125 auto m = n * invtanl0;
126 auto theta = -invqpt0 * dZ * k * invtanl0;
127
128 // Extrapolate track parameters to "zEnd"
129 mParameters(0) += n * cosphi0 - 0.5 * n * theta * Hz * sinphi0;
130 mParameters(1) += n * sinphi0 + 0.5 * n * theta * Hz * cosphi0;
131 mParameters(2) += Hz * theta;
132 mZ = zEnd;
133
134 // Calculate Jacobian
135 SMatrix55Std jacob = ROOT::Math::SMatrixIdentity();
136 jacob(0, 2) = -n * theta * 0.5 * Hz * cosphi0 - n * sinphi0;
137 jacob(0, 3) = Hz * m * theta * sinphi0 - m * cosphi0;
138 jacob(0, 4) = k * m * 0.5 * Hz * dZ * sinphi0;
139 jacob(1, 2) = -n * theta * 0.5 * Hz * sinphi0 + n * cosphi0;
140 jacob(1, 3) = -Hz * m * theta * cosphi0 - m * sinphi0;
141 jacob(1, 4) = -k * m * 0.5 * Hz * dZ * cosphi0;
142 jacob(2, 3) = -Hz * theta * invtanl0;
143 jacob(2, 4) = -Hz * k * n;
144
145 // Extrapolate track parameter covariances to "zEnd"
146 setCovariances(ROOT::Math::Similarity(jacob, mCovariances));
147}
148
149//__________________________________________________________________________
150void TrackParFwd::propagateParamToZhelix(double zEnd, double zField)
151{
152 // Track parameters extrapolated to the plane at "zEnd"
153 // using helix track model
154
155 if (getZ() == zEnd) {
156 return; // nothing to be done if same z
157 }
158
159 // Compute track parameters
160 auto dZ = (zEnd - getZ());
161 auto phi0 = getPhi();
162 auto tanl0 = getTanl();
163 auto invtanl0 = 1.0 / tanl0;
164 auto invqpt0 = getInvQPt();
165 auto qpt0 = 1.0 / invqpt0;
166 auto [sinphi0, cosphi0] = o2::math_utils::sincosd(phi0);
167
168 auto k = TMath::Abs(o2::constants::math::B2C * zField);
169 auto invk = 1.0 / k;
170 auto theta = -invqpt0 * dZ * k * invtanl0;
171 auto [sintheta, costheta] = o2::math_utils::sincosd(theta);
172 auto Hz = std::copysign(1, zField);
173 auto Y = sinphi0 * qpt0 * invk;
174 auto X = cosphi0 * qpt0 * invk;
175 auto YC = Y * costheta;
176 auto YS = Y * sintheta;
177 auto XC = X * costheta;
178 auto XS = X * sintheta;
179
180 // Extrapolate track parameters to "zEnd"
181 mParameters(0) += Hz * (Y - YC) - XS;
182 mParameters(1) += Hz * (-X + XC) - YS;
183 mParameters(2) += Hz * theta;
184 mZ = zEnd;
185}
186
187//__________________________________________________________________________
188void TrackParCovFwd::propagateToZhelix(double zEnd, double zField)
189{
190 // Extrapolate track parameters and covariances matrix to "zEnd"
191 // using helix track model
192
193 auto dZ = (zEnd - getZ());
194 auto phi0 = getPhi();
195 auto tanl0 = getTanl();
196 auto invtanl0 = 1.0 / tanl0;
197 auto invqpt0 = getInvQPt();
198 auto qpt0 = 1.0 / invqpt0;
199 auto [sinphi0, cosphi0] = o2::math_utils::sincosd(phi0);
200 auto k = TMath::Abs(o2::constants::math::B2C * zField);
201 auto invk = 1.0 / k;
202 auto theta = -invqpt0 * dZ * k * invtanl0;
203 auto [sintheta, costheta] = o2::math_utils::sincosd(theta);
204 auto Hz = std::copysign(1, zField);
205 auto L = qpt0 * qpt0 * invk;
206 auto N = dZ * invtanl0 * qpt0;
207 auto O = sintheta * cosphi0;
208 auto P = sinphi0 * costheta;
209 auto R = sinphi0 * sintheta;
210 auto S = cosphi0 * costheta;
211 auto Y = sinphi0 * qpt0 * invk;
212 auto X = cosphi0 * qpt0 * invk;
213 auto YC = Y * costheta;
214 auto YS = Y * sintheta;
215 auto XC = X * costheta;
216 auto XS = X * sintheta;
217 auto T = qpt0 * costheta;
218 auto U = qpt0 * sintheta;
219 auto V = qpt0;
220 auto n = dZ * invtanl0;
221 auto m = n * invtanl0;
222
223 // Extrapolate track parameters to "zEnd"
224 mParameters(0) += Hz * (Y - YC) - XS;
225 mParameters(1) += Hz * (-X + XC) - YS;
226 mParameters(2) += Hz * theta;
227 mZ = zEnd;
228
229 // Calculate Jacobian
230 SMatrix55Std jacob = ROOT::Math::SMatrixIdentity();
231 jacob(0, 2) = Hz * X - Hz * XC + YS;
232 jacob(0, 3) = Hz * R * m - S * m;
233 jacob(0, 4) = -Hz * N * R + Hz * T * Y - Hz * V * Y + N * S + U * X;
234 jacob(1, 2) = Hz * Y - Hz * YC - XS;
235 jacob(1, 3) = -Hz * O * m - P * m;
236 jacob(1, 4) = Hz * N * O - Hz * T * X + Hz * V * X + N * P + U * Y;
237 jacob(2, 3) = -Hz * theta * invtanl0;
238 jacob(2, 4) = -Hz * k * n;
239
240 // Extrapolate track parameter covariances to "zEnd"
241 setCovariances(ROOT::Math::Similarity(jacob, mCovariances));
242}
243
244//__________________________________________________________________________
245void TrackParCovFwd::propagateToZ(double zEnd, double zField)
246{
247 // Security for zero B field
248 if (zField == 0.0) {
249 propagateToZlinear(zEnd);
250 return;
251 }
252
253 // Extrapolate track parameters and covariances matrix to "zEnd"
254 // Parameters: helix track model; Error propagation: Quadratic
255
256 auto dZ = (zEnd - getZ());
257 auto phi0 = getPhi();
258 auto tanl0 = getTanl();
259 auto invtanl0 = 1.0 / tanl0;
260 auto invqpt0 = getInvQPt();
261 auto qpt0 = 1.0 / invqpt0;
262 auto [sinphi0, cosphi0] = o2::math_utils::sincosd(phi0);
263 auto k = TMath::Abs(o2::constants::math::B2C * zField);
264 auto invk = 1.0 / k;
265 auto theta = -invqpt0 * dZ * k * invtanl0;
266 auto [sintheta, costheta] = o2::math_utils::sincosd(theta);
267 auto Hz = std::copysign(1, zField);
268 auto Y = sinphi0 * qpt0 * invk;
269 auto X = cosphi0 * qpt0 * invk;
270 auto YC = Y * costheta;
271 auto YS = Y * sintheta;
272 auto XC = X * costheta;
273 auto XS = X * sintheta;
274 auto n = dZ * invtanl0;
275 auto m = n * invtanl0;
276
277 // Extrapolate track parameters to "zEnd"
278 // Helix
279 mParameters(0) += Hz * (Y - YC) - XS;
280 mParameters(1) += Hz * (-X + XC) - YS;
281 mParameters(2) += Hz * theta;
282 mZ = zEnd;
283
284 // Jacobian (quadratic)
285 SMatrix55Std jacob = ROOT::Math::SMatrixIdentity();
286 jacob(0, 2) = -n * theta * 0.5 * Hz * cosphi0 - n * sinphi0;
287 jacob(0, 3) = Hz * m * theta * sinphi0 - m * cosphi0;
288 jacob(0, 4) = k * m * 0.5 * Hz * dZ * sinphi0;
289 jacob(1, 2) = -n * theta * 0.5 * Hz * sinphi0 + n * cosphi0;
290 jacob(1, 3) = -Hz * m * theta * cosphi0 - m * sinphi0;
291 jacob(1, 4) = -k * m * 0.5 * Hz * dZ * cosphi0;
292 jacob(2, 3) = -Hz * theta * invtanl0;
293 jacob(2, 4) = -Hz * k * n;
294
295 // Extrapolate track parameter covariances to "zEnd"
296 setCovariances(ROOT::Math::Similarity(jacob, mCovariances));
297}
298
299//__________________________________________________________________________
300bool TrackParCovFwd::update(const std::array<float, 2>& p, const std::array<float, 2>& cov)
301{
304
305 using SVector2 = ROOT::Math::SVector<double, 2>;
306 using SMatrix22 = ROOT::Math::SMatrix<double, 2>;
307 using SMatrix25 = ROOT::Math::SMatrix<double, 2, 5>;
308 using SMatrix52 = ROOT::Math::SMatrix<double, 5, 2>;
309
310 SMatrix55Sym I = ROOT::Math::SMatrixIdentity();
311 SMatrix25 H_k;
312 SMatrix22 V_k;
313 SVector2 m_k(p[0], p[1]), r_k_kminus1;
314 V_k(0, 0) = cov[0];
315 V_k(1, 1) = cov[1];
316 H_k(0, 0) = 1.0;
317 H_k(1, 1) = 1.0;
318
319 // Covariance of residuals
320 SMatrix22 invResCov = (V_k + ROOT::Math::Similarity(H_k, mCovariances));
321 invResCov.Invert();
322
323 // Kalman Gain Matrix
324 SMatrix52 K_k = mCovariances * ROOT::Math::Transpose(H_k) * invResCov;
325
326 // Update Parameters
327 r_k_kminus1 = m_k - H_k * mParameters; // Residuals of prediction
328 mParameters = mParameters + K_k * r_k_kminus1;
329
330 // Update covariances Matrix
331 SMatrix55Std updatedCov;
332 auto& CP = mCovariances;
333 auto& sigmax2 = cov[0];
334 auto& sigmay2 = cov[1];
335 auto A = 1. / (sigmax2 * sigmay2 + sigmax2 * CP(1, 1) + sigmay2 * CP(0, 0) + CP(0, 0) * CP(1, 1) - CP(0, 1) * CP(0, 1));
336 auto AX = A * sigmax2;
337 auto AY = A * sigmay2;
338 auto B = sigmax2 * sigmay2;
339 auto C = (sigmax2 + CP(0, 0)) * (sigmay2 + CP(1, 1));
340 auto D = 1 / (-C + CP(0, 1) * CP(0, 1));
341 auto E = sigmax2 + CP(0, 0);
342 auto F = sigmay2 + CP(1, 1);
343 auto G = -C + CP(0, 1) * CP(0, 1);
344
345 // Explicit evaluation of "updatedCov = (I - K_k * H_k) * mCovariances"
346 updatedCov(0, 0) = AX * (sigmay2 * CP(0, 0) + CP(0, 0) * CP(1, 1) - CP(0, 1) * CP(0, 1));
347 updatedCov(0, 1) = AX * sigmay2 * CP(0, 1);
348 updatedCov(0, 2) = AX * (sigmay2 * CP(0, 2) - CP(0, 1) * CP(1, 2) + CP(0, 2) * CP(1, 1));
349 updatedCov(0, 3) = AX * (sigmay2 * CP(0, 3) - CP(0, 1) * CP(1, 3) + CP(0, 3) * CP(1, 1));
350 updatedCov(0, 4) = AX * (sigmay2 * CP(0, 4) - CP(0, 1) * CP(1, 4) + CP(0, 4) * CP(1, 1));
351 updatedCov(1, 1) = AY * (sigmax2 * CP(1, 1) + CP(0, 0) * CP(1, 1) - CP(0, 1) * CP(0, 1));
352 updatedCov(1, 2) = AY * (sigmax2 * CP(1, 2) + CP(0, 0) * CP(1, 2) - CP(0, 1) * CP(0, 2));
353 updatedCov(1, 3) = AY * (sigmax2 * CP(1, 3) + CP(0, 0) * CP(1, 3) - CP(0, 1) * CP(0, 3));
354 updatedCov(1, 4) = AY * (sigmax2 * CP(1, 4) + CP(0, 0) * CP(1, 4) - CP(0, 1) * CP(0, 4));
355 updatedCov(2, 2) = D * (G * CP(2, 2) - CP(0, 2) * (-F * CP(0, 2) + CP(0, 1) * CP(1, 2)) - CP(1, 2) * (-E * CP(1, 2) + CP(0, 1) * CP(0, 2)));
356 updatedCov(2, 3) = D * (G * CP(2, 3) - CP(0, 2) * (-F * CP(0, 3) + CP(0, 1) * CP(1, 3)) - CP(1, 2) * (-E * CP(1, 3) + CP(0, 1) * CP(0, 3)));
357 updatedCov(2, 4) = D * (G * CP(2, 4) - CP(0, 2) * (-F * CP(0, 4) + CP(0, 1) * CP(1, 4)) - CP(1, 2) * (-E * CP(1, 4) + CP(0, 1) * CP(0, 4)));
358 updatedCov(3, 3) = D * (G * CP(3, 3) - CP(0, 3) * (-F * CP(0, 3) + CP(0, 1) * CP(1, 3)) - CP(1, 3) * (-E * CP(1, 3) + CP(0, 1) * CP(0, 3)));
359 updatedCov(3, 4) = D * (G * CP(3, 4) - CP(0, 3) * (-F * CP(0, 4) + CP(0, 1) * CP(1, 4)) - CP(1, 3) * (-E * CP(1, 4) + CP(0, 1) * CP(0, 4)));
360 updatedCov(4, 4) = D * (G * CP(4, 4) - CP(0, 4) * (-F * CP(0, 4) + CP(0, 1) * CP(1, 4)) - CP(1, 4) * (-E * CP(1, 4) + CP(0, 1) * CP(0, 4)));
361
362 mCovariances(0, 0) = updatedCov(0, 0);
363 mCovariances(0, 1) = updatedCov(0, 1);
364 mCovariances(0, 2) = updatedCov(0, 2);
365 mCovariances(0, 3) = updatedCov(0, 3);
366 mCovariances(0, 4) = updatedCov(0, 4);
367 mCovariances(1, 1) = updatedCov(1, 1);
368 mCovariances(1, 2) = updatedCov(1, 2);
369 mCovariances(1, 3) = updatedCov(1, 3);
370 mCovariances(1, 4) = updatedCov(1, 4);
371 mCovariances(2, 2) = updatedCov(2, 2);
372 mCovariances(2, 3) = updatedCov(2, 3);
373 mCovariances(2, 4) = updatedCov(2, 4);
374 mCovariances(3, 3) = updatedCov(3, 3);
375 mCovariances(3, 4) = updatedCov(3, 4);
376 mCovariances(4, 4) = updatedCov(4, 4);
377
378 auto addChi2Track = ROOT::Math::Similarity(r_k_kminus1, invResCov);
379 mTrackChi2 += addChi2Track;
380
381 return true;
382}
383
384//__________________________________________________________________________
385void TrackParCovFwd::addMCSEffect(double x_over_X0)
386{
391
392 if (x_over_X0 == 0) { // Nothing to do
393 return;
394 }
395
396 auto phi0 = getPhi();
397 auto tanl0 = getTanl();
398 auto invtanl0 = 1.0 / tanl0;
399 auto invqpt0 = getInvQPt();
400
401 auto [sinphi0, cosphi0] = o2::math_utils::sincosd(phi0);
402
403 auto csclambda = TMath::Abs(TMath::Sqrt(1 + tanl0 * tanl0) * invtanl0);
404 auto pathLengthOverX0 = x_over_X0 * csclambda; //
405
406 // Angular dispersion square of the track (variance) in a plane perpendicular to the trajectory
407 auto sigmathetasq = 0.0136 * getInverseMomentum();
408 sigmathetasq *= sigmathetasq * pathLengthOverX0;
409
410 // Get covariance matrix
411 SMatrix55Sym newParamCov(getCovariances());
412
413 auto A = tanl0 * tanl0 + 1;
414
415 newParamCov(2, 2) += sigmathetasq * A;
416
417 newParamCov(3, 3) += sigmathetasq * A * A;
418
419 newParamCov(4, 4) += sigmathetasq * tanl0 * tanl0 * invqpt0 * invqpt0;
420
421 // Set new covariances
422 setCovariances(newParamCov);
423}
424
425//_______________________________________________________
426void TrackParFwd::getCircleParams(float bz, o2::math_utils::CircleXY<float>& c, float& sna, float& csa) const
427{
428 c.rC = getCurvature(bz);
429 constexpr double MinCurv = 1e-6;
430 if (std::abs(c.rC) > MinCurv) {
431 c.rC = 1.f / getCurvature(bz);
432 double sn = getSnp(), cs = std::sqrt((1.f - sn) * (1.f + sn));
433 c.xC = getX() - sn * c.rC; // center in tracking
434 c.yC = getY() + cs * c.rC; // frame. Note: r is signed!!!
435 c.rC = std::abs(c.rC);
436 } else {
437 c.rC = 0.f; // signal straight line
438 c.xC = getX();
439 c.yC = getY();
440 }
441}
442//________________________________________________________________
443bool TrackParCovFwd::propagateToVtxhelixWithMCS(double z, const std::array<float, 2>& p, const std::array<float, 2>& cov, double field, double x_over_X0)
444{
445 // Propagate fwd track to vertex using helix model, adding MCS effects
446 addMCSEffect(x_over_X0);
447 propagateToZhelix(z, field);
448 return update(p, cov);
449}
450//________________________________________________________________
451bool TrackParCovFwd::propagateToVtxlinearWithMCS(double z, const std::array<float, 2>& p, const std::array<float, 2>& cov, double x_over_X0)
452{
453 // Propagate fwd track to vertex using linear model, adding MCS effects
454 addMCSEffect(x_over_X0);
456 return update(p, cov);
457}
458
459bool TrackParCovFwd::getCovXYZPxPyPzGlo(std::array<float, 21>& cv) const
460{
461 //---------------------------------------------------------------------
462 // This function returns the global covariance matrix of the fwdtrack params
463 //
464 // Cov(x,x) ... : cv[0]
465 // Cov(y,x) ... : cv[1] cv[2]
466 // Cov(z,x) ... : cv[3] cv[4] cv[5]
467 // Cov(px,x)... : cv[6] cv[7] cv[8] cv[9]
468 // Cov(py,x)... : cv[10] cv[11] cv[12] cv[13] cv[14]
469 // Cov(pz,x)... : cv[15] cv[16] cv[17] cv[18] cv[19] cv[20]
470 //---------------------------------------------------------------------
471 auto pt = getPt();
472 auto cp = std::sqrt((1. - getSnp()) * (1. + getSnp()));
473 auto sp = getSnp();
474 auto tgl = getTgl();
475
476 auto px = pt * std::sqrt((1. - getSnp()) * (1. + getSnp()));
477 auto py = pt * getSnp();
478 auto pz = pt * getTgl();
479 auto q = getCharge();
480
481 cv[0] = mCovariances(0, 0);
482 cv[1] = mCovariances(1, 0);
483 cv[2] = mCovariances(1, 1);
484 cv[3] = 0;
485 cv[4] = 0;
486 cv[5] = 0;
487 cv[6] = -mCovariances(0, 2) * py - mCovariances(0, 4) * px * pt * q;
488 cv[7] = -mCovariances(1, 2) * py - mCovariances(1, 4) * px * pt * q;
489 cv[8] = 0;
490 cv[9] = 2 * mCovariances(2, 4) * px * py * q * pt + mCovariances(2, 2) * py * py + mCovariances(4, 4) * px * px * pt * pt;
491 cv[10] = mCovariances(0, 2) * px - mCovariances(0, 4) * py * pt * q;
492 cv[11] = mCovariances(1, 2) * px - mCovariances(1, 4) * py * pt * q;
493 cv[12] = 0;
494 cv[13] = mCovariances(2, 4) * (py * py - px * px) * q * pt - mCovariances(2, 2) * px * py + mCovariances(4, 4) * px * py * pt * pt;
495 cv[14] = -2 * mCovariances(2, 4) * px * py * q * pt + mCovariances(2, 2) * px * px + mCovariances(4, 4) * py * py * pt * pt;
496 cv[15] = mCovariances(0, 3) * pt - mCovariances(0, 4) * pt * pz * q;
497 cv[16] = mCovariances(1, 3) * pt - mCovariances(1, 4) * pt * pz * q;
498 cv[17] = 0;
499 cv[18] = -mCovariances(2, 3) * py * pt - mCovariances(3, 4) * px * q * pt * pt + mCovariances(2, 4) * py * pz * q * pt + mCovariances(4, 4) * px * pz * pt * pt;
500 cv[19] = mCovariances(2, 3) * px * pt - mCovariances(3, 4) * q * pt * pt * py - mCovariances(2, 4) * px * pz * q * pt + mCovariances(4, 4) * py * pz * pt * pt;
501 cv[20] = -2 * mCovariances(3, 4) * pz * q * pt * pt + mCovariances(3, 3) * pt * pt + mCovariances(4, 4) * pz * pz * pt * pt;
502
503 return true;
504}
505
506} // namespace track
507} // namespace o2
uint32_t c
Definition RawData.h:2
Base forward track model, params only, w/o covariance.
Definition A.h:16
Definition B.h:16
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
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
const SMatrix55Sym & getCovariances() const
Definition TrackFwd.h:148
void addMCSEffect(double x2X0)
Definition TrackFwd.cxx:385
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
void propagateParamToZlinear(double zEnd)
Definition TrackFwd.cxx:31
void propagateParamToZquadratic(double zEnd, double zField)
Definition TrackFwd.cxx:81
void propagateParamToZhelix(double zEnd, double zField)
Definition TrackFwd.cxx:150
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 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 getPhi() const
Definition TrackFwd.h:56
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
Double_t getCurvature(double b) const
Definition TrackFwd.h:89
Double_t getY() const
Definition TrackFwd.h:52
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
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
GLdouble n
Definition glcorearb.h:1982
const GLfloat * m
Definition glcorearb.h:4066
GLdouble GLdouble GLdouble z
Definition glcorearb.h:843
constexpr float B2C
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Defining DataPointCompositeObject explicitly as copiable.