From 3fd218c9967edee478c957001cc11f99bca811db Mon Sep 17 00:00:00 2001
From: "se.gorbunov" <se.gorbunov@gsi.de>
Date: Thu, 2 Feb 2023 12:17:23 +0000
Subject: [PATCH] store track time at 3 positions: track start, first hit, last
 hit

---
 core/data/CbmTrack.cxx                        | 46 ++++++++++++-------
 core/data/CbmTrack.h                          | 30 +++++++++---
 core/data/sts/CbmStsTrack.cxx                 |  4 +-
 core/data/tof/CbmTofTrack.cxx                 |  4 +-
 reco/L1/L1Algo/L1TrackFitter.cxx              |  4 +-
 .../CbmL1GlobalTrackFinder.cxx                |  8 +++-
 .../OffLineInterface/CbmL1StsTrackFinder.cxx  |  8 +++-
 .../tracks/CbmBuildEventsFromTracksReal.cxx   | 16 +++----
 .../tracks/CbmBuildEventsFromTracksReal.h     |  2 +-
 .../eventbuilder/tracks/CbmEventBuilderQa.cxx | 26 +++++------
 reco/eventbuilder/tracks/CbmEventBuilderQa.h  |  2 +-
 reco/littrack/cbm/reco/CbmLitFitTracks.cxx    |  2 +-
 reco/littrack/cbm/utils/CbmLitConverter.h     | 16 ++++---
 .../tracking/global/CbmGlobalTrackingTask.cxx |  2 +-
 14 files changed, 105 insertions(+), 65 deletions(-)

diff --git a/core/data/CbmTrack.cxx b/core/data/CbmTrack.cxx
index 2f3385eeb5..e05534bd8d 100644
--- a/core/data/CbmTrack.cxx
+++ b/core/data/CbmTrack.cxx
@@ -27,8 +27,12 @@ CbmTrack::CbmTrack()
   , fPidHypo(0)
   , fParamFirst()
   , fParamLast()
-  , fTime(0.)
-  , fTimeError(0.)
+  , fStartTime(0.)
+  , fStartTimeError(0.)
+  , fFirstHitTime(0.)
+  , fFirstHitTimeError(0.)
+  , fLastHitTime(0.)
+  , fLastHitTimeError(0.)
   , fFlag(0)
   , fChiSq(0.)
   , fNDF(0)
@@ -45,8 +49,12 @@ CbmTrack::CbmTrack(const CbmTrack& rhs)
   , fPidHypo(rhs.fPidHypo)
   , fParamFirst(rhs.fParamFirst)
   , fParamLast(rhs.fParamLast)
-  , fTime(rhs.fTime)
-  , fTimeError(rhs.fTimeError)
+  , fStartTime(rhs.fStartTime)
+  , fStartTimeError(rhs.fStartTimeError)
+  , fFirstHitTime(rhs.fFirstHitTime)
+  , fFirstHitTimeError(rhs.fFirstHitTimeError)
+  , fLastHitTime(rhs.fLastHitTime)
+  , fLastHitTimeError(rhs.fLastHitTimeError)
   , fFlag(rhs.fFlag)
   , fChiSq(rhs.fChiSq)
   , fNDF(rhs.fNDF)
@@ -60,19 +68,23 @@ CbmTrack& CbmTrack::operator=(const CbmTrack& rhs)
 {
 
   if (this != &rhs) {
-    TObject::operator=(rhs);
-    fHitIndex        = rhs.fHitIndex;
-    fHitType         = rhs.fHitType;
-    fPidHypo         = rhs.fPidHypo;
-    fParamFirst      = rhs.fParamFirst;
-    fParamLast       = rhs.fParamLast;
-    fTime            = rhs.fTime;
-    fTimeError       = rhs.fTimeError;
-    fFlag            = rhs.fFlag;
-    fChiSq           = rhs.fChiSq;
-    fNDF             = rhs.fNDF;
-    fPreviousTrackId = rhs.fPreviousTrackId;
-    fMatch           = nullptr;
+    TObject::operator  =(rhs);
+    fHitIndex          = rhs.fHitIndex;
+    fHitType           = rhs.fHitType;
+    fPidHypo           = rhs.fPidHypo;
+    fParamFirst        = rhs.fParamFirst;
+    fParamLast         = rhs.fParamLast;
+    fStartTime         = rhs.fStartTime;
+    fStartTimeError    = rhs.fStartTimeError;
+    fFirstHitTime      = rhs.fFirstHitTime;
+    fFirstHitTimeError = rhs.fFirstHitTimeError;
+    fLastHitTime       = rhs.fLastHitTime;
+    fLastHitTimeError  = rhs.fLastHitTimeError;
+    fFlag              = rhs.fFlag;
+    fChiSq             = rhs.fChiSq;
+    fNDF               = rhs.fNDF;
+    fPreviousTrackId   = rhs.fPreviousTrackId;
+    fMatch             = nullptr;
   }
   return *this;
 }
diff --git a/core/data/CbmTrack.h b/core/data/CbmTrack.h
index 5419d752c7..a635562558 100644
--- a/core/data/CbmTrack.h
+++ b/core/data/CbmTrack.h
@@ -66,8 +66,12 @@ public:
   const FairTrackParam* GetParamFirst() const { return &fParamFirst; }
   const FairTrackParam* GetParamLast() const { return &fParamLast; }
   CbmMatch* GetMatch() const { return fMatch; }
-  double GetTime() const { return fTime; }
-  double GetTimeError() const { return fTimeError; }
+  double GetStartTime() const { return fStartTime; }
+  double GetStartTimeError() const { return fStartTimeError; }
+  double GetFirstHitTime() const { return fFirstHitTime; }
+  double GetFirstHitTimeError() const { return fFirstHitTimeError; }
+  double GetLastHitTime() const { return fLastHitTime; }
+  double GetLastHitTimeError() const { return fLastHitTimeError; }
 
   /** Modifiers  **/
   void SetPidHypo(int32_t pid) { fPidHypo = pid; }
@@ -78,8 +82,12 @@ public:
   void SetParamFirst(const FairTrackParam* par) { fParamFirst = *par; }
   void SetParamLast(const FairTrackParam* par) { fParamLast = *par; }
   void SetMatch(CbmMatch* match);
-  void SetTime(double time) { fTime = time; }
-  void SetTimeError(double error) { fTimeError = error; }
+  void SetStartTime(double time) { fStartTime = time; }
+  void SetStartTimeError(double error) { fStartTimeError = error; }
+  void SetFirstHitTime(double time) { fFirstHitTime = time; }
+  void SetFirstHitTimeError(double error) { fFirstHitTimeError = error; }
+  void SetLastHitTime(double time) { fLastHitTime = time; }
+  void SetLastHitTimeError(double error) { fLastHitTimeError = error; }
 
   virtual std::string ToString() const;
 
@@ -98,8 +106,16 @@ protected:
   FairTrackParam fParamLast;
 
   /** Track start time **/
-  double fTime;
-  double fTimeError;
+  double fStartTime;
+  double fStartTimeError;
+
+  /** Track time at the first hit **/
+  double fFirstHitTime;
+  double fFirstHitTimeError;
+
+  /** Track time at the last hit **/
+  double fLastHitTime;
+  double fLastHitTimeError;
 
   /** Quality flag **/
   int32_t fFlag;
@@ -114,7 +130,7 @@ protected:
   /** Monte-Carlo information **/
   CbmMatch* fMatch;
 
-  ClassDef(CbmTrack, 4);
+  ClassDef(CbmTrack, 5);
 };
 
 #endif
diff --git a/core/data/sts/CbmStsTrack.cxx b/core/data/sts/CbmStsTrack.cxx
index 228e40a4d4..a1033a00a2 100644
--- a/core/data/sts/CbmStsTrack.cxx
+++ b/core/data/sts/CbmStsTrack.cxx
@@ -31,8 +31,8 @@ CbmStsTrack::~CbmStsTrack() {}
 std::string CbmStsTrack::ToString() const
 {
   stringstream ss;
-  ss << "CbmStsTrack: time " << fTime << " ns | hits STS " << GetNofStsHits() << " MVD " << GetNofMvdHits() << " | q/p "
-     << GetParamFirst()->GetQp() << " | chisq " << GetChiSq() << " | NDF " << GetNDF() << " | STS hits ";
+  ss << "CbmStsTrack: start time " << fStartTime << " ns | hits STS " << GetNofStsHits() << " MVD " << GetNofMvdHits()
+     << " | q/p " << GetParamFirst()->GetQp() << " | chisq " << GetChiSq() << " | NDF " << GetNDF() << " | STS hits ";
   for (int32_t iHit = 0; iHit < GetNofStsHits(); iHit++) {
     ss << GetStsHitIndex(iHit) << " ";
   }
diff --git a/core/data/tof/CbmTofTrack.cxx b/core/data/tof/CbmTofTrack.cxx
index bf7d3b601c..3e515abe0a 100644
--- a/core/data/tof/CbmTofTrack.cxx
+++ b/core/data/tof/CbmTofTrack.cxx
@@ -32,8 +32,8 @@ CbmTofTrack::~CbmTofTrack() {}
 std::string CbmTofTrack::ToString() const
 {
   stringstream ss;
-  ss << "CbmTofTrack: time " << fTime << " ns | hits STS " << GetNofTofHits() << " | q/p " << GetParamFirst()->GetQp()
-     << " | chisq " << GetChiSq() << " | NDF " << GetNDF() << " | STS hits ";
+  ss << "CbmTofTrack: start time " << fStartTime << " ns | hits STS " << GetNofTofHits() << " | q/p "
+     << GetParamFirst()->GetQp() << " | chisq " << GetChiSq() << " | NDF " << GetNDF() << " | STS hits ";
   for (int32_t iHit = 0; iHit < GetNofTofHits(); iHit++) {
     ss << GetTofHitIndex(iHit) << " ";
   }
diff --git a/reco/L1/L1Algo/L1TrackFitter.cxx b/reco/L1/L1Algo/L1TrackFitter.cxx
index a876ab4fc0..e1b4f6bbed 100644
--- a/reco/L1/L1Algo/L1TrackFitter.cxx
+++ b/reco/L1/L1Algo/L1TrackFitter.cxx
@@ -508,7 +508,7 @@ void L1Algo::L1KFTrackFitter()
       int ista = nStations - 1;
 
       time_last = iif(w_time[ista] > fvec::Zero(), time_last, fvec::Zero());
-      dt2_last  = iif(w_time[ista] > fvec::Zero(), dt2_last, fvec(100.));
+      dt2_last  = iif(w_time[ista] > fvec::Zero(), dt2_last, fvec(1.e6));
 
       FilterFirst(fit, x_last, y_last, time_last, dt2_last, d_xx_lst, d_yy_lst, d_xy_lst);
 
@@ -751,7 +751,7 @@ void L1Algo::L1KFTrackFitter()
   }
 }
 void L1Algo::GuessVecNoField(L1TrackParFit& t, fvec& x_last, fvec& x_2last, fvec& y_last, fvec& y_2last, fvec& z_end,
-                             fvec& z_2last, fvec& time_last, fvec* w_time, fvec& dt2_last)
+                             fvec& z_2last, fvec& time_last, fvec* /*w_time*/, fvec& dt2_last)
 {
   fvec dzi = fvec(1.) / (z_end - z_2last);
 
diff --git a/reco/L1/OffLineInterface/CbmL1GlobalTrackFinder.cxx b/reco/L1/OffLineInterface/CbmL1GlobalTrackFinder.cxx
index 83b66c29f6..cf98e78395 100644
--- a/reco/L1/OffLineInterface/CbmL1GlobalTrackFinder.cxx
+++ b/reco/L1/OffLineInterface/CbmL1GlobalTrackFinder.cxx
@@ -209,8 +209,12 @@ void CbmL1GlobalTrackFinder::CbmL1TrackToCbmStsTrack(CbmL1Track l1track, CbmStsT
   track->SetChiSq(T->chi2);
   track->SetNDF(T->NDF);
   track->SetPidHypo(T->T[4] >= 0 ? 211 : -211);
-  track->SetTime(T->Tpv[6]);
-  track->SetTimeError(T->Cpv[20]);
+  track->SetStartTime(T->Tpv[6]);
+  track->SetStartTimeError(T->Cpv[20]);
+  track->SetFirstHitTime(T->T[6]);
+  track->SetFirstHitTimeError(T->C[20]);
+  track->SetLastHitTime(T->TLast[6]);
+  track->SetLastHitTimeError(T->CLast[20]);
 
   FairTrackParam fpar(*track->GetParamFirst()), lpar(*track->GetParamLast());
   CbmKFMath::CopyTC2TrackParam(&fpar, T->T, T->C);
diff --git a/reco/L1/OffLineInterface/CbmL1StsTrackFinder.cxx b/reco/L1/OffLineInterface/CbmL1StsTrackFinder.cxx
index 4854d17432..cce5fe7aec 100644
--- a/reco/L1/OffLineInterface/CbmL1StsTrackFinder.cxx
+++ b/reco/L1/OffLineInterface/CbmL1StsTrackFinder.cxx
@@ -84,8 +84,12 @@ Int_t CbmL1StsTrackFinder::CopyL1Tracks(CbmEvent* event)
     t->SetChiSq(T.chi2);
     t->SetNDF(T.NDF);
     t->SetPidHypo(T.T[4] >= 0 ? 211 : -211);
-    t->SetTime(T.Tpv[6]);
-    t->SetTimeError(T.Cpv[20]);
+    t->SetStartTime(T.Tpv[6]);
+    t->SetStartTimeError(T.Cpv[20]);
+    t->SetFirstHitTime(T.T[6]);
+    t->SetFirstHitTimeError(T.C[20]);
+    t->SetLastHitTime(T.TLast[6]);
+    t->SetLastHitTimeError(T.CLast[20]);
 
     for (vector<int>::iterator ih = it->Hits.begin(); ih != it->Hits.end(); ++ih) {
       CbmL1HitStore& h = L1->fvHitStore[*ih];
diff --git a/reco/eventbuilder/tracks/CbmBuildEventsFromTracksReal.cxx b/reco/eventbuilder/tracks/CbmBuildEventsFromTracksReal.cxx
index af07d37493..c7d8ff69d3 100644
--- a/reco/eventbuilder/tracks/CbmBuildEventsFromTracksReal.cxx
+++ b/reco/eventbuilder/tracks/CbmBuildEventsFromTracksReal.cxx
@@ -92,8 +92,8 @@ void CbmBuildEventsFromTracksReal::Exec(Option_t*)
   for (unsigned int iTrack = 0; iTrack < nTracks; iTrack++) {
     CbmStsTrack* track = (CbmStsTrack*) fStsTracks->At(iTrack);
 
-    Double_t time   = track->GetTime();
-    Double_t timeEr = track->GetTimeError();
+    Double_t time   = track->GetStartTime();
+    Double_t timeEr = track->GetStartTimeError();
 
     SortTracks structure;
 
@@ -129,14 +129,14 @@ void CbmBuildEventsFromTracksReal::Exec(Option_t*)
     for (unsigned int iTrack = 0; iTrack < Tracks.size(); iTrack++) {
       if (Tracks[iTrack].used) continue;
 
-      float time1  = Tracks[iTrack].Track.GetTime();
-      float timeC1 = Tracks[iTrack].Track.GetTimeError();
+      float time1  = Tracks[iTrack].Track.GetStartTime();
+      float timeC1 = Tracks[iTrack].Track.GetStartTimeError();
 
       for (unsigned int iClusterTrack = 0; iClusterTrack < cluster.size(); iClusterTrack++) {
         CbmStsTrack* stsTrack = (CbmStsTrack*) fStsTracks->At(cluster[iClusterTrack]);
 
-        float time2  = stsTrack->GetTime();
-        float timeC2 = stsTrack->GetTimeError();
+        float time2  = stsTrack->GetStartTime();
+        float timeC2 = stsTrack->GetStartTimeError();
 
         float dt    = fabs(time1 - time2);
         float error = sqrt(timeC1 + timeC2);  ///&&????????????????
@@ -157,9 +157,9 @@ void CbmBuildEventsFromTracksReal::Exec(Option_t*)
     for (unsigned int iClusterTrack = 0; iClusterTrack < cluster.size(); iClusterTrack++) {
       CbmStsTrack* stsTrack = (CbmStsTrack*) fStsTracks->At(cluster[iClusterTrack]);
 
-      if (time_min > stsTrack->GetTime()) time_min = stsTrack->GetTime();
+      if (time_min > stsTrack->GetStartTime()) time_min = stsTrack->GetStartTime();
 
-      if (time_max < stsTrack->GetTime()) time_max = stsTrack->GetTime();
+      if (time_max < stsTrack->GetStartTime()) time_max = stsTrack->GetStartTime();
     }
 
     if (cluster.size() > 1) clusters.push_back(cluster);
diff --git a/reco/eventbuilder/tracks/CbmBuildEventsFromTracksReal.h b/reco/eventbuilder/tracks/CbmBuildEventsFromTracksReal.h
index 4792863af1..60e4be911d 100644
--- a/reco/eventbuilder/tracks/CbmBuildEventsFromTracksReal.h
+++ b/reco/eventbuilder/tracks/CbmBuildEventsFromTracksReal.h
@@ -40,7 +40,7 @@ private:
 
   static bool CompareTrackTime(const SortTracks& a, const SortTracks& b)
   {
-    return (a.Track.GetTime() < b.Track.GetTime());
+    return (a.Track.GetStartTime() < b.Track.GetStartTime());
   }
 
   TClonesArray* fStsTracks;  ///< Input array (class CbmStsDigi)
diff --git a/reco/eventbuilder/tracks/CbmEventBuilderQa.cxx b/reco/eventbuilder/tracks/CbmEventBuilderQa.cxx
index a5af7b979d..4c54d22be7 100644
--- a/reco/eventbuilder/tracks/CbmEventBuilderQa.cxx
+++ b/reco/eventbuilder/tracks/CbmEventBuilderQa.cxx
@@ -323,7 +323,7 @@ void CbmEventBuilderQa::Exec(Option_t* /*opt*/)
 
     CbmStsTrack* track = (CbmStsTrack*) fStsTracks->At(iTrack);
 
-    fTimeHisto[0]->Fill(track->GetTime());
+    fTimeHisto[0]->Fill(track->GetStartTime());
 
 
     UInt_t NHits = track->GetNofStsHits();
@@ -381,8 +381,8 @@ void CbmEventBuilderQa::Exec(Option_t* /*opt*/)
     CbmMCTrack* mcTrack = (CbmMCTrack*) fMCTracks->Get(0, mcEvent, mcTrackId);
 
     double mcTime   = mcTrack->GetStartT() + fEventList->GetEventTime(mcEvent + 1, link.GetFile());
-    double residual = track->GetTime() - mcTime;
-    double pull     = residual / track->GetTimeError();
+    double residual = track->GetStartTime() - mcTime;
+    double pull     = residual / track->GetStartTimeError();
     fTimeHisto[1]->Fill(residual);
     fTimeHisto[2]->Fill(pull);
   }
@@ -504,12 +504,12 @@ void CbmEventBuilderQa::Exec(Option_t* /*opt*/)
 
       CbmStsTrack* track = (CbmStsTrack*) fStsTracks->At(stsTrackIndex);
 
-      if ((track->GetTime()) > tLastTrack) tLastTrack = (track->GetTime());
-      if ((track->GetTime()) < tFirstTrack) tFirstTrack = (track->GetTime());
+      if ((track->GetStartTime()) > tLastTrack) tLastTrack = (track->GetStartTime());
+      if ((track->GetStartTime()) < tFirstTrack) tFirstTrack = (track->GetStartTime());
 
       double mcTime = mcTrack->GetStartT() + fEventList->GetEventTime(mcEvent + 1, link.GetFile());
 
-      fTimeHisto[24]->Fill(fabs(track->GetTime() - mcTime) / track->GetTimeError());
+      fTimeHisto[24]->Fill(fabs(track->GetStartTime() - mcTime) / track->GetStartTimeError());
 
       if (fMCEvents[mcEvent].IsReconstructable()) EventMatch.AddTrack(mcEvent);
 
@@ -518,8 +518,8 @@ void CbmEventBuilderQa::Exec(Option_t* /*opt*/)
         const int stsTrackIndex1 = event->GetStsTrackIndex(iTr1);
         CbmStsTrack* track1      = (CbmStsTrack*) fStsTracks->At(stsTrackIndex1);
 
-        fTimeHisto[25]->Fill(fabs(track->GetTime() - track1->GetTime())
-                             / sqrt(track->GetTimeError() + track1->GetTimeError()));
+        fTimeHisto[25]->Fill(fabs(track->GetStartTime() - track1->GetStartTime())
+                             / sqrt(track->GetStartTimeError() + track1->GetStartTimeError()));
       }
 
       for (int iEvent1 = 0; iEvent1 < fEvents->GetEntriesFast(); iEvent1++) {
@@ -532,10 +532,10 @@ void CbmEventBuilderQa::Exec(Option_t* /*opt*/)
           const int stsTrackIndex1 = event1->GetStsTrackIndex(iTr1);
           CbmStsTrack* track1      = (CbmStsTrack*) fStsTracks->At(stsTrackIndex1);
 
-          if (fabs(track->GetTime() - track1->GetTime()) > 8.5) continue;
+          if (fabs(track->GetStartTime() - track1->GetStartTime()) > 8.5) continue;
 
-          fTimeHisto[26]->Fill(fabs(track->GetTime() - track1->GetTime())
-                               / sqrt(track->GetTimeError() + track1->GetTimeError()));
+          fTimeHisto[26]->Fill(fabs(track->GetStartTime() - track1->GetStartTime())
+                               / sqrt(track->GetStartTimeError() + track1->GetStartTimeError()));
         }
       }
     }
@@ -589,10 +589,10 @@ void CbmEventBuilderQa::Exec(Option_t* /*opt*/)
       const int stsTrackIndex = event->GetStsTrackIndex(i);
       CbmStsTrack* track      = (CbmStsTrack*) fStsTracks->At(stsTrackIndex);
 
-      fTimeHisto[6]->Fill(track->GetTime());
+      fTimeHisto[6]->Fill(track->GetStartTime());
 
 
-      fTimeHisto[11 + iCol]->Fill(track->GetTime());
+      fTimeHisto[11 + iCol]->Fill(track->GetStartTime());
 
       UInt_t NHits = track->GetNofStsHits();
 
diff --git a/reco/eventbuilder/tracks/CbmEventBuilderQa.h b/reco/eventbuilder/tracks/CbmEventBuilderQa.h
index 1c344a41c6..0d6a63b919 100644
--- a/reco/eventbuilder/tracks/CbmEventBuilderQa.h
+++ b/reco/eventbuilder/tracks/CbmEventBuilderQa.h
@@ -67,7 +67,7 @@ private:
 
   static bool CompareTrackTime(const SortEvents& a, const SortEvents& b)
   {
-    return (a.track.GetTime() < b.track.GetTime());
+    return (a.track.GetStartTime() < b.track.GetStartTime());
   }
 
   bool CalculateIsReconstructable(const int iMCFile, const int iMCEvent,
diff --git a/reco/littrack/cbm/reco/CbmLitFitTracks.cxx b/reco/littrack/cbm/reco/CbmLitFitTracks.cxx
index fb3508b10b..d01135b26f 100644
--- a/reco/littrack/cbm/reco/CbmLitFitTracks.cxx
+++ b/reco/littrack/cbm/reco/CbmLitFitTracks.cxx
@@ -107,7 +107,7 @@ void CbmLitFitTracks::DoFit()
     Int_t stsTrackId      = track->GetPreviousTrackId();
     CbmStsTrack* stsTrack = static_cast<CbmStsTrack*>(fStsTracks->At(stsTrackId));
     CbmTrackParam cbmLPar;
-    cbmLPar.Set(*stsTrack->GetParamLast(), stsTrack->GetTime(), stsTrack->GetTimeError());
+    cbmLPar.Set(*stsTrack->GetParamLast(), stsTrack->GetLastHitTime(), stsTrack->GetLastHitTimeError());
     CbmLitTrackParam lpar;
     CbmLitConverterFairTrackParam::FairTrackParamToCbmLitTrackParam(&cbmLPar, &lpar);
     track->SetParamFirst(&lpar);
diff --git a/reco/littrack/cbm/utils/CbmLitConverter.h b/reco/littrack/cbm/utils/CbmLitConverter.h
index 93d9374bf6..46757b3c5f 100644
--- a/reco/littrack/cbm/utils/CbmLitConverter.h
+++ b/reco/littrack/cbm/utils/CbmLitConverter.h
@@ -104,10 +104,10 @@ public:
     CbmLitTrackParam paramFirst, paramLast;
     //TODO remove this const typecasting
     CbmTrackParam cbmParamFirst;
-    cbmParamFirst.Set(*stsTrack->GetParamFirst(), stsTrack->GetTime(), stsTrack->GetTimeError());
+    cbmParamFirst.Set(*stsTrack->GetParamFirst(), stsTrack->GetFirstHitTime(), stsTrack->GetFirstHitTimeError());
     CbmLitConverterFairTrackParam::FairTrackParamToCbmLitTrackParam(&cbmParamFirst, &paramFirst);
     CbmTrackParam cbmParamLast;
-    cbmParamLast.Set(*stsTrack->GetParamLast(), stsTrack->GetTime(), stsTrack->GetTimeError());
+    cbmParamLast.Set(*stsTrack->GetParamLast(), stsTrack->GetLastHitTime(), stsTrack->GetLastHitTimeError());
     CbmLitConverterFairTrackParam::FairTrackParamToCbmLitTrackParam(&cbmParamLast, &paramLast);
     Double_t firstTime;
     Double_t lastTime;
@@ -137,10 +137,10 @@ public:
     ltrack->SetPDG(track->GetPidHypo());
     CbmLitTrackParam paramFirst, paramLast;
     CbmTrackParam cbmParamFirst;
-    cbmParamFirst.Set(*track->GetParamFirst(), track->GetTime(), track->GetTimeError());
+    cbmParamFirst.Set(*track->GetParamFirst(), track->GetFirstHitTime(), track->GetFirstHitTimeError());
     CbmLitConverterFairTrackParam::FairTrackParamToCbmLitTrackParam(&cbmParamFirst, &paramFirst);
     CbmTrackParam cbmParamLast;
-    cbmParamLast.Set(*track->GetParamLast(), track->GetTime(), track->GetTimeError());
+    cbmParamLast.Set(*track->GetParamLast(), track->GetLastHitTime(), track->GetLastHitTimeError());
     CbmLitConverterFairTrackParam::FairTrackParamToCbmLitTrackParam(&cbmParamLast, &paramLast);
     ltrack->SetParamFirst(&paramFirst);
     ltrack->SetParamLast(&paramLast);
@@ -330,6 +330,10 @@ public:
 
   static void GetStsTrackTimes(const CbmStsTrack* track, Double_t& firstTime, Double_t& lastTime)
   {
+    firstTime = track->GetFirstHitTime();
+    lastTime  = track->GetLastHitTime();
+    return;
+
     static FairRootManager* ioman = 0;
     static CbmVertex* primVertex  = 0;
     static TClonesArray* stsHits  = 0;
@@ -359,10 +363,10 @@ public:
     CbmLitTrackParam paramFirst;
     CbmLitTrackParam paramLast;
     CbmTrackParam cbmParamFirst;
-    cbmParamFirst.Set(*track->GetParamFirst(), track->GetTime(), track->GetTimeError());
+    cbmParamFirst.Set(*track->GetParamFirst(), track->GetFirstHitTime(), track->GetFirstHitTimeError());
     CbmLitConverterFairTrackParam::FairTrackParamToCbmLitTrackParam(&cbmParamFirst, &paramFirst);
     CbmTrackParam cbmParamLast;
-    cbmParamLast.Set(*track->GetParamLast(), track->GetTime(), track->GetTimeError());
+    cbmParamLast.Set(*track->GetParamLast(), track->GetLastHitTime(), track->GetLastHitTimeError());
     CbmLitConverterFairTrackParam::FairTrackParamToCbmLitTrackParam(&cbmParamLast, &paramLast);
 
     Double_t x = paramFirst.GetX();
diff --git a/reco/tracking/global/CbmGlobalTrackingTask.cxx b/reco/tracking/global/CbmGlobalTrackingTask.cxx
index 76e03e19e5..7a99c5d044 100644
--- a/reco/tracking/global/CbmGlobalTrackingTask.cxx
+++ b/reco/tracking/global/CbmGlobalTrackingTask.cxx
@@ -143,7 +143,7 @@ void CbmGlobalTrackingTask::Exec(Option_t* /*opt*/)
 #endif  //CBM_GLOBALTB_PRINT_PERF
     //fTofGeometry.Find(param->GetX(), param->GetCovariance(0, 0), param->GetY(), param->GetCovariance(1, 1), param->GetZ(),
     //track->GetTime(), track->GetTimeError(), param->GetTx(), TMath::Sqrt(param->GetCovariance(2, 2)), param->GetTy(), TMath::Sqrt(param->GetCovariance(3, 3)), tofHitInd);
-    fTofGeometry.Find(param, track->GetTime(), track->GetTimeError(), tofHitInd, trackLength);
+    fTofGeometry.Find(param, track->GetLastHitTime(), track->GetLastHitTimeError(), tofHitInd, trackLength);
     globalTrack->SetTofHitIndex(tofHitInd);
     globalTrack->SetLength(stsTrackLength + trackLength);
     globalTrack->SetParamFirst(track->GetParamFirst());
-- 
GitLab