23 #if defined(ACTS_CONCEPTS_SUPPORTED)
29 using Parameters = Eigen::Map<BoundVector>;
32 using ConstParameters = Eigen::Map<const BoundVector>;
33 using ConstCovariance = Eigen::Map<const BoundMatrix>;
36 using MeasurementCovariance = Eigen::Map<ActsSquareMatrix<2>>;
38 using ConstMeasurement = Eigen::Map<const ActsVector<2>>;
39 using ConstMeasurementCovariance = Eigen::Map<const ActsSquareMatrix<2>>;
41 using DynamicMeasurement =
43 Eigen::ColMajor | Eigen::AutoAlign>>;
44 using DynamicMeasurementCovariance =
46 Eigen::ColMajor | Eigen::AutoAlign>>;
48 using ConstDynamicMeasurement =
50 Eigen::ColMajor | Eigen::AutoAlign>>;
51 using ConstDynamicMeasurementCovariance = Eigen::Map<
53 Eigen::ColMajor | Eigen::AutoAlign>>;
55 constexpr
static auto ProjectorFlags = Eigen::RowMajor | Eigen::AutoAlign;
59 using EffectiveProjector =
66 concept TrackStateProxyConcept =
68 std::shared_ptr<const Surface>
surface) {
69 { cv.index() } -> std::same_as<TrackIndexType>;
71 { cv.previous() } -> std::same_as<TrackIndexType>;
73 { cv.hasPrevious() } -> std::same_as<bool>;
75 { cv.getMask() } -> std::same_as<TrackStatePropMask>;
77 { cv.referenceSurface() } -> std::same_as<const Surface&>;
79 { cv.hasReferenceSurface() } -> std::same_as<bool>;
81 { cv.template has<
hashString(
"blubb")>() } -> std::same_as<bool>;
83 { cv.has(key) } -> std::same_as<bool>;
85 { cv.has(
"blubb") } -> std::same_as<bool>;
89 cv.template component<int,
hashString(
"blubb")>()
90 } -> std::same_as<const int&>;
92 { cv.template component<int>(key) } -> std::same_as<const int&>;
94 { cv.parameters() } -> std::same_as<detail::ConstParameters>;
95 { cv.covariance() } -> std::same_as<detail::ConstCovariance>;
97 { cv.predicted() } -> std::same_as<detail::ConstParameters>;
98 { cv.predictedCovariance() } -> std::same_as<detail::ConstCovariance>;
99 { cv.hasPredicted() } -> std::same_as<bool>;
100 { v.hasPredicted() } -> std::same_as<bool>;
102 { cv.filtered() } -> std::same_as<detail::ConstParameters>;
103 { cv.filteredCovariance() } -> std::same_as<detail::ConstCovariance>;
104 { cv.hasFiltered() } -> std::same_as<bool>;
105 { v.hasFiltered() } -> std::same_as<bool>;
107 { cv.smoothed() } -> std::same_as<detail::ConstParameters>;
108 { cv.smoothedCovariance() } -> std::same_as<detail::ConstCovariance>;
109 { cv.hasSmoothed() } -> std::same_as<bool>;
110 { v.hasSmoothed() } -> std::same_as<bool>;
112 { cv.jacobian() } -> std::same_as<detail::ConstCovariance>;
113 { cv.hasJacobian() } -> std::same_as<bool>;
114 { v.hasJacobian() } -> std::same_as<bool>;
116 { cv.hasProjector() } -> std::same_as<bool>;
117 { v.hasProjector() } -> std::same_as<bool>;
119 { cv.effectiveProjector() } -> std::same_as<detail::EffectiveProjector>;
120 { v.effectiveProjector() } -> std::same_as<detail::EffectiveProjector>;
122 { cv.projectorBitset() } -> std::same_as<ProjectorBitset>;
123 { v.projectorBitset() } -> std::same_as<ProjectorBitset>;
125 { cv.getUncalibratedSourceLink() } -> std::same_as<SourceLink>;
126 { v.getUncalibratedSourceLink() } -> std::same_as<SourceLink>;
128 { cv.hasCalibrated() } -> std::same_as<bool>;
129 { v.hasCalibrated() } -> std::same_as<bool>;
131 { cv.template calibrated<2>() } -> std::same_as<detail::ConstMeasurement>;
133 cv.template calibratedCovariance<2>()
134 } -> std::same_as<detail::ConstMeasurementCovariance>;
136 { cv.effectiveCalibrated() } -> std::same_as<detail::ConstDynamicMeasurement>;
138 cv.effectiveCalibratedCovariance()
139 } -> std::same_as<detail::ConstDynamicMeasurementCovariance>;
141 { cv.calibratedSize() } -> std::same_as<TrackIndexType>;
142 { v.calibratedSize() } -> std::same_as<TrackIndexType>;
144 { cv.chi2() } -> std::same_as<double>;
146 { cv.pathLength() } -> std::same_as<double>;
148 { cv.typeFlags() } -> std::same_as<ConstTrackStateType>;
151 template <
typename T>
152 concept ConstTrackStateProxyConcept = TrackStateProxyConcept<T> &&
156 v.template component<int,
hashString(
"blubb")>()
157 } -> std::same_as<const int&>;
159 { v.template component<int>(key) } -> std::same_as<const int&>;
161 { v.predicted() } -> std::same_as<detail::ConstParameters>;
162 { v.predictedCovariance() } -> std::same_as<detail::ConstCovariance>;
164 { v.filtered() } -> std::same_as<detail::ConstParameters>;
165 { v.filteredCovariance() } -> std::same_as<detail::ConstCovariance>;
167 { v.smoothed() } -> std::same_as<detail::ConstParameters>;
168 { v.smoothedCovariance() } -> std::same_as<detail::ConstCovariance>;
170 { v.jacobian() } -> std::same_as<detail::ConstCovariance>;
172 { v.template calibrated<2>() } -> std::same_as<detail::ConstMeasurement>;
174 v.template calibratedCovariance<2>()
175 } -> std::same_as<detail::ConstMeasurementCovariance>;
177 { v.effectiveCalibrated() } -> std::same_as<detail::ConstDynamicMeasurement>;
179 v.effectiveCalibratedCovariance()
180 } -> std::same_as<detail::ConstDynamicMeasurementCovariance>;
182 { v.chi2() } -> std::same_as<double>;
184 { v.pathLength() } -> std::same_as<double>;
186 { v.typeFlags() } -> std::same_as<ConstTrackStateType>;
189 template <
typename T>
190 concept MutableTrackStateProxyConcept = TrackStateProxyConcept<T> &&
193 Eigen::Matrix<double, 3, 6> projector,
196 {v.shareFrom(mask, mask)};
198 {v.shareFrom(std::declval<typename T::Trajectory::ConstTrackStateProxy>(),
201 {v.shareFrom(std::declval<T>(), mask)};
204 {v.copyFrom(std::declval<typename T::Trajectory::ConstTrackStateProxy>(),
207 {v.copyFrom(std::declval<T>(), mask)};
212 { v.template component<int,
hashString(
"blubb")>() } -> std::same_as<int&>;
214 { v.template component<int>(key) } -> std::same_as<int&>;
216 { v.predicted() } -> std::same_as<detail::Parameters>;
217 { v.predictedCovariance() } -> std::same_as<detail::Covariance>;
219 { v.filtered() } -> std::same_as<detail::Parameters>;
220 { v.filteredCovariance() } -> std::same_as<detail::Covariance>;
222 { v.smoothed() } -> std::same_as<detail::Parameters>;
223 { v.smoothedCovariance() } -> std::same_as<detail::Covariance>;
225 { v.jacobian() } -> std::same_as<detail::Covariance>;
227 {v.setProjector(projector)};
229 {v.setProjectorBitset(projectorBitset)};
231 {v.setUncalibratedSourceLink(sl)};
233 { v.template calibrated<2>() } -> std::same_as<detail::Measurement>;
235 v.template calibratedCovariance<2>()
236 } -> std::same_as<detail::MeasurementCovariance>;
238 { v.effectiveCalibrated() } -> std::same_as<detail::DynamicMeasurement>;
240 v.effectiveCalibratedCovariance()
241 } -> std::same_as<detail::DynamicMeasurementCovariance>;
243 {v.setCalibrated(meas)};
245 {v.allocateCalibrated(measdim)};
247 { v.chi2() } -> std::same_as<double&>;
249 { v.pathLength() } -> std::same_as<double&>;
251 { v.typeFlags() } -> std::same_as<TrackStateType>;