2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
5 namespace ActsTrk::detail {
7 template <typename state_t>
8 inline void MeasurementCalibratorBase::setProjector(xAOD::UncalibMeasType measType,
9 Acts::SurfaceBounds::BoundsType boundType,
10 state_t &trackState ) const
14 case xAOD::UncalibMeasType::StripClusterType: {
15 const std::size_t projector_idx = boundType == Acts::SurfaceBounds::eAnnulus;
16 trackState.setProjectorSubspaceIndices(s_stripSubspaceIndices[projector_idx]);
19 case xAOD::UncalibMeasType::PixelClusterType: {
20 trackState.setProjectorSubspaceIndices(s_pixelSubspaceIndices);
23 case xAOD::UncalibMeasType::HGTDClusterType: {
24 trackState.setProjectorSubspaceIndices(s_hgtdSubspaceIndices);
28 throw std::domain_error("Can only handle measurement type pixel or strip");
33 template <std::size_t Dim,
37 inline void MeasurementCalibratorBase::setState(xAOD::UncalibMeasType measType,
40 Acts::SurfaceBounds::BoundsType boundType,
41 state_t &trackState) const
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>();
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
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>(),
65 case (xAOD::UncalibMeasType::PixelClusterType): {
66 setState<2>(measurement.type(),
67 measurement.template localPosition<2>(),
68 measurement.template localCovariance<2>().template topLeftCorner<2, 2>(),
73 case (xAOD::UncalibMeasType::HGTDClusterType): {
74 setState<3>(measurement.type(),
75 measurement.template localPosition<3>(),
76 measurement.template localCovariance<3>().template topLeftCorner<3, 3>(),
82 throw std::domain_error("Can only handle measurement type pixel or strip");
86 } // namespace ActsTrk::detail