2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
5#include "TrkSurfaces/Surface.h"
6#include "TrkSurfaces/SurfaceBounds.h"
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"
13#include "HGTD_RIO_OnTrack/HGTD_ClusterOnTrack.h"
16namespace ActsTrk::detail {
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);
25 auto detEl = dynamic_cast<const InDetDD::SiDetectorElement *>(sourceLink->associatedSurface().associatedDetectorElement());
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,
36 setState<1>(ProjectorType::e1DimRotNoTime, locPos, locCov,
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);
43 std::stringstream linkDump{};
44 sourceLink->dump(linkDump);
45 throw std::domain_error(
47 "TrkMeasurementCalibrator::calibrate() - Invalid dimension {:d} for measurement {:} ",
48 sourceLink->localParameters().dimension(), linkDump.str()
53} // namespace ActsTrk::detail