From 8168b4c755ca6b4211c925c77c861d8f77384fb0 Mon Sep 17 00:00:00 2001 From: wiechula Date: Fri, 4 Apr 2025 23:13:18 +0200 Subject: [PATCH 1/2] Implement ad-hoc correction for r and z --- .../include/SpacePoints/TrackResiduals.h | 8 +++++++ .../SpacePoints/src/TrackResiduals.cxx | 22 +++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/Detectors/TPC/calibration/SpacePoints/include/SpacePoints/TrackResiduals.h b/Detectors/TPC/calibration/SpacePoints/include/SpacePoints/TrackResiduals.h index e4d0a3a053728..2ade12d951c58 100644 --- a/Detectors/TPC/calibration/SpacePoints/include/SpacePoints/TrackResiduals.h +++ b/Detectors/TPC/calibration/SpacePoints/include/SpacePoints/TrackResiduals.h @@ -443,6 +443,12 @@ class TrackResiduals /// output tree TTree* getOutputTree() { return mTreeOut.get(); } + /// Ad-hoc radial scaling factor A/C-Side + void setAdhocScalingFactorX(const std::array& scaling) { mAdhocScalingX = scaling; } + + /// Ad-hoc correction of Z/X + void doAdhocCorrectionZ2X(bool corr) { mDoAdhocCorrectionZ2X = corr; } + private: std::bitset mInitResultsContainer{}; @@ -502,6 +508,8 @@ class TrackResiduals std::array, SECTORSPERSIDE * SIDES> mVoxelResults{}; ///< results per sector and per voxel for 3-D distortions VoxRes mVoxelResultsOut{}; ///< the results from mVoxelResults are copied in here to be able to stream them VoxRes* mVoxelResultsOutPtr{&mVoxelResultsOut}; ///< pointer to set the branch address to for the output + std::array mAdhocScalingX{0, 0}; ///< Ad-hoc radial scaling factor + bool mDoAdhocCorrectionZ2X{false}; ///< If to do ad-hoc correction for Z/X ClassDefNV(TrackResiduals, 3); }; diff --git a/Detectors/TPC/calibration/SpacePoints/src/TrackResiduals.cxx b/Detectors/TPC/calibration/SpacePoints/src/TrackResiduals.cxx index 45d7a6ae3c231..d3db11daf9e87 100644 --- a/Detectors/TPC/calibration/SpacePoints/src/TrackResiduals.cxx +++ b/Detectors/TPC/calibration/SpacePoints/src/TrackResiduals.cxx @@ -719,8 +719,26 @@ void TrackResiduals::smooth(int iSec) if (!(resVox.flags & SmoothDone)) { continue; } - resVox.DS[ResZ] += resVox.stat[VoxZ] * resVox.DS[ResX]; // remove slope*dX contribution from dZ - resVox.D[ResZ] += resVox.stat[VoxZ] * resVox.DS[ResX]; // remove slope*dX contribution from dZ + // TODO: Usage of Z/X is bug??? + float z2x = resVox.stat[VoxZ]; + if (mDoAdhocCorrectionZ2X) { + // + const float z = z2x * resVox.stat[VoxX] - resVox.DS[ResZ]; + const float x = resVox.stat[VoxX] - resVox.DS[ResX]; // is subration of DS[ResX] correct? + z2x = z / x; + } + resVox.DS[ResZ] += z2x * resVox.DS[ResX]; // remove slope*dX contribution from dZ + resVox.D[ResZ] += z2x * resVox.DS[ResX]; // remove slope*dX contribution from dZ + // + if (mAdhocScalingX[iSec >= 18] != 0) { + const float aDX = resVox.DS[ResX] * mAdhocScalingX[iSec >= 18]; + resVox.D[ResX] += aDX; + resVox.DS[ResX] += aDX; + resVox.D[ResY] += aDX * resVox.stat[VoxF]; + resVox.DS[ResY] += aDX * resVox.stat[VoxF]; + resVox.D[ResZ] += aDX * z2x; + resVox.DS[ResZ] += aDX * z2x; + } } } } From 06349fc2604d38435464f26383f3d18e7fdb8b28 Mon Sep 17 00:00:00 2001 From: wiechula Date: Wed, 18 Mar 2026 12:37:48 +0100 Subject: [PATCH 2/2] fix warning: usage of abs instead of std::abs --- .../TPC/calibration/SpacePoints/src/TrackInterpolation.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Detectors/TPC/calibration/SpacePoints/src/TrackInterpolation.cxx b/Detectors/TPC/calibration/SpacePoints/src/TrackInterpolation.cxx index 539ae25862865..76daab93dd8e0 100644 --- a/Detectors/TPC/calibration/SpacePoints/src/TrackInterpolation.cxx +++ b/Detectors/TPC/calibration/SpacePoints/src/TrackInterpolation.cxx @@ -820,7 +820,7 @@ void TrackInterpolation::interpolateTrack(int iSeed) float xv = vtx.X() * cs + vtx.Y() * sn, yv = -vtx.X() * sn + vtx.Y() * cs, zv = vtx.Z(); auto dy = yv - trkWorkITS.getY(); auto dz = zv - trkWorkITS.getZ(); - if ((std::abs(dy) < param::MaxResid) && (std::abs(dz) < param::MaxResid) && (std::abs(trkWorkITS.getY()) < param::MaxY) && (std::abs(trkWorkITS.getZ()) < param::MaxZ) && abs(xv) < param::MaxVtxX) { + if ((std::abs(dy) < param::MaxResid) && (std::abs(dz) < param::MaxResid) && (std::abs(trkWorkITS.getY()) < param::MaxY) && (std::abs(trkWorkITS.getZ()) < param::MaxZ) && std::abs(xv) < param::MaxVtxX) { short compXV = static_cast(xv * 0x7fff / param::MaxVtxX); mClRes.emplace_back(dy, dz, alpha / TMath::Pi(), trkWorkITS.getY(), trkWorkITS.getZ(), 190, -1, compXV); if (!gidTable[GTrackID::ITSTPC].isIndexSet()) { @@ -1168,7 +1168,7 @@ void TrackInterpolation::extrapolateTrack(int iSeed) float xv = vtx.X() * cs + vtx.Y() * sn, yv = -vtx.X() * sn + vtx.Y() * cs, zv = vtx.Z(); auto dy = yv - trkWorkITS.getY(); auto dz = zv - trkWorkITS.getZ(); - if ((std::abs(dy) < param::MaxResid) && (std::abs(dz) < param::MaxResid) && (std::abs(trkWorkITS.getY()) < param::MaxY) && (std::abs(trkWorkITS.getZ()) < param::MaxZ) && abs(xv) < param::MaxVtxX) { + if ((std::abs(dy) < param::MaxResid) && (std::abs(dz) < param::MaxResid) && (std::abs(trkWorkITS.getY()) < param::MaxY) && (std::abs(trkWorkITS.getZ()) < param::MaxZ) && std::abs(xv) < param::MaxVtxX) { short compXV = static_cast(xv * 0x7fff / param::MaxVtxX); mClRes.emplace_back(dy, dz, alpha / TMath::Pi(), trkWorkITS.getY(), trkWorkITS.getZ(), 190, -1, compXV); if (!gidTableFull[GTrackID::ITSTPC].isIndexSet()) {