2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
5 #include "ActsGeometry/ATLASSourceLink.h"
6 #include "TrkSurfaces/Surface.h"
7 #include "TrkSurfaces/SurfaceBounds.h"
9 #include "InDetMeasurementUtilities/ClusterConversionUtilities.h"
10 #include "TrkRIO_OnTrack/RIO_OnTrack.h"
11 #include "InDetRIO_OnTrack/SCT_ClusterOnTrack.h"
12 #include "InDetRIO_OnTrack/PixelClusterOnTrack.h"
14 #include "HGTD_RIO_OnTrack/HGTD_ClusterOnTrack.h"
17 namespace ActsTrk::detail {
19 template <typename trajectory_t>
20 void TrkMeasurementCalibrator::calibrate(const Acts::GeometryContext& /*gctx*/,
21 const Acts::CalibrationContext& /*cctx*/,
22 const Acts::SourceLink& sl,
23 TrackState_t<trajectory_t> trackState) const {
24 const SourceLink_t sourceLink = unpack(sl);
26 auto detEl = dynamic_cast<const InDetDD::SiDetectorElement *>(sourceLink->associatedSurface().associatedDetectorElement());
28 if(auto pixelCluster = dynamic_cast<const InDet::PixelClusterOnTrack *>(sourceLink); pixelCluster != nullptr) {
29 auto [locPos, locCov] = TrackingUtilities::convertPix_LocalPosCov(*pixelCluster->prepRawData());
30 setState<2, trajectory_t>(ProjectorType::e2DimNoTime, locPos, locCov, sl, trackState);
31 } else if(auto stripCluster = dynamic_cast<const InDet::SCT_ClusterOnTrack *>(sourceLink); stripCluster != nullptr) {
32 auto [locPos, locCov] = TrackingUtilities::convertSCT_LocalPosCov(*stripCluster->prepRawData());
33 if( detEl->isBarrel() ) {
34 setState<1, trajectory_t>(ProjectorType::e1DimNoTime, locPos, locCov,
37 setState<1, trajectory_t>(ProjectorType::e1DimRotNoTime, locPos, locCov,
40 } else if(auto hgtdCluster = dynamic_cast<const HGTD_ClusterOnTrack*>(sourceLink); hgtdCluster != nullptr ) {
41 auto [locPos, locCov] = TrackingUtilities::convertHGTD_LocalPosCov(*hgtdCluster->prepRawData());
42 setState<3, trajectory_t>(ProjectorType::e2DimWithTime, locPos, locCov, sl, trackState);
44 std::stringstream linkDump{};
45 sourceLink->dump(linkDump);
46 throw std::domain_error(
48 "TrkMeasurementCalibrator::calibrate() - Invalid dimension {:d} for measurement {:} ",
49 sourceLink->localParameters().dimension(), linkDump.str()
54 } // namespace ActsTrk::detail