Juggler
Juggling algorithms and event processing using gaudi framework
Measurement.hpp
Go to the documentation of this file.
1 // SPDX-License-Identifier: LGPL-3.0-or-later
2 // Copyright (C) 2022 Whitney Armstrong, Wouter Deconinck
3 
4 #ifndef JugTrack_Measurement_HH
5 #define JugTrack_Measurement_HH
6 
7 #include "Acts/EventData/Measurement.hpp"
8 #include "Acts/EventData/MultiTrajectory.hpp"
9 #include "Acts/EventData/SourceLink.hpp"
11 
12 #include <cassert>
13 #include <vector>
14 
15 namespace Jug {
16 
17  /// Variable measurement type that can contain all possible combinations.
18  using Measurement = ::Acts::BoundVariantMeasurement;
19  /// Container of measurements.
20  ///
21  /// In contrast to the source links, the measurements themself must not be
22  /// orderable. The source links stored in the measurements are treated
23  /// as opaque here and no ordering is enforced on the stored measurements.
24  using MeasurementContainer = std::vector<Measurement>;
25 
26  /// Calibrator to convert an index source link to a measurement.
27  class MeasurementCalibrator {
28  public:
29  /// Construct an invalid calibrator. Required to allow copying.
30  MeasurementCalibrator() = default;
31  /// Construct using a user-provided container to chose measurements from.
32  MeasurementCalibrator(const MeasurementContainer& measurements) : m_measurements(&measurements) {}
33 
34  /// Find the measurement corresponding to the source link.
35  ///
36  /// @tparam parameters_t Track parameters type
37  /// @param gctx The geometry context (unused)
38  /// @param trackState The track state to calibrate
39  void calibrate(const Acts::GeometryContext& /*gctx*/,
40  Acts::MultiTrajectory::TrackStateProxy trackState) const {
41  const auto& sourceLink =
42  static_cast<const IndexSourceLink&>(trackState.uncalibrated());
43  std::visit(
44  [&trackState](const auto& meas) { trackState.setCalibrated(meas); },
45  (*m_measurements)[sourceLink.index()]);
46  }
47 
48  private:
49  // use pointer so the calibrator is copyable and default constructible.
50  const MeasurementContainer* m_measurements = nullptr;
51  };
52 
53 } // namespace Jug
54 
55 #endif
Jug::MeasurementCalibrator::calibrate
void calibrate(const Acts::GeometryContext &, Acts::MultiTrajectory::TrackStateProxy trackState) const
Definition: Measurement.hpp:39
Jug::MeasurementCalibrator::MeasurementCalibrator
MeasurementCalibrator()=default
Construct an invalid calibrator. Required to allow copying.
Jug::Measurement
::Acts::BoundVariantMeasurement< IndexSourceLink > Measurement
Variable measurement type that can contain all possible combinations.
Definition: Measurement.hpp:18
Jug::MeasurementContainer
std::vector< Measurement > MeasurementContainer
Definition: Measurement.hpp:24
Jug
Definition: DD4hepBField.h:22
Jug::MeasurementCalibrator::MeasurementCalibrator
MeasurementCalibrator(const MeasurementContainer &measurements)
Construct using a user-provided container to chose measurements from.
Definition: Measurement.hpp:32