ATLAS Offline Software
Loading...
Searching...
No Matches
CalibratorRegistry.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3 */
4#ifndef CALIBRATORREGISTRY_H
5#define CALIBRATORREGISTRY_H
6
8#include "Acts/Utilities/Delegate.hpp"
9#include "Acts/Geometry/GeometryContext.hpp"
10#include "Acts/Utilities/CalibrationContext.hpp"
11
12template <typename calibrator_type_helper_t, typename measurement_container_variant_t>
14 using CalibratorType =calibrator_type_helper_t;
15
16 template <std::size_t DIM, typename T_ValueType>
17 using Calibrator = typename CalibratorType::template Calibrator<DIM,T_ValueType>;
18
19 // Get the calibrator for the given measurement type T_ValueType, and the measurement dimension
20 template <std::size_t DIM, typename T_ValueType>
21 const typename calibrator_type_helper_t::template Calibrator<DIM, T_ValueType> &calibrator() const;
22
23 // register a calibrator for the given measurement type and dimension.
24 // the allowed measurement types and their allowed dimensions are defined by the measurement container variant
25 template <std::size_t DIM, typename T_ValueType>
26 void setCalibrator(const typename calibrator_type_helper_t::template Calibrator<DIM, T_ValueType> &calibrator);
27
29 measurement_container_variant_t >::variant_type;
30
31protected:
32 std::array< CalibratorVariant, std::variant_size_v<measurement_container_variant_t> > m_calibrators;
33
34 template <std::size_t DIM, typename T_ValueType, std::size_t N>
35 static
36 const CalibratorVariant &
37 getCalibratorGeneric(const std::array< CalibratorVariant, std::variant_size_v<measurement_container_variant_t> > &calibrator_arr);
38};
39
40template <typename MeasurementTypeTraits, typename measurement_container_variant_t, typename bound_track_parameters_t>
42 template <std::size_t DIM>
43 using Measurement = typename MeasurementTypeTraits::template Measurement<DIM>;
44 template <std::size_t DIM>
45 using MeasurementCovariance = typename MeasurementTypeTraits::template MeasurementCovariance<DIM>;
46
47 template <std::size_t DIM, typename measurement_t>
48 using Calibrator = Acts::Delegate<
49 std::tuple<Measurement<DIM>,MeasurementCovariance<DIM>, unsigned int>
50 (const Acts::GeometryContext&,
51 const Acts::CalibrationContext&,
52 const Acts::Surface &,
53 const measurement_t &,
54 const bound_track_parameters_t &)>;
55
56 // the MeasurementContainer is a variant containing pointer to containers
57 template <typename T_ContainerPtr>
58 using container_type = std::remove_cv_t<std::remove_pointer_t<T_ContainerPtr> >;
59
60 // helper to determine the measurement value type from the container type
61 template <typename T_Container>
62 using container_value_type = typename T_Container::value_type;
63
64 // this is supposed to be the value type of the measurement container
65 // T_Container is ContainerWithDimension<T>, needed is T::const_value_type where T should
66 // be xAOD::PixelClusterContainer which should be DataVector<xAOD::PixelCluster>
67 template <typename T_Container>
68 using value_type = typename MeasurementTypeTraits::template MeassurementContainerValueType<typename T_Container::container_type >;
69
70 // the calibrators are associated to the element types of the container without pointer and const qualifiers
71 template <typename T_ContainerWithDimension>
72 using type = Calibrator< T_ContainerWithDimension::dimension() , std::remove_cv_t<std::remove_pointer_t< value_type<T_ContainerWithDimension> > > >;
73};
74
75template <typename MeasurementTypeTraits, typename measurement_container_variant_t, typename track_state_proxy_t >
77 template <std::size_t DIM>
78 using Measurement = typename MeasurementTypeTraits::template Measurement<DIM>;
79 template <std::size_t DIM>
80 using MeasurementCovariance = typename MeasurementTypeTraits::template MeasurementCovariance<DIM>;
81
82 template <std::size_t DIM, typename measurement_t>
83 using Calibrator = Acts::Delegate<
84 void (const Acts::GeometryContext&,
85 const Acts::CalibrationContext&,
86 const measurement_t &,
87 track_state_proxy_t &)>;
88
89 // the MeasurementContainer is a variant containing pointer to containers
90 template <typename T_ContainerPtr>
91 using container_type = std::remove_cv_t<std::remove_pointer_t<T_ContainerPtr> >;
92
93 // helper to determine the measurement value type from the container type
94 template <typename T_Container>
95 using container_value_type = typename T_Container::value_type;
96
97 // this is supposed to be the value type of the measurement container
98 // T_Container is ContainerWithDimension<T>, needed is T::const_value_type where T should
99 // be xAOD::PixelClusterContainer which should be DataVector<xAOD::PixelCluster>
100 template <typename T_Container>
101 using value_type = typename MeasurementTypeTraits::template MeassurementContainerValueType<typename T_Container::container_type >;
102
103 // the calibrators are associated to the element types of the container without pointer and const qualifiers
104 template <typename T_ContainerWithDimension>
105 using type = Calibrator< T_ContainerWithDimension::dimension() , std::remove_cv_t<std::remove_pointer_t< value_type<T_ContainerWithDimension> > > >;
106};
107
108// Helper class to store and retrieve calibrators for a certain measurement type and measurement dimension
109// this class only provides calibrators for types and associated dimension which are defined by the measurement container
110// and the associated dimension. The template parameter is assumed to be:
111// std::variant< ContainerRefWithDim<ContainerType1,N1>, ContainerRefWithDim<ContainerType2,N2>, .... >
112// where ContainerType1 is the type of the container e.g. xAOD::PixelClusterContainer, and N1 the associated
113// dimension e.g. 2.
114template <typename MeasurementTypeTraits, typename measurement_container_variant_t, typename track_state_proxy_t>
116 measurement_container_variant_t,
117 track_state_proxy_t>,
118 measurement_container_variant_t>;
119template <typename MeasurementTypeTraits, typename measurement_container_variant_t, typename bound_track_parameters_t>
121 measurement_container_variant_t,
122 bound_track_parameters_t>,
123 measurement_container_variant_t>;
124
125// helper to find the variant index for the given measurement type
126template <typename calibrator_type_helper_t, typename measurement_container_variant_t>
127template <std::size_t DIM, typename T_ValueType, std::size_t N>
128inline
131 ::getCalibratorGeneric(const std::array< CalibratorVariant, std::variant_size_v<measurement_container_variant_t> > &calibrator_arr){
132 if constexpr(N==1) {
133 return calibrator_arr[0];
134 }
135 else {
136 using Container = std::remove_cv_t<std::remove_pointer_t<decltype( ActsTrk::detail::MakeDerivedVariant::lvalue(std::get<N-1>(measurement_container_variant_t{})))> >;
137 // Container should be ContainerWithDimension<T>, needed is ContainerWithDimension<T>::contaienr_type
138 using ElementType = typename calibrator_type_helper_t::template container_value_type<typename Container::container_type>;
139 using BaseElementType = typename std::remove_cv_t<std::remove_pointer_t< ElementType > >;
140 if constexpr(std::is_same<T_ValueType,BaseElementType>::value && Container::dimension() == DIM) {
141 return calibrator_arr[N-1];
142 }
143 else {
144 return getCalibratorGeneric<DIM, T_ValueType,N-1>(calibrator_arr);
145 }
146 }
147}
148
149template <typename calibrator_type_helper_t, typename measurement_container_variant_t>
150template <std::size_t DiM, typename T_ValueType>
151inline
153::setCalibrator(const typename calibrator_type_helper_t::template Calibrator<DiM, T_ValueType> &calibrator) {
154 CalibratorVariant universial { calibrator };
155 assert( universial.index() < m_calibrators.size() );
156 m_calibrators.at(universial.index()) = std::move( universial);
157}
158
159template <typename calibrator_type_helper_t, typename measurement_container_variant_t>
160template <std::size_t DIM, typename T_ValueType>
161inline
166 return std::get<Calibrator<DIM, T_ValueType> >(universal);
167}
168#endif
CalibratorRegistryBase< PreCalibratorTypeTraits< MeasurementTypeTraits, measurement_container_variant_t, bound_track_parameters_t >, measurement_container_variant_t > PreCalibratorRegistry
CalibratorRegistryBase< CalibratorTypeTraits< MeasurementTypeTraits, measurement_container_variant_t, track_state_proxy_t >, measurement_container_variant_t > CalibratorRegistry
An instance of this class is created for each sub-level of the TRT by the TRTCalibrator.
Definition Calibrator.h:178
storage of the time histories of all the cells
typename CalibratorType::template Calibrator< DIM, T_ValueType > Calibrator
ActsTrk::detail::MakeDerivedVariant::MakeVariant< calibrator_type_helper_t, measurement_container_variant_t >::variant_type CalibratorVariant
static const CalibratorVariant & getCalibratorGeneric(const std::array< CalibratorVariant, std::variant_size_v< measurement_container_variant_t > > &calibrator_arr)
const calibrator_type_helper_t::template Calibrator< DIM, T_ValueType > & calibrator() const
const CalibratorRegistryBase< CalibratorTypeTraits< MeasurementTypeTraits, measurement_container_variant_t, track_state_proxy_t >, measurement_container_variant_t >::template Calibrator< DIM, T_ValueType > & calibrator() const
void setCalibrator(const typename calibrator_type_helper_t::template Calibrator< DIM, T_ValueType > &calibrator)
calibrator_type_helper_t CalibratorType
std::remove_cv_t< std::remove_pointer_t< T_ContainerPtr > > container_type
typename CalibratedMeasurementTraits::template MeasurementCovariance< DIM > MeasurementCovariance
typename CalibratedMeasurementTraits::template Measurement< DIM > Measurement
typename T_Container::value_type container_value_type
Acts::Delegate< void(const Acts::GeometryContext &, const Acts::CalibrationContext &, const measurement_t &, typename traits::TrackStateProxy &)> Calibrator
typename CalibratedMeasurementTraits::template MeassurementContainerValueType< typename T_Container::container_type > value_type
Calibrator< T_ContainerWithDimension::dimension(), std::remove_cv_t< std::remove_pointer_t< value_type< T_ContainerWithDimension > > > > type
typename CalibratedMeasurementTraits::template Measurement< DIM > Measurement
Acts::Delegate< std::tuple< Measurement< DIM >, MeasurementCovariance< DIM >, unsigned int >(const Acts::GeometryContext &, const Acts::CalibrationContext &, const Acts::Surface &, const measurement_t &, const typename traits::BoundTrackParameters &)> Calibrator
std::remove_cv_t< std::remove_pointer_t< T_ContainerPtr > > container_type
typename CalibratedMeasurementTraits::template MeassurementContainerValueType< typename T_Container::container_type > value_type
typename CalibratedMeasurementTraits::template MeasurementCovariance< DIM > MeasurementCovariance
Calibrator< T_ContainerWithDimension::dimension(), std::remove_cv_t< std::remove_pointer_t< value_type< T_ContainerWithDimension > > > > type
typename T_Container::value_type container_value_type