ATLAS Offline Software
Loading...
Searching...
No Matches
TrkMeasurementCalibrator.icc
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "TrkSurfaces/Surface.h"
6#include "TrkSurfaces/SurfaceBounds.h"
7
8#include "InDetMeasurementUtilities/ClusterConversionUtilities.h"
9#include "TrkRIO_OnTrack/RIO_OnTrack.h"
10#include "InDetRIO_OnTrack/SCT_ClusterOnTrack.h"
11#include "InDetRIO_OnTrack/PixelClusterOnTrack.h"
12
13#include "HGTD_RIO_OnTrack/HGTD_ClusterOnTrack.h"
14
15#include <format>
16namespace ActsTrk::detail {
17
18 template <Acts::TrackStateProxyConcept proxy_t>
19 void TrkMeasurementCalibrator::calibrate(const Acts::GeometryContext& /*gctx*/,
20 const Acts::CalibrationContext& /*cctx*/,
21 const Acts::SourceLink& sl,
22 proxy_t trackState) const {
23 const Trk::MeasurementBase* sourceLink = unpack(sl);
24
25 auto detEl = dynamic_cast<const InDetDD::SiDetectorElement *>(sourceLink->associatedSurface().associatedDetectorElement());
26
27 if(auto pixelCluster = dynamic_cast<const InDet::PixelClusterOnTrack *>(sourceLink); pixelCluster != nullptr) {
28 auto [locPos, locCov] = TrackingUtilities::convertPix_LocalPosCov(*pixelCluster->prepRawData());
29 setState<2>(ProjectorType::e2DimNoTime, locPos, locCov, sl, trackState);
30 } else if(auto stripCluster = dynamic_cast<const InDet::SCT_ClusterOnTrack *>(sourceLink); stripCluster != nullptr) {
31 auto [locPos, locCov] = TrackingUtilities::convertSCT_LocalPosCov(*stripCluster->prepRawData());
32 if( detEl->isBarrel() ) {
33 setState<1>(ProjectorType::e1DimNoTime, locPos, locCov,
34 sl, trackState);
35 } else {
36 setState<1>(ProjectorType::e1DimRotNoTime, locPos, locCov,
37 sl, trackState);
38 }
39 } else if(auto hgtdCluster = dynamic_cast<const HGTD_ClusterOnTrack*>(sourceLink); hgtdCluster != nullptr ) {
40 auto [locPos, locCov] = TrackingUtilities::convertHGTD_LocalPosCov(*hgtdCluster->prepRawData());
41 setState<3>(ProjectorType::e2DimWithTime, locPos, locCov, sl, trackState);
42 } else {
43 std::stringstream linkDump{};
44 sourceLink->dump(linkDump);
45 throw std::domain_error(
46 std::format(
47 "TrkMeasurementCalibrator::calibrate() - Invalid dimension {:d} for measurement {:} ",
48 sourceLink->localParameters().dimension(), linkDump.str()
49 )
50 );
51 }
52 }
53} // namespace ActsTrk::detail
54