From f3e1f0b800a213cdd7bc70aa53f3b30fe7a336b0 Mon Sep 17 00:00:00 2001
From: "se.gorbunov" <se.gorbunov@gsi.de>
Date: Mon, 27 Nov 2023 12:40:14 +0000
Subject: [PATCH] StsTrack: hide confusing methods of the base class; bugfixes

---
 analysis/PWGCHA/jpsi/CbmAnaJpsiTask.cxx       |  2 +-
 .../conversion/CbmAnaConversion.cxx           |  2 +-
 analysis/PWGDIL/dielectron/lmvm/LmvmTask.cxx  |  2 +-
 .../PWGDIL/dimuon/CbmAnaDimuonAnalysis.cxx    |  2 +-
 analysis/PWGHAD/hadron/CbmHadronAnalysis.cxx  |  2 +-
 .../CbmStsTracksConverter.cxx                 |  2 +-
 core/base/CbmMatchRecoToMC.cxx                |  4 ++--
 core/data/sts/CbmStsTrack.h                   | 17 ++++++++++++--
 reco/KF/CbmKFParticleFinder.cxx               |  2 +-
 reco/KF/CbmKFParticleFinderPID.cxx            |  2 +-
 reco/KF/Interface/CbmPVFinderKF.cxx           |  4 ++--
 .../KF/Interface/CbmStsFitPerformanceTask.cxx |  4 ++--
 reco/KF/Interface/CbmStsKFTrackFitter.cxx     |  4 ++--
 reco/KF/KFQA/CbmKFTrackQa.cxx                 |  2 +-
 reco/KF/ParticleFitter/CbmL1PFFitter.cxx      | 10 ++++----
 reco/L1/CbmCaTimeSliceReader.cxx              |  2 +-
 .../CbmL1GlobalTrackFinder.cxx                |  2 +-
 .../OffLineInterface/CbmL1StsTrackFinder.cxx  |  2 +-
 reco/detectors/sts/CbmStsTrackFinderIdeal.cxx |  2 +-
 reco/detectors/sts/qa/CbmStsFindTracksQa.cxx  |  2 +-
 reco/global/CbmFitGlobalTracksQa.cxx          |  8 +++----
 reco/littrack/cbm/qa/fit/CbmLitFitQa.cxx      |  4 ++--
 .../cbm/reco/CbmLitFindGlobalTracks.cxx       |  2 +-
 reco/qa/CbmTrackingTrdQa.cxx                  |  2 +-
 reco/tracking/global/CbmGlobalTrackingQa.cxx  |  4 ++--
 .../tracking/global/CbmGlobalTrackingTask.cxx | 23 ++++++++++++++-----
 26 files changed, 69 insertions(+), 45 deletions(-)

diff --git a/analysis/PWGCHA/jpsi/CbmAnaJpsiTask.cxx b/analysis/PWGCHA/jpsi/CbmAnaJpsiTask.cxx
index 7601b87ad9..4f9d66c189 100644
--- a/analysis/PWGCHA/jpsi/CbmAnaJpsiTask.cxx
+++ b/analysis/PWGCHA/jpsi/CbmAnaJpsiTask.cxx
@@ -626,7 +626,7 @@ void CbmAnaJpsiTask::IsRecoTrackAccepted(CbmAnaJpsiCandidate* cand)
 {
   CbmStsTrack* stsTrack = (CbmStsTrack*) fStsTracks->At(cand->fStsInd);
   if (stsTrack == NULL) cand->fIsRecoTrackAccepted = false;
-  int nStsHits          = stsTrack->GetNofHits();
+  int nStsHits          = stsTrack->GetNofStsHits();
   int nMvdHits          = stsTrack->GetNofMvdHits();
   CbmRichRing* richRing = (CbmRichRing*) fRichRings->At(cand->fRichInd);
   if (richRing == NULL) cand->fIsRecoTrackAccepted = false;
diff --git a/analysis/PWGDIL/dielectron/conversion/CbmAnaConversion.cxx b/analysis/PWGDIL/dielectron/conversion/CbmAnaConversion.cxx
index ff51ebf47c..716e04fd60 100644
--- a/analysis/PWGDIL/dielectron/conversion/CbmAnaConversion.cxx
+++ b/analysis/PWGDIL/dielectron/conversion/CbmAnaConversion.cxx
@@ -1032,7 +1032,7 @@ void CbmAnaConversion::Exec(Option_t*)
     fhPi0_Reco_ndf_vs_startvertex->Fill(result_ndf_electron, startvertexZ);
     fhPi0_Reco_startvertex_vs_chi->Fill(startvertexZ, result_chi_electron);
 
-    Double_t nofhits_sts = stsTrack->GetNofHits();
+    Double_t nofhits_sts = stsTrack->GetTotalNofHits();
     fhPi0_Reco_startvertex_vs_nofhits->Fill(startvertexZ, nofhits_sts);
 
     fhPi0_Reco_noRichInd_chi_vs_momentum->Fill(refittedMomentum_electron.Mag(), result_chi_electron);
diff --git a/analysis/PWGDIL/dielectron/lmvm/LmvmTask.cxx b/analysis/PWGDIL/dielectron/lmvm/LmvmTask.cxx
index 68eb961bd8..54086def80 100755
--- a/analysis/PWGDIL/dielectron/lmvm/LmvmTask.cxx
+++ b/analysis/PWGDIL/dielectron/lmvm/LmvmTask.cxx
@@ -1832,7 +1832,7 @@ void LmvmTask::DifferenceSignalAndBg(const LmvmCand& cand)
 
   CbmStsTrack* stsTrack = static_cast<CbmStsTrack*>(fStsTracks->At(cand.fStsInd));
   if (stsTrack == nullptr) return;
-  fH.FillH1("hNofStsHits", cand.fMcSrc, stsTrack->GetNofHits(), fW);
+  fH.FillH1("hNofStsHits", cand.fMcSrc, stsTrack->GetNofStsHits(), fW);
 
   if (fUseMvd) {
     double mvd1x = 0., mvd1y = 0., mvd2x = 0., mvd2y = 0.;
diff --git a/analysis/PWGDIL/dimuon/CbmAnaDimuonAnalysis.cxx b/analysis/PWGDIL/dimuon/CbmAnaDimuonAnalysis.cxx
index bd4ace66b3..0573d4cc11 100644
--- a/analysis/PWGDIL/dimuon/CbmAnaDimuonAnalysis.cxx
+++ b/analysis/PWGDIL/dimuon/CbmAnaDimuonAnalysis.cxx
@@ -637,7 +637,7 @@ void CbmAnaDimuonAnalysis::Exec(Option_t* /*opt*/)
     CbmStsTrack* stsTrack = (CbmStsTrack*) fStsTracks->At(iStsTrack);
     if (!stsTrack) continue;
 
-    Int_t nStsHits      = stsTrack->GetNofHits();
+    Int_t nStsHits      = stsTrack->GetTotalNofHits();
     Double_t chi2vertex = fFitter->GetChiToVertex(stsTrack);
     Double_t chi2sts    = 1000;
     if (stsTrack->GetNDF() != 0) chi2sts = stsTrack->GetChiSq() / stsTrack->GetNDF();
diff --git a/analysis/PWGHAD/hadron/CbmHadronAnalysis.cxx b/analysis/PWGHAD/hadron/CbmHadronAnalysis.cxx
index 73246290c1..b1da44180d 100644
--- a/analysis/PWGHAD/hadron/CbmHadronAnalysis.cxx
+++ b/analysis/PWGHAD/hadron/CbmHadronAnalysis.cxx
@@ -2999,7 +2999,7 @@ void CbmHadronAnalysis::ExecEvent(Option_t*)
       //if(NStsHits<8) continue; // nh-debugging
       if (fDigiMan->IsMatchPresent(ECbmModuleId::kSts))
         for (Int_t ih = 0; ih < NStsHits; ih++) {
-          Int_t iHind = StsTrack->GetHitIndex(ih);
+          Int_t iHind = StsTrack->GetStsHitIndex(ih);
 
           LOG(debug1) << " inspect STS track " << s << ", hit " << ih << ", hitindex " << iHind;
           if (NULL == fStsHits) LOG(fatal) << " No STS Hits available ";
diff --git a/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx b/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx
index ab60022c16..7af3a55011 100644
--- a/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx
+++ b/analysis/common/analysis_tree_converter/CbmStsTracksConverter.cxx
@@ -169,7 +169,7 @@ void CbmStsTracksConverter::ReadVertexTracks(CbmEvent* event)
     track.SetField(int(sts_track->GetNdfTime()), indf_time_);
     track.SetField(float(sts_track->GetChiSq()), ichi2_);
     track.SetField(float(sts_track->GetChiSqTime()), ichi2_time_);
-    track.SetField(int(sts_track->GetNofHits()), inhits_);
+    track.SetField(int(sts_track->GetTotalNofHits()), inhits_);
     track.SetField(float(trackParamFirst->GetX() - cbm_prim_vertex_->GetX()), idcax_);
     track.SetField(float(trackParamFirst->GetY() - cbm_prim_vertex_->GetY()), idcax_ + 1);
     track.SetField(float(trackParamFirst->GetZ() - cbm_prim_vertex_->GetZ()), idcax_ + 2);
diff --git a/core/base/CbmMatchRecoToMC.cxx b/core/base/CbmMatchRecoToMC.cxx
index 40fa696ab1..528651ebe9 100644
--- a/core/base/CbmMatchRecoToMC.cxx
+++ b/core/base/CbmMatchRecoToMC.cxx
@@ -745,7 +745,7 @@ void CbmMatchRecoToMC::MatchStsTracks(const TClonesArray* mvdHitMatches, const T
 
     Int_t nofStsHits = track->GetNofStsHits();
     for (Int_t iHit = 0; iHit < nofStsHits; iHit++) {
-      const CbmMatch* hitMatch = static_cast<CbmMatch*>(stsHitMatches->At(track->GetHitIndex(iHit)));
+      const CbmMatch* hitMatch = static_cast<CbmMatch*>(stsHitMatches->At(track->GetStsHitIndex(iHit)));
       Int_t nofLinks           = hitMatch->GetNofLinks();
       for (Int_t iLink = 0; iLink < nofLinks; iLink++) {
         const CbmLink& link      = hitMatch->GetLink(iLink);
@@ -786,7 +786,7 @@ void CbmMatchRecoToMC::MatchStsTracks(const TClonesArray* mvdHitMatches, const T
     Int_t trueCounter  = trackMatch->GetNofTrueHits();
     Int_t wrongCounter = trackMatch->GetNofWrongHits();
     for (Int_t iHit = 0; iHit < nofStsHits; iHit++) {
-      const CbmMatch* hitMatch = static_cast<CbmMatch*>(stsHitMatches->At(track->GetHitIndex(iHit)));
+      const CbmMatch* hitMatch = static_cast<CbmMatch*>(stsHitMatches->At(track->GetStsHitIndex(iHit)));
       Int_t nofLinks           = hitMatch->GetNofLinks();
       Bool_t hasTrue           = false;
       for (Int_t iLink = 0; iLink < nofLinks; iLink++) {
diff --git a/core/data/sts/CbmStsTrack.h b/core/data/sts/CbmStsTrack.h
index 0a4887d91b..76f34d40d1 100644
--- a/core/data/sts/CbmStsTrack.h
+++ b/core/data/sts/CbmStsTrack.h
@@ -78,7 +78,7 @@ public:
   /** Total number of hits
     ** @return  Sum of numbers of STS and MVD hits
     **/
-  virtual int32_t GetNofHits() const { return (GetNofStsHits() + GetNofMvdHits()); }
+  virtual int32_t GetTotalNofHits() const { return (GetNofStsHits() + GetNofMvdHits()); }
 
 
   /** Number of MVD hits
@@ -101,7 +101,7 @@ public:
   int32_t GetStsHitIndex(int32_t iHit) const
   {
     assert(iHit < GetNofStsHits());
-    return GetHitIndex(iHit);
+    return CbmTrack::GetHitIndex(iHit);
   }
 
 
@@ -138,6 +138,19 @@ private:
   /** median dE/dx [e/300µm] **/
   float fELoss {-1.f};
 
+  /** Hide this method of the base class because it is confusing. It is valid only for STS hits 
+   * use GetStsHitIndex() or GetMvdHitIndex() **/
+  using CbmTrack::GetHitIndex;
+
+  /** Hide this method of the base class because it is often mixed with GetNofStsHits(). 
+   * Use GetTotalNofHits() instead. **/
+  using CbmTrack::GetNofHits;
+
+  /** Hide this method of the base class because Mvd hits must be stored in a separate vector fMvdHitIndex.    
+   * use AddStsHit() and AddMvdHit() instead.
+    **/
+  using CbmTrack::AddHit;
+
   ClassDef(CbmStsTrack, 3);
 };
 
diff --git a/reco/KF/CbmKFParticleFinder.cxx b/reco/KF/CbmKFParticleFinder.cxx
index ebc636349d..64f847de83 100644
--- a/reco/KF/CbmKFParticleFinder.cxx
+++ b/reco/KF/CbmKFParticleFinder.cxx
@@ -193,7 +193,7 @@ void CbmKFParticleFinder::Exec(Option_t* /*opt*/)
         for (Int_t j = 0; j <= i; j++, iCov++)
           V[iCov] = parameters->GetCovariance(i, j);
 
-      if (stsTrack->GetNofHits() < 3) continue;
+      if (stsTrack->GetTotalNofHits() < 3) continue;
 
       bool ok = 1;
       ok      = ok && std::isfinite(parameters->GetX());
diff --git a/reco/KF/CbmKFParticleFinderPID.cxx b/reco/KF/CbmKFParticleFinderPID.cxx
index 5a8a731ccd..8376cbeb7e 100644
--- a/reco/KF/CbmKFParticleFinderPID.cxx
+++ b/reco/KF/CbmKFParticleFinderPID.cxx
@@ -494,7 +494,7 @@ void CbmKFParticleFinderPID::SetRecoPID()
         if (muchTrack) {
           if ((cbmStsTrack->GetChiSq() / cbmStsTrack->GetNDF()) < fMuchCutsFloat[0]
               && (muchTrack->GetChiSq() / muchTrack->GetNDF()) < fMuchCutsFloat[1]
-              && cbmStsTrack->GetNofHits() >= fMuchCutsInt[0]) {
+              && cbmStsTrack->GetTotalNofHits() >= fMuchCutsInt[0]) {
             if (muchTrack->GetNofHits() >= fMuchCutsInt[1]) isMuon = 2;
             if (muchTrack->GetNofHits() >= fMuchCutsInt[2]) isMuon = 1;
           }
diff --git a/reco/KF/Interface/CbmPVFinderKF.cxx b/reco/KF/Interface/CbmPVFinderKF.cxx
index 42490a3bf5..48a75b5b80 100644
--- a/reco/KF/Interface/CbmPVFinderKF.cxx
+++ b/reco/KF/Interface/CbmPVFinderKF.cxx
@@ -24,7 +24,7 @@ ClassImp(CbmPVFinderKF)
   CbmKFTrack* CloneArray = new CbmKFTrack[NTracks];
   for (Int_t i = 0; i < NTracks; i++) {
     CbmStsTrack* st = (CbmStsTrack*) tracks->At(i);
-    Int_t NHits     = st->GetNofHits();
+    Int_t NHits     = st->GetTotalNofHits();
     if (NHits < 4) continue;
     if (st->GetFlag()) continue;
     if (st->GetChiSq() < 0. || st->GetChiSq() > 3.5 * 3.5 * st->GetNDF()) continue;
@@ -59,7 +59,7 @@ Int_t CbmPVFinderKF::FindEventVertex(CbmEvent* event, TClonesArray* tracks)
   for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
     Int_t trackIndex   = event->GetIndex(ECbmDataType::kStsTrack, iTrack);
     CbmStsTrack* track = (CbmStsTrack*) tracks->At(trackIndex);
-    Int_t nHits        = track->GetNofHits();
+    Int_t nHits        = track->GetTotalNofHits();
     if (nHits < 4) continue;         // use only tracks with at least 4 hits
     if (track->GetFlag()) continue;  // do not use suspicious tracks
     if (track->GetChiSq() < 0.       // use only good-quality tracks
diff --git a/reco/KF/Interface/CbmStsFitPerformanceTask.cxx b/reco/KF/Interface/CbmStsFitPerformanceTask.cxx
index 33f46f38f6..1e9b07df2b 100644
--- a/reco/KF/Interface/CbmStsFitPerformanceTask.cxx
+++ b/reco/KF/Interface/CbmStsFitPerformanceTask.cxx
@@ -564,7 +564,7 @@ void CbmStsFitPerformanceTask::Exec(Option_t* /*option*/)
       // Get MC points;
       vector<CbmStsPoint*> vPoints;
       for (Int_t i = 0; i < track->GetNofStsHits(); i++) {
-        Int_t hitID = track->GetHitIndex(i);
+        Int_t hitID = track->GetStsHitIndex(i);
         if (hitID < 0) continue;
         CbmStsHit* hit = (CbmStsHit*) fStsHitArray->At(hitID);
         if (!hit) continue;
@@ -976,7 +976,7 @@ Bool_t CbmStsFitPerformanceTask::IsLong(CbmStsTrack* track)
   Int_t stmin = 1000, stmax = -1000;
   Int_t st, iHit, hitID;
   for (iHit = 0; iHit < nHits; iHit++) {
-    hitID = track->GetHitIndex(iHit);
+    hitID = track->GetStsHitIndex(iHit);
     st    = ((CbmStsHit*) fStsHitArray->At(hitID))->GetAddress();
     if (st < stmin) stmin = st;
     if (st > stmax) stmax = st;
diff --git a/reco/KF/Interface/CbmStsKFTrackFitter.cxx b/reco/KF/Interface/CbmStsKFTrackFitter.cxx
index 2cadfb379d..4373310d6a 100644
--- a/reco/KF/Interface/CbmStsKFTrackFitter.cxx
+++ b/reco/KF/Interface/CbmStsKFTrackFitter.cxx
@@ -60,7 +60,7 @@ void CbmStsKFTrackFitter::SetKFHits(CbmKFTrack& T, CbmStsTrack* track)
 
   if (!fIsInitialised) Init();
 
-  Int_t NStsHits = (fStsHitsArray) ? track->GetNofHits() : 0;
+  Int_t NStsHits = (fStsHitsArray) ? track->GetNofStsHits() : 0;
   Int_t NMvdHits = (fMvdHitsArray) ? track->GetNofMvdHits() : 0;
 
   fHits.resize(NMvdHits + NStsHits);
@@ -73,7 +73,7 @@ void CbmStsKFTrackFitter::SetKFHits(CbmKFTrack& T, CbmStsTrack* track)
   }
   if (NStsHits > 0 && fStsHitsArray) {
     for (Int_t i = 0; i < NStsHits; i++) {
-      Int_t j = track->GetHitIndex(i);
+      Int_t j = track->GetStsHitIndex(i);
       fHits[NMvdHits + i].Create(reinterpret_cast<CbmStsHit*>(fStsHitsArray->At(j)));
       T.fHits.push_back(&(fHits[NMvdHits + i]));
     }
diff --git a/reco/KF/KFQA/CbmKFTrackQa.cxx b/reco/KF/KFQA/CbmKFTrackQa.cxx
index fb55d21039..94445636d2 100644
--- a/reco/KF/KFQA/CbmKFTrackQa.cxx
+++ b/reco/KF/KFQA/CbmKFTrackQa.cxx
@@ -538,7 +538,7 @@ void CbmKFTrackQa::Exec(Option_t* /*opt*/)
       Int_t stsTrackIndex            = globalTrack->GetStsTrackIndex();  //for STS histos
       CbmStsTrack* cbmStsTrack       = (CbmStsTrack*) fStsTrackArray->At(stsTrackIndex);
       double stsHistoData[NStsHisto] = {
-        (double) cbmStsTrack->GetNofHits(),                          //NHits
+        (double) cbmStsTrack->GetTotalNofHits(),                     //NHits
         cbmStsTrack->GetChiSq() / cbmStsTrack->GetNDF(),             //Chi2/NDF
         TMath::Prob(cbmStsTrack->GetChiSq(), cbmStsTrack->GetNDF())  //prob
       };
diff --git a/reco/KF/ParticleFitter/CbmL1PFFitter.cxx b/reco/KF/ParticleFitter/CbmL1PFFitter.cxx
index 0b42618794..3c9c01e521 100644
--- a/reco/KF/ParticleFitter/CbmL1PFFitter.cxx
+++ b/reco/KF/ParticleFitter/CbmL1PFFitter.cxx
@@ -275,7 +275,7 @@ void CbmL1PFFitter::Fit(std::vector<CbmStsTrack>& Tracks, const std::vector<CbmM
           hit = mvdHit;
         }
         else {
-          int hitIndex            = tr[iVec]->GetHitIndex(i - nHitsTrackMvd);
+          int hitIndex            = tr[iVec]->GetStsHitIndex(i - nHitsTrackMvd);
           const CbmStsHit* stsHit = &(vStsHits[hitIndex]);
           ista                    = GetStsStationIndex(stsHit);
           if (ista < 0) continue;
@@ -554,7 +554,7 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<PFFieldRe
         }
         else {
           if (!fStsHitArray) continue;
-          int hitIndex         = tr[iVec]->GetHitIndex(iH - nHitsTrackMvd);
+          int hitIndex         = tr[iVec]->GetStsHitIndex(iH - nHitsTrackMvd);
           const CbmStsHit* hit = dynamic_cast<const CbmStsHit*>(fStsHitArray->At(hitIndex));
 
           posx = hit->GetX();
@@ -682,7 +682,7 @@ void CbmL1PFFitter::CalculateFieldRegion(vector<CbmStsTrack>& Tracks, vector<PFF
         }
         else {
           if (!fStsHitArray) continue;
-          int hitIndex         = tr[iVec]->GetHitIndex(iH - nHitsTrackMvd);
+          int hitIndex         = tr[iVec]->GetStsHitIndex(iH - nHitsTrackMvd);
           const CbmStsHit* hit = dynamic_cast<const CbmStsHit*>(fStsHitArray->At(hitIndex));
 
           posx = hit->GetX();
@@ -738,7 +738,7 @@ void CbmL1PFFitter::CalculateFieldRegionAtLastPoint(vector<CbmStsTrack>& Tracks,
 
     for (int iVec = 0; iVec < nTracks_SIMD; iVec++) {
       int nHitsTrackMvd = tr[iVec]->GetNofMvdHits();
-      int nHits         = tr[iVec]->GetNofHits();
+      int nHits         = tr[iVec]->GetTotalNofHits();
       for (int iH = 0; iH < 3; iH++) {
         float posx = 0.f, posy = 0.f, posz = 0.f;
 
@@ -756,7 +756,7 @@ void CbmL1PFFitter::CalculateFieldRegionAtLastPoint(vector<CbmStsTrack>& Tracks,
         }
         else {
           if (!fStsHitArray) continue;
-          int hitIndex         = tr[iVec]->GetHitIndex(hitNumber - nHitsTrackMvd);
+          int hitIndex         = tr[iVec]->GetStsHitIndex(hitNumber - nHitsTrackMvd);
           const CbmStsHit* hit = dynamic_cast<const CbmStsHit*>(fStsHitArray->At(hitIndex));
 
           posx = hit->GetX();
diff --git a/reco/L1/CbmCaTimeSliceReader.cxx b/reco/L1/CbmCaTimeSliceReader.cxx
index f50c4eb1c4..1e2d83e23e 100644
--- a/reco/L1/CbmCaTimeSliceReader.cxx
+++ b/reco/L1/CbmCaTimeSliceReader.cxx
@@ -223,7 +223,7 @@ void TimeSliceReader::ReadRecoTracks()
         track.TLast.Time() = pInputTrack->GetLastHitTime();
         track.TLast.C55()  = pInputTrack->GetLastHitTimeError();
         track.Hits.clear();
-        track.Hits.reserve(pInputTrack->GetNofHits());
+        track.Hits.reserve(pInputTrack->GetTotalNofHits());
         for (int iH = 0; iH < pInputTrack->GetNofMvdHits(); ++iH) {
           int iHext = pInputTrack->GetMvdHitIndex(iH);
           int iHint = fvvHitExtToIntIndexMap[ca::EDetectorID::kMvd][iHext];
diff --git a/reco/L1/OffLineInterface/CbmL1GlobalTrackFinder.cxx b/reco/L1/OffLineInterface/CbmL1GlobalTrackFinder.cxx
index 2cc29cef1f..6fef8e32b9 100644
--- a/reco/L1/OffLineInterface/CbmL1GlobalTrackFinder.cxx
+++ b/reco/L1/OffLineInterface/CbmL1GlobalTrackFinder.cxx
@@ -177,7 +177,7 @@ void CbmL1GlobalTrackFinder::CbmL1TrackToCbmStsTrack(CbmL1Track l1track, CbmStsT
       track->AddMvdHit(h.hitId);
     }
     else if (h.detId == 1) {
-      track->AddHit(h.hitId, kSTSHIT);
+      track->AddStsHit(h.hitId);
     }
   }
 
diff --git a/reco/L1/OffLineInterface/CbmL1StsTrackFinder.cxx b/reco/L1/OffLineInterface/CbmL1StsTrackFinder.cxx
index 618529d110..7d05c41994 100644
--- a/reco/L1/OffLineInterface/CbmL1StsTrackFinder.cxx
+++ b/reco/L1/OffLineInterface/CbmL1StsTrackFinder.cxx
@@ -93,7 +93,7 @@ Int_t CbmL1StsTrackFinder::CopyL1Tracks(CbmEvent* event)
         t->AddMvdHit(h.hitId);
       }
       else if (h.detId == 1) {
-        t->AddHit(h.hitId, kSTSHIT);
+        t->AddStsHit(h.hitId);
       }
     }
   }
diff --git a/reco/detectors/sts/CbmStsTrackFinderIdeal.cxx b/reco/detectors/sts/CbmStsTrackFinderIdeal.cxx
index d6f5375c15..9a89b4f462 100644
--- a/reco/detectors/sts/CbmStsTrackFinderIdeal.cxx
+++ b/reco/detectors/sts/CbmStsTrackFinderIdeal.cxx
@@ -215,7 +215,7 @@ Int_t CbmStsTrackFinderIdeal::DoFind()
       success = kFALSE;
       continue;
     }
-    pTrck->AddHit(iHit, kSTSHIT);
+    pTrck->AddStsHit(iHit);
     if (fVerbose > 2)
       cout << "Sts Hit " << iHit << " from StsPoint " << ptIndex << " (MCTrack " << mcTrackIndex
            << ") added to StsTrack " << trackIndex << endl;
diff --git a/reco/detectors/sts/qa/CbmStsFindTracksQa.cxx b/reco/detectors/sts/qa/CbmStsFindTracksQa.cxx
index 006ad00389..599a6f6091 100644
--- a/reco/detectors/sts/qa/CbmStsFindTracksQa.cxx
+++ b/reco/detectors/sts/qa/CbmStsFindTracksQa.cxx
@@ -739,7 +739,7 @@ void CbmStsFindTracksQa::FillMatchMap(Int_t& nRec, Int_t& nGhosts, Int_t& nClone
     // --- StsTrack
     CbmStsTrack* stsTrack = (CbmStsTrack*) fStsTracks->At(iTrack);
     assert(stsTrack);
-    Int_t nHits = stsTrack->GetNofHits();
+    Int_t nHits = stsTrack->GetTotalNofHits();
 
     // --- TrackMatch
 
diff --git a/reco/global/CbmFitGlobalTracksQa.cxx b/reco/global/CbmFitGlobalTracksQa.cxx
index 48dab99d2e..00b1b5a64a 100644
--- a/reco/global/CbmFitGlobalTracksQa.cxx
+++ b/reco/global/CbmFitGlobalTracksQa.cxx
@@ -213,8 +213,8 @@ void CbmFitGlobalTracksQa::Exec(Option_t*)
       stsTrack = (CbmStsTrack*) fArrayStsTrack->At(stsTrackIndex);
       if (NULL != stsTrack) {
         stsPointIndex = -1;
-        if (stsTrack->GetNofHits()) {
-          stsHitIndex = stsTrack->GetHitIndex(0);
+        if (stsTrack->GetNofStsHits()) {
+          stsHitIndex = stsTrack->GetStsHitIndex(0);
           stsHit      = (CbmStsHit*) fArrayStsHit->At(stsHitIndex);
           if (NULL != stsHit) { stsPointIndex = stsHit->GetRefId(); }
         }
@@ -327,8 +327,8 @@ void CbmFitGlobalTracksQa::Exec(Option_t*)
       stsTrack      = (CbmStsTrack*) fArrayStsTrack->At(stsTrackIndex);
       if (NULL != stsTrack) {
         stsPointIndex = -1;
-        if (stsTrack->GetNofHits()) {
-          stsHitIndex = stsTrack->GetHitIndex(stsTrack->GetNofHits() - 1);
+        if (stsTrack->GetNofStsHits()) {
+          stsHitIndex = stsTrack->GetStsHitIndex(stsTrack->GetNofStsHits() - 1);
           stsHit      = (CbmStsHit*) fArrayStsHit->At(stsHitIndex);
           if (NULL != stsHit) { stsPointIndex = stsHit->GetRefId(); }
         }
diff --git a/reco/littrack/cbm/qa/fit/CbmLitFitQa.cxx b/reco/littrack/cbm/qa/fit/CbmLitFitQa.cxx
index 54a03014fc..c46d92f019 100644
--- a/reco/littrack/cbm/qa/fit/CbmLitFitQa.cxx
+++ b/reco/littrack/cbm/qa/fit/CbmLitFitQa.cxx
@@ -203,7 +203,7 @@ void CbmLitFitQa::ProcessStsTrack(Int_t trackId)
     }
   }
   else {  // first track parameters in STS
-    const CbmStsHit* firstHit = static_cast<const CbmStsHit*>(fStsHits->At(track->GetHitIndex(0)));
+    const CbmStsHit* firstHit = static_cast<const CbmStsHit*>(fStsHits->At(track->GetStsHitIndex(0)));
     Int_t firstStation        = CbmStsSetup::Instance()->GetStationNumber(firstHit->GetAddress())
                          - 1;  //firstHit->GetStationNr() - 1; // to start with 0
     if (mcTrack.GetNofPointsAtStation(ECbmModuleId::kSts, firstStation) > 0) {
@@ -214,7 +214,7 @@ void CbmLitFitQa::ProcessStsTrack(Int_t trackId)
   }
 
   // Fill histograms for last track parameters
-  const CbmStsHit* lastHit = static_cast<const CbmStsHit*>(fStsHits->At(track->GetHitIndex(nofStsHits - 1)));
+  const CbmStsHit* lastHit = static_cast<const CbmStsHit*>(fStsHits->At(track->GetStsHitIndex(nofStsHits - 1)));
   Int_t lastStation        = CbmStsSetup::Instance()->GetStationNumber(lastHit->GetAddress())
                       - 1;  //lastHit->GetStationNr() - 1; // to start with 0
   if (mcTrack.GetNofPointsAtStation(ECbmModuleId::kSts, lastStation) > 0) {
diff --git a/reco/littrack/cbm/reco/CbmLitFindGlobalTracks.cxx b/reco/littrack/cbm/reco/CbmLitFindGlobalTracks.cxx
index ca7a8bcc48..31e90c6e7a 100644
--- a/reco/littrack/cbm/reco/CbmLitFindGlobalTracks.cxx
+++ b/reco/littrack/cbm/reco/CbmLitFindGlobalTracks.cxx
@@ -438,7 +438,7 @@ void CbmLitFindGlobalTracks::CalculateLength(CbmEvent* event)
       const CbmStsTrack* stsTrack = static_cast<const CbmStsTrack*>(fStsTracks->At(stsId));
       Int_t nofStsHits            = stsTrack->GetNofStsHits();
       for (Int_t ih = 0; ih < nofStsHits; ih++) {
-        CbmStsHit* hit = (CbmStsHit*) fStsHits->At(stsTrack->GetHitIndex(ih));
+        CbmStsHit* hit = (CbmStsHit*) fStsHits->At(stsTrack->GetStsHitIndex(ih));
         X.push_back(hit->GetX());
         Y.push_back(hit->GetY());
         Z.push_back(hit->GetZ());
diff --git a/reco/qa/CbmTrackingTrdQa.cxx b/reco/qa/CbmTrackingTrdQa.cxx
index 73b94fb4f4..b6710af045 100644
--- a/reco/qa/CbmTrackingTrdQa.cxx
+++ b/reco/qa/CbmTrackingTrdQa.cxx
@@ -285,7 +285,7 @@ void CbmTrackingTrdQa::Exec(Option_t* /*opt*/)
       if (stsTrackId >= 0) {
         CbmStsTrack* stsTrack = (CbmStsTrack*) fStsTracks->At(stsTrackId);
         assert(stsTrack);
-        nStsHits = stsTrack->GetNofHits();
+        nStsHits = stsTrack->GetTotalNofHits();
       }
     }
 
diff --git a/reco/tracking/global/CbmGlobalTrackingQa.cxx b/reco/tracking/global/CbmGlobalTrackingQa.cxx
index 70431bc9cd..ec224b513c 100644
--- a/reco/tracking/global/CbmGlobalTrackingQa.cxx
+++ b/reco/tracking/global/CbmGlobalTrackingQa.cxx
@@ -250,11 +250,11 @@ void CbmGlobalTrackingQa::Exec(Option_t*)
 
     const CbmStsTrack* stsTrack = static_cast<const CbmStsTrack*>(fStsTracks->At(stsTrackInd));
     map<TrackData*, int> stsMCTracks;
-    int nofStsHits    = stsTrack->GetNofHits();
+    int nofStsHits    = stsTrack->GetNofStsHits();
     int nofStsMatches = 0;
 
     for (int j = 0; j < nofStsHits; ++j) {
-      int stsHitInd                     = stsTrack->GetHitIndex(j);
+      int stsHitInd                     = stsTrack->GetStsHitIndex(j);
       const CbmStsHit* stsHit           = static_cast<const CbmStsHit*>(fStsHits->At(stsHitInd));
       int frontClusterInd               = stsHit->GetFrontClusterId();
       int backClusterInd                = stsHit->GetBackClusterId();
diff --git a/reco/tracking/global/CbmGlobalTrackingTask.cxx b/reco/tracking/global/CbmGlobalTrackingTask.cxx
index 7a99c5d044..7d7217045c 100644
--- a/reco/tracking/global/CbmGlobalTrackingTask.cxx
+++ b/reco/tracking/global/CbmGlobalTrackingTask.cxx
@@ -160,6 +160,7 @@ void CbmGlobalTrackingTask::Exec(Option_t* /*opt*/)
     long endTime = ts.tv_sec * 1000000000 + ts.tv_nsec;
     fullDuration += endTime - beginTime;
 #endif  //CBM_GLOBALTB_PRINT_PERF
+
   }  //for (int i = 0; i < nofStsTracks; ++i)
 }
 
@@ -213,12 +214,19 @@ Double_t CbmGlobalTrackingTask::CalcStsTrackLength(const CbmStsTrack* track)
   z = paramFirst->GetZ();
 
   const FairTrackParam* paramLast = track->GetParamLast();
-  int nofHits                     = track->GetNofHits();
+  int nofHits                     = track->GetTotalNofHits();
 
   for (int i = 1; i < nofHits; ++i) {
-    Int_t hitInd     = track->GetHitIndex(i);
-    HitType hitType  = track->GetHitType(i);
-    CbmPixelHit* hit = static_cast<CbmPixelHit*>(kMVDHIT == hitType ? fMvdHits->At(hitInd) : fStsHits->At(hitInd));
+    bool isMvdHit    = true;
+    CbmPixelHit* hit = nullptr;
+    if (i < track->GetNofMvdHits()) {
+      isMvdHit = true;
+      hit      = static_cast<CbmPixelHit*>(fMvdHits->At(track->GetMvdHitIndex(i)));
+    }
+    else {
+      isMvdHit = false;
+      hit      = static_cast<CbmPixelHit*>(fStsHits->At(track->GetStsHitIndex(i - track->GetNofMvdHits())));
+    }
     // Double_t nextX;  (VF) not used
     // Double_t nextY;  (VF) not used
     Double_t nextZ;
@@ -248,9 +256,12 @@ Double_t CbmGlobalTrackingTask::CalcStsTrackLength(const CbmStsTrack* track)
       if (z == nextZ) {
         CbmKFStsHit stsKFHit;
 
-        if (kMVDHIT == hitType) stsKFHit.Create(static_cast<CbmMvdHit*>(hit));
-        else
+        if (isMvdHit) {
+          stsKFHit.Create(static_cast<CbmMvdHit*>(hit));
+        }
+        else {
           stsKFHit.Create(static_cast<CbmStsHit*>(hit));
+        }
 
         Double_t qp0 = T[4];
         stsKFHit.Filter(fKFTrack, kTRUE, qp0);
-- 
GitLab