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