From 3c6079ad86ceb2ed52aec81a2e3815c342d80fe4 Mon Sep 17 00:00:00 2001
From: "se.gorbunov" <se.gorbunov@gsi.de>
Date: Thu, 21 Sep 2023 21:51:42 +0000
Subject: [PATCH] CA: bugfix in mvd point <-> tracking station association

---
 core/detectors/mvd/CbmMvdTrackingInterface.cxx | 16 ++++++++++++++++
 core/detectors/mvd/CbmMvdTrackingInterface.h   |  5 +----
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/core/detectors/mvd/CbmMvdTrackingInterface.cxx b/core/detectors/mvd/CbmMvdTrackingInterface.cxx
index a4db0e0483..0dfd769c5e 100644
--- a/core/detectors/mvd/CbmMvdTrackingInterface.cxx
+++ b/core/detectors/mvd/CbmMvdTrackingInterface.cxx
@@ -12,6 +12,8 @@
 #include "CbmMvdTrackingInterface.h"
 
 #include "CbmMvdDetector.h"
+#include "CbmMvdPoint.h"
+#include "CbmMvdSensor.h"
 
 #include <Logger.h>
 
@@ -65,3 +67,17 @@ void CbmMvdTrackingInterface::SetParContainers() {}
 
 //-------------------------------------------------------------------------------------------------------------------------------------
 //
+
+int CbmMvdTrackingInterface::GetTrackingStationIndex(const FairMCPoint* point) const
+{
+  const CbmMvdPoint* mvdPoint = [&] {
+    if constexpr (kUseDynamicCast) { return dynamic_cast<const CbmMvdPoint*>(point); }
+    else {
+      return static_cast<const CbmMvdPoint*>(point);
+    }
+  }();
+  assert(mvdPoint);
+  const CbmMvdSensor* sensor = CbmMvdDetector::Instance()->GetSensorMap()[mvdPoint->GetDetectorID()];
+  assert(sensor);
+  return sensor->GetStationNr();
+}
diff --git a/core/detectors/mvd/CbmMvdTrackingInterface.h b/core/detectors/mvd/CbmMvdTrackingInterface.h
index 17b397b97a..f3dd228342 100644
--- a/core/detectors/mvd/CbmMvdTrackingInterface.h
+++ b/core/detectors/mvd/CbmMvdTrackingInterface.h
@@ -97,10 +97,7 @@ public:
   /// @brief  Gets a tracking station of a FairMCPoint
   /// @param  point  A pointer to FairMCHit
   /// @return Local index of the tracking station
-  int GetTrackingStationIndex(const FairMCPoint* point) const
-  {
-    return GetTrackingStationIndex(point->GetDetectorID());
-  }
+  int GetTrackingStationIndex(const FairMCPoint* point) const;
 
   /// @brief  Gets a tracking station by the address of element (detectorID in terms of MVD)
   /// @param  detectorId  Unique element address (detectorID in terms of MVD)
-- 
GitLab