From d99b8d0b7b4e6291ac84532d618175ef2ff36b8c Mon Sep 17 00:00:00 2001
From: "se.gorbunov" <se.gorbunov@gsi.de>
Date: Fri, 31 Jan 2025 13:17:50 +0100
Subject: [PATCH] CA: ignore misalignment corrections during the final refit

---
 algo/ca/core/tracking/CaTrackFitter.cxx | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/algo/ca/core/tracking/CaTrackFitter.cxx b/algo/ca/core/tracking/CaTrackFitter.cxx
index d44ece298..c781beef9 100644
--- a/algo/ca/core/tracking/CaTrackFitter.cxx
+++ b/algo/ca/core/tracking/CaTrackFitter.cxx
@@ -137,6 +137,7 @@ namespace cbm::algo::ca
 
           const ca::Hit& hit = input.GetHit(wData.RecoHitIndex(start_hit++));
           const int ista     = hit.Station();
+          auto [detSystemId, iStLocal] = fParameters.GetActiveSetup().GetIndexMap().GlobalToLocal<EDetectorID>(ista);
 
           //if (sta[ista].fieldStatus) { isFieldPresent[iVec] = true; }
 
@@ -145,11 +146,23 @@ namespace cbm::algo::ca
           if (sta[ista].timeInfo) {
             w_time[ista][iVec] = true;
           }
+          // subtract misalignment tolerances to get the original hit errors
+          float dX2Orig = hit.dX2() - fParameters.GetMisalignmentXsq(detSystemId);
+          float dY2Orig = hit.dY2() - fParameters.GetMisalignmentYsq(detSystemId);
+          float dXYOrig = hit.dXY();
+          if (dX2Orig < 0. || dY2Orig < 0. || fabs(dXYOrig / sqrt(dX2Orig * dY2Orig)) > 1.) {
+            dX2Orig = hit.dX2();
+            dY2Orig = hit.dY2();
+          }
+          float dT2Orig = hit.dT2() - fParameters.GetMisalignmentTsq(detSystemId);
+          if (dT2Orig < 0.) {
+            dT2Orig = hit.dT2();
+          }
 
           x[ista][iVec]    = hit.X();  //x_temp[iVec];
           y[ista][iVec]    = hit.Y();  //y_temp[iVec];
           time[ista][iVec] = hit.T();
-          dt2[ista][iVec]  = hit.dT2();
+          dt2[ista][iVec]  = dT2Orig;
           if (!sta[ista].timeInfo) {
             dt2[ista][iVec] = 1.e4;
           }
@@ -157,9 +170,9 @@ namespace cbm::algo::ca
           fB_temp                = sta[ista].fieldSlice.GetFieldValue(x[ista], y[ista]);
           mxy[ista].X()[iVec]    = hit.X();
           mxy[ista].Y()[iVec]    = hit.Y();
-          mxy[ista].Dx2()[iVec]  = hit.dX2();
-          mxy[ista].Dy2()[iVec]  = hit.dY2();
-          mxy[ista].Dxy()[iVec]  = hit.dXY();
+          mxy[ista].Dx2()[iVec]  = dX2Orig;
+          mxy[ista].Dy2()[iVec]  = dY2Orig;
+          mxy[ista].Dxy()[iVec]  = dXYOrig;
           mxy[ista].NdfX()[iVec] = 1.;
           mxy[ista].NdfY()[iVec] = 1.;
 
-- 
GitLab