ATLAS Offline Software
Loading...
Searching...
No Matches
TrkMeasurementCalibrator.icc
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "ActsGeometry/ATLASSourceLink.h"
6#include "TrkSurfaces/Surface.h"
7#include "TrkSurfaces/SurfaceBounds.h"
8
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"
13
14#include "HGTD_RIO_OnTrack/HGTD_ClusterOnTrack.h"
15
16#include <format>
17namespace ActsTrk::detail {
18
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);
25
26 auto detEl = dynamic_cast<const InDetDD::SiDetectorElement *>(sourceLink->associatedSurface().associatedDetectorElement());
27
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,
35 sl, trackState);
36 } else {
37 setState<1, trajectory_t>(ProjectorType::e1DimRotNoTime, locPos, locCov,
38 sl, trackState);
39 }
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);
43 } else {
44 std::stringstream linkDump{};
45 sourceLink->dump(linkDump);
46 throw std::domain_error(
47 std::format(
48 "TrkMeasurementCalibrator::calibrate() - Invalid dimension {:d} for measurement {:} ",
49 sourceLink->localParameters().dimension(), linkDump.str()
50 )
51 );
52 }
53 }
54} // namespace ActsTrk::detail
55