Project
Loading...
Searching...
No Matches
AlignPointHelper.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
14#include <cmath>
15
16#include <Rtypes.h>
17#include "Framework/Logger.h"
21#include "MFTTracking/IOUtils.h"
23
24using namespace o2::mft;
25
27
28//__________________________________________________________________________
30 : mIsAlignPointSet(false),
31 mIsGlobalDerivativeDone(false),
32 mIsLocalDerivativeDone(false),
33 mIsTrackInitialParamSet(false),
34 mIsClusterOk(false),
35 mGeometry(nullptr),
36 mDictionary(nullptr),
37 mChipHelper(nullptr),
38 mGlobalRecoPosition(0., 0., 0.),
39 mLocalRecoPosition(0., 0., 0.),
40 mLocalMeasuredPosition(0., 0., 0.),
41 mLocalMeasuredPositionSigma(0., 0., 0),
42 mGlobalMeasuredPosition(0., 0., 0.),
43 mLocalResidual(0., 0., 0.)
44{
45
48 o2::math_utils::bit2Mask(o2::math_utils::TransformType::T2L,
50
55
56 mChipHelper = std::make_unique<AlignSensorHelper>();
57 LOGF(debug, "AlignPointHelper instantiated");
58}
59
60//__________________________________________________________________________
62{
64 if (mChipHelper == nullptr) {
65 LOGF(error,
66 "AlignPointHelper::computeLocalDerivatives() - no AlignSensorHelper found !");
67 return;
68 }
70 LOGF(error,
71 "AlignPointHelper::computeLocalDerivatives() - no initial track param found !");
72 return;
73 }
74 if (!mIsAlignPointSet) {
75 LOGF(error,
76 "AlignPointHelper::computeLocalDerivatives() - no align point coordinates set !");
77 return;
78 }
79 bool success = true;
80 success &= computeLocalDerivativeX();
81 success &= computeLocalDerivativeY();
82 success &= computeLocalDerivativeZ();
83 mIsLocalDerivativeDone = success;
84}
85
86//__________________________________________________________________________
88{
90 if (mChipHelper == nullptr) {
91 LOGF(error,
92 "AlignPointHelper::computeGlobalDerivatives() - no AlignSensorHelper found !");
93 return;
94 }
96 LOGF(error,
97 "AlignPointHelper::computeGlobalDerivatives() - no initial track param found !");
98 return;
99 }
100 if (!mIsAlignPointSet) {
101 LOGF(error, "AlignPointHelper::computeGlobalDerivatives() - no align point coordinates set !");
102 return;
103 }
104 bool success = true;
105 success &= computeGlobalDerivativeX();
106 success &= computeGlobalDerivativeY();
107 success &= computeGlobalDerivativeZ();
108 mIsGlobalDerivativeDone = success;
109}
110
111//__________________________________________________________________________
113{
114 if (mChipHelper == nullptr) {
115 LOGF(error,
116 "AlignPointHelper::getSensorId() - no AlignSensorHelper found !");
117 return 0;
118 }
119 if (!mIsAlignPointSet) {
120 LOGF(error,
121 "AlignPointHelper::getSensorId() - no align point coordinates set !");
122 return 0;
123 }
124 return mChipHelper->chipIndexInMft();
125}
126
127//__________________________________________________________________________
129{
130 if (mChipHelper == nullptr) {
131 LOGF(error,
132 "AlignPointHelper::half() - no AlignSensorHelper found !");
133 return 0;
134 }
135 if (!mIsAlignPointSet) {
136 LOGF(error,
137 "AlignPointHelper::half() - no align point coordinates set !");
138 return 0;
139 }
140 return mChipHelper->half();
141}
142
143//__________________________________________________________________________
145{
146 if (mChipHelper == nullptr) {
147 LOGF(error,
148 "AlignPointHelper::disk() - no AlignSensorHelper found !");
149 return 0;
150 }
151 if (!mIsAlignPointSet) {
152 LOGF(error,
153 "AlignPointHelper::disk() - no align point coordinates set !");
154 return 0;
155 }
156 return mChipHelper->disk();
157}
158
159//__________________________________________________________________________
161{
162 if (mChipHelper == nullptr) {
163 LOGF(error,
164 "AlignPointHelper::layer() - no AlignSensorHelper found !");
165 return 0;
166 }
167 if (!mIsAlignPointSet) {
168 LOGF(error,
169 "AlignPointHelper::layer() - no align point coordinates set !");
170 return 0;
171 }
172 return mChipHelper->layer();
173}
174
175//__________________________________________________________________________
177{
178 mGlobalRecoPosition.SetXYZ(0., 0., 0.);
179 mLocalRecoPosition.SetXYZ(0., 0., 0.);
180
181 mLocalMeasuredPosition.SetXYZ(0., 0., 0.);
186 mGlobalMeasuredPosition.SetXYZ(0., 0., 0.);
187
188 mLocalResidual.SetXYZ(0., 0., 0.);
189
190 mIsAlignPointSet = false;
191}
192
193//__________________________________________________________________________
204
205//__________________________________________________________________________
206void AlignPointHelper::convertCompactClusters(gsl::span<const itsmft::CompClusterExt> clusters,
207 gsl::span<const unsigned char>::iterator& pattIt,
208 std::vector<o2::BaseCluster<double>>& outputLocalClusters,
209 std::vector<o2::BaseCluster<double>>& outputGlobalClusters)
210{
211 // use this version of convertCompactClusters() in a workflow
212
213 if (mDictionary == nullptr) {
214 LOGF(error,
215 "AlignPointHelper::convertCompactClusters() - no dictionary found !");
216 return;
217 }
218 if (mGeometry == nullptr) {
220 }
222 o2::math_utils::bit2Mask(o2::math_utils::TransformType::T2L,
224 outputLocalClusters.clear();
225 outputGlobalClusters.clear();
226 // inspired from Detectors/ITSMFT/MFT/tracking/src/IOUtils.cxx
227 for (auto& mftCluster : clusters) {
228 auto chipID = mftCluster.getChipID();
229 auto pattID = mftCluster.getPatternID();
230 // Dummy COG errors (about half pixel size)
231 double sigmaX = o2::mft::ioutils::DefClusErrorRow;
232 double sigmaZ = o2::mft::ioutils::DefClusErrorCol;
233
236 // ALPIDE local Y coordinate => MFT global X coordinate (ALPIDE rows)
237 sigmaX = mDictionary->getErrX(pattID);
238 // ALPIDE local Z coordinate => MFT global Y coordinate (ALPIDE columns)
239 sigmaZ = mDictionary->getErrZ(pattID);
240
241 if (!mDictionary->isGroup(pattID)) {
242 locXYZ = mDictionary->getClusterCoordinates(mftCluster);
243 } else {
244 o2::itsmft::ClusterPattern cPattern(pattIt);
245 locXYZ = mDictionary->getClusterCoordinates(mftCluster, cPattern);
246 }
247 } else {
248 o2::itsmft::ClusterPattern cPattern(pattIt);
249 locXYZ = mDictionary->getClusterCoordinates(mftCluster, cPattern, false);
250 }
251 auto gloXYZ = mGeometry->getMatrixL2G(chipID) * locXYZ;
252
253 auto& locCl3d = outputLocalClusters.emplace_back(chipID, locXYZ); // local
254 locCl3d.setErrors(sigmaX, o2::itsmft::SegmentationAlpide::SensorLayerThicknessEff * 0.5, sigmaZ);
255
256 auto& gloCl3d = outputGlobalClusters.emplace_back(chipID, gloXYZ); // global
257 gloCl3d.setErrors(sigmaX, sigmaZ, o2::itsmft::SegmentationAlpide::SensorLayerThicknessEff * 0.5);
258 }
259 LOGF(debug,
260 "AlignPointHelper::convertCompactClusters() - output vector size %d",
261 outputLocalClusters.size());
262}
263
264//__________________________________________________________________________
265void AlignPointHelper::convertCompactClusters(const std::vector<o2::itsmft::CompClusterExt>& clusters,
266 std::vector<unsigned char>::iterator& pattIt,
267 std::vector<o2::BaseCluster<double>>& outputLocalClusters,
268 std::vector<o2::BaseCluster<double>>& outputGlobalClusters)
269{
270 // use this version of convertCompactClusters() in a macro
271
272 if (mDictionary == nullptr) {
273 LOGF(error,
274 "AlignPointHelper::convertCompactClusters() - no dictionary found !");
275 return;
276 }
277 if (mGeometry == nullptr) {
279 }
281 o2::math_utils::bit2Mask(o2::math_utils::TransformType::T2L,
283 outputLocalClusters.clear();
284 outputGlobalClusters.clear();
285 // inspired from Detectors/ITSMFT/MFT/tracking/src/IOUtils.cxx
286 for (auto& mftCluster : clusters) {
287 auto chipID = mftCluster.getChipID();
288 auto pattID = mftCluster.getPatternID();
289 // Dummy COG errors (about half pixel size)
290 double sigmaX = o2::mft::ioutils::DefClusErrorRow;
291 double sigmaZ = o2::mft::ioutils::DefClusErrorCol;
292
295 // ALPIDE local Y coordinate => MFT global X coordinate (ALPIDE rows)
296 sigmaX = mDictionary->getErrX(pattID);
297 // ALPIDE local Z coordinate => MFT global Y coordinate (ALPIDE columns)
298 sigmaZ = mDictionary->getErrZ(pattID);
299
300 if (!mDictionary->isGroup(pattID)) {
301 locXYZ = mDictionary->getClusterCoordinates(mftCluster);
302 } else {
303 o2::itsmft::ClusterPattern cPattern(pattIt);
304 locXYZ = mDictionary->getClusterCoordinates(mftCluster, cPattern);
305 }
306 } else {
307 o2::itsmft::ClusterPattern cPattern(pattIt);
308 locXYZ = mDictionary->getClusterCoordinates(mftCluster, cPattern, false);
309 }
310 auto gloXYZ = mGeometry->getMatrixL2G(chipID) * locXYZ;
311
312 auto& locCl3d = outputLocalClusters.emplace_back(chipID, locXYZ); // local
313 locCl3d.setErrors(sigmaX, o2::itsmft::SegmentationAlpide::SensorLayerThicknessEff * 0.5, sigmaZ);
314
315 auto& gloCl3d = outputGlobalClusters.emplace_back(chipID, gloXYZ); // global
316 gloCl3d.setErrors(sigmaX, sigmaZ, o2::itsmft::SegmentationAlpide::SensorLayerThicknessEff * 0.5);
317 }
318 LOGF(debug,
319 "AlignPointHelper::convertCompactClusters() - output vector size %d",
320 outputLocalClusters.size());
321}
322
323//__________________________________________________________________________
325{
327 mTrackInitialParam.X0 = mftTrack.getX();
328 mTrackInitialParam.Y0 = mftTrack.getY();
329 mTrackInitialParam.Z0 = mftTrack.getZ();
330 double phi = mftTrack.getPhi();
331 double tanLambda = mftTrack.getTanl();
332 mTrackInitialParam.Tx = std::cos(phi) / tanLambda;
333 mTrackInitialParam.Ty = std::sin(phi) / tanLambda;
334 LOGF(debug,
335 "AlignPointHelper::recordTrackInitialParam - x0 = %.3e, y0 = %.3e, z0 = %.3e, Tx = %.3e, Ty = %.3e",
338
340}
341
342//__________________________________________________________________________
344{
345 mIsAlignPointSet = false;
346 LOGF(debug,
347 "AlignPointHelper::setGlobalRecoPosition() - track x = %.3e, y = %.3e, z = %.3e",
348 mftTrack.getX(), mftTrack.getY(), mftTrack.getZ());
349 mGlobalRecoPosition.SetXYZ(mftTrack.getX(), mftTrack.getY(), mftTrack.getZ());
350 mIsAlignPointSet = true;
351 if (std::isnan(mGlobalRecoPosition.X()) || std::isnan(mGlobalRecoPosition.Y()) || std::isnan(mGlobalRecoPosition.Z())) {
352 LOGF(error,
353 "AlignPointHelper::setGlobalRecoPosition() - track x = %.3e, y = %.3e, z = %.3e, point x = %.3e, y = %.3e, z = %.3e",
354 mftTrack.getX(), mftTrack.getY(), mftTrack.getZ(),
356 mIsAlignPointSet = false;
357 }
358}
359
360//__________________________________________________________________________
362 const o2::BaseCluster<double>& globalCluster)
363{
364 auto chipID = localCluster.getSensorID();
365
366 mIsClusterOk = true;
367
369 localCluster.getX(), localCluster.getY(), localCluster.getZ());
370 if (std::isnan(mLocalMeasuredPosition.X()) || std::isnan(mLocalMeasuredPosition.Y()) || std::isnan(mLocalMeasuredPosition.Z())) {
371 LOGF(error,
372 "AlignPointHelper::setMeasuredPosition() - sr %4d local x = %.3e, y = %.3e, z = %.3e",
373 chipID,
375 mIsClusterOk = false;
376 return;
377 }
378
380 globalCluster.getX(), globalCluster.getY(), globalCluster.getZ());
381 if (std::isnan(mGlobalMeasuredPosition.X()) || std::isnan(mGlobalMeasuredPosition.Y()) || std::isnan(mGlobalMeasuredPosition.Z())) {
382 LOGF(error,
383 "AlignPointHelper::setMeasuredPosition() - sr %4d global x = %.3e, y = %.3e, z = %.3e",
384 chipID,
386 mIsClusterOk = false;
387 return;
388 }
389
390 mIsAlignPointSet &= mChipHelper->setSensor(chipID);
391}
392
393//__________________________________________________________________________
395{
396 if (mGeometry == nullptr) {
398 }
399
400 if (mIsAlignPointSet) {
402 o2::math_utils::bit2Mask(o2::math_utils::TransformType::T2L,
405 mLocalResidual.SetXYZ(
409 } else {
410 LOGF(error,
411 "AlignPointHelper::setLocalResidual() - no align point coordinates set !");
412 }
413}
414
415//__________________________________________________________________________
417{
418 if (mIsAlignPointSet) {
419 mGlobalResidual.SetXYZ(
423 } else {
424 LOGF(error,
425 "AlignPointHelper::setGlobalResidual() - no align point coordinates set !");
426 }
427}
428
429//__________________________________________________________________________
438
439//__________________________________________________________________________
448
449//__________________________________________________________________________
451{
452 if (mChipHelper->isTransformExtracted()) {
453 mLocalDerivativeX.mdX0 = mChipHelper->cosRy() * mChipHelper->cosRz();
454
456 mChipHelper->cosRy() * mChipHelper->cosRz();
457
458 mLocalDerivativeX.mdY0 = (mChipHelper->sinRx() * mChipHelper->sinRy() * mChipHelper->cosRz()) +
459 (mChipHelper->cosRx() * mChipHelper->sinRz());
460
462 ((mChipHelper->sinRx() * mChipHelper->sinRy() * mChipHelper->cosRz()) +
463 (mChipHelper->cosRx() * mChipHelper->sinRz()));
464 LOGF(debug,
465 "computeLocalDerivativeX(): dX0 = %.3e, dTx = %.3e, dY0 = %.3e, dTy = %.3e",
470 return true;
471 } else {
472 LOGF(error,
473 "AlignPointHelper::computeLocalDerivativeX() - no sensor transform found !");
474 return false;
475 }
476}
477
478//__________________________________________________________________________
480{
481 if (mChipHelper->isTransformExtracted()) {
482 mLocalDerivativeY.mdX0 = (-1.) * mChipHelper->cosRy() * mChipHelper->sinRz();
483
485 mChipHelper->cosRy() * mChipHelper->sinRz();
486
487 mLocalDerivativeY.mdY0 = (mChipHelper->cosRx() * mChipHelper->cosRz()) -
488 (mChipHelper->sinRx() * mChipHelper->sinRy() * mChipHelper->sinRz());
489
491 ((mChipHelper->cosRx() * mChipHelper->cosRz()) -
492 (mChipHelper->sinRx() * mChipHelper->sinRy() * mChipHelper->sinRz()));
493 LOGF(debug,
494 "computeLocalDerivativeY(): dX0 = %.3e, dTx = %.3e, dY0 = %.3e, dTy = %.3e",
499 return true;
500 } else {
501 LOGF(error,
502 "AlignPointHelper::computeLocalDerivativeY() - no sensor transform found !");
503 return false;
504 }
505}
506
507//__________________________________________________________________________
509{
510 if (mChipHelper->isTransformExtracted()) {
512
514
515 mLocalDerivativeZ.mdY0 = (-1.) * mChipHelper->sinRx() * mChipHelper->cosRy();
516
518 LOGF(debug,
519 "computeLocalDerivativeZ(): dX0 = %.3e, dTx = %.3e, dY0 = %.3e, dTy = %.3e",
524 return true;
525 } else {
526 LOGF(error,
527 "AlignPointHelper::computeLocalDerivativeZ() - no sensor transform found !");
528 return false;
529 }
530}
531
532//__________________________________________________________________________
534{
535 if (mChipHelper->isTransformExtracted()) {
536 mGlobalDerivativeX.mdDeltaX = (-1.) * mChipHelper->cosRy() * mChipHelper->cosRz();
537
538 mGlobalDerivativeX.mdDeltaY = (-1) * ((mChipHelper->sinRx() * mChipHelper->sinRy() * mChipHelper->cosRz()) +
539 (mChipHelper->cosRx() * mChipHelper->sinRz()));
540
542 (mTrackInitialParam.Ty * ((mChipHelper->sinRx() * mChipHelper->sinRy() * mChipHelper->cosRz()) +
543 (mChipHelper->cosRx() * mChipHelper->sinRz())));
544
545 mGlobalDerivativeX.mdDeltaRz = ((-1.) * mChipHelper->cosRy() * mChipHelper->sinRz() *
546 (mGlobalRecoPosition.X() - mChipHelper->translateX())) +
547 ((mGlobalRecoPosition.Y() - mChipHelper->translateY()) *
548 ((mChipHelper->cosRx() * mChipHelper->cosRz()) -
549 (mChipHelper->sinRx() * mChipHelper->sinRy() * mChipHelper->sinRz())));
550 LOGF(debug,
551 "computeGlobalDerivativeX(): dx = %.3e, dy = %.3e, dz = %.3e, dRz = %.3e",
556 return true;
557 } else {
558 LOGF(error,
559 "AlignPointHelper::computeGlobalDerivativeX() - no sensor transform found !");
560 return false;
561 }
562}
563
564//__________________________________________________________________________
566{
567 if (mChipHelper->isTransformExtracted()) {
569
570 mGlobalDerivativeY.mdDeltaY = (mChipHelper->sinRx() * mChipHelper->sinRy() * mChipHelper->sinRz()) -
571 (mChipHelper->cosRx() * mChipHelper->cosRz());
572
573 mGlobalDerivativeY.mdDeltaZ = ((-1.) * mTrackInitialParam.Tx * mChipHelper->cosRy() * mChipHelper->sinRz()) +
575 ((mChipHelper->cosRx() * mChipHelper->cosRz()) -
576 (mChipHelper->sinRx() * mChipHelper->sinRy() * mChipHelper->sinRz())));
577
578 mGlobalDerivativeY.mdDeltaRz = ((-1.) * (mGlobalRecoPosition.X() - mChipHelper->translateX()) * mChipHelper->cosRy() * mChipHelper->cosRz()) -
579 ((mGlobalRecoPosition.Y() - mChipHelper->translateY()) *
580 ((mChipHelper->cosRx() * mChipHelper->sinRz()) +
581 (mChipHelper->sinRx() * mChipHelper->sinRy() + mChipHelper->cosRz())));
582 LOGF(debug,
583 "computeGlobalDerivativeY(): dx = %.3e, dy = %.3e, dz = %.3e, dRz = %.3e",
588 return true;
589 } else {
590 LOGF(error,
591 "AlignPointHelper::computeGlobalDerivativeY() - no sensor transform found !");
592 return false;
593 }
594}
595
596//__________________________________________________________________________
598{
599 if (mChipHelper->isTransformExtracted()) {
600 mGlobalDerivativeZ.mdDeltaX = (-1.) * mChipHelper->sinRy();
601
603
605 (mTrackInitialParam.Ty * mChipHelper->sinRx() * mChipHelper->cosRy());
606
608 LOGF(debug,
609 "computeGlobalDerivativeZ(): dx = %.3e, dy = %.3e, dz = %.3e, dRz = %.3e",
614 return true;
615 } else {
616 LOGF(error,
617 "AlignPointHelper::computeGlobalDerivativeZ() - no sensor transform found !");
618 return false;
619 }
620}
ClassImp(o2::mft::AlignPointHelper)
Compute the local and global derivatives at an alignment point (track position, cluster position)
Helper class to access to the global coordinates of the center each MFT sensor.
Load pulled clusters, for a given read-out-frame, in a dedicated container.
Definition of the SegmentationAlpide class.
std::ostringstream debug
T getX() const
Definition BaseCluster.h:62
T getY() const
Definition BaseCluster.h:63
std::int16_t getSensorID() const
Definition BaseCluster.h:81
T getZ() const
Definition BaseCluster.h:64
const Mat3D & getMatrixL2G(int sensID) const
static constexpr unsigned short InvalidPatternID
Definition CompCluster.h:46
static constexpr float SensorLayerThicknessEff
float getErrZ(int n) const
Returns the error on the z position of the COG for the n_th element.
math_utils::Point3D< T > getClusterCoordinates(const CompCluster &cl) const
float getErrX(int n) const
Returns the error on the x position of the COG for the n_th element.
bool isGroup(int n) const
Returns true if the element corresponds to a group of rare topologies.
Container of a single alignment point and methods to fill it.
LocalDerivative mLocalDerivativeX
first (X) component of the local derivatives
bool computeGlobalDerivativeY()
compute second (Y) component of the global derivatives
const o2::itsmft::TopologyDictionary * mDictionary
cluster patterns dictionary
bool mIsTrackInitialParamSet
boolean to indicate if the initial track parameters are recorded
void recordTrackInitialParam(o2::mft::TrackMFT &mftTrack)
store the track parameters at the initial z0 plane
GlobalDerivative mGlobalDerivativeZ
last (Z) component of the global derivatives
LocalDerivative mLocalDerivativeZ
last (Z) component of the local derivatives
LocalDerivative mLocalDerivativeY
second (Y) component of the local derivatives
bool computeGlobalDerivativeZ()
compute last (Z) component of the global derivatives
bool computeLocalDerivativeY()
compute second (Y) component of the local derivatives
o2::math_utils::Point3D< double > mLocalMeasuredPositionSigma
Estimated error on local position measurement.
bool computeLocalDerivativeZ()
compute last (Z) component of the local derivatives
o2::mft::GeometryTGeo * mGeometry
MFT geometry.
o2::math_utils::Point3D< double > mGlobalRecoPosition
Current cartesian position (cm, in Global ref. system) of the reconstructed track analytically propag...
bool mIsGlobalDerivativeDone
boolean to indicate if the global derivatives computaion is done
bool mIsClusterOk
boolean to check if cluster was exploitable to get coordinates
void resetGlobalDerivatives()
reset all elements to zero for the global derivatives
bool computeGlobalDerivativeX()
compute first (X) component of the global derivatives
void setGlobalRecoPosition(o2::mft::TrackMFT &mftTrack)
void convertCompactClusters(gsl::span< const itsmft::CompClusterExt > clusters, gsl::span< const unsigned char >::iterator &pattIt, std::vector< o2::BaseCluster< double > > &outputLocalClusters, std::vector< o2::BaseCluster< double > > &outputGlobalClusters)
convert compact clusters (pixel coordinates in row, col) from workflow to base clusters with 3D posit...
void setMeasuredPosition(const o2::BaseCluster< double > &localCluster, const o2::BaseCluster< double > &globalCluster)
std::unique_ptr< o2::mft::AlignSensorHelper > mChipHelper
utility to access the sensor transform used in the computation of the derivatives
o2::math_utils::Point3D< double > mGlobalResidual
residual between track x-ing point and cluster in global ref. system
TrackParam mTrackInitialParam
Track parameters at the initial reference plane z = z0.
void computeGlobalDerivatives()
method to call the computation of all three components of the global derivative
void resetAlignPoint()
reset all quantities that define an alignment point to their default value
void computeLocalDerivatives()
method to call the computation of all three compnonents of the local derivative
GlobalDerivative mGlobalDerivativeY
second (Y) component of the global derivatives
bool mIsLocalDerivativeDone
boolean to indicate if the local derivatives computation is done
o2::math_utils::Point3D< double > mLocalResidual
residual between track x-ing point and cluster in local ref. system
void resetLocalDerivatives()
reset all elements to zero for the local derivatives
void resetTrackInitialParam()
reset all track parameters to their default value (zero)
o2::math_utils::Point3D< double > mLocalMeasuredPosition
Current cartesian position (cm, in Local ref. system) of the cluster.
bool computeLocalDerivativeX()
compute first (X) component of the local derivatives
GlobalDerivative mGlobalDerivativeX
first (X) component of the global derivatives
o2::math_utils::Point3D< double > mLocalRecoPosition
Current cartesian position (cm, in Local ref. system) of the reconstructed track analytically propaga...
bool mIsAlignPointSet
boolean to indicate if mGlobalRecoPosition and mLocalMeasuredPosition are set
o2::math_utils::Point3D< double > mGlobalMeasuredPosition
Current cartesian position (cm, in Global ref. system) of the cluster.
void fillMatrixCache(Int_t mask) override
static GeometryTGeo * Instance()
void reset()
reset all data members to default value (zero)
double mdDeltaY
derivative w.r.t. delta translation along global y-axis
double mdDeltaRz
derivative w.r.t. delta rotation angle around global z-axis
double mdDeltaZ
derivative w.r.t. delta translation along global z-axis
double mdDeltaX
derivative w.r.t. delta translation along global x-axis
double mdY0
derivative w.r.t. track param. y0
double mdTy
derivative w.r.t. track param. ty
void reset()
reset all data members to default value (zero)
double mdTx
derivative w.r.t. track param. tx
double mdX0
derivative w.r.t. track param. x0
Double_t getTanl() const
Definition TrackFwd.h:72
Double_t getPhi() const
Definition TrackFwd.h:56
Double_t getZ() const
return Z coordinate (cm)
Definition TrackFwd.h:46
Double_t getY() const
Definition TrackFwd.h:52
Double_t getX() const
Definition TrackFwd.h:49
constexpr float DefClusErrorCol
Definition IOUtils.h:55
constexpr float DefClusErrorRow
Definition IOUtils.h:54
static constexpr int L2G
Definition Cartesian.h:54
static constexpr int T2L
Definition Cartesian.h:55
std::vector< Cluster > clusters