ATLAS Offline Software
Loading...
Searching...
No Matches
MeasurementCalibratorBase.icc
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4#ifndef ACTSCALIBBASE_MEASUREMENTCALIBRATORBASE_ICC
5#define ACTSCALIBBASE_MEASUREMENTCALIBRATORBASE_ICC
6
7namespace ActsTrk::detail {
8template <std::size_t Dim, Acts::TrackStateProxyConcept proxy_t, typename pos_t, typename cov_t>
9 inline void MeasurementCalibratorBase::setState(const ProjectorType projector,
10 const pos_t& locpos, const cov_t& cov,
11 Acts::SourceLink link,
12 proxy_t& trackState) const {
13 prepareCalibratedState<Dim>(projector, std::move(link), trackState);
14 trackState.template calibrated<Dim>() = locpos.template cast<double>();
15 trackState.template calibratedCovariance<Dim>() = cov.template cast<double>();
16 }
17
18template <std::size_t Dim, Acts::TrackStateProxyConcept proxy_t>
19 void MeasurementCalibratorBase::prepareCalibratedState(const ProjectorType projector,
20 Acts::SourceLink link,
21 proxy_t& trackState) const {
22 static_assert(Dim>0 && Dim <= 3, "Wrong measurement dimension");
23 trackState.setUncalibratedSourceLink(std::move(link));
24 trackState.setProjectorSubspaceIndices(s_boundSpaceIndices[Acts::toUnderlying(projector)]);
25 trackState.allocateCalibrated(Dim);
26 }
27
28template <Acts::PointerConcept Ptr_t>
29 inline Acts::SourceLink MeasurementCalibratorBase::pack(const Ptr_t& measurement) {
30 if (!measurement) {
31 return Acts::SourceLink{SourceLink_t{}};
32 }
33 return Acts::SourceLink{SourceLink_t{measurement}};
34 }
35template <Acts::PointerConcept Ptr_t>
36 inline void MeasurementCalibratorBase::pack(const std::vector<Ptr_t>& measList,
37 std::vector<Acts::SourceLink>& targetSL) {
38 targetSL.reserve(targetSL.size() + measList.size());
39 for (const auto& meas : measList) {
40 targetSL.emplace_back(pack(meas));
41 }
42 }
43 inline MeasurementCalibratorBase::SourceLink_t
44 MeasurementCalibratorBase::unpackBase(const Acts::SourceLink& sl) {
45 return sl.template get<SourceLink_t>();
46 }
47 inline SourceLinkType MeasurementCalibratorBase::getType(const Acts::SourceLink& sl) {
48 const auto& atlasSL = sl.template get<SourceLink_t>();
49 return std::visit([](const auto& visitSl) -> SourceLinkType {
50 using SL_t = std::decay_t<decltype(visitSl)>;
51 if constexpr (std::is_same_v<SL_t, const xAOD::UncalibratedMeasurement*>) {
52 return SourceLinkType::xAODUnCalibMeas;
53 } else if constexpr(std::is_same_v<SL_t, const Trk::PrepRawData*>) {
54 return SourceLinkType::TrkPrepRawData;
55 } else if constexpr (std::is_same_v<SL_t, const Trk::MeasurementBase*>) {
56 return SourceLinkType::TrkMeasurement;
57 } else {
58 return SourceLinkType::nTypes;
59 }
60
61 }, atlasSL);
62
63 }
64} // namespace ActsTrk::detail
65
66#endif
67