Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
MeasurementCalibratorBase.icc
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 namespace ActsTrk::detail {
6 
7  template <typename state_t>
8  inline void MeasurementCalibratorBase::setProjector(xAOD::UncalibMeasType measType,
9  Acts::SurfaceBounds::BoundsType boundType,
10  state_t &trackState ) const
11  {
12 
13  switch (measType) {
14  case xAOD::UncalibMeasType::StripClusterType: {
15  const std::size_t projector_idx = boundType == Acts::SurfaceBounds::eAnnulus;
16  trackState.setProjectorSubspaceIndices(s_stripSubspaceIndices[projector_idx]);
17  break;
18  }
19  case xAOD::UncalibMeasType::PixelClusterType: {
20  trackState.setProjectorSubspaceIndices(s_pixelSubspaceIndices);
21  break;
22  }
23  case xAOD::UncalibMeasType::HGTDClusterType: {
24  trackState.setProjectorSubspaceIndices(s_hgtdSubspaceIndices);
25  break;
26  }
27  default:
28  throw std::domain_error("Can only handle measurement type pixel or strip");
29  }
30 
31  }
32 
33  template <std::size_t Dim,
34  typename pos_t,
35  typename cov_t,
36  typename state_t>
37  inline void MeasurementCalibratorBase::setState(xAOD::UncalibMeasType measType,
38  const pos_t& locpos,
39  const cov_t& cov,
40  Acts::SurfaceBounds::BoundsType boundType,
41  state_t &trackState) const
42  {
43  trackState.allocateCalibrated(Dim);
44  setProjector(measType, boundType, trackState);
45  trackState.template calibrated<Dim>() = locpos.template cast<double>();
46  trackState.template calibratedCovariance<Dim>() = cov.template cast<double>();
47  }
48 
49  template <class measurement_t,
50  typename trajectory_t>
51  inline void MeasurementCalibratorBase::setStateFromMeasurement(const measurement_t &measurement,
52  Acts::SurfaceBounds::BoundsType bound_type,
53  typename Acts::MultiTrajectory<trajectory_t>::TrackStateProxy &trackState ) const
54  {
55 
56  switch (measurement.type()) {
57  case (xAOD::UncalibMeasType::StripClusterType): {
58  setState<1>(measurement.type(),
59  measurement.template localPosition<1>(),
60  measurement.template localCovariance<1>().template topLeftCorner<1, 1>(),
61  bound_type,
62  trackState);
63  break;
64  }
65  case (xAOD::UncalibMeasType::PixelClusterType): {
66  setState<2>(measurement.type(),
67  measurement.template localPosition<2>(),
68  measurement.template localCovariance<2>().template topLeftCorner<2, 2>(),
69  bound_type,
70  trackState);
71  break;
72  }
73  case (xAOD::UncalibMeasType::HGTDClusterType): {
74  setState<3>(measurement.type(),
75  measurement.template localPosition<3>(),
76  measurement.template localCovariance<3>().template topLeftCorner<3, 3>(),
77  bound_type,
78  trackState);
79  break;
80  }
81  default:
82  throw std::domain_error("Can only handle measurement type pixel or strip");
83  }
84  }
85 
86 } // namespace ActsTrk::detail
87