ATLAS Offline Software
MeasurementCalibrator2.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef MEASUREMENTCALIBRATOR2_H
6 #define MEASUREMENTCALIBRATOR2_H
7 
13 
14 #include "Acts/EventData/MultiTrajectory.hpp"
15 #include "Acts/EventData/TrackParameters.hpp"
16 #include "Acts/Geometry/GeometryIdentifier.hpp"
17 #include "Acts/Surfaces/Surface.hpp"
18 #include "Acts/Surfaces/SurfaceBounds.hpp"
19 #include "Acts/Definitions/TrackParametrization.hpp"
20 #include "Acts/Utilities/AlgebraHelpers.hpp"
21 #include <Eigen/Core>
22 
26 
28 
29 #include <stdexcept>
30 #include <string>
31 #include <cassert>
32 
33 namespace ActsTrk {
34  // helper to create map from nound track parameters to measurements
36  template <std::size_t N>
37  using ParameterMap = std::array<unsigned char, N>;
38 
39  static constexpr ParameterMap<1> makeStripProjector(bool annulus_strip) {
40  if (annulus_strip) {
41  return ParameterMap<1>{static_cast<unsigned char>(Acts::eBoundLoc1)};
42  } else {
43  return ParameterMap<1>{static_cast<unsigned char>(Acts::eBoundLoc0)};
44  }
45  }
46  // create strip projector bitsets for normal and annulus bounds
47  static constexpr std::array<ParameterMap<1>,2> makeStripProjectorArray() {
48  return std::array<ParameterMap<1>,2>{makeStripProjector(false), makeStripProjector(true) };
49  }
50 
51  // create pixel projector bitsets
52  static constexpr ParameterMap<2> makePixelProjector() {
53  return ParameterMap<2>{static_cast<unsigned char>(Acts::eBoundLoc0), static_cast<unsigned char>(Acts::eBoundLoc1)};
54  }
55 
56  std::array<unsigned char, 128> m_volumeIdToMeasurementType{};
57  xAOD::UncalibMeasType measurementTypeFromVolumeId(unsigned int volume_id) const {
58  unsigned char shift = (volume_id%2) ? 4 : 0;
59  unsigned char idx = volume_id/2;
60  return static_cast<xAOD::UncalibMeasType>((m_volumeIdToMeasurementType[idx] >> shift) & 0xf);
61  }
63  static_assert( static_cast<unsigned int>(xAOD::UncalibMeasType::nTypes) < 16u );
64  unsigned char shift = (volume_id%2) ? 4 : 0;
65  unsigned char idx = volume_id/2;
66  m_volumeIdToMeasurementType[idx] |= ((static_cast<unsigned int>(type) & 0xf) << shift);
67  }
71  {
72  // @TODO get mapping from converter tool ?
73  std::vector<unsigned int> pixel_vol {16, 15, 9, 20, 19, 18, 10, 14, 13, 8};
74  for (unsigned int vol_id : pixel_vol) {
76  }
77  std::vector<unsigned int> strip_vol {23, 22, 24};
78  for (unsigned int vol_id : strip_vol) {
80  }
81  }
82 
83  template <std::size_t DIM>
84  ParameterMap<DIM> parameterMap([[maybe_unused]] const Acts::GeometryContext&,
85  [[maybe_unused]] const Acts::CalibrationContext&,
86  const Acts::Surface &surface) const {
87  // @TODO make interface measurement type aware ?
88  if constexpr(DIM==2) {
89  assert( measurementTypeFromVolumeId(surface.geometryId().volume()) == xAOD::UncalibMeasType::PixelClusterType );
90  return m_pixelProjector;
91  }
92  else if constexpr(DIM==1) {
93  assert( measurementTypeFromVolumeId(surface.geometryId().volume()) == xAOD::UncalibMeasType::StripClusterType );
94  auto boundType = surface.bounds().type();
95  const std::size_t projector_idx = boundType == Acts::SurfaceBounds::eAnnulus;
96  return m_stripProjector[projector_idx];
97  }
98  else {
99  throw std::runtime_error("Unsupported dimension");
100  }
101 
102  }
103  std::array<ParameterMap<1>,2> m_stripProjector; // strip projector for normal and annulus bounds
105 
106  };
107 
111  // @TODO should pass through bound state
112  using PixelCalibrator = Acts::Delegate<
113  std::pair<PixelPos, PixelCov>(const Acts::GeometryContext&,
114  const Acts::CalibrationContext&,
115  const xAOD::PixelCluster &,
116  const Acts::BoundTrackParameters &)>;
117 
120  using StripCalibrator = Acts::Delegate<
121  std::pair<StripPos, StripCov>(const Acts::GeometryContext&,
122  const Acts::CalibrationContext&,
123  const xAOD::StripCluster &,
124  const Acts::BoundTrackParameters &)>;
129 
131  {
132  // @TODO add support for real calibrators
133 
134  bool calibrate_after_measurement_selection = true;
135  if (pixelTool) {
136  calibrate_after_measurement_selection = pixelTool->calibrateAfterMeasurementSelection();
137  pixelTool->connectPixelCalibrator( calibrate_after_measurement_selection ? pixel_postCalibrator : pixel_preCalibrator );
138  }
139  if (calibrate_after_measurement_selection) {
140  pixel_preCalibrator.template connect<&MeasurementCalibrator2::passthrough<2, xAOD::PixelCluster>>(this);
141  }
142  strip_preCalibrator.template connect<&MeasurementCalibrator2::passthrough<1, xAOD::StripCluster>>(this);
143  }
144 
149 
150 
151  template <std::size_t Dim, typename Cluster>
152  std::pair<xAOD::MeasVector<Dim>, xAOD::MeasMatrix<Dim>>
153  passthrough([[maybe_unused]] const Acts::GeometryContext& gctx,
154  [[maybe_unused]] const Acts::CalibrationContext& cctx,
155  const Cluster &cluster,
156  const Acts::BoundTrackParameters &) const
157  {
158  return std::make_pair(cluster.template localPosition<Dim>(),
159  cluster.template localCovariance<Dim>());
160  }
161  };
162 
163 }
164 #endif
ActsTrk::IOnBoundStateCalibratorTool
Definition: IOnBoundStateCalibratorTool.h:18
ActsTrk::MeasurementParameterMap::setMeasurementTypeForVolumeId
void setMeasurementTypeForVolumeId(unsigned int volume_id, xAOD::UncalibMeasType type)
Definition: MeasurementCalibrator2.h:62
StripCluster.h
UncalibratedMeasurement.h
MeasurementBase.h
xAOD::UncalibMeasType::StripClusterType
@ StripClusterType
ActsTrk::MeasurementParameterMap::m_stripProjector
std::array< ParameterMap< 1 >, 2 > m_stripProjector
Definition: MeasurementCalibrator2.h:103
ActsTrk::MeasurementCalibrator2::pixelPreCalibrator
const PixelCalibrator & pixelPreCalibrator() const
Definition: MeasurementCalibrator2.h:147
ActsTrk::MeasurementCalibrator2::stripPostCalibrator
const StripCalibrator & stripPostCalibrator() const
Definition: MeasurementCalibrator2.h:146
TrackingSurfaceHelper.h
ActsTrk::MeasurementCalibrator2::StripPos
xAOD::MeasVector< 1 > StripPos
Definition: MeasurementCalibrator2.h:118
ActsTrk::MeasurementCalibrator2::passthrough
std::pair< xAOD::MeasVector< Dim >, xAOD::MeasMatrix< Dim > > passthrough([[maybe_unused]] const Acts::GeometryContext &gctx, [[maybe_unused]] const Acts::CalibrationContext &cctx, const Cluster &cluster, const Acts::BoundTrackParameters &) const
Definition: MeasurementCalibrator2.h:153
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:83
ActsTrk::MeasurementCalibrator2::PixelCalibrator
Acts::Delegate< std::pair< PixelPos, PixelCov >(const Acts::GeometryContext &, const Acts::CalibrationContext &, const xAOD::PixelCluster &, const Acts::BoundTrackParameters &)> PixelCalibrator
Definition: MeasurementCalibrator2.h:116
ActsTrk::MeasurementCalibrator2::stripPreCalibrator
const StripCalibrator & stripPreCalibrator() const
Definition: MeasurementCalibrator2.h:148
ActsTrk::MeasurementCalibrator2::MeasurementCalibrator2
MeasurementCalibrator2(const IOnBoundStateCalibratorTool *pixelTool)
Definition: MeasurementCalibrator2.h:130
ActsTrk::MeasurementParameterMap::m_volumeIdToMeasurementType
std::array< unsigned char, 128 > m_volumeIdToMeasurementType
Definition: MeasurementCalibrator2.h:56
ActsTrk::MeasurementCalibrator2::pixel_postCalibrator
PixelCalibrator pixel_postCalibrator
Definition: MeasurementCalibrator2.h:125
ActsTrk::MeasurementParameterMap::measurementTypeFromVolumeId
xAOD::UncalibMeasType measurementTypeFromVolumeId(unsigned int volume_id) const
Definition: MeasurementCalibrator2.h:57
ActsTrk::MeasurementCalibrator2::strip_preCalibrator
StripCalibrator strip_preCalibrator
Definition: MeasurementCalibrator2.h:128
ActsTrk::MeasurementParameterMap
Definition: MeasurementCalibrator2.h:35
ActsTrk::MeasurementParameterMap::makeStripProjectorArray
static constexpr std::array< ParameterMap< 1 >, 2 > makeStripProjectorArray()
Definition: MeasurementCalibrator2.h:47
ActsTrk::MeasurementParameterMap::ParameterMap
std::array< unsigned char, N > ParameterMap
Definition: MeasurementCalibrator2.h:37
IOnBoundStateCalibratorTool.h
ActsTrk::MeasurementCalibrator2::PixelCov
xAOD::MeasMatrix< 2 > PixelCov
Definition: MeasurementCalibrator2.h:110
PixelCluster.h
xAOD::StripCluster_v1
Definition: StripCluster_v1.h:17
ActsTrk::IOnBoundStateCalibratorTool::connectPixelCalibrator
virtual void connectPixelCalibrator([[maybe_unused]] PixelCalibrator &calibrator) const
Definition: IOnBoundStateCalibratorTool.h:40
MeasurementDefs.h
ActsTrk::MeasurementCalibrator2
Definition: MeasurementCalibrator2.h:108
xAOD::MeasVector
Eigen::Matrix< float, N, 1 > MeasVector
Abrivation of the Matrix & Covariance definitions.
Definition: MeasurementDefs.h:52
xAOD::UncalibMeasType::nTypes
@ nTypes
ActsTrk::MeasurementCalibrator2::pixelPostCalibrator
const PixelCalibrator & pixelPostCalibrator() const
Definition: MeasurementCalibrator2.h:145
ActsTrk::MeasurementParameterMap::MeasurementParameterMap
MeasurementParameterMap()
Definition: MeasurementCalibrator2.h:68
ActsTrk::MeasurementParameterMap::parameterMap
ParameterMap< DIM > parameterMap([[maybe_unused]] const Acts::GeometryContext &, [[maybe_unused]] const Acts::CalibrationContext &, const Acts::Surface &surface) const
Definition: MeasurementCalibrator2.h:84
ActsTrk::MeasurementCalibrator2::StripCalibrator
Acts::Delegate< std::pair< StripPos, StripCov >(const Acts::GeometryContext &, const Acts::CalibrationContext &, const xAOD::StripCluster &, const Acts::BoundTrackParameters &)> StripCalibrator
Definition: MeasurementCalibrator2.h:124
ActsTrk::MeasurementParameterMap::makePixelProjector
static constexpr ParameterMap< 2 > makePixelProjector()
Definition: MeasurementCalibrator2.h:52
ActsTrk::MeasurementCalibrator2::strip_postCalibrator
StripCalibrator strip_postCalibrator
Definition: MeasurementCalibrator2.h:126
xAOD::PixelCluster_v1
Definition: PixelCluster_v1.h:17
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
ActsTrk::MeasurementCalibrator2::pixel_preCalibrator
PixelCalibrator pixel_preCalibrator
Definition: MeasurementCalibrator2.h:127
xAOD::UncalibMeasType
UncalibMeasType
Define the type of the uncalibrated measurement.
Definition: MeasurementDefs.h:24
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
IActsToTrkConverterTool.h
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MuonDetectorBuilderTool.cxx:34
ActsTrk::IOnBoundStateCalibratorTool::calibrateAfterMeasurementSelection
virtual bool calibrateAfterMeasurementSelection() const =0
xAOD::MeasMatrix
Eigen::Matrix< float, N, N > MeasMatrix
Definition: MeasurementDefs.h:54
ActsTrk::MeasurementCalibrator2::PixelPos
xAOD::MeasVector< 2 > PixelPos
Definition: MeasurementCalibrator2.h:109
ActsTrk::MeasurementCalibrator2::StripCov
xAOD::MeasMatrix< 1 > StripCov
Definition: MeasurementCalibrator2.h:119
xAOD::UncalibMeasType::PixelClusterType
@ PixelClusterType
ActsTrk::MeasurementParameterMap::m_pixelProjector
ParameterMap< 2 > m_pixelProjector
Definition: MeasurementCalibrator2.h:104
ActsTrk::MeasurementParameterMap::makeStripProjector
static constexpr ParameterMap< 1 > makeStripProjector(bool annulus_strip)
Definition: MeasurementCalibrator2.h:39