diff --git a/analysis/PWGDIL/dimuon/CbmAnaDimuonAnalysis.cxx b/analysis/PWGDIL/dimuon/CbmAnaDimuonAnalysis.cxx
index 3e912ea02badbd694a787f22c0187ccb29d6a4bb..d83ff362d8973d1e7eba7bc76d12b12382ea6af4 100644
--- a/analysis/PWGDIL/dimuon/CbmAnaDimuonAnalysis.cxx
+++ b/analysis/PWGDIL/dimuon/CbmAnaDimuonAnalysis.cxx
@@ -17,9 +17,6 @@
 
 #include "CbmAnaMuonCandidate.h"
 #include "CbmGlobalTrack.h"
-#include "CbmGlobalTrackFitterKF.h"
-#include "CbmKFTrack.h"
-#include "CbmKFVertex.h"
 #include "CbmMCTrack.h"
 #include "CbmMatch.h"
 #include "CbmMuchGeoScheme.h"
@@ -81,7 +78,6 @@ CbmAnaDimuonAnalysis::CbmAnaDimuonAnalysis(TString name, TString setup)
   , fInputTree(NULL)
   , fPlutoFile(NULL)
   , fFitter(NULL)
-  , fFitterGlobal(NULL)
   , fVertex(NULL)
   , fChi2StsCut(2)
   , fChi2MuchCut(3)
@@ -160,9 +156,6 @@ InitStatus CbmAnaDimuonAnalysis::Init()
   fFitter = new CbmStsKFTrackFitter();
   fFitter->Init();
 
-  fFitterGlobal = new CbmGlobalTrackFitterKF();
-  fFitterGlobal->Init();
-
   YPt_pluto = new TH2D("YPt_pluto", "PLUTO signal", YBINNING, PTBINNING);
 
   if (fPlutoFileName != "") {
diff --git a/analysis/PWGDIL/dimuon/CbmAnaDimuonAnalysis.h b/analysis/PWGDIL/dimuon/CbmAnaDimuonAnalysis.h
index e7e5f12bd6d168a3f76c1c90201ae048421ed95f..ab671dd18f06c787dfe39ec94580d8891524dee7 100644
--- a/analysis/PWGDIL/dimuon/CbmAnaDimuonAnalysis.h
+++ b/analysis/PWGDIL/dimuon/CbmAnaDimuonAnalysis.h
@@ -27,7 +27,6 @@ class CbmMuchTrack;
 class CbmTofHit;
 class CbmMuchGeoScheme;
 class CbmStsKFTrackFitter;
-class CbmGlobalTrackFitterKF;
 class CbmVertex;
 class TClonesArray;
 class TLorentzVector;
@@ -98,7 +97,6 @@ class CbmAnaDimuonAnalysis : public FairTask {
   TFile* fPlutoFile;
 
   CbmStsKFTrackFitter* fFitter;
-  CbmGlobalTrackFitterKF* fFitterGlobal;
 
   CbmVertex* fVertex;
 
diff --git a/analysis/PWGHAD/hadron/CbmHadronAnalysis.cxx b/analysis/PWGHAD/hadron/CbmHadronAnalysis.cxx
index b1da44180deb967ae02a4b5e150ccb9fed3b6326..b57089af1eb43e5cc0e0b77500293afa1da82d12 100644
--- a/analysis/PWGHAD/hadron/CbmHadronAnalysis.cxx
+++ b/analysis/PWGHAD/hadron/CbmHadronAnalysis.cxx
@@ -15,7 +15,6 @@ using namespace std;
 #include "CbmGlobalTrack.h"
 #include "CbmHadron.h"
 #include "CbmHadronAnalysis.h"
-#include "CbmKFVertex.h"
 #include "CbmLink.h"
 #include "CbmMCDataArray.h"
 #include "CbmMCDataManager.h"
diff --git a/reco/KF/CbmKFSecondaryVertexFinder.cxx b/reco/KF/CbmKFSecondaryVertexFinder.cxx
deleted file mode 100644
index 10dc46bc25bb657b2751229dd34cbb81812d49e7..0000000000000000000000000000000000000000
--- a/reco/KF/CbmKFSecondaryVertexFinder.cxx
+++ /dev/null
@@ -1,672 +0,0 @@
-/* Copyright (C) 2006-2016 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Sergey Gorbunov, Ivan Kisel, Denis Bertini [committer] */
-
-/** Implementation of the CbmKFSecondaryVertexFinder class
- *
- * @author  S.Gorbunov, I.Kisel
- * @version 1.0
- * @since   06.02.06
- *
- */
-
-#include "CbmKFSecondaryVertexFinder.h"
-
-#include "CbmKF.h"
-#include "CbmKFTrack.h"
-
-#include <cmath>
-
-using std::fabs;
-using std::vector;
-
-ClassImp(CbmKFSecondaryVertexFinder)
-
-  void CbmKFSecondaryVertexFinder::Clear(Option_t* /*opt*/)
-{
-  vTracks.clear();
-  VGuess         = nullptr;
-  VParent        = nullptr;
-  MassConstraint = -1;
-}
-
-void CbmKFSecondaryVertexFinder::ClearTracks() { vTracks.clear(); }
-
-void CbmKFSecondaryVertexFinder::AddTrack(CbmKFTrackInterface* Track) { vTracks.push_back(Track); }
-
-void CbmKFSecondaryVertexFinder::SetTracks(vector<CbmKFTrackInterface*>& vTr) { vTracks = vTr; }
-
-void CbmKFSecondaryVertexFinder::SetApproximation(CbmKFVertexInterface* Guess) { VGuess = Guess; }
-
-void CbmKFSecondaryVertexFinder::SetMassConstraint(Double_t MotherMass) { MassConstraint = MotherMass; }
-
-void CbmKFSecondaryVertexFinder::SetTopoConstraint(CbmKFVertexInterface* VP) { VParent = VP; }
-
-void CbmKFSecondaryVertexFinder::Fit()
-{
-  const Int_t MaxIter = 3;
-
-  if (VGuess) {
-    r[0] = VGuess->GetRefX();
-    r[1] = VGuess->GetRefY();
-    r[2] = VGuess->GetRefZ();
-  }
-  else {
-    if (CbmKF::Instance()->vTargets.empty()) {
-      r[0] = r[1] = r[2] = 0.;
-    }
-    else {
-      CbmKFTube& t = CbmKF::Instance()->vTargets[0];
-      r[0] = r[1] = 0.;
-      r[2]        = t.z;
-    }
-  }
-
-  r[3] = 0;
-  r[4] = 0;
-  r[5] = 0;
-  r[6] = 0;
-  r[7] = 0;
-
-  for (Int_t iteration = 0; iteration < MaxIter; ++iteration) {
-
-    for (int i = 0; i < 8; i++) {
-      r0[i] = r[i];
-    }
-
-    r[3] = 0;
-    r[4] = 0;
-    r[5] = 0;
-    r[6] = 0;
-
-    for (Int_t i = 0; i < 36; ++i) {
-      C[i] = 0.0;
-    }
-
-    C[0] = C[2] = C[5] = 100.0;
-    C[35]              = 1.E4;
-    NDF                = -3;
-    Chi2               = 0.;
-
-    for (vector<CbmKFTrackInterface*>::iterator tr = vTracks.begin(); tr != vTracks.end(); ++tr) {
-      CbmKFTrack T(**tr);
-
-      T.Extrapolate(r0[2]);
-
-      Double_t* m = T.GetTrack();
-      Double_t* V = T.GetCovMatrix();
-
-      //* Fit of vertex track slopes and momentum (a,b,qp) to r0 vertex
-
-      Double_t a = m[2], b = m[3], qp = m[4];
-      {
-        Double_t s        = V[0] * V[2] - V[1] * V[1];
-        s                 = (s > 1.E-20) ? 1. / s : 0;
-        Double_t zetas[2] = {(r0[0] - m[0]) * s, (r0[1] - m[1]) * s};
-        a += (V[3] * V[2] - V[4] * V[1]) * zetas[0] + (-V[3] * V[1] + V[4] * V[0]) * zetas[1];
-        b += (V[6] * V[2] - V[7] * V[1]) * zetas[0] + (-V[6] * V[1] + V[7] * V[0]) * zetas[1];
-        qp += (V[10] * V[2] - V[11] * V[1]) * zetas[0] + (-V[10] * V[1] + V[11] * V[0]) * zetas[1];
-      }
-
-      //* convert the track to (x,y,px,py,pz,e) parameterization
-      double mm[6], VV[21];
-      {
-        double c2 = 1. / (1. + a * a + b * b);
-        double p  = 1. / qp;
-        double p2 = p * p;
-        double pz = sqrt(p2 * c2);
-        double px = a * pz;
-        double py = b * pz;
-        double E  = sqrt(T.GetMass() * T.GetMass() + p2);
-
-        double da = (m[2] - a);
-        double db = (m[3] - b);
-        double dq = (m[4] - qp);
-
-        double H[3] = {-px * c2, -py * c2, -pz * p};
-        double HE   = -p * p2 / E;
-
-        double dpz = H[0] * da + H[1] * db + H[2] * dq;
-
-        mm[0] = m[0];
-        mm[1] = m[1];
-        mm[2] = px + da + a * dpz;
-        mm[3] = py + db + b * dpz;
-        mm[4] = pz + dpz;
-        mm[5] = E + HE * dq;
-
-        double cxpz  = H[0] * V[3] + H[1] * V[6] + H[2] * V[10];
-        double cypz  = H[0] * V[4] + H[1] * V[7] + H[2] * V[11];
-        double capz  = H[0] * V[5] + H[1] * V[8] + H[2] * V[12];
-        double cbpz  = H[0] * V[8] + H[1] * V[9] + H[2] * V[13];
-        double cqpz  = H[0] * V[12] + H[1] * V[13] + H[2] * V[14];
-        double cpzpz = H[0] * H[0] * V[5] + H[1] * H[1] * V[9] + H[2] * H[2] * V[14]
-                       + 2 * (H[0] * H[1] * V[8] + H[0] * H[2] * V[12] + H[1] * H[2] * V[13]);
-
-        VV[0]  = V[0];
-        VV[1]  = V[1];
-        VV[2]  = V[2];
-        VV[3]  = V[3] * pz + a * cxpz;
-        VV[4]  = V[4] * pz + a * cypz;
-        VV[5]  = V[5] * pz * pz + 2 * a * pz * capz + a * a * cpzpz;
-        VV[6]  = V[6] * pz + b * cxpz;
-        VV[7]  = V[7] * pz + b * cypz;
-        VV[8]  = V[8] * pz * pz + a * pz * cbpz + b * pz * capz + a * b * cpzpz;
-        VV[9]  = V[9] * pz * pz + 2 * b * pz * cbpz + b * b * cpzpz;
-        VV[10] = cxpz;
-        VV[11] = cypz;
-        VV[12] = capz * pz + a * cpzpz;
-        VV[13] = cbpz * pz + b * cpzpz;
-        VV[14] = cpzpz;
-        VV[15] = HE * V[10];
-        VV[16] = HE * V[11];
-        VV[17] = HE * (V[12] * pz + a * cqpz);
-        VV[18] = HE * (V[13] * pz + b * cqpz);
-        VV[19] = HE * cqpz;
-        VV[20] = HE * HE * V[14];
-      }
-
-
-      //* Measure the state vector with the track estimate
-
-      Chi2 += T.GetRefChi2();
-      NDF += T.GetRefNDF() - 3;
-
-      //* Update the state vector with the momentum part of the track estimate
-
-      r[3] += mm[2];
-      r[4] += mm[3];
-      r[5] += mm[4];
-      r[6] += mm[5];
-
-      C[9] += VV[5];
-      C[13] += VV[8];
-      C[14] += VV[9];
-      C[18] += VV[12];
-      C[19] += VV[13];
-      C[20] += VV[14];
-      C[24] += VV[17];
-      C[25] += VV[18];
-      C[26] += VV[19];
-      C[27] += VV[20];
-
-      NDF += 3;
-      Chi2 += 0.;
-
-      //* Update the state vector with the coordinate part of the track estimate
-
-      //* Residual (measured - estimated)
-
-      Double_t zeta[2] = {mm[0] - (r[0] - a * (r[2] - r0[2])), mm[1] - (r[1] - b * (r[2] - r0[2]))};
-
-      //* Measurement matrix H= { { 1, 0, -a, 0..0}, { 0, 1, -b,0..0} };
-
-      //* S = (H*C*H' + V )^{-1}
-
-      Double_t S[3] = {VV[0] + C[0] - 2 * a * C[3] + a * a * C[5], VV[1] + C[1] - b * C[3] - a * C[4] + a * b * C[5],
-                       VV[2] + C[2] - 2 * b * C[4] + b * b * C[5]};
-
-      //* Invert S
-      {
-        Double_t s = S[0] * S[2] - S[1] * S[1];
-
-        if (s < 1.E-20) {
-          continue;
-        }
-        s           = 1. / s;
-        Double_t S0 = S[0];
-        S[0]        = s * S[2];
-        S[1]        = -s * S[1];
-        S[2]        = s * S0;
-      }
-
-      //* CHt = CH' - D'
-
-      Double_t CHt0[7], CHt1[7];
-
-      CHt0[0] = C[0] - a * C[3];
-      CHt1[0] = C[1] - b * C[3];
-      CHt0[1] = C[1] - a * C[4];
-      CHt1[1] = C[2] - b * C[4];
-      CHt0[2] = C[3] - a * C[5];
-      CHt1[2] = C[4] - b * C[5];
-      CHt0[3] = C[6] - a * C[8] - VV[3];
-      CHt1[3] = C[7] - b * C[8] - VV[4];
-      CHt0[4] = C[10] - a * C[12] - VV[6];
-      CHt1[4] = C[11] - b * C[12] - VV[7];
-      CHt0[5] = C[15] - a * C[17] - VV[10];
-      CHt1[5] = C[16] - b * C[17] - VV[11];
-      CHt0[6] = C[21] - a * C[23] - VV[15];
-      CHt1[6] = C[22] - b * C[23] - VV[16];
-
-      //* Kalman gain K = CH'*S
-
-      Double_t K0[7], K1[7];
-
-      for (Int_t i = 0; i < 7; ++i) {
-        K0[i] = CHt0[i] * S[0] + CHt1[i] * S[1];
-        K1[i] = CHt0[i] * S[1] + CHt1[i] * S[2];
-      }
-
-      //* New estimation of the vertex position r += K*zeta
-
-      for (Int_t i = 0; i < 7; ++i) {
-        r[i] += K0[i] * zeta[0] + K1[i] * zeta[1];
-      }
-
-      //* New covariance matrix C -= K*(CH')'
-
-      for (Int_t i = 0, k = 0; i < 7; ++i) {
-        for (Int_t j = 0; j <= i; ++j, ++k) {
-          C[k] -= K0[i] * CHt0[j] + K1[i] * CHt1[j];
-        }
-      }
-
-      //* Calculate Chi^2 & NDF
-
-      NDF += 2;
-      Chi2 += zeta[0] * zeta[0] * S[0] + 2 * zeta[0] * zeta[1] * S[1] + zeta[1] * zeta[1] * S[2];
-
-    }  // add tracks
-
-    // Put constraints if they exist
-
-    AddTopoConstraint();
-    AddMassConstraint();
-
-  }  // iterations
-}
-
-
-void CbmKFSecondaryVertexFinder::GetVertex(CbmKFVertexInterface& vtx)
-{
-  vtx.GetRefX() = r[0];
-  vtx.GetRefY() = r[1];
-  vtx.GetRefZ() = r[2];
-  for (int i = 0; i < 6; i++) {
-    vtx.GetCovMatrix()[i] = C[i];
-  }
-  vtx.GetRefChi2() = Chi2;
-  vtx.GetRefNDF()  = NDF;
-}
-
-void CbmKFSecondaryVertexFinder::GetVertex(CbmVertex& vtx)
-{
-  CbmKFVertexInterface vi;
-  GetVertex(vi);
-  vi.GetVertex(vtx);
-}
-
-
-void CbmKFSecondaryVertexFinder::GetMotherTrack(Double_t Par[], Double_t Cov[])
-{
-
-  if (!Par) {
-    return;
-  }
-
-  Double_t px = r[3], py = r[4], pz = r[5];
-
-  Double_t p = sqrt(px * px + py * py + pz * pz);
-  double pzi = 1 / pz;
-  double qp  = 1 / p;
-  Par[0]     = r[0];
-  Par[1]     = r[1];
-  Par[2]     = px * pzi;
-  Par[3]     = py * pzi;
-  Par[4]     = qp;
-  Par[5]     = r[2];
-
-  if (!Cov) {
-    return;
-  }
-
-  double qp3 = qp * qp * qp;
-  Double_t J[5][6];
-
-  for (Int_t i = 0; i < 5; i++) {
-    for (Int_t j = 0; j < 6; ++j) {
-      J[i][j] = 0.0;
-    }
-  }
-
-
-  J[0][0] = 1;
-  J[0][2] = -Par[2];
-  J[1][1] = 1;
-  J[1][2] = -Par[3];
-  J[2][3] = pzi;
-  J[2][5] = -Par[2] * pzi;
-  J[3][4] = pzi;
-  J[3][5] = -Par[3] * pzi;
-  J[4][3] = -qp3 * px;
-  J[4][4] = -qp3 * py;
-  J[4][4] = -qp3 * pz;
-
-  Double_t JC[5][6];
-
-  for (Int_t i = 0; i < 5; i++) {
-    for (Int_t j = 0; j < 6; j++) {
-      JC[i][j] = 0;
-      for (Int_t k = 0; k < 6; k++) {
-        JC[i][j] += J[i][k] * Cij(k, j);
-      }
-    }
-  }
-
-  Int_t ii = 0;
-  for (Int_t i = 0; i < 5; i++) {
-    for (Int_t j = i; j < 5; j++, ii++) {
-      Cov[ii] = 0;
-      for (Int_t k = 0; k < 6; k++) {
-        Cov[ii] += JC[i][k] * J[j][k];
-      }
-    }
-  }
-}
-
-
-void CbmKFSecondaryVertexFinder::GetMass(Double_t* M, Double_t* Error_)
-{
-  // S = sigma^2 of m2/2
-
-  Double_t S  = (r[3] * r[3] * C[9] + r[4] * r[4] * C[14] + r[5] * r[5] * C[20] + r[6] * r[6] * C[27]
-                + 2
-                    * (+r[3] * r[4] * C[13] + r[5] * (r[3] * C[18] + r[4] * C[19])
-                       - r[6] * (r[3] * C[24] + r[4] * C[25] + r[5] * C[26])));
-  Double_t m2 = r[6] * r[6] - r[3] * r[3] - r[4] * r[4] - r[5] * r[5];
-
-  if (M) {
-    *M = (m2 > 1.e-20) ? sqrt(m2) : 0.;
-  }
-  if (Error_) {
-    *Error_ = (S >= 0 && m2 > 1.e-20) ? sqrt(S / m2) : 1.e4;
-  }
-}
-
-
-void CbmKFSecondaryVertexFinder::AddMassConstraint()
-{
-  if (MassConstraint < 0) {
-    return;
-  }
-  double H[8];
-  H[0] = H[1] = H[2] = 0.;
-  H[3]               = -2 * r0[3];
-  H[4]               = -2 * r0[4];
-  H[5]               = -2 * r0[5];
-  H[6]               = 2 * r0[6];
-  H[7]               = 0;
-  double m2          = r0[6] * r0[6] - r0[3] * r0[3] - r0[4] * r0[4] - r0[5] * r0[5];
-
-  double zeta = MassConstraint * MassConstraint - m2;
-  for (Int_t i = 0; i < 8; ++i) {
-    zeta -= H[i] * (r[i] - r0[i]);
-  }
-
-  Double_t S = 0.;
-  Double_t CHt[8];
-  for (Int_t i = 0; i < 8; ++i) {
-    CHt[i] = 0.0;
-    for (Int_t j = 0; j < 8; ++j) {
-      CHt[i] += Cij(i, j) * H[j];
-    }
-    S += H[i] * CHt[i];
-  }
-
-  if (S < 1.e-20) {
-    return;
-  }
-  S = 1. / S;
-  Chi2 += zeta * zeta * S;
-  NDF += 1;
-  for (Int_t i = 0, ii = 0; i < 8; ++i) {
-    Double_t Ki = CHt[i] * S;
-    r[i] += Ki * zeta;
-    for (Int_t j = 0; j <= i; ++j) {
-      C[ii++] -= Ki * CHt[j];
-    }
-  }
-}
-
-
-void CbmKFSecondaryVertexFinder::Extrapolate(double T)
-{
-
-  r0[0] += T * r0[3];
-  r0[1] += T * r0[4];
-  r0[2] += T * r0[5];
-
-  r[0] += T * r[3];
-  r[1] += T * r[4];
-  r[2] += T * r[5];
-
-  double C30 = C[6] + T * C[9];
-  double C41 = C[11] + T * C[14];
-  double C52 = C[17] + T * C[20];
-  double T54 = T * C[19];
-
-  C[0] += T * (C[6] + C30);
-  C[1] += T * (C[7] + C[10]);
-  C[2] += T * (C[11] + C41);
-  C[10] += T * C[13];
-  C[6]  = C30;
-  C[11] = C41;
-
-  C[15] += T * C[18];
-  C[16] += T54;
-  C[3] += T * (C[8] + C[15]);
-  C[4] += T * (C[12] + C[16]);
-  C[5] += T * (C[17] + C52);
-  C[17] = C52;
-  C[12] += T54;
-
-  C[7] += T * C[13];
-  C[8] += T * C[18];
-
-  C[21] += T * C[24];
-  C[22] += T * C[25];
-  C[23] += T * C[26];
-  C[28] += T * C[31];
-  C[29] += T * C[32];
-  C[30] += T * C[33];
-}
-
-void CbmKFSecondaryVertexFinder::AddTopoConstraint()
-{
-  if (!VParent) {
-    return;
-  }
-
-  double m[3], *V;
-  {
-    m[0] = VParent->GetRefX();
-    m[1] = VParent->GetRefY();
-    m[2] = VParent->GetRefZ();
-    V    = VParent->GetCovMatrix();
-  }
-
-  Extrapolate(-r0[7]);
-
-  {
-    double inf  = 1.e8;
-    double xinf = r0[0] * inf;
-    double yinf = r0[1] * inf;
-    double zinf = r0[2] * inf;
-    C[0] += r0[0] * xinf;
-    C[1] += r0[0] * yinf;
-    C[2] += r0[1] * yinf;
-    C[3] += r0[0] * zinf;
-    C[4] += r0[1] * zinf;
-    C[5] += r0[2] * zinf;
-    C[28] = -2 * xinf;
-    C[29] = -2 * yinf;
-    C[30] = -2 * zinf;
-    C[31] = 0;
-    C[32] = 0;
-    C[33] = 0;
-    C[34] = 0;
-    C[35] = inf;
-  }
-  r[7] = r0[7];
-
-  double Ai[6];
-  Ai[0]      = C[4] * C[4] - C[2] * C[5];
-  Ai[1]      = C[1] * C[5] - C[3] * C[4];
-  Ai[3]      = C[2] * C[3] - C[1] * C[4];
-  double det = (C[0] * Ai[0] + C[1] * Ai[1] + C[3] * Ai[3]);
-  det        = (det > 1.e-8) ? 1. / det : 0;
-  Ai[0] *= det;
-  Ai[1] *= det;
-  Ai[3] *= det;
-  Ai[2] = (C[3] * C[3] - C[0] * C[5]) * det;
-  Ai[4] = (C[0] * C[4] - C[1] * C[3]) * det;
-  Ai[5] = (C[1] * C[1] - C[0] * C[2]) * det;
-
-  double B[5][3];
-  B[0][0] = C[6] * Ai[0] + C[7] * Ai[1] + C[8] * Ai[3];
-  B[0][1] = C[6] * Ai[1] + C[7] * Ai[2] + C[8] * Ai[4];
-  B[0][2] = C[6] * Ai[3] + C[7] * Ai[4] + C[8] * Ai[5];
-
-  B[1][0] = C[10] * Ai[0] + C[11] * Ai[1] + C[12] * Ai[3];
-  B[1][1] = C[10] * Ai[1] + C[11] * Ai[2] + C[12] * Ai[4];
-  B[1][2] = C[10] * Ai[3] + C[11] * Ai[4] + C[12] * Ai[5];
-
-  B[2][0] = C[15] * Ai[0] + C[16] * Ai[1] + C[17] * Ai[3];
-  B[2][1] = C[15] * Ai[1] + C[16] * Ai[2] + C[17] * Ai[4];
-  B[2][2] = C[15] * Ai[3] + C[16] * Ai[4] + C[17] * Ai[5];
-
-  B[3][0] = C[21] * Ai[0] + C[22] * Ai[1] + C[23] * Ai[3];
-  B[3][1] = C[21] * Ai[1] + C[22] * Ai[2] + C[23] * Ai[4];
-  B[3][2] = C[21] * Ai[3] + C[22] * Ai[4] + C[23] * Ai[5];
-
-  B[4][0] = C[28] * Ai[0] + C[29] * Ai[1] + C[30] * Ai[3];
-  B[4][1] = C[28] * Ai[1] + C[29] * Ai[2] + C[30] * Ai[4];
-  B[4][2] = C[28] * Ai[3] + C[29] * Ai[4] + C[30] * Ai[5];
-
-  double z[3] = {m[0] - r[0], m[1] - r[1], m[2] - r[2]};
-  r[0]        = m[0];
-  r[1]        = m[1];
-  r[2]        = m[2];
-  r[3] += B[0][0] * z[0] + B[0][1] * z[1] + B[0][2] * z[2];
-  r[4] += B[1][0] * z[0] + B[1][1] * z[1] + B[1][2] * z[2];
-  r[5] += B[2][0] * z[0] + B[2][1] * z[1] + B[2][2] * z[2];
-  r[6] += B[3][0] * z[0] + B[3][1] * z[1] + B[3][2] * z[2];
-  r[7] += B[4][0] * z[0] + B[4][1] * z[1] + B[4][2] * z[2];
-
-  {
-    double AV[6] = {C[0] - V[0], C[1] - V[1], C[2] - V[2], C[3] - V[3], C[4] - V[4], C[5] - V[5]};
-    double AVi[6];
-    AVi[0] = AV[4] * AV[4] - AV[2] * AV[5];
-    AVi[1] = AV[1] * AV[5] - AV[3] * AV[4];
-    AVi[2] = AV[3] * AV[3] - AV[0] * AV[5];
-    AVi[3] = AV[2] * AV[3] - AV[1] * AV[4];
-    AVi[4] = AV[0] * AV[4] - AV[1] * AV[3];
-    AVi[5] = -123;  // FIXME assing correct value
-    det    = (AV[0] * AVi[0] + AV[1] * AVi[1] + AV[3] * AVi[3]);
-    det    = (det > 1.e-8) ? 1. / det : 0;
-    NDF += 2;
-    Chi2 +=
-      (+(AVi[0] * z[0] + AVi[1] * z[1] + AVi[3] * z[2]) * z[0] + (AVi[1] * z[0] + AVi[2] * z[1] + AVi[4] * z[2]) * z[1]
-       + (AVi[3] * z[0] + AVi[4] * z[1] + AVi[5] * z[2]) * z[2])
-      * det;
-  }
-
-  double d0, d1, d2;
-  C[0] = V[0];
-  C[1] = V[1];
-  C[2] = V[2];
-  C[3] = V[3];
-  C[4] = V[4];
-  C[5] = V[5];
-
-  d0 = B[0][0] * V[0] + B[0][1] * V[1] + B[0][2] * V[3] - C[6];
-  d1 = B[0][0] * V[1] + B[0][1] * V[2] + B[0][2] * V[4] - C[7];
-  d2 = B[0][0] * V[3] + B[0][1] * V[4] + B[0][2] * V[5] - C[8];
-
-  C[6] += d0;
-  C[7] += d1;
-  C[8] += d2;
-  C[9] += d0 * B[0][0] + d1 * B[0][1] + d2 * B[0][2];
-
-  d0 = B[1][0] * V[0] + B[1][1] * V[1] + B[1][2] * V[3] - C[10];
-  d1 = B[1][0] * V[1] + B[1][1] * V[2] + B[1][2] * V[4] - C[11];
-  d2 = B[1][0] * V[3] + B[1][1] * V[4] + B[1][2] * V[5] - C[12];
-
-  C[10] += d0;
-  C[11] += d1;
-  C[12] += d2;
-  C[13] += d0 * B[0][0] + d1 * B[0][1] + d2 * B[0][2];
-  C[14] += d0 * B[1][0] + d1 * B[1][1] + d2 * B[1][2];
-
-  d0 = B[2][0] * V[0] + B[2][1] * V[1] + B[2][2] * V[3] - C[15];
-  d1 = B[2][0] * V[1] + B[2][1] * V[2] + B[2][2] * V[4] - C[16];
-  d2 = B[2][0] * V[3] + B[2][1] * V[4] + B[2][2] * V[5] - C[17];
-
-  C[15] += d0;
-  C[16] += d1;
-  C[17] += d2;
-  C[18] += d0 * B[0][0] + d1 * B[0][1] + d2 * B[0][2];
-  C[19] += d0 * B[1][0] + d1 * B[1][1] + d2 * B[1][2];
-  C[20] += d0 * B[2][0] + d1 * B[2][1] + d2 * B[2][2];
-
-  d0 = B[3][0] * V[0] + B[3][1] * V[1] + B[3][2] * V[3] - C[21];
-  d1 = B[3][0] * V[1] + B[3][1] * V[2] + B[3][2] * V[4] - C[22];
-  d2 = B[3][0] * V[3] + B[3][1] * V[4] + B[3][2] * V[5] - C[23];
-
-  C[21] += d0;
-  C[22] += d1;
-  C[23] += d2;
-  C[24] += d0 * B[0][0] + d1 * B[0][1] + d2 * B[0][2];
-  C[25] += d0 * B[1][0] + d1 * B[1][1] + d2 * B[1][2];
-  C[26] += d0 * B[2][0] + d1 * B[2][1] + d2 * B[2][2];
-  C[27] += d0 * B[3][0] + d1 * B[3][1] + d2 * B[3][2];
-
-  d0 = B[4][0] * V[0] + B[4][1] * V[1] + B[4][2] * V[3] - C[28];
-  d1 = B[4][0] * V[1] + B[4][1] * V[2] + B[4][2] * V[4] - C[29];
-  d2 = B[4][0] * V[3] + B[4][1] * V[4] + B[4][2] * V[5] - C[30];
-
-  C[28] += d0;
-  C[29] += d1;
-  C[30] += d2;
-  C[31] += d0 * B[0][0] + d1 * B[0][1] + d2 * B[0][2];
-  C[32] += d0 * B[1][0] + d1 * B[1][1] + d2 * B[1][2];
-  C[33] += d0 * B[2][0] + d1 * B[2][1] + d2 * B[2][2];
-  C[34] += d0 * B[3][0] + d1 * B[3][1] + d2 * B[3][2];
-  C[35] += d0 * B[4][0] + d1 * B[4][1] + d2 * B[4][2];
-
-  {
-    Extrapolate(r[7]);
-
-    double CH00 = C[0] + r0[0] * C[28];
-    double CH10 = C[1] + r0[0] * C[29];
-    double CH11 = C[2] + r0[1] * C[29];
-    double CH20 = C[3] + r0[0] * C[30];
-    double CH21 = C[4] + r0[1] * C[30];
-    double CH22 = C[5] + r0[2] * C[30];
-
-    C[28] += r0[0] * C[35];
-    C[29] += r0[1] * C[35];
-    C[30] += r0[2] * C[35];
-
-    C[0] = CH00 + r0[0] * C[28];
-    C[1] = CH10 + r0[1] * C[28];
-    C[2] = CH11 + r0[1] * C[29];
-    C[3] = CH20 + r0[2] * C[28];
-    C[4] = CH21 + r0[2] * C[29];
-    C[5] = CH22 + r0[2] * C[30];
-
-    C[6] += r0[0] * C[31];
-    C[7] += r0[1] * C[31];
-    C[8] += r0[2] * C[31];
-    C[10] += r0[0] * C[32];
-    C[11] += r0[1] * C[32];
-    C[12] += r0[2] * C[32];
-    C[15] += r0[0] * C[33];
-    C[16] += r0[1] * C[33];
-    C[17] += r0[2] * C[33];
-    C[21] += r0[0] * C[34];
-    C[22] += r0[1] * C[34];
-    C[23] += r0[2] * C[34];
-  }
-}
diff --git a/reco/KF/CbmKFSecondaryVertexFinder.h b/reco/KF/CbmKFSecondaryVertexFinder.h
deleted file mode 100644
index 20a3aa495fa11822bf7145f4c8c3ab7dfca7afe7..0000000000000000000000000000000000000000
--- a/reco/KF/CbmKFSecondaryVertexFinder.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright (C) 2006-2015 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Sergey Gorbunov, Ivan Kisel, Denis Bertini [committer], Igor Kulakov */
-
-/** The CbmKFSecondaryVertexFinder class
- *
- * @author  S.Gorbunov, I.Kisel
- * @version 1.0
- * @since   06.02.06
- * 
- * Class to fit secondary vertex with the Kalman Filter method
- *
- */
-#ifndef CBMKFSECONDARYVERTEXFINDER_H
-#define CBMKFSECONDARYVERTEXFINDER_H
-
-#include "CbmKFTrackInterface.h"
-#include "CbmKFVertexInterface.h"
-
-#include <vector>
-
-class CbmKFSecondaryVertexFinder : public TObject {
-
-  std::vector<CbmKFTrackInterface*> vTracks;
-  Int_t NDF;
-  Double_t Chi2, MassConstraint;
-  Double_t r[8], r0[8], C[36];
-  CbmKFVertexInterface *VParent, *VGuess;
-
-  void AddMassConstraint();
-  void AddTopoConstraint();
-  Double_t& Cij(Int_t i, Int_t j) { return C[(j <= i) ? i * (i + 1) / 2 + j : j * (j + 1) / 2 + i]; }
-
- public:
-  CbmKFSecondaryVertexFinder() : vTracks(), NDF(0), Chi2(0), MassConstraint(0), VParent(nullptr), VGuess(nullptr)
-  {
-    Clear();
-  };
-  ~CbmKFSecondaryVertexFinder(){};
-
-  virtual void Clear(Option_t* opt = "");
-  void ClearTracks();
-  void AddTrack(CbmKFTrackInterface* Track);
-  void SetTracks(std::vector<CbmKFTrackInterface*>& vTracks);
-  void SetApproximation(CbmKFVertexInterface* Guess = nullptr);
-  void SetMassConstraint(Double_t MotherMass = -1);
-  void SetTopoConstraint(CbmKFVertexInterface* Parent = nullptr);
-  void Fit();
-  void GetVertex(CbmKFVertexInterface& vtx);
-  void GetVertex(CbmVertex& vtx);
-  void GetMotherTrack(Double_t T[], Double_t C[]);
-  void GetMass(Double_t* M, Double_t* Error);
-  void Extrapolate(double T);
-
-  ClassDef(CbmKFSecondaryVertexFinder, 1);
-
- private:
-  CbmKFSecondaryVertexFinder(const CbmKFSecondaryVertexFinder&);
-  void operator=(const CbmKFSecondaryVertexFinder&);
-};
-#endif /* !CBMKFSECONDARYVERTEXFINDER_H */
diff --git a/reco/KF/Interface/CbmEcalTrackExtrapolationKF.cxx b/reco/KF/Interface/CbmEcalTrackExtrapolationKF.cxx
deleted file mode 100644
index 7b1c7a86ec41df7ec7a5322d4fc62d59e912ef93..0000000000000000000000000000000000000000
--- a/reco/KF/Interface/CbmEcalTrackExtrapolationKF.cxx
+++ /dev/null
@@ -1,115 +0,0 @@
-/* Copyright (C) 2008-2012 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Sergey Gorbunov [committer] */
-
-#include "CbmEcalTrackExtrapolationKF.h"
-
-#include "CbmEcalInf.h"
-#include "CbmEcalStructure.h"
-#include "CbmGlobalTrack.h"
-#include "CbmKFTrack.h"
-#include "CbmMCTrack.h"
-#include "CbmStsKFTrackFitter.h"
-#include "CbmStsTrack.h"
-#include "FairRootManager.h"
-#include "FairTrackParam.h"
-#include "TClonesArray.h"
-
-#include <iostream>
-
-using namespace std;
-
-// -----   Default constructor   -------------------------------------------
-CbmEcalTrackExtrapolationKF::CbmEcalTrackExtrapolationKF()
-  : CbmEcalTrackExtrapolation(1)
-  , fTrackParamArray(NULL)
-  , fSTSArray(NULL)
-  , iEx(-1)
-{
-  ;
-}
-// -------------------------------------------------------------------------
-
-
-// -----   Standard constructor   ------------------------------------------
-CbmEcalTrackExtrapolationKF::CbmEcalTrackExtrapolationKF(Int_t verbose)
-  : CbmEcalTrackExtrapolation(verbose)
-  , fTrackParamArray(NULL)
-  , fSTSArray(NULL)
-  , iEx(-1)
-{
-  ;
-}
-// -------------------------------------------------------------------------
-
-
-// -----   Destructor   ----------------------------------------------------
-CbmEcalTrackExtrapolationKF::~CbmEcalTrackExtrapolationKF() { ; }
-// -------------------------------------------------------------------------
-
-
-// -----   Public method Init   --------------------------------------------
-void CbmEcalTrackExtrapolationKF::Init()
-{
-  CbmEcalTrackExtrapolation::Init();
-  //Get and check FairRootManager
-  FairRootManager* ioman = FairRootManager::Instance();
-  if (!ioman) {
-    Fatal("CbmEcalTrackExtrapolationKF::Init()", "Can't instantise Rootmanager");
-  }
-
-  //Get STS track array
-  fSTSArray = (TClonesArray*) ioman->GetObject("StsTrack");
-  if (!fSTSArray) {
-    cout << "-W- CbmEcalTrackExtrapolationKF::Init: No sts track array!" << endl;
-  }
-}
-// -------------------------------------------------------------------------
-
-
-// -----   Public method DoExtrapolate   ------------------------------------------
-Int_t CbmEcalTrackExtrapolationKF::DoExtrapolate(TClonesArray* gTrackArray, TClonesArray* fTrackParamArray_)
-{
-  if (!fTrackParamArray_) {
-    cout << "-E- CbmEcalTrackExtrapolationKF::DoExtrapolate: ";
-    cout << "TrackParamArray missing! " << endl;
-    return -1;
-  }
-
-  if (!gTrackArray) {
-    cout << "-E- CbmEcalTrackExtrapolationKF::DoExtrapolate: ";
-    cout << "Track Array missing! " << endl;
-    return -1;
-  }
-  Int_t nTr = 0;
-  Int_t i   = 0;
-  Int_t n   = gTrackArray->GetEntriesFast();
-  CbmGlobalTrack* tr;
-  CbmKFTrack kfTr;
-  FairTrackParam trpar;
-  for (; i < n; i++) {
-    Map()[nTr] = -1111;
-    tr         = (CbmGlobalTrack*) gTrackArray->At(i);
-    if (!tr) {
-      continue;
-    }
-    if (tr->GetStsTrackIndex() < 0 || tr->GetTrdTrackIndex() < 0) {
-      continue;
-    }
-    kfTr.SetTrackParam(*(const_cast<FairTrackParam*>(tr->GetParamLast())));
-    kfTr.Extrapolate(Str()->GetEcalInf()->GetZPos());
-    kfTr.GetTrackParam(trpar);
-    Map()[nTr] = i;
-    new ((*fTrackParamArray_)[nTr++]) FairTrackParam(trpar);
-  }
-
-  return nTr;
-}
-// -------------------------------------------------------------------------
-
-
-// -----   Public method Finish   ------------------------------------------
-void CbmEcalTrackExtrapolationKF::Finish() { ; }
-//-----------------------------------------------------------------------------------
-
-ClassImp(CbmEcalTrackExtrapolationKF)
diff --git a/reco/KF/Interface/CbmEcalTrackExtrapolationKF.h b/reco/KF/Interface/CbmEcalTrackExtrapolationKF.h
deleted file mode 100644
index 61356f5ce36db8eb90b0769ef8a0d59c1e8a512c..0000000000000000000000000000000000000000
--- a/reco/KF/Interface/CbmEcalTrackExtrapolationKF.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Copyright (C) 2008-2012 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Claudia Hoehne, Sergey Gorbunov [committer] */
-
-/******************************************************************************
-* $Id: CbmEcalTrackExtrapolationKF.h,v 1.1 2006/02/17 23:13:37 sgorboun Exp $
-*
-*  Class  : CbmEcalTrackExtrapolationKF
-*  Description: "TrackExtrapolation" from STS tracks (Kalman Fitter)
-*               It reads the track array form STS and extrapolates those to
-*               be projected to the Rich Photodetector to some z-Plane in RICH
-*
-*  Author : Claudia Hoehne
-*  E-mail : c.hoehne@gsi.de
-*
-*******************************************************************************
-*  $Log: CbmEcalTrackExtrapolationKF.h,v $
-*  Revision 1.1  2006/02/17 23:13:37  sgorboun
-*  Update of KF&L1 classes
-*
-*  Revision 1.2  2006/01/30 11:00:55  hoehne
-*  bug fix: Point Array at z-plane was not filled correctly (counters not correct)
-*
-*  Revision 1.1  2006/01/26 09:53:22  hoehne
-*  initial version for track extrapolation (base class + concrete implementations + task) to z-plane in RICH
-*
-*
-*
-*******************************************************************************/
-
-#ifndef CBMECALTRACKEXTRAPOLATIONKF
-#define CBMECALTRACKEXTRAPOLATIONKF
-
-#include "CbmEcalTrackExtrapolation.h"
-
-class TClonesArray;
-class CbmGlobalTrack;
-
-class CbmEcalTrackExtrapolationKF : public CbmEcalTrackExtrapolation {
- public:
-  /** Default constructor **/
-  CbmEcalTrackExtrapolationKF();
-  /** Standard constructor **/
-  CbmEcalTrackExtrapolationKF(Int_t verbose);
-  /** Destructor **/
-  virtual ~CbmEcalTrackExtrapolationKF();
-  /** Initialisation **/
-  virtual void Init();
-  /** Finish **/
-  virtual void Finish();
-  /** Method DoExtrapolate.
-   ** Task: Read the track array and fill the point array at given z-Plane in RICH detector
-   ** pointers to which are given as argument
-   **
-   *@param rTrackArray  Array of tracks
-   *@param rTrackParamArray  Array of FairTrackParam
-   *@value Number of tracks extrapolated
-   **/
-  virtual Int_t DoExtrapolate(TClonesArray* gTrackArray, TClonesArray* fTrackParamArray);
-
- private:
-  /** Arrays **/
-  TClonesArray* fTrackParamArray;
-  TClonesArray* fSTSArray;
-
-  Int_t iEx; /** number of extrapolated tracks */
-  ClassDef(CbmEcalTrackExtrapolationKF, 1);
-
- private:
-  CbmEcalTrackExtrapolationKF(const CbmEcalTrackExtrapolationKF&);
-  void operator=(const CbmEcalTrackExtrapolationKF&);
-};
-
-#endif
diff --git a/reco/KF/Interface/CbmGlobalTrackFitterKF.cxx b/reco/KF/Interface/CbmGlobalTrackFitterKF.cxx
deleted file mode 100644
index 2c1efd86a26b665cc75794569a7bc20ffa74203d..0000000000000000000000000000000000000000
--- a/reco/KF/Interface/CbmGlobalTrackFitterKF.cxx
+++ /dev/null
@@ -1,260 +0,0 @@
-/* Copyright (C) 2006-2017 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Dmytro Kresan, Denis Bertini [committer], Florian Uhlig */
-
-// ------------------------------------------------------------------
-// -----                  CbmGlobalTrackFitterKF                -----
-// -----              Created 07/03/2006 by D.Kresan            -----
-// ------------------------------------------------------------------
-#include "CbmGlobalTrackFitterKF.h"
-
-#include "CbmGlobalTrack.h"
-#include "CbmKFStsHit.h"
-#include "CbmKFTrack.h"
-#include "CbmKFTrdHit.h"
-#include "CbmStsHit.h"
-#include "CbmStsTrack.h"
-#include "CbmTofHit.h"
-#include "CbmTrdHit.h"
-#include "CbmTrdTrack.h"
-#include "CbmVertex.h"
-#include "FairRootManager.h"
-#include "TClonesArray.h"
-#include "TMath.h"
-
-#include <iostream>
-
-using std::cout;
-using std::endl;
-using std::vector;
-
-//___________________________________________________________________
-//
-// CbmGlobalTrackFitterKF
-//
-// Concrete implementation of global track fitting based on the
-// Kalman filter
-//
-
-
-// ------------------------------------------------------------------
-CbmGlobalTrackFitterKF::CbmGlobalTrackFitterKF()
-  : fArrayStsHit(nullptr)
-  , fArrayTrdHit(nullptr)
-  , fArrayTofHit(nullptr)
-  , fArrayStsTrack(nullptr)
-  , fArrayTrdTrack(nullptr)
-  , fPrimVertex(nullptr)
-  , fKfTrack(nullptr)
-{
-  // Default constructor
-
-  fKfTrack = new CbmKFTrack();
-  // Set mass hypothesis
-  fKfTrack->SetPID(211);
-  fVerbose = 0;
-}
-// ------------------------------------------------------------------
-
-
-// ------------------------------------------------------------------
-CbmGlobalTrackFitterKF::~CbmGlobalTrackFitterKF()
-{
-  // Destructor
-  delete fKfTrack;
-}
-// ------------------------------------------------------------------
-
-
-// ------------------------------------------------------------------
-void CbmGlobalTrackFitterKF::Init()
-{
-  // Initialisation
-
-  // Get pointer to the ROOT I/O manager
-  FairRootManager* rootMgr = FairRootManager::Instance();
-  if (nullptr == rootMgr) {
-    cout << "-E- CbmGlobalTrackFitterKF::Init :"
-         << " ROOT manager is not instantiated" << endl;
-    return;
-  }
-  // Get hit arrays
-  fArrayStsHit = (TClonesArray*) rootMgr->GetObject("StsHit");
-  if (nullptr == fArrayStsHit) {
-    cout << "-W- CbmGlobalTrackFitterKF::Init :"
-         << " no Sts hit array" << endl;
-  }
-  fArrayTrdHit = (TClonesArray*) rootMgr->GetObject("TrdHit");
-  if (nullptr == fArrayTrdHit) {
-    cout << "-W- CbmGlobalTrackFitterKF::Init :"
-         << " no TRD hit array" << endl;
-  }
-  fArrayTofHit = (TClonesArray*) rootMgr->GetObject("TofHit");
-  if (nullptr == fArrayTofHit) {
-    cout << "-W- CbmGlobalTrackFitterKF::Init :"
-         << " no TOF hit array" << endl;
-  }
-  // Get track arrays
-  fArrayStsTrack = (TClonesArray*) rootMgr->GetObject("StsTrack");
-  if (nullptr == fArrayStsTrack) {
-    cout << "-W- CbmGlobalTrackFitterKF::Init : "
-         << "no STS track array!" << endl;
-  }
-  fArrayTrdTrack = (TClonesArray*) rootMgr->GetObject("TrdTrack");
-  if (nullptr == fArrayTrdTrack) {
-    cout << "-W- CbmGlobalTrackFitterKF::Init : "
-         << "no TRD track array!" << endl;
-  }
-
-  // Get pointer to PrimaryVertex object from IOManager if it exists
-  // The old name for the object is "PrimaryVertex" the new one
-  // "PrimaryVertex." Check first for the new name
-  fPrimVertex = dynamic_cast<CbmVertex*>(rootMgr->GetObject("PrimaryVertex."));
-  if (nullptr == fPrimVertex) {
-    fPrimVertex = dynamic_cast<CbmVertex*>(rootMgr->GetObject("PrimaryVertex"));
-  }
-  if (nullptr == fPrimVertex) {
-    cout << "-W- CbmGlobalTrackFitterKF::Init : "
-         << "no Primary Vertex!" << endl;
-  }
-}
-// ------------------------------------------------------------------
-
-
-// ------------------------------------------------------------------
-void CbmGlobalTrackFitterKF::DoFit(CbmGlobalTrack* glbTrack)
-{
-  // Implementation of the fitting algorithm
-  if (nullptr == glbTrack || nullptr == fArrayStsTrack || nullptr == fArrayTrdTrack || nullptr == fArrayStsHit
-      || nullptr == fArrayTrdHit || nullptr == fPrimVertex) {
-    return;
-  }
-
-
-  Double_t x_old;
-  Double_t y_old;
-  Double_t z_old;
-  Double_t x_new;
-  Double_t y_new;
-  Double_t z_new;
-  Double_t z      = fPrimVertex->GetZ();
-  Double_t length = 0.;
-
-
-  // Get STS track index
-  Int_t stsTrackIndex = glbTrack->GetStsTrackIndex();
-  if (-1 == stsTrackIndex) {
-    return;
-  }
-  // Get STS track
-  CbmStsTrack* stsTrack = (CbmStsTrack*) fArrayStsTrack->At(stsTrackIndex);
-  if (nullptr == stsTrack) {
-    return;
-  }
-  const FairTrackParam* paramFirst;
-  paramFirst = stsTrack->GetParamFirst();
-  fKfTrack->SetTrackParam(*paramFirst);
-  fKfTrack->Extrapolate(z);
-  x_old      = fKfTrack->GetTrack()[0];
-  y_old      = fKfTrack->GetTrack()[1];
-  z_old      = z;
-  Double_t p = 1.;
-  if (paramFirst->GetQp()) {
-    p = TMath::Abs(1. / paramFirst->GetQp());
-  }
-
-  // Int_t stsHitIndex;
-  // CbmStsHit* stsHit;
-  // // Loop over hits of the STS track
-  // for(Int_t iHit = 0; iHit < stsTrack->GetNStsHits(); iHit++) {
-  //   // Get hit index
-  //   stsHitIndex = stsTrack->GetStsHitIndex(iHit);
-  //   // Get hit
-  //   stsHit = (CbmStsHit*) fArrayStsHit->At(stsHitIndex);
-  //   x_new = stsHit->GetX();
-  //   y_new = stsHit->GetY();
-  //   z_new = stsHit->GetZ();
-  //   length += TMath::Sqrt(TMath::Power(x_new-x_old, 2) +
-  // 			  TMath::Power(y_new-y_old, 2) +
-  // 			  TMath::Power(z_new-z_old, 2));
-  //   // cout << z_old << " ->  " << z_new << " => " << length << endl;
-  //   x_old = x_new;
-  //   y_old = y_new;
-  //   z_old = z_new;
-  // }
-
-
-  // Get TRD track index
-  Int_t trdTrackIndex = glbTrack->GetTrdTrackIndex();
-  if (-1 == trdTrackIndex) {
-    return;
-  }
-  // Get TRD track
-  CbmTrdTrack* trdTrack = (CbmTrdTrack*) fArrayTrdTrack->At(trdTrackIndex);
-  if (nullptr == trdTrack) {
-    return;
-  }
-  if (trdTrack->GetNofHits() < 2) {
-    return;
-  }
-  Int_t trdHitIndex = trdTrack->GetHitIndex(0);
-  CbmTrdHit* trdHit = (CbmTrdHit*) fArrayTrdHit->At(trdHitIndex);
-
-  while (z < (trdHit->GetZ() - 2.)) {
-    z += p * 1.;
-
-    fKfTrack->Extrapolate(z);
-    x_new = fKfTrack->GetTrack()[0];
-    y_new = fKfTrack->GetTrack()[1];
-    z_new = z;
-
-    length +=
-      TMath::Sqrt(TMath::Power(x_new - x_old, 2) + TMath::Power(y_new - y_old, 2) + TMath::Power(z_new - z_old, 2));
-    x_old = x_new;
-    y_old = y_new;
-    z_old = z_new;
-  }
-
-  // Loop over hits of the TRD track
-  for (Int_t iTrd = 1; iTrd < trdTrack->GetNofHits(); iTrd++) {
-    // Get hit index
-    trdHitIndex = trdTrack->GetHitIndex(iTrd);
-    // Get hit
-    trdHit = (CbmTrdHit*) fArrayTrdHit->At(trdHitIndex);
-    z      = trdHit->GetZ();
-    fKfTrack->Extrapolate(z);
-    if (trdHit->GetDx() > trdHit->GetDy()) {
-      x_new = fKfTrack->GetTrack()[0];
-      y_new = trdHit->GetY();
-    }
-    else {
-      x_new = trdHit->GetX();
-      y_new = fKfTrack->GetTrack()[1];
-    }
-    z_new = z;
-    length +=
-      TMath::Sqrt(TMath::Power(x_new - x_old, 2) + TMath::Power(y_new - y_old, 2) + TMath::Power(z_new - z_old, 2));
-    x_old = x_new;
-    y_old = y_new;
-    z_old = z_new;
-  }
-
-
-  Int_t tofIndex = glbTrack->GetTofHitIndex();
-  if (-1 == tofIndex) {
-    return;
-  }
-  CbmTofHit* tofHit = (CbmTofHit*) fArrayTofHit->At(tofIndex);
-  x_new             = tofHit->GetX();
-  y_new             = tofHit->GetY();
-  z_new             = tofHit->GetZ();
-  length +=
-    TMath::Sqrt(TMath::Power(x_new - x_old, 2) + TMath::Power(y_new - y_old, 2) + TMath::Power(z_new - z_old, 2));
-
-
-  glbTrack->SetLength(length);
-}
-// ------------------------------------------------------------------
-
-
-ClassImp(CbmGlobalTrackFitterKF);
diff --git a/reco/KF/Interface/CbmGlobalTrackFitterKF.h b/reco/KF/Interface/CbmGlobalTrackFitterKF.h
deleted file mode 100644
index 186d8a2c8dece4811dd3cb4b33c7870679cae884..0000000000000000000000000000000000000000
--- a/reco/KF/Interface/CbmGlobalTrackFitterKF.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Copyright (C) 2006-2012 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Dmytro Kresan, Denis Bertini [committer], Igor Kulakov */
-
-// ------------------------------------------------------------------
-// -----                  CbmGlobalTrackFitterKF                -----
-// -----              Created 07/03/2006 by D.Kresan            -----
-// ------------------------------------------------------------------
-#ifndef CBMGLOBALTRACKFITTERKF
-#define CBMGLOBALTRACKFITTERKF
-
-#include "CbmGlobalTrackFitter.h"
-
-class TClonesArray;
-class CbmKFTrack;
-class CbmVertex;
-
-
-class CbmGlobalTrackFitterKF : public CbmGlobalTrackFitter {
-
- private:
-  TClonesArray* fArrayStsHit;    // Array of STS hits
-  TClonesArray* fArrayTrdHit;    // Array of TRD hits
-  TClonesArray* fArrayTofHit;    // Array of TOF hits
-  TClonesArray* fArrayStsTrack;  // Array of STS tracks
-  TClonesArray* fArrayTrdTrack;  // Array of TRD tracks
-  CbmVertex* fPrimVertex;        // Primary vertex
-  CbmKFTrack* fKfTrack;          // KF track
-
- public:
-  CbmGlobalTrackFitterKF();
-  virtual ~CbmGlobalTrackFitterKF();
-
-  void Init();
-  void DoFit(CbmGlobalTrack* glbTrack);
-
-  ClassDef(CbmGlobalTrackFitterKF, 1);
-
- private:
-  CbmGlobalTrackFitterKF(const CbmGlobalTrackFitterKF&);
-  void operator=(const CbmGlobalTrackFitterKF&);
-};
-
-
-#endif
diff --git a/reco/KF/Interface/CbmKFTofHit.cxx b/reco/KF/Interface/CbmKFTofHit.cxx
deleted file mode 100644
index 80dc237922329063cf7a7b76f3254e3d98616775..0000000000000000000000000000000000000000
--- a/reco/KF/Interface/CbmKFTofHit.cxx
+++ /dev/null
@@ -1,94 +0,0 @@
-/* Copyright (C) 2005-2016 PI-UHd, GSI
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Dmytro Kresan, Norbert Herrmann [committer] */
-
-//  ----------------------------------------------------------------------
-//  -----                         CbmKFTofHit                        -----
-//  -----               Created 12/12/2005  by D.Kresan              -----
-//  ----------------------------------------------------------------------
-
-#include "CbmKFTofHit.h"
-
-#include "CbmKF.h"
-#include "CbmKFMaterial.h"
-#include "CbmTofHit.h"
-#include "TMath.h"
-#include "TVector3.h"
-
-#include <iostream>
-
-using std::cout;
-using std::endl;
-
-
-//  ------------------------ Create from CbmTofHit -----------------------
-void CbmKFTofHit::Create(CbmTofHit* hit)
-{
-  // Get pointer to the Kalman filter
-  CbmKF* KF = CbmKF::Instance();
-  if (nullptr == KF) {
-    cout << "-E- CbmKFTofHit::Create : "
-         << "Kalman filter is not instantiated." << endl;
-    return;
-  }
-  // Get index of material
-  MaterialIndex = KF->GetMaterialIndex(hit->GetPlaneId());
-  // Store pointer to the material
-  wall = (MaterialIndex >= 0) ? (CbmKFWall*) KF->vMaterial[MaterialIndex] : nullptr;
-
-  // Get position and position error
-  TVector3 pos, err;
-  hit->Position(pos);
-  hit->PositionError(err);
-  // Store values
-  /*    FitPoint.x = pos.X();
-    FitPoint.y = pos.Y();
-    FitPoint.z = pos.Z();
-    FitPoint.V[0] = 1e-8 * err.X() * err.X();
-    FitPoint.V[1] = 0;
-    FitPoint.V[2] = 1e-8 * err.Y() * err.Y();*/
-  Double_t u      = pos.X();
-  Double_t phi    = 0.;
-  Double_t sigma2 = err.X() * err.X();
-  if (err.Y() < err.X()) {
-    u      = pos.Y();
-    phi    = TMath::Pi() / 2.;
-    sigma2 = err.Y() * err.Y();
-  }
-  FitPoint.Set(pos.Z(), u, phi, sigma2);
-}
-//  ----------------------------------------------------------------------
-
-
-//  ------------------------------ Filter --------------------------------
-Int_t CbmKFTofHit::Filter(CbmKFTrackInterface& track, Bool_t /*downstream*/, Double_t& QP0)
-{
-  Bool_t err = 0;
-  /*
-    Double_t zfst, zlst, zend;
-    if( downstream ) {
-        zfst = wall->ZReference - wall->ZThickness/4.;
-        zlst = wall->ZReference + wall->ZThickness/4.;
-        zend = wall->ZReference + wall->ZThickness/2.;
-    }
-    else {
-        zfst = wall->ZReference + wall->ZThickness/4.;
-        zlst = wall->ZReference - wall->ZThickness/4.;
-        zend = wall->ZReference - wall->ZThickness/2.;
-    }
-    Double_t zthick = wall->ZThickness/2.;
-*/
-  //    wall->Pass( zfst, zthick, track, downstream, QP0 );
-  //    KF->Propagate( track, FitPoint.z, QP0 );
-
-  err = err || track.Propagate(FitPoint.z, QP0);
-  err = err || FitPoint.Filter(track);
-  //  cout<<"  Filter z "<<FitPoint.z<<", QP0 "<<QP0<<endl;
-  //    wall->Pass( zlst, zthick, track, downstream, QP0 );
-  //    KF->Propagate( track, zend, QP0 );
-  return err;
-}
-//  ----------------------------------------------------------------------
-
-
-ClassImp(CbmKFTofHit);
diff --git a/reco/KF/Interface/CbmKFTofHit.h b/reco/KF/Interface/CbmKFTofHit.h
deleted file mode 100644
index 48c33fc2a163c666c4af0baf8889af2efd4d850a..0000000000000000000000000000000000000000
--- a/reco/KF/Interface/CbmKFTofHit.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright (C) 2015 PI-UHd, GSI
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Dmytro Kresan, Norbert Herrmann [committer] */
-
-//  ----------------------------------------------------------------------
-//  -----                         CbmKFTofHit                        -----
-//  -----               Created 12/12/2005  by D.Kresan              -----
-//  ----------------------------------------------------------------------
-
-
-/** CbmKFTofHit
- *@author D.Kresan <D.Kresan@gsi.de>
- ** Interface class, representing CbmTofHit in Kalman Filter.
- **/
-
-
-#ifndef CBMKFTOFHIT
-#define CBMKFTOFHIT 1
-
-#include "CbmKFHit.h"
-#include "CbmKFUMeasurement.h"
-
-class CbmKFWall;
-class CbmTofHit;
-
-class CbmKFTofHit : public CbmKFHit {
-
- public:
-  /** Default constructor **/
-  CbmKFTofHit() : FitPoint(), wall(nullptr){};
-
-  /** Destructor **/
-  ~CbmKFTofHit(){};
-
-  /** Measurement point **/
-  //    CbmKFPixelMeasurement FitPoint;
-  CbmKFUMeasurement FitPoint;
-
-  /** Material **/
-  CbmKFWall* wall;
-
-  /** Copy data from CbmTofHit **/
-  void Create(CbmTofHit* hit);
-
-  /** Filter **/
-  Int_t Filter(CbmKFTrackInterface& track, Bool_t downstream, Double_t& QP0);
-
-  const CbmKFTofHit& operator=(const CbmKFTofHit& a)
-  {
-    wall     = a.wall;
-    FitPoint = a.FitPoint;
-    return *this;
-  };
-
-  CbmKFTofHit(const CbmKFTofHit& a) : FitPoint(a.FitPoint), wall(a.wall){};
-
-  ClassDef(CbmKFTofHit, 1);
-};
-
-
-#endif
diff --git a/reco/KF/Interface/CbmKFTrdHit.cxx b/reco/KF/Interface/CbmKFTrdHit.cxx
deleted file mode 100644
index ed060cbb1ece371d66fc5c7cb2d8fbac9a943144..0000000000000000000000000000000000000000
--- a/reco/KF/Interface/CbmKFTrdHit.cxx
+++ /dev/null
@@ -1,94 +0,0 @@
-/* Copyright (C) 2005-2016 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Dmytro Kresan, Denis Bertini [committer], Florian Uhlig */
-
-//  ----------------------------------------------------------------------
-//  -----                         CbmKFTrdHit                        -----
-//  -----               Created 12/12/2005  by D.Kresan              -----
-//  ----------------------------------------------------------------------
-
-#include "CbmKFTrdHit.h"
-
-#include "CbmKF.h"
-#include "CbmKFMaterial.h"
-#include "CbmTrdHit.h"
-#include "TMath.h"
-#include "TVector3.h"
-
-#include <iostream>
-
-using std::cout;
-using std::endl;
-
-
-//  ------------------------ Create from CbmTrdHit -----------------------
-void CbmKFTrdHit::Create(CbmTrdHit* hit)
-{
-  // Get pointer to the Kalman filter
-  CbmKF* KF = CbmKF::Instance();
-  if (nullptr == KF) {
-    cout << "-E- CbmKFTrdHit::Create : "
-         << "Kalman filter is not instantiated." << endl;
-    return;
-  }
-  // Get index of material
-  MaterialIndex = KF->GetMaterialIndex(hit->GetPlaneId());
-  // Store pointer to the material
-  wall = (MaterialIndex >= 0) ? (CbmKFWall*) KF->vMaterial[MaterialIndex] : nullptr;
-
-  // Get position and position error
-  TVector3 pos, err;
-  hit->Position(pos);
-  hit->PositionError(err);
-  // Store values
-  /*    FitPoint.x = pos.X();
-    FitPoint.y = pos.Y();
-    FitPoint.z = pos.Z();
-    FitPoint.V[0] = 1e-8 * err.X() * err.X();
-    FitPoint.V[1] = 0;
-    FitPoint.V[2] = 1e-8 * err.Y() * err.Y();*/
-  Double_t u      = pos.X();
-  Double_t phi    = 0.;
-  Double_t sigma2 = err.X() * err.X();
-  if (err.Y() < err.X()) {
-    u      = pos.Y();
-    phi    = TMath::Pi() / 2.;
-    sigma2 = err.Y() * err.Y();
-  }
-  FitPoint.Set(pos.Z(), u, phi, sigma2);
-}
-//  ----------------------------------------------------------------------
-
-
-//  ------------------------------ Filter --------------------------------
-Int_t CbmKFTrdHit::Filter(CbmKFTrackInterface& track, Bool_t /*downstream*/, Double_t& QP0)
-{
-  Bool_t err = 0;
-  /*
-    Double_t zfst, zlst, zend;
-    if( downstream ) {
-        zfst = wall->ZReference - wall->ZThickness/4.;
-        zlst = wall->ZReference + wall->ZThickness/4.;
-        zend = wall->ZReference + wall->ZThickness/2.;
-    }
-    else {
-        zfst = wall->ZReference + wall->ZThickness/4.;
-        zlst = wall->ZReference - wall->ZThickness/4.;
-        zend = wall->ZReference - wall->ZThickness/2.;
-    }
-    Double_t zthick = wall->ZThickness/2.;
-*/
-  //    wall->Pass( zfst, zthick, track, downstream, QP0 );
-  //    KF->Propagate( track, FitPoint.z, QP0 );
-
-  err = err || track.Propagate(FitPoint.z, QP0);
-  err = err || FitPoint.Filter(track);
-
-  //    wall->Pass( zlst, zthick, track, downstream, QP0 );
-  //    KF->Propagate( track, zend, QP0 );
-  return err;
-}
-//  ----------------------------------------------------------------------
-
-
-ClassImp(CbmKFTrdHit);
diff --git a/reco/KF/Interface/CbmKFTrdHit.h b/reco/KF/Interface/CbmKFTrdHit.h
deleted file mode 100644
index 12859959293dc079502891468050ddb08e324431..0000000000000000000000000000000000000000
--- a/reco/KF/Interface/CbmKFTrdHit.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright (C) 2006-2012 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Dmytro Kresan, Denis Bertini [committer], Igor Kulakov */
-
-//  ----------------------------------------------------------------------
-//  -----                         CbmKFTrdHit                        -----
-//  -----               Created 12/12/2005  by D.Kresan              -----
-//  ----------------------------------------------------------------------
-
-
-/** CbmKFTrdHit
- *@author D.Kresan <D.Kresan@gsi.de>
- ** Interface class, representing CbmTrdHit in Kalman Filter.
- **/
-
-
-#ifndef CBMKFTRDHIT
-#define CBMKFTRDHIT 1
-
-#include "CbmKFHit.h"
-#include "CbmKFUMeasurement.h"
-
-class CbmKFWall;
-class CbmTrdHit;
-
-class CbmKFTrdHit : public CbmKFHit {
-
- public:
-  /** Default constructor **/
-  CbmKFTrdHit() : FitPoint(), wall(nullptr){};
-
-  /** Destructor **/
-  ~CbmKFTrdHit(){};
-
-  /** Measurement point **/
-  //    CbmKFPixelMeasurement FitPoint;
-  CbmKFUMeasurement FitPoint;
-
-  /** Material **/
-  CbmKFWall* wall;
-
-  /** Copy data from CbmTrdHit **/
-  void Create(CbmTrdHit* hit);
-
-  /** Filter **/
-  Int_t Filter(CbmKFTrackInterface& track, Bool_t downstream, Double_t& QP0);
-
-  const CbmKFTrdHit& operator=(const CbmKFTrdHit& a)
-  {
-    wall     = a.wall;
-    FitPoint = a.FitPoint;
-    return *this;
-  };
-
-  CbmKFTrdHit(const CbmKFTrdHit& a) : FitPoint(a.FitPoint), wall(a.wall){};
-
-  ClassDef(CbmKFTrdHit, 1);
-};
-
-
-#endif
diff --git a/reco/KF/Interface/CbmStsFitPerformanceTask.cxx b/reco/KF/Interface/CbmStsFitPerformanceTask.cxx
deleted file mode 100644
index 0ffa2f6b08a74bfbfdcd79d1c6a4bc97e5d2bbff..0000000000000000000000000000000000000000
--- a/reco/KF/Interface/CbmStsFitPerformanceTask.cxx
+++ /dev/null
@@ -1,1166 +0,0 @@
-/* Copyright (C) 2005-2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Evgeny Kryshen, Denis Bertini [committer], Florian Uhlig */
-
-// -------------------------------------------------------------------------
-// -----                 CbmStsFitPerformanceTask source file             -----
-// -----                  Created 02/02/05  by E. Kryshen              -----
-// -------------------------------------------------------------------------
-
-#include "CbmStsFitPerformanceTask.h"
-
-#include "CbmKF.h"
-#include "CbmKFMath.h"
-#include "CbmKFPrimaryVertexFinder.h"
-#include "CbmKFTrack.h"
-#include "CbmKFTrackInterface.h"
-#include "CbmKFVertex.h"
-#include "CbmKFVertexInterface.h"
-#include "CbmMCTrack.h"
-#include "CbmMvdHit.h"
-#include "CbmPVFinderKF.h"
-#include "CbmStsAddress.h"
-#include "CbmStsHit.h"
-#include "CbmStsKFSecondaryVertexFinder.h"
-#include "CbmStsKFTrackFitter.h"
-#include "CbmStsSetup.h"
-#include "CbmStsTrack.h"
-#include "CbmTrackMatch.h"
-#include "CbmVertex.h"
-#include "FairMCApplication.h"
-#include "FairRootManager.h"
-#include "TDatabasePDG.h"
-#include "TF1.h"
-#include "TParticlePDG.h"
-#include "TVector3.h"
-
-#include <cmath>
-#include <iomanip>
-#include <iostream>
-
-using std::cout;
-using std::endl;
-using std::fabs;
-using std::vector;
-
-ClassImp(CbmStsFitPerformanceTask);
-
-// -------------------------------------------------------------------------
-
-void writedir2current(TObject* obj)
-{
-  if (!obj->IsFolder()) {
-    obj->Write();
-  }
-  else {
-    TDirectory* cur = gDirectory;
-    TDirectory* sub = cur->mkdir(obj->GetName());
-    sub->cd();
-    TList* listSub = ((TDirectory*) obj)->GetList();
-    TIter it(listSub);
-    while (TObject* obj1 = it()) {
-      writedir2current(obj1);
-    }
-    cur->cd();
-  }
-}
-
-void CbmStsFitPerformanceTask::CreateTrackHisto(TH1D* hist[10], const char* name, const char* title)
-{
-  struct {
-    const char* name;
-    const char* title;
-    Int_t n;
-    Double_t l, r;
-  } Table[10] = {{"x", "Residual X [#mum]", 100, -100., 100.},
-                 {"y", "Residual Y [#mum]", 100, -100., 100.},
-                 {"tx", "Residual Tx [mrad]", 100, -2., 2.},
-                 {"ty", "Residual Ty [mrad]", 100, -2., 2.},
-                 {"P", "Resolution P/Q [100%]", 100, -.1, .1},
-                 {"px", "Pull X [residual/estimated_error]", 100, -10., 10.},
-                 {"py", "Pull Y [residual/estimated_error]", 100, -10., 10.},
-                 {"ptx", "Pull Tx [residual/estimated_error]", 100, -10., 10.},
-                 {"pty", "Pull Ty [residual/estimated_error]", 100, -10., 10.},
-                 {"pQP", "Pull Q/P [residual/estimated_error]", 100, -10., 10.}};
-
-  for (int i = 0; i < 10; i++) {
-    char n[225], t[255];
-    sprintf(n, "%s_%s", name, Table[i].name);
-    sprintf(t, "%s %s", title, Table[i].title);
-    hist[i] = new TH1D(n, t, Table[i].n, Table[i].l, Table[i].r);
-  }
-}
-
-void CbmStsFitPerformanceTask::CreateVertexHisto(TH1D* hist[9], const char* name, const char* title)
-{
-  struct {
-    const char* name;
-    const char* title;
-    Int_t n;
-    Double_t l, r;
-  } Table[9] = {
-    {"x", "Residual X [#mum]", 100, -5., 5.},
-    {"y", "Residual Y [#mum]", 100, -5., 5.},
-    {"z", "Residual Z [#mum]", 100, -40., 40.},
-    {"px", "Pull X [residual/estimated_error]", 100, -10., 10.},
-    {"py", "Pull Y [residual/estimated_error]", 100, -10., 10.},
-    {"pz", "Pull Z [residual/estimated_error]", 100, -10., 10.},
-    {"chi2", "Chi2/NDF", 100, 0., 10.},
-    {"prob", "Prob(Chi2,NDF)", 100, 0., 1.},
-    {"ntracks", "N tracks", 100, 0., 1000.},
-  };
-
-  for (int i = 0; i < 9; i++) {
-    char n[225], t[255];
-    sprintf(n, "%s_%s", name, Table[i].name);
-    sprintf(t, "%s %s", title, Table[i].title);
-    hist[i] = new TH1D(n, t, Table[i].n, Table[i].l, Table[i].r);
-  }
-}
-
-void CbmStsFitPerformanceTask::CreateD0Histo(TH1D* hist[15], const char* name, const char* title)
-{
-  struct {
-    const char* name;
-    const char* title;
-    Int_t n;
-    Double_t l, r;
-  } Table[14] = {{"x", "Residual X [#mum]", 100, -100., 100.},
-                 {"y", "Residual Y [#mum]", 100, -100., 100.},
-                 {"z", "Residual Z [#mum]", 100, -500., 500.},
-                 {"px", "Pull X [residual/estimated_error]", 100, -10., 10.},
-                 {"py", "Pull Y [residual/estimated_error]", 100, -10., 10.},
-                 {"pz", "Pull Z [residual/estimated_error]", 100, -10., 10.},
-                 {"chi2", "Chi2/NDF", 100, 0., 10.},
-                 {"prob", "Prob(Chi2,NDF)", 100, 0., 1.},
-                 {"mass", "Residual Mass", 100, -.1, .1},
-                 {"pmass", "Pull Mass [residual/estimated_error]", 100, -10., 10.},
-                 {"KaonP", "Kaon P resolution", 100, -.05, .05},
-                 {"PionP", "Pion P resolution", 100, -.05, .05},
-                 {"KaonP0", "Kaon P resolution before fit", 100, -.05, .05},
-                 {"PionP0", "Pion P resolutionbefore fit", 100, -.05, .05}};
-
-  for (int i = 0; i < 14; i++) {
-    char n[225], t[255];
-    sprintf(n, "%s_%s", name, Table[i].name);
-    sprintf(t, "%s %s", title, Table[i].title);
-    hist[i] = new TH1D(n, t, Table[i].n, Table[i].l, Table[i].r);
-  }
-}
-
-
-// -----   Standard constructor   ------------------------------------------
-CbmStsFitPerformanceTask::CbmStsFitPerformanceTask(const char* name, Int_t iVerbose)
-  : FairTask(name, iVerbose)
-  , fEvent(0)
-  , fVertexAnalysis(0)
-  , fD0Analysis(0)
-  , fTrackAnalysis(1)
-  ,
-
-  fMCTrackArray(nullptr)
-  ,  ///< MCTracks
-  fStsPointArray(nullptr)
-  ,  ///< StsPoints
-  fMvdPointArray(nullptr)
-  ,  ///< StsPoints
-  fRecStsTrackArray(nullptr)
-  ,  ///< Reconstructed StsTracks
-  fStsHitArray(nullptr)
-  ,  ///< Sts hits
-  fMvdHitArray(nullptr)
-  ,  ///< Sts hits
-  fPrimaryVertex(nullptr)
-  ,  ///< Primary vertex
-  fSTSTrackMatch(nullptr)
-  ,  ///< Related MC tracks
-
-  fhChi2(nullptr)
-  ,  // x=chi2(), y=entries for all
-  fhProb(nullptr)
-  ,  // x=Prob function(), y=entries for all
-  fhDP(nullptr)
-  , fhDP2(nullptr)
-  , fhDsP(nullptr)
-  , fhDsP2(nullptr)
-  ,
-
-  fhZMCf(nullptr)
-  , fhZMCl(nullptr)
-  ,  // z first/last of MC track
-  fhZRecof(nullptr)
-  , fhZRecol(nullptr)
-  ,  // z first/last of Reco track
-
-  fhRes_vs_Mom_f(nullptr)
-  , fhRes_vs_Mom_l(nullptr)
-  ,  // resolution vs momentum
-  fhExtraTracks2ndMVD(nullptr)
-  ,  // extra tracks not detected in the second mvd chamber
-
-  // TH1D* fhFrst[10](),
-  // TH1D* fhMid[10](),
-  // TH1D* fhLast[10](),
-  // TH1D* fhImp[10](),
-  // TH1D* fhImpPi[10](),
-  // TH1D* fhVfit[10](),
-  // TH1D* fhVtx[9](),
-  // TH1D* fhV[13][9](),
-  fhPq()
-  ,
-  // fhD0[4][14](),
-
-  // fhHitDensity[10](),
-  // fhTrackDensity[8](),
-  fhTrackDensity0L(nullptr)
-  ,
-
-  histodir(nullptr)
-  , fFitter()
-{
-}
-// -------------------------------------------------------------------------
-
-
-// -----   Destructor   ----------------------------------------------------
-CbmStsFitPerformanceTask::~CbmStsFitPerformanceTask() {}
-
-// -----   Init CbmStsFitPerformanceTask task   -------------------------------
-InitStatus CbmStsFitPerformanceTask::Init()
-{
-  fEvent = 0;
-
-  TDirectory* curdir = gDirectory;
-  histodir           = gDirectory->mkdir("StsFitPerformance");
-  histodir->cd();
-
-  gDirectory->mkdir("TrackFit");
-  gDirectory->cd("TrackFit");
-  {
-    fhChi2 = new TH1D("hChi2", "hChi2", 100, 0, 10);
-    fhProb = new TH1D("hProb", "hProb", 100, 0, 1.0);
-
-    fhDP  = new TH1D("hDP", "hDP", 1000, -.005, .005);
-    fhDP2 = new TH2D("hDP2", "hDP2", 100, 0., 5.0, 1000, -.005, .005);
-
-    fhDsP  = new TH1D("hDsP", "hDsP", 100, -1, 1);
-    fhDsP2 = new TH2D("hDsP2", "hDsP2", 100, 0., 5.0, 100, -1, 1);
-
-    fhZMCf   = new TH1D("hZMCf", "h Z MC first", 102, -1.0, 101.0);
-    fhZRecof = new TH1D("hZRecof", "h Z Reco first", 102, -1.0, 101.0);
-    fhZMCl   = new TH1D("hZMCl", "h Z MC last", 102, -1.0, 101.0);
-    fhZRecol = new TH1D("hZRecol", "h Z Reco last", 102, -1.0, 101.0);
-
-    fhRes_vs_Mom_f =
-      new TH2D("hRes_vs_Mom_f", "TX Resolusion vs Momentum (first hit)", 100, 0.0, 5.0, 100, -50.0, 50.0);
-    fhRes_vs_Mom_l = new TH2D("hRes_vs_Mom_l", "TX Resolusion vs Momentum (last hit)", 100, 0.0, 5.0, 100, -10.0, 10.0);
-
-    fhExtraTracks2ndMVD =
-      new TH2D("hExtraTracks2ndMVD", "ExtraTracks in the 2nd MVD", 200, -10.0, 10.0, 200, -10.0, 10.0);
-
-    gDirectory->mkdir("AtFirstHit");
-    gDirectory->cd("AtFirstHit");
-    CreateTrackHisto(fhFrst, "fst", "at first STS Hit");
-    gDirectory->cd("..");
-    gDirectory->mkdir("AtLastHit");
-    gDirectory->cd("AtLastHit");
-    CreateTrackHisto(fhLast, "lst", "at last  STS Hit");
-    gDirectory->cd("..");
-    gDirectory->mkdir("AtImpactPoint");
-    gDirectory->cd("AtImpactPoint");
-    CreateTrackHisto(fhImp, "imp", "at impact point");
-    gDirectory->cd("..");
-    gDirectory->mkdir("AtImpactPointPion");
-    gDirectory->cd("AtImpactPointPion");
-    CreateTrackHisto(fhImpPi, "impPi", "at impact point");
-    gDirectory->cd("..");
-    gDirectory->mkdir("InTheMiddle");
-    gDirectory->cd("InTheMiddle");
-    CreateTrackHisto(fhMid, "mid", "at 4th station");
-    gDirectory->cd("..");
-    gDirectory->mkdir("FittedToVertex");
-    gDirectory->cd("FittedToVertex");
-    CreateTrackHisto(fhVfit, "vfit", "for vertex fitted track");
-    gDirectory->cd("..");
-
-    gDirectory->mkdir("PSlidesOnP");
-    gDirectory->cd("PSlidesOnP");
-    fhPq = new TH2D("Pq", "Resolution P/Q at impact point vs P", 100, 0, 10, 100, -.1, .1);
-    gDirectory->cd("..");
-  }
-  gDirectory->cd("..");
-
-  for (int i = 0; i < 10; i++) {
-    char n[225], t[255];
-    sprintf(n, "hHitDens%i", i);
-    sprintf(t, "Hit Density, Sts station %i", i);
-    fhHitDensity[i] = new TH1D(n, t, 300, 0, 300);
-  }
-  fhTrackDensity[0] = new TH1D("hTrackDensity0", "Track Density 0cm", 300, 0, 300);
-  fhTrackDensity0L  = new TH1D("hTrackDensity0L", "Track Density Line 0cm", 300, 0, 300);
-  fhTrackDensity[1] = new TH1D("hTrackDensity1", "Track Density 1cm", 300, 0, 300);
-  fhTrackDensity[2] = new TH1D("hTrackDensity2", "Track Density 2cm", 300, 0, 300);
-  fhTrackDensity[3] = new TH1D("hTrackDensity3", "Track Density 3cm", 300, 0, 300);
-  fhTrackDensity[4] = new TH1D("hTrackDensity4", "Track Density 4cm", 300, 0, 300);
-  fhTrackDensity[5] = new TH1D("hTrackDensity5", "Track Density 5cm", 300, 0, 300);
-  fhTrackDensity[6] = new TH1D("hTrackDensity10", "Track Density 10cm", 300, 0, 300);
-  fhTrackDensity[7] = new TH1D("hTrackDensity100", "Track Density 1m", 300, 0, 300);
-
-  gDirectory->mkdir("VertexFit");
-  gDirectory->cd("VertexFit");
-  {
-    CreateVertexHisto(fhVtx, "vtx", "for Primary Vertex");
-    gDirectory->mkdir("VertexOnNTracks");
-    gDirectory->cd("VertexOnNTracks");
-    for (int i = 0; i < 13; i++) {
-      char name[225], namedir[225], title[225];
-      if (i == 0) {
-        sprintf(namedir, "AllTracks");
-        sprintf(name, "Vall");
-        sprintf(title, "for Primary Vertex on all tracks");
-      }
-      else {
-        sprintf(namedir, "%iTracks", i * 50);
-        sprintf(name, "V%i", i * 50);
-        sprintf(title, "for Primary Vertex on %i tracks", i * 50);
-      }
-      gDirectory->mkdir(namedir);
-      gDirectory->cd(namedir);
-      CreateVertexHisto(fhV[i], name, title);
-      gDirectory->cd("..");
-    }
-    gDirectory->cd("..");
-  }
-  gDirectory->cd("..");
-
-  gDirectory->mkdir("D0Fit");
-  gDirectory->cd("D0Fit");
-  {
-    gDirectory->mkdir("No constraints");
-    gDirectory->cd("No constraints");
-    CreateD0Histo(fhD0[0], "D0", "for D0 Sec. Vertex");
-    gDirectory->cd("..");
-    gDirectory->mkdir("Topological constraint");
-    gDirectory->cd("Topological constraint");
-    CreateD0Histo(fhD0[1], "D0T", "for D0 Topo Sec. Vertex");
-    gDirectory->cd("..");
-    gDirectory->mkdir("Mass constraint");
-    gDirectory->cd("Mass constraint");
-    CreateD0Histo(fhD0[2], "D0M", "for D0 Mass Sec. Vertex");
-    gDirectory->cd("..");
-    gDirectory->mkdir("Mass+Topological constraint");
-    gDirectory->cd("Mass+Topological constraint");
-    CreateD0Histo(fhD0[3], "D0TM", "for D0 Topo+Mass Sec. Vertex");
-    gDirectory->cd("..");
-  }
-  gDirectory->cd("..");
-
-  curdir->cd();
-  return ReInit();
-}
-
-// -----   ReInit CbmStsFitPerformanceTask task   -------------------------------
-InitStatus CbmStsFitPerformanceTask::ReInit()
-{
-
-  FairRootManager* fManger = FairRootManager::Instance();
-  fMCTrackArray            = reinterpret_cast<TClonesArray*>(fManger->GetObject("MCTrack"));
-  fStsPointArray           = reinterpret_cast<TClonesArray*>(fManger->GetObject("StsPoint"));
-  fMvdPointArray           = reinterpret_cast<TClonesArray*>(fManger->GetObject("MvdPoint"));
-  fRecStsTrackArray        = reinterpret_cast<TClonesArray*>(fManger->GetObject("StsTrack"));
-  fStsHitArray             = reinterpret_cast<TClonesArray*>(fManger->GetObject("StsHit"));
-  fMvdHitArray             = reinterpret_cast<TClonesArray*>(fManger->GetObject("MvdHit"));
-
-  // Get pointer to PrimaryVertex object from IOManager if it exists
-  // The old name for the object is "PrimaryVertex" the new one
-  // "PrimaryVertex." Check first for the new name
-  fPrimaryVertex = dynamic_cast<CbmVertex*>(fManger->GetObject("PrimaryVertex."));
-  if (nullptr == fPrimaryVertex) {
-    fPrimaryVertex = dynamic_cast<CbmVertex*>(fManger->GetObject("PrimaryVertex"));
-  }
-  if (nullptr == fPrimaryVertex) {
-    cout << "-W- CbmStsFitPerformanceTask::ReInit : "
-         << "no Primary Vertex!" << endl;
-  }
-
-  fSTSTrackMatch = reinterpret_cast<TClonesArray*>(fManger->GetObject("StsTrackMatch"));
-  fFitter.Init();
-
-  return kSUCCESS;
-}
-// -------------------------------------------------------------------------
-
-
-// -----   Exec CbmStsFitPerformanceTask task   -------------------------------
-void CbmStsFitPerformanceTask::Exec(Option_t* /*option*/)
-{
-  cout << "Event: " << ++fEvent << " ";
-
-  Int_t nTracks = fRecStsTrackArray->GetEntriesFast();
-  cout << "  nTracks: " << nTracks << endl;
-
-  if (!fSTSTrackMatch) {
-    return;
-  }
-
-  Double_t mc[6];
-
-  Int_t Quality[nTracks];
-
-  for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
-    Quality[iTrack]    = 0;
-    CbmStsTrack* track = (CbmStsTrack*) fRecStsTrackArray->At(iTrack);
-    if (!track) {
-      continue;
-    }
-    CbmTrackMatch* m = (CbmTrackMatch*) fSTSTrackMatch->At(iTrack);
-    if (!m) {
-      continue;
-    }
-    if (m->GetNofTrueHits() < 0.7 * (m->GetNofTrueHits() + m->GetNofWrongHits() + m->GetNofFakeHits())) {
-      continue;
-    }
-    Int_t mcTrackID = m->GetMCTrackId();
-    if (mcTrackID < 0) {
-      continue;
-    }
-    if (!IsLong(track)) {
-      continue;
-    }
-
-    CbmMCTrack* mcTrack = (CbmMCTrack*) fMCTrackArray->At(mcTrackID);
-    if (!mcTrack) {
-      continue;
-    }
-    if (fabs((mcTrack->GetStartZ())) > 1.) {
-      continue;
-    }
-
-    if (mcTrack->GetMotherId() != -1) {
-      continue;
-    }
-    Quality[iTrack] = 1;
-  }
-
-  if (0) {
-    //    CbmKF &KF = *CbmKF::Instance();
-    int nStsHits = fStsHitArray->GetEntriesFast();
-    int nMvdHits = fMvdHitArray->GetEntriesFast();
-    cout << "Mvd hit density..." << endl;
-    for (int ih = 0; ih < nMvdHits; ih++) {
-      if (ih % 100 == 0) {
-        cout << ih << endl;
-      }
-      CbmMvdHit* h1 = (CbmMvdHit*) fMvdHitArray->At(ih);
-      if (!h1) {
-        continue;
-      }
-      double V[3] = {2 * h1->GetDx() * h1->GetDx(), 2 * 0, 2 * h1->GetDy() * h1->GetDy()};
-      Double_t v  = 1. / (V[0] * V[2] - V[1] * V[1]);
-      V[0] *= v;
-      V[1] *= v;
-      V[2] *= v;
-      double D2 = 1.e10;
-      for (int jh = 0; jh < nMvdHits; jh++) {
-        if (ih == jh) {
-          continue;
-        }
-        CbmMvdHit* h2 = (CbmMvdHit*) fMvdHitArray->At(jh);
-        if (!h2) {
-          continue;
-        }
-        if (h1->GetStationNr() != h2->GetStationNr()) {
-          continue;
-        }
-        Double_t dx = h1->GetX() - h2->GetX();
-        Double_t dy = h1->GetY() - h2->GetY();
-        Double_t d2 = fabs(dx * dx * V[0] - 2 * dx * dy * V[1] + dy * dy * V[2]);
-        if (d2 < D2) {
-          D2 = d2;
-        }
-      }
-      fhHitDensity[h1->GetStationNr() - 1]->Fill(sqrt(D2 / 2.));
-    }
-    cout << "Sts hit density..." << endl;
-    for (int ih = 0; ih < nStsHits; ih++) {
-      if (ih % 1000 == 0) {
-        cout << ih << endl;
-      }
-      CbmStsHit* h1 = (CbmStsHit*) fStsHitArray->At(ih);
-      if (!h1) {
-        continue;
-      }
-      double V[3] = {2 * h1->GetDx() * h1->GetDx(), 2 * h1->GetDxy(), 2 * h1->GetDy() * h1->GetDy()};
-      Double_t v  = 1. / (V[0] * V[2] - V[1] * V[1]);
-      V[0] *= v;
-      V[1] *= v;
-      V[2] *= v;
-      double D2 = 1.e10;
-      for (int jh = 0; jh < nStsHits; jh++) {
-        if (ih == jh) {
-          continue;
-        }
-        CbmStsHit* h2 = (CbmStsHit*) fStsHitArray->At(jh);
-        if (!h2) {
-          continue;
-        }
-        if (CbmStsSetup::Instance()->GetStationNumber(h1->GetAddress())
-            != CbmStsSetup::Instance()->GetStationNumber(h2->GetAddress())) {
-          continue;
-        }
-        //	if( h1->GetBackDigiId()>=0 ){
-        //	  if( h1->GetFrontDigiId()!=h2->GetFrontDigiId() &&
-        //	      h1->GetBackDigiId()!=h2->GetBackDigiId()     ) continue;
-        //	}
-        Double_t dx = h1->GetX() - h2->GetX();
-        Double_t dy = h1->GetY() - h2->GetY();
-        Double_t d2 = fabs(dx * dx * V[0] - 2 * dx * dy * V[1] + dy * dy * V[2]);
-        if (d2 < D2) {
-          D2 = d2;
-        }
-      }
-      fhHitDensity[CbmKF::Instance()->MvdStationIDMap.size()
-                   + CbmStsSetup::Instance()->GetStationNumber(h1->GetAddress()) - 1]
-        ->Fill(sqrt(D2 / 2));
-    }
-  }
-
-  if (0) {  // track density
-    cout << "Track density..." << endl;
-    bool flag[nTracks];
-    double sC[nTracks][8][15];
-    double sT[nTracks][8][5];
-    for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
-      flag[iTrack] = 0;
-
-      CbmStsTrack* trackI = (CbmStsTrack*) fRecStsTrackArray->At(iTrack);
-      if (!IsLong(trackI)) {
-        continue;
-      }
-      flag[iTrack] = 1;
-      double z[8]  = {0.2, 1, 2, 3, 4, 5, 10, 100};
-      for (int iz = 0; iz < 8; iz++) {
-        FairTrackParam paramI;
-        fFitter.Extrapolate(trackI, z[iz], &paramI);
-        CbmKFMath::CopyTrackParam2TC(&paramI, sT[iTrack][iz], sC[iTrack][iz]);
-        if (!std::isfinite(sC[iTrack][iz][0]) || sC[iTrack][iz][0] < 0 || sC[iTrack][iz][0] > 10.) {
-          flag[iTrack] = 0;
-          break;
-        }
-      }
-    }
-    for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
-
-      if (iTrack % 10 == 0) {
-        cout << iTrack << endl;
-      }
-      if (!flag[iTrack]) {
-        continue;
-      }
-      double Chi2[8];
-      for (int iz = 0; iz < 8; iz++) {
-        Chi2[iz] = 1.e10;
-      }
-      double Chi2L = 1.e10;
-
-      for (Int_t jTrack = 0; jTrack < nTracks; jTrack++) {
-        if (jTrack == iTrack) {
-          continue;
-        }
-        if (!flag[jTrack]) {
-          continue;
-        }
-
-        for (int iz = 0; iz < 8; iz++) {
-          Double_t C[15], d[5];
-          for (int i = 0; i < 15; i++) {
-            C[i] = sC[iTrack][iz][i] + sC[jTrack][iz][i];
-          }
-          for (int i = 0; i < 5; i++) {
-            d[i] = sT[iTrack][iz][i] - sT[jTrack][iz][i];
-          }
-          CbmKFMath::invS(C, 5);
-
-          double chi2 = 0;
-          for (int i = 0; i < 5; i++) {
-            double dCi = 0;
-            for (int j = 0; j < 5; j++) {
-              dCi += d[j] * C[CbmKFMath::indexS(i, j)];
-            }
-            chi2 += dCi * d[i];
-          }
-          chi2 = fabs(chi2);
-          if (chi2 < Chi2[iz]) {
-            Chi2[iz] = chi2;
-          }
-
-          if (iz == 0) {
-            chi2 = 0;
-            for (int i = 0; i < 4; i++) {
-              double dCi = 0;
-              for (int j = 0; j < 4; j++) {
-                dCi += d[j] * C[CbmKFMath::indexS(i, j)];
-              }
-              chi2 += dCi * d[i];
-            }
-            chi2 = fabs(chi2);
-            if (chi2 < Chi2L) {
-              Chi2L = chi2;
-            }
-          }
-        }
-      }
-      for (int iz = 0; iz < 8; iz++) {
-        fhTrackDensity[iz]->Fill(sqrt(Chi2[iz] / 5));
-      }
-      fhTrackDensity0L->Fill(sqrt(Chi2L / 4));
-    }
-  }
-  if (fTrackAnalysis) {
-    for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
-      if (Quality[iTrack] < 1) {
-        continue;
-      }
-      CbmStsTrack* track  = (CbmStsTrack*) fRecStsTrackArray->At(iTrack);
-      CbmTrackMatch* m    = (CbmTrackMatch*) fSTSTrackMatch->At(iTrack);
-      CbmMCTrack* mcTrack = (CbmMCTrack*) fMCTrackArray->At(m->GetMCTrackId());
-
-      if (mcTrack->GetMotherId() != -1) {
-        continue;  // not primary track //IK
-      }
-
-      // Get MC points;
-      vector<CbmStsPoint*> vPoints;
-      for (Int_t i = 0; i < track->GetNofStsHits(); i++) {
-        Int_t hitID = track->GetStsHitIndex(i);
-        if (hitID < 0) {
-          continue;
-        }
-        CbmStsHit* hit = (CbmStsHit*) fStsHitArray->At(hitID);
-        if (!hit) {
-          continue;
-        }
-        Int_t pointID = hit->GetRefId();
-        if (pointID < 0) {
-          continue;
-        }
-        CbmStsPoint* point = (CbmStsPoint*) fStsPointArray->At(pointID);
-        if (!point) {
-          continue;
-        }
-        vPoints.push_back(point);
-      }
-      vector<CbmMvdPoint*> vMPoints;
-      for (Int_t i = 0; i < track->GetNofMvdHits(); i++) {
-        Int_t hitID = track->GetMvdHitIndex(i);
-        if (hitID < 0) {
-          continue;
-        }
-        CbmMvdHit* hit = (CbmMvdHit*) fMvdHitArray->At(hitID);
-        if (!hit) {
-          continue;
-        }
-        Int_t pointID = hit->GetRefIndex();
-        if (pointID < 0) {
-          continue;
-        }
-        CbmMvdPoint* point = (CbmMvdPoint*) fMvdPointArray->At(pointID);
-        if (!point) {
-          continue;
-        }
-        vMPoints.push_back(point);
-      }
-      // impact mc track
-      Double_t mci[6];
-      Double_t pzi = mcTrack->GetPz();
-      if (fabs(pzi) > 1.e-4) {
-        pzi = 1. / pzi;
-      }
-      mci[0] = mcTrack->GetStartX();
-      mci[1] = mcTrack->GetStartY();
-      mci[2] = mcTrack->GetPx() * pzi;
-      mci[3] = mcTrack->GetPy() * pzi;
-      mci[4] = (fabs(mcTrack->GetP()) > 1.e-4) ? GetCharge(mcTrack) / mcTrack->GetP() : 0;
-      mci[5] = mcTrack->GetStartZ();
-      if (!vPoints.empty()) {
-        if (track->GetNofStsHits() + track->GetNofMvdHits() >= 8) {
-          Double_t p1 = mcTrack->GetP();
-          TVector3 mom;
-          vPoints.back()->MomentumOut(mom);
-          Double_t p2 = mom.Mag();
-          Double_t s  = p1 * p1 * TMath::Sqrt(TMath::Abs(track->GetParamFirst()->GetCovariance(4, 4)));
-          Double_t dp = (p1 - p2) * TMath::Sqrt(1 + mci[2] * mci[2] + mci[3] * mci[3]);
-          fhDP->Fill(dp);
-          fhDP2->Fill(p1, dp);
-          fhDsP->Fill(dp / s);
-          fhDsP2->Fill(p1, dp / s);
-        }
-        // first point
-        if (!vMPoints.empty()) {
-          FillMCStateVectors(vMPoints.front(), mc);
-        }
-        else {
-          FillMCStateVectors(vPoints.front(), mc);
-        }
-        FillTrackHisto(mc, track, fhFrst);
-        fhZMCf->Fill(mc[5]);
-        fhZRecof->Fill(track->GetParamFirst()->GetZ());
-
-        // last point
-        FillMCStateVectors(vPoints.back(), mc, 1);
-        FillTrackHisto(mc, track, fhLast);
-        fhZMCl->Fill(mc[5]);
-        fhZRecol->Fill(track->GetParamLast()->GetZ());
-
-        // impact point
-
-        if (TMath::Abs(mcTrack->GetPdgCode()) == 211) {
-          FillTrackHisto(mci, track, fhImpPi);
-        }
-        else {
-          FillTrackHisto(mci, track, fhImp);
-        }
-
-        // 4th station (check smoother)
-
-        for (vector<CbmStsPoint*>::iterator i = vPoints.begin(); i != vPoints.end(); i++) {
-          int id    = (*i)->GetDetectorID();
-          CbmKF& KF = *CbmKF::Instance();
-          if (KF.StsStationIDMap.find(id) == KF.StsStationIDMap.end()) {
-            continue;
-          }
-          if (KF.StsStationIDMap[id] != 3) {
-            continue;
-          }
-          FillMCStateVectors(*i, mc, 1);
-          //FillTrackHisto( mc, track, fhMid );
-          break;
-        }
-      }
-
-      if (fPrimaryVertex && mcTrack->GetMotherId() == -1) {
-
-        // fit track to Primary Vertex
-
-        CbmStsTrack tt(*track);
-        FairTrackParam par(*tt.GetParamFirst());
-        fFitter.FitToVertex(&tt, fPrimaryVertex, &par);
-        tt.SetParamFirst(&par);
-        //FillTrackHisto(mci,&tt,fhVfit);
-
-        // fill momentum resolution
-
-        double z = mci[5];
-        FairTrackParam param;
-        fFitter.Extrapolate(track, z, &param);
-        if (fabs(mci[4]) > 1.e-4 && fabs(param.GetQp()) > 1.e-4) {
-          fhPq->Fill(fabs(1. / mci[4]), (mci[4] / param.GetQp() - 1.));
-        }
-      }
-
-      if (track->GetNDF() > 0) {
-        fhChi2->Fill(track->GetChiSq() / track->GetNDF());
-        fhProb->Fill(TMath::Prob(track->GetChiSq(), track->GetNDF()));
-      }
-    }
-  }
-
-  if (fPrimaryVertex) {
-
-    // find MC Primary vertex
-
-    TVector3 MC_V(0, 0, 0);
-    Bool_t Is_MC_V = 0;
-    {
-      TVector3 MC_Vcurr(0, 0, 0);
-      Int_t nvtracks = 0, nvtrackscurr = 0;
-      Int_t nMCTracks = fMCTrackArray->GetEntriesFast();
-      for (Int_t iTrack = 0; iTrack < nMCTracks; iTrack++) {
-        CbmMCTrack* mcTrack = (CbmMCTrack*) fMCTrackArray->At(iTrack);
-        if (mcTrack->GetMotherId() != -1) {
-          continue;  // not primary track
-        }
-        double z = mcTrack->GetStartZ();
-        if (!Is_MC_V || fabs(z - MC_Vcurr.Z()) > 1.e-7) {  // new vertex
-          Is_MC_V = 1;
-          if (nvtrackscurr > nvtracks) {
-            MC_V     = MC_Vcurr;
-            nvtracks = nvtrackscurr;
-          }
-          mcTrack->GetStartVertex(MC_Vcurr);
-          nvtrackscurr = 1;
-        }
-        else {
-          nvtrackscurr++;
-        }
-      }
-      if (nvtrackscurr > nvtracks) {
-        MC_V = MC_Vcurr;
-      }
-    }
-
-
-    if (Is_MC_V) {
-
-      // primary vertex fit performance
-
-      FillVertexHisto(MC_V, fPrimaryVertex, fhVtx);
-
-      if (fVertexAnalysis) {
-
-        CbmPVFinderKF Finder;
-        TClonesArray TracksToFit("CbmStsTrack");
-        Int_t N = 0;
-        for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
-          if (Quality[iTrack] < 1) {
-            continue;
-          }
-          new (TracksToFit[N]) CbmStsTrack();
-          *(CbmStsTrack*) TracksToFit.At(N) = *(CbmStsTrack*) fRecStsTrackArray->At(iTrack);
-          N++;
-          if (N % 50 != 0) {
-            continue;
-          }
-          Int_t i = N / 50;
-          if (i >= 13) {
-            continue;
-          }
-          CbmVertex V;
-          Finder.FindPrimaryVertex(&TracksToFit, &V);
-          FillVertexHisto(MC_V, &V, fhV[i]);
-        }
-        CbmVertex V;
-        Finder.FindPrimaryVertex(&TracksToFit, &V);
-        FillVertexHisto(MC_V, &V, fhV[0]);
-      }
-
-      // D0 fit performance (if there are)
-
-      if (fD0Analysis && fabs(MC_V.Z()) < 1.e-5) {
-        // search for  Kaon
-        for (Int_t iK = 0; iK < nTracks; iK++) {
-          if (Quality[iK] < 1) {
-            continue;
-          }
-          CbmStsTrack* tK  = (CbmStsTrack*) fRecStsTrackArray->At(iK);
-          CbmTrackMatch* m = (CbmTrackMatch*) fSTSTrackMatch->At(iK);
-          CbmMCTrack* mcK  = (CbmMCTrack*) fMCTrackArray->At(m->GetMCTrackId());
-          if (mcK->GetMotherId() != -1) {
-            continue;  // not primary or D0 track
-          }
-          if (abs(mcK->GetPdgCode()) != 321) {
-            continue;
-          }
-          double zK = mcK->GetPz();
-          if (zK - MC_V.Z() < 1.e-5) {
-            continue;  // primary
-          }
-          double MCPK = mcK->GetP();
-          fFitter.DoFit(tK, 321);  // refit
-          // search for Pion
-          for (Int_t iP = 0; iP < nTracks; iP++) {
-            if (Quality[iP] < 1) {
-              continue;
-            }
-            CbmStsTrack* tP = (CbmStsTrack*) fRecStsTrackArray->At(iP);
-            m               = (CbmTrackMatch*) fSTSTrackMatch->At(iP);
-            CbmMCTrack* mcP = (CbmMCTrack*) fMCTrackArray->At(m->GetMCTrackId());
-            if (mcP->GetMotherId() != -1) {
-              continue;  // not primary or D0 track
-            }
-            if (abs(mcP->GetPdgCode()) != 211) {
-              continue;
-            }
-            if (mcK->GetPdgCode() * mcP->GetPdgCode() >= 0) {
-              continue;  //same charge
-            }
-            double zP = mcP->GetStartZ();
-            if (fabs(zP - zK) > 1.e-8) {
-              continue;  // different vertex
-            }
-            double MCPP = mcP->GetP();
-
-            const double D0 = 1.8645;
-
-            TVector3 mc_;
-            mcK->GetStartVertex(mc_);
-
-            CbmStsKFSecondaryVertexFinder SVFinder;
-            SVFinder.AddTrack(tK);
-            SVFinder.AddTrack(tP);
-
-            for (int iconst = 0; iconst < 4; iconst++) {
-
-              switch (iconst) {
-                case 0:
-                  SVFinder.SetMassConstraint();  // no constraints
-                  SVFinder.SetTopoConstraint();
-                  break;
-                case 1:
-                  SVFinder.SetMassConstraint();  // Topo constraint
-                  SVFinder.SetTopoConstraint(fPrimaryVertex);
-                  break;
-                case 2:
-                  SVFinder.SetMassConstraint(D0);  // Mass constraint
-                  SVFinder.SetTopoConstraint();
-                  break;
-                case 3:
-                  SVFinder.SetMassConstraint(D0);  // Topo + Mass constraint
-                  SVFinder.SetTopoConstraint(fPrimaryVertex);
-                  break;
-                default: break;
-              }
-              SVFinder.Fit();
-              CbmVertex sv;
-              //FairTrackParam KFitted, PFitted;
-              Double_t mass, mass_err;
-              SVFinder.GetVertex(sv);
-              //SVFinder.GetFittedTrack(0, &KFitted );
-              //SVFinder.GetFittedTrack(1, &PFitted );
-              SVFinder.GetMass(&mass, &mass_err);
-              if (sv.GetNDF() <= 0) {
-                continue;
-              }
-              Double_t dx = sv.GetX() - mc_.X();
-              Double_t dy = sv.GetY() - mc_.Y();
-              Double_t dz = sv.GetZ() - mc_.Z();
-              Double_t sx = sv.GetCovariance(0, 0);
-              Double_t sy = sv.GetCovariance(1, 1);
-              Double_t sz = sv.GetCovariance(2, 2);
-              fhD0[iconst][0]->Fill(1.E4 * dx);
-              fhD0[iconst][1]->Fill(1.E4 * dy);
-              fhD0[iconst][2]->Fill(1.E4 * dz);
-              if (sx > 1.e-10) {
-                fhD0[iconst][3]->Fill(dx / sqrt(sx));
-              }
-              if (sy > 1.e-10) {
-                fhD0[iconst][4]->Fill(dy / sqrt(sy));
-              }
-              if (sz > 1.e-10) {
-                fhD0[iconst][5]->Fill(dz / sqrt(sz));
-              }
-              if (sv.GetNDF() > 0) {
-                fhD0[iconst][6]->Fill(sv.GetChi2() / sv.GetNDF());
-                fhD0[iconst][7]->Fill(TMath::Prob(sv.GetChi2(), sv.GetNDF()));
-              }
-              fhD0[iconst][8]->Fill((mass - D0));
-              if (mass_err > 1.e-10) {
-                fhD0[iconst][9]->Fill((mass - D0) / mass_err);
-              }
-              //fhD0[iconst][10]->Fill( ( fabs(1./KFitted.GetQp()) - MCPK)/MCPK );
-              //fhD0[iconst][11]->Fill( (fabs(1./PFitted.GetQp()) - MCPP)/MCPP );
-              if (fabs(tK->GetParamFirst()->GetQp()) > 1.e-4 && MCPK > 1.e-4) {
-                fhD0[iconst][12]->Fill((fabs(1. / tK->GetParamFirst()->GetQp()) - MCPK) / MCPK);
-              }
-              if (fabs(tP->GetParamFirst()->GetQp()) > 1.e-4 && MCPP > 1.e-4) {
-                fhD0[iconst][13]->Fill((fabs(1. / tP->GetParamFirst()->GetQp()) - MCPP) / MCPP);
-              }
-            }
-          }
-        }
-      }
-    }
-  }  // vertex analysis
-}
-// -------------------------------------------------------------------------
-
-
-// -----   Finish CbmStsFitPerformanceTask task   -----------------------------
-void CbmStsFitPerformanceTask::Finish() { writedir2current(histodir); }
-// -------------------------------------------------------------------------
-
-
-// -------------------------------------------------------------------------
-void CbmStsFitPerformanceTask::FillTrackHisto(const Double_t mc[6], CbmStsTrack* track, TH1D* hist[10])
-{
-  if ((mc[5] > 31.0) || (mc[5] < 29.0)) {
-    //cout << " Z out " << track->GetParamFirst()->GetZ() << endl;
-    //return;
-  }
-  //cout << "*Z in  " << track->GetParamFirst()->GetZ() << endl;
-  double z = mc[5];
-  FairTrackParam param;
-  //cout<<1<<endl;
-  fFitter.Extrapolate(track, z, &param);
-  //cout<<2<<endl;
-
-  double t[6], c[15];
-  CbmKFMath::CopyTrackParam2TC(&param, t, c);
-  Bool_t ok = 1;
-  for (int i = 0; i < 6; i++) {
-    ok = ok && std::isfinite(t[i]);
-  }
-  for (int i = 0; i < 15; i++) {
-    ok = ok && std::isfinite(c[i]);
-  }
-  if (!ok) {
-    return;
-  }
-  //fhExtraTracks2ndMVD->Fill(t[0], t[1]);
-
-  hist[0]->Fill(1.E4 * (t[0] - mc[0]));
-  hist[1]->Fill(1.E4 * (t[1] - mc[1]));
-  hist[2]->Fill(1.E3 * (t[2] - mc[2]));
-  hist[3]->Fill(1.E3 * (t[3] - mc[3]));
-  if (fabs(t[4]) > 1.e-10) {
-    hist[4]->Fill((mc[4] / t[4] - 1.));
-  }
-  //if (z < 7.0) // first hit
-  //if ( fabs( t[4] )>1.e-10 ) fhRes_vs_Mom_f->Fill(fabs(1.0/t[4]),1.E3*(t[2] - mc[2]));
-  //if (z > 80.0) // last hit
-  //if ( fabs( t[4] )>1.e-10 ) fhRes_vs_Mom_l->Fill(fabs(1.0/t[4]),1.E3*(t[2] - mc[2]));
-
-  if (c[0] > 1.e-10) {
-    hist[5]->Fill((t[0] - mc[0]) / sqrt(c[0]));
-  }
-  if (c[2] > 1.e-10) {
-    hist[6]->Fill((t[1] - mc[1]) / sqrt(c[2]));
-  }
-  if (c[5] > 1.e-10) {
-    hist[7]->Fill((t[2] - mc[2]) / sqrt(c[5]));
-  }
-  if (c[9] > 1.e-10) {
-    hist[8]->Fill((t[3] - mc[3]) / sqrt(c[9]));
-  }
-  if (c[14] > 1.e-10) {
-    hist[9]->Fill((t[4] - mc[4]) / sqrt(c[14]));
-  }
-}
-// -------------------------------------------------------------------------
-
-void CbmStsFitPerformanceTask::FillVertexHisto(TVector3& mc, CbmVertex* V, TH1D* hist[8])
-{
-  Double_t dx  = V->GetX() - mc.X();
-  Double_t dy  = V->GetY() - mc.Y();
-  Double_t dz  = V->GetZ() - mc.Z();
-  Double_t s2x = V->GetCovariance(0, 0);
-  Double_t s2y = V->GetCovariance(1, 1);
-  Double_t s2z = V->GetCovariance(2, 2);
-
-  hist[0]->Fill(1.E4 * dx);
-  hist[1]->Fill(1.E4 * dy);
-  hist[2]->Fill(1.E4 * dz);
-  if (s2x > 1.e-10) {
-    hist[3]->Fill(dx / sqrt(s2x));
-  }
-  if (s2y > 1.e-10) {
-    hist[4]->Fill(dy / sqrt(s2y));
-  }
-  if (s2z > 1.e-10) {
-    hist[5]->Fill(dz / sqrt(s2z));
-  }
-  hist[6]->Fill(V->GetChi2() / V->GetNDF());
-  hist[7]->Fill(TMath::Prob(V->GetChi2(), V->GetNDF()));
-  hist[8]->Fill(V->GetNTracks());
-}
-
-// -------------------------------------------------------------------------
-void CbmStsFitPerformanceTask::FillMCStateVectors(CbmStsPoint* point, Double_t mc[], Bool_t out)
-{
-  if (!point) {
-    return;
-  }
-  Int_t mcTrackID     = point->GetTrackID();
-  CbmMCTrack* mcTrack = (CbmMCTrack*) fMCTrackArray->At(mcTrackID);
-  if (!mcTrack) {
-    return;
-  }
-  Double_t q = GetCharge(mcTrack);
-
-  // Get MC state vector
-  TVector3 r, p;
-  if (!out) {
-    point->Momentum(p);
-    point->Position(r);
-  }
-  else {
-    point->MomentumOut(p);
-    point->PositionOut(r);
-  }
-  double pzi = p.z();
-  if (fabs(pzi) > 1.e-4) {
-    pzi = 1. / pzi;
-  }
-  mc[2] = p.x() * pzi;
-  mc[3] = p.y() * pzi;
-  mc[4] = p.Mag() > 1.e-4 ? q / p.Mag() : 0;
-  mc[0] = r.x();
-  mc[1] = r.y();
-  mc[5] = r.z();
-}
-
-void CbmStsFitPerformanceTask::FillMCStateVectors(CbmMvdPoint* point, Double_t mc[], Bool_t out)
-{
-  if (!point) {
-    return;
-  }
-  Int_t mcTrackID     = point->GetTrackID();
-  CbmMCTrack* mcTrack = (CbmMCTrack*) fMCTrackArray->At(mcTrackID);
-  if (!mcTrack) {
-    return;
-  }
-  Double_t q = GetCharge(mcTrack);
-
-  // Get MC state vector
-  TVector3 r, p;
-  if (!out) {
-    point->Momentum(p);
-    point->Position(r);
-  }
-  else {
-    point->MomentumOut(p);
-    point->PositionOut(r);
-  }
-  double pzi = p.z();
-  if (fabs(pzi) > 1.e-4) {
-    pzi = 1. / pzi;
-  }
-  mc[2] = p.x() * pzi;
-  mc[3] = p.y() * pzi;
-  mc[4] = p.Mag() > 1.e-4 ? q / p.Mag() : 0;
-  mc[0] = r.x();
-  mc[1] = r.y();
-  mc[5] = r.z();
-}
-
-
-// -----   GetCharge   ----------------------------------------------------
-Double_t CbmStsFitPerformanceTask::GetCharge(CbmMCTrack* mcTrack)
-{
-  Double_t q;
-  Int_t pdgCode             = mcTrack->GetPdgCode();
-  TParticlePDG* particlePDG = TDatabasePDG::Instance()->GetParticle(pdgCode);
-  if (particlePDG) {
-    q = particlePDG->Charge() / 3.;
-  }
-  else {
-    q = 0;
-  }
-  return q;
-}
-
-
-// -------------------------------------------------------------------------
-Bool_t CbmStsFitPerformanceTask::IsLong(CbmStsTrack* track)
-{
-  Int_t nHits = track->GetNofStsHits();
-  if (nHits < 4) {
-    return 0;
-  }
-  Int_t stmin = 1000, stmax = -1000;
-  Int_t st, iHit, hitID;
-  for (iHit = 0; iHit < nHits; iHit++) {
-    hitID = track->GetStsHitIndex(iHit);
-    st    = ((CbmStsHit*) fStsHitArray->At(hitID))->GetAddress();
-    if (st < stmin) {
-      stmin = st;
-    }
-    if (st > stmax) {
-      stmax = st;
-    }
-  }
-  if (stmax - stmin + 1 < 4) {
-    return 0;
-  }
-  return 1;
-}
diff --git a/reco/KF/Interface/CbmStsFitPerformanceTask.h b/reco/KF/Interface/CbmStsFitPerformanceTask.h
deleted file mode 100644
index 79c631b185530bb2eb31cddcf6eb80a0898991b0..0000000000000000000000000000000000000000
--- a/reco/KF/Interface/CbmStsFitPerformanceTask.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/* Copyright (C) 2006-2012 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Sergey Gorbunov, Denis Bertini [committer], Florian Uhlig */
-
-// -------------------------------------------------------------------------
-// -----              CbmStsFitPerformanceTask header file                -----
-// -----               Created 27/01/05  by E. Kryshen                 -----
-// -------------------------------------------------------------------------
-
-
-/**  CbmStsFitPerformanceTask.h
- **@author S.Gorbunov <sgorboun@mail.desy.de>
- **@author I.Kisel    <ikisel@kip.uni-heidelberg.de>
- **@author E.Kryshen  <e.kryshen@gsi.de>
- **
- ** Analysis of the KalmanTrackFitter perfomance
- **/
-
-#ifndef CBMSTSFITPERFORMANCE_H
-#define CBMSTSFITPERFORMANCE_H
-
-#include "CbmMCTrack.h"
-#include "CbmMvdPoint.h"
-#include "CbmStsKFTrackFitter.h"
-#include "CbmStsPoint.h"
-#include "CbmStsTrack.h"
-#include "CbmVertex.h"
-#include "FairTask.h"
-#include "FairTrackParam.h"
-#include "TClonesArray.h"
-#include "TH1D.h"
-#include "TH2D.h"
-
-class CbmStsFitPerformanceTask : public FairTask {
-
- public:
-  /** Standard constructor */
-  CbmStsFitPerformanceTask(const char* name = "CbmStsFitPerformanceTask", Int_t iVerbose = 1);
-
-
-  /** Destructor */
-  ~CbmStsFitPerformanceTask();
-
-
-  /** Initialization of the task */
-  InitStatus Init();
-
-  /** ReInitialization of the task */
-  InitStatus ReInit();
-
-
-  /** Execute task */
-  void Exec(Option_t* option);
-
-
-  /** Finish task */
-  void Finish();
-
-  /** This function fill state vectors t[], mc[] and covariance 
-   ** matrix c[] from the given FairTrackParam object and 
-   ** related CbmStsPoint object. 
-   ** @param in  is set to 1 if in values of position and momentum
-   ** are considered.
-   */
-
-  void FillMCStateVectors(CbmStsPoint* point, Double_t mc[], Bool_t out = 0);
-  void FillMCStateVectors(CbmMvdPoint* point, Double_t mc[], Bool_t out = 0);
-
-  /** This function fills track pulls and residuals at certain z-position */
-  void FillTrackHisto(const Double_t mc[6], CbmStsTrack* track, TH1D* hist[10]);
-
-  /** This function fills vertex pulls and residuals */
-  void FillVertexHisto(TVector3& mc, CbmVertex* V, TH1D* hist[8]);
-
-  /** Returns 1 if track has >=8 measurements and stMaxID-stMinID>=4 */
-  Bool_t IsLong(CbmStsTrack* track);
-
-  void DoTrackAnalysis(const bool ok = 1) { fTrackAnalysis = ok; }
-  void DoVertexAnalysis(const bool ok = 1) { fVertexAnalysis = ok; }
-  void DoD0Analysis(const bool ok = 1) { fD0Analysis = ok; }
-
-  Double_t GetCharge(CbmMCTrack* mcTrack);
-
- protected:
-  void CreateTrackHisto(TH1D* hist[10], const char* name, const char* title);
-  void CreateVertexHisto(TH1D* hist[9], const char* name, const char* title);
-  void CreateD0Histo(TH1D* hist[14], const char* name, const char* title);
-
-  Int_t fEvent;
-  Bool_t fVertexAnalysis, fD0Analysis, fTrackAnalysis;
-
-  TClonesArray* fMCTrackArray;      ///< MCTracks
-  TClonesArray* fStsPointArray;     ///< StsPoints
-  TClonesArray* fMvdPointArray;     ///< StsPoints
-  TClonesArray* fRecStsTrackArray;  ///< Reconstructed StsTracks
-  TClonesArray* fStsHitArray;       ///< Sts hits
-  TClonesArray* fMvdHitArray;       ///< Sts hits
-  CbmVertex* fPrimaryVertex;        ///< Primary vertex
-  TClonesArray* fSTSTrackMatch;     ///< Related MC tracks
-
-  TH1D* fhChi2;  // x=chi2; y=entries for all
-  TH1D* fhProb;  // x=Prob function; y=entries for all
-  TH1D* fhDP;
-  TH2D* fhDP2;
-  TH1D* fhDsP;
-  TH2D* fhDsP2;
-
-  TH1D *fhZMCf, *fhZMCl;      // z first/last of MC track
-  TH1D *fhZRecof, *fhZRecol;  // z first/last of Reco track
-
-  TH2D *fhRes_vs_Mom_f, *fhRes_vs_Mom_l;  // resolution vs momentum
-  TH2D* fhExtraTracks2ndMVD;              // extra tracks not detected in the second mvd chamber
-
-  TH1D* fhFrst[10];
-  TH1D* fhMid[10];
-  TH1D* fhLast[10];
-  TH1D* fhImp[10];
-  TH1D* fhImpPi[10];
-  TH1D* fhVfit[10];
-  TH1D* fhVtx[9];
-  TH1D* fhV[13][9];
-  TH2D* fhPq;
-  TH1D* fhD0[4][14];
-
-  TH1D* fhHitDensity[10];
-  TH1D* fhTrackDensity[8];
-  TH1D* fhTrackDensity0L;
-
-  TDirectory* histodir;
-  CbmStsKFTrackFitter fFitter;
-
-  ClassDef(CbmStsFitPerformanceTask, 1);
-
- private:
-  CbmStsFitPerformanceTask(const CbmStsFitPerformanceTask&);
-  void operator=(const CbmStsFitPerformanceTask&);
-};
-
-#endif
diff --git a/reco/KF/Interface/CbmStsKFSecondaryVertexFinder.cxx b/reco/KF/Interface/CbmStsKFSecondaryVertexFinder.cxx
deleted file mode 100644
index e19e61a97c2a91cdb0511b341478224ad4ef8f61..0000000000000000000000000000000000000000
--- a/reco/KF/Interface/CbmStsKFSecondaryVertexFinder.cxx
+++ /dev/null
@@ -1,109 +0,0 @@
-/* Copyright (C) 2006-2016 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Sergey Gorbunov, Ivan Kisel, Denis Bertini [committer] */
-
-/** Implementation of the CbmKFSecondaryVertexFinder class
- *
- * @author  S.Gorbunov, I.Kisel
- * @version 1.0
- * @since   06.02.06
- *
- */
-#include "CbmStsKFSecondaryVertexFinder.h"
-
-#include "CbmKFMath.h"
-
-#include <vector>
-
-using std::vector;
-
-ClassImp(CbmStsKFSecondaryVertexFinder)
-
-  void CbmStsKFSecondaryVertexFinder::Clear(Option_t* /*opt*/)
-{
-  Finder.Clear();
-  vStsTracks.clear();
-  vKFTracks.clear();
-}
-
-void CbmStsKFSecondaryVertexFinder::AddTrack(CbmStsTrack* Track)
-{
-  if (!Track) {
-    return;
-  }
-  vStsTracks.push_back(Track);
-  vKFTracks.push_back(CbmKFTrack(*Track));
-}
-
-void CbmStsKFSecondaryVertexFinder::SetApproximation(CbmVertex* Guess)
-{
-  if (!Guess) {
-    Finder.SetApproximation();
-  }
-  else {
-    VGuess.SetVertex(*Guess);
-    Finder.SetApproximation(&VGuess);
-  }
-}
-
-void CbmStsKFSecondaryVertexFinder::SetMassConstraint(Double_t MotherMass) { Finder.SetMassConstraint(MotherMass); }
-
-void CbmStsKFSecondaryVertexFinder::SetTopoConstraint(CbmVertex* Parent)
-{
-  if (!Parent) {
-    Finder.SetTopoConstraint();
-  }
-  else {
-    VParent.SetVertex(*Parent);
-    Finder.SetTopoConstraint(&VParent);
-  }
-}
-
-void CbmStsKFSecondaryVertexFinder::Fit()
-{
-  Finder.ClearTracks();
-  for (vector<CbmKFTrack>::iterator i = vKFTracks.begin(); i != vKFTracks.end(); ++i) {
-    Finder.AddTrack(&*i);
-  }
-  Finder.Fit();
-}
-
-void CbmStsKFSecondaryVertexFinder::GetVertex(CbmVertex& vtx) { Finder.GetVertex(vtx); }
-/*
-void CbmStsKFSecondaryVertexFinder::GetFittedTrack( Int_t itrack, CbmStsTrack *Track ){
-  if(!Track) return;
-  *Track = *vStsTracks[itrack];
-  double T[6], C[15];
-  Finder.GetTrack(itrack, T, C );
-  CbmKFMath::CopyTC2TrackParam( Track->GetParamFirst(), T, C ); 
-}
-
-void CbmStsKFSecondaryVertexFinder::GetFittedTrack( Int_t itrack, FairTrackParam *Param ){
-  if(!Param) return;
-  double T[6], C[15];
-  Finder.GetTrack(itrack, T, C );
-  CbmKFMath::CopyTC2TrackParam( Param, T, C ); 
-}
-*/
-void CbmStsKFSecondaryVertexFinder::GetMotherTrack(CbmStsTrack* MotherTrack)
-{
-  if (!MotherTrack) {
-    return;
-  }
-  double T[6], C[15];
-  Finder.GetMotherTrack(T, C);
-  FairTrackParam parFirst(*MotherTrack->GetParamFirst()), parLast(*MotherTrack->GetParamLast());
-  CbmKFMath::CopyTC2TrackParam(&parFirst, T, C);  // MotherTrack->GetParamFirst(), T, C );
-  CbmKFMath::CopyTC2TrackParam(&parLast, T, C);   //MotherTrack->GetParamLast(), T, C );
-  MotherTrack->SetParamFirst(&parFirst);
-  MotherTrack->SetParamLast(&parLast);
-  MotherTrack->SetPidHypo(211);
-  MotherTrack->SetChiSq(0);
-  MotherTrack->SetNDF(1);
-}
-
-void CbmStsKFSecondaryVertexFinder::GetMass(Double_t* M, Double_t* Error_) { Finder.GetMass(M, Error_); }
-
-CbmStsTrack* CbmStsKFSecondaryVertexFinder::GetTrack(Int_t itrack) { return vStsTracks[itrack]; }
-
-Int_t CbmStsKFSecondaryVertexFinder::GetNTracks() { return vStsTracks.size(); }
diff --git a/reco/KF/Interface/CbmStsKFSecondaryVertexFinder.h b/reco/KF/Interface/CbmStsKFSecondaryVertexFinder.h
deleted file mode 100644
index 8edea696a26cabd48d7b5a34ab51fa87e1e65f03..0000000000000000000000000000000000000000
--- a/reco/KF/Interface/CbmStsKFSecondaryVertexFinder.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright (C) 2006-2015 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Sergey Gorbunov, Ivan Kisel, Denis Bertini [committer] */
-
-/** The CbmStsKFSecondaryVertexFinder class
- *
- * @author  S.Gorbunov, I.Kisel
- * @version 1.0
- * @since   06.02.06
- * 
- * Class to find secondary vertex with the Kalman Filter method
- *
- */
-#ifndef CBMSTSKFSECONDARYVERTEXFINDER_H
-#define CBMSTSKFSECONDARYVERTEXFINDER_H
-
-#include "CbmKFSecondaryVertexFinder.h"
-#include "CbmKFTrack.h"
-#include "CbmKFVertex.h"
-#include "CbmStsTrack.h"
-
-#include <vector>
-
-class CbmStsKFSecondaryVertexFinder : public TObject {
-
-  std::vector<CbmStsTrack*> vStsTracks;
-  std::vector<CbmKFTrack> vKFTracks;
-  CbmKFVertex VParent, VGuess;
-  CbmKFSecondaryVertexFinder Finder;
-
- public:
-  CbmStsKFSecondaryVertexFinder() : vStsTracks(), vKFTracks(), VParent(), VGuess(), Finder() { Clear(); };
-  ~CbmStsKFSecondaryVertexFinder(){};
-
-  virtual void Clear(Option_t* opt = "");
-  void AddTrack(CbmStsTrack* Track);
-  void SetApproximation(CbmVertex* Guess = nullptr);
-  void SetMassConstraint(Double_t MotherMass = -1);
-  void SetTopoConstraint(CbmVertex* Parent = nullptr);
-  void Fit();
-  void GetVertex(CbmVertex& vtx);
-  //void GetFittedTrack( Int_t itrack, CbmStsTrack *Track );
-  //void GetFittedTrack( Int_t itrack, FairTrackParam *Param );
-  void GetMotherTrack(CbmStsTrack* MotherTrack);
-  void GetMass(Double_t* M, Double_t* Error);
-  CbmStsTrack* GetTrack(Int_t itrack);
-  Int_t GetNTracks();
-
-  ClassDef(CbmStsKFSecondaryVertexFinder, 1);
-};
-#endif /* !CBMSTSKFSECONDARYVERTEXFINDER_H */
diff --git a/reco/KF/KF.cmake b/reco/KF/KF.cmake
index 314bff3e0874fa89e54f7af8b77c1ae5a03b01d5..6f17ea7e68a2b1b4af2c1b8179c0084f7b46f204 100644
--- a/reco/KF/KF.cmake
+++ b/reco/KF/KF.cmake
@@ -6,7 +6,6 @@ set(INCLUDE_DIRECTORIES
   ${CMAKE_CURRENT_SOURCE_DIR}
   ${CMAKE_CURRENT_SOURCE_DIR}/Interface
   ${CMAKE_CURRENT_SOURCE_DIR}/ParticleFitter
-  ${CMAKE_CURRENT_SOURCE_DIR}/obsolete
   )
 
 set(SRCS
@@ -17,38 +16,24 @@ set(SRCS
   CbmKFMath.cxx 
   CbmKFPixelMeasurement.cxx 
   CbmKFPrimaryVertexFinder.cxx 
-  CbmKFSecondaryVertexFinder.cxx 
   CbmKFTrackInterface.cxx 
   CbmKFUMeasurement.cxx 
   CbmKFVertexInterface.cxx 
   CbmKfTrackFitter.cxx
   CbmKfFitTracksTask.cxx
 
-  #Interface/CbmEcalTrackExtrapolationKF.cxx
   Interface/CbmKFStsHit.cxx 
   Interface/CbmKFTrack.cxx 
-  Interface/CbmKFTrdHit.cxx 
-  Interface/CbmKFTofHit.cxx 
+  Interface/CbmKFVertex.cxx 
   Interface/CbmPVFinderKF.cxx 
   Interface/CbmPVFinderKFGlobal.cxx 
-  Interface/CbmStsFitPerformanceTask.cxx 
   Interface/CbmStsKFTrackFitter.cxx 
-  Interface/CbmStsKFSecondaryVertexFinder.cxx 
-  Interface/CbmGlobalTrackFitterKF.cxx
   # CbmKFParticleInterface.cxx
   #CbmKFParticleFinder.cxx
   #CbmKFParticleFinderPID.cxx
   #CbmKFParticleFinderQa.cxx
   #CbmKFParticleInterface.cxx
   ParticleFitter/CbmL1PFFitter.cxx
-  ParticleFitter/CbmL1PFMCParticle.cxx
-  obsolete/CbmL1TrackMerger.cxx
-  obsolete/CbmL1TofMerger.cxx
-  obsolete/CbmL1TrdTracklet.cxx
-  obsolete/CbmL1TrdTracklet4.cxx
- # obsolete/CbmL1TrdTrackFinderSts.cxx
- # obsolete/CbmL1CATrdTrackFinderSA.cxx
- 
   )
 
 
diff --git a/reco/KF/KFLinkDef.h b/reco/KF/KFLinkDef.h
index 4bb0668b28f3421f3b136b118ba4100a5d27c08e..9e60f8c556cc964ea28328f0984dac7599555f11 100644
--- a/reco/KF/KFLinkDef.h
+++ b/reco/KF/KFLinkDef.h
@@ -9,14 +9,11 @@
 #pragma link off all functions;
 
 #pragma link C++ class CbmKF + ;
-#pragma link C++ class CbmKFSecondaryVertexFinder + ;
 #pragma link C++ class CbmKFPrimaryVertexFinder + ;
 #pragma link C++ class CbmKFMath + ;
 #pragma link C++ class CbmKFFieldMath + ;
 #pragma link C++ class CbmKFHit + ;
 #pragma link C++ class CbmKFStsHit + ;
-#pragma link C++ class CbmKFTrdHit + ;
-#pragma link C++ class CbmKFTofHit + ;
 #pragma link C++ class CbmKFUMeasurement + ;
 #pragma link C++ class CbmKFPixelMeasurement + ;
 #pragma link C++ class CbmKFTrackInterface + ;
@@ -29,20 +26,10 @@
 #pragma link C++ class CbmKFWall + ;
 #pragma link C++ class CbmKFCone + ;
 #pragma link C++ class CbmStsKFTrackFitter + ;
-#pragma link C++ class CbmStsKFSecondaryVertexFinder + ;
 #pragma link C++ class CbmPVFinderKF + ;
 #pragma link C++ class CbmPVFinderKFGlobal + ;
-#pragma link C++ class CbmStsFitPerformanceTask + ;
-//#pragma link C++ class  CbmEcalTrackExtrapolationKF+;
-#pragma link C++ class CbmGlobalTrackFitterKF + ;
-#pragma link C++ class CbmL1TrackMerger + ;
-#pragma link C++ class CbmL1TofMerger + ;
-#pragma link C++ class CbmL1TrdTracklet + ;
-#pragma link C++ class CbmL1TrdTracklet4 + ;
 #pragma link C++ class CbmKfTrackFitter + ;
 #pragma link C++ class CbmKfFitTracksTask + ;
-//#pragma link C++ class  CbmL1TrdTrackFinderSts+;
-//#pragma link C++ class  CbmL1CATrdTrackFinderSA+;
 
 //#pragma link C++ class CbmTrackingDetectorInterfaceInit + ;
 //KFQA
diff --git a/reco/KF/ParticleFitter/CbmL1PFMCParticle.cxx b/reco/KF/ParticleFitter/CbmL1PFMCParticle.cxx
deleted file mode 100644
index ea379965c9e6ca5803acb87a39ebef668a802618..0000000000000000000000000000000000000000
--- a/reco/KF/ParticleFitter/CbmL1PFMCParticle.cxx
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Copyright (C) 2011 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Maksym Zyzak [committer] */
-
-/*
- *=====================================================
- *
- *  CBM Level 1 Reconstruction
- *
- *  Authors: M.Zyzak
- *
- *  e-mail :
- *
- *=====================================================
- *
- *  Finds Particles: Lambdas, K0
- *
- */
-
-#include "CbmL1PFMCParticle.h"
-
-#include "CbmL1MCTrack.h"
diff --git a/reco/KF/ParticleFitter/CbmL1PFMCParticle.h b/reco/KF/ParticleFitter/CbmL1PFMCParticle.h
deleted file mode 100644
index a67586210356b9410adcf441492c2dcb226f3194..0000000000000000000000000000000000000000
--- a/reco/KF/ParticleFitter/CbmL1PFMCParticle.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright (C) 2011-2017 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Maksym Zyzak [committer] */
-
-/*
- *=====================================================
- *
- *  CBM Level 1 Reconstruction
- *
- *  Authors: M.Zyzak
- *
- *  e-mail :
- *
- *=====================================================
- *
- *  Finds Particles: Lambdas, K0
- *
- */
-
-#ifndef _CbmL1PFMCParticle_h_
-#define _CbmL1PFMCParticle_h_
-
-#include "TObject.h"
-
-#include <vector>
-using std::vector;
-
-class CbmL1MCTrack;
-
-struct McVector {
-  vector<CbmL1MCTrack*> mcTracks;
-};
-
-struct McTrackFind {
-  CbmL1MCTrack* mcTrack;
-  int vNumber;
-};
-
-
-#endif
diff --git a/reco/KF/obsolete/CbmL1CATrdTrackFinderSA.cxx b/reco/KF/obsolete/CbmL1CATrdTrackFinderSA.cxx
deleted file mode 100644
index e23fb2fb58cdbbd9c5ef473146e2833bcbc21f0a..0000000000000000000000000000000000000000
--- a/reco/KF/obsolete/CbmL1CATrdTrackFinderSA.cxx
+++ /dev/null
@@ -1,3153 +0,0 @@
-/* Copyright (C) 2006-2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Sergey Gorbunov, Denis Bertini [committer] */
-
-// -----------------------------------------------------------------------
-// -----                    CbmL1CATrdTrackFinderSA                  -----
-// -----            Created 2/12/2006  by A. Bubak & M. Krauze       -----
-// -----------------------------------------------------------------------
-
-#include "CbmL1CATrdTrackFinderSA.h"
-
-#include "CbmGeoTrdPar.h"
-#include "CbmKF.h"
-#include "CbmKFTrack.h"
-#include "CbmKFTrdHit.h"
-#include "CbmL1.h"
-#include "CbmL1TrdTracklet.h"
-#include "CbmL1TrdTracklet4.h"
-#include "CbmMCTrack.h"
-#include "CbmStsTrack.h"
-#include "CbmTrdHit.h"
-#include "CbmTrdPoint.h"
-#include "CbmTrdTrack.h"
-#include "CbmTrdTrackFitterKF.h"
-#include "CbmVertex.h"
-#include "FairBaseParSet.h"
-#include "FairDetector.h"
-#include "FairGeoNode.h"
-#include "FairMCPoint.h"
-#include "FairRootManager.h"
-#include "FairRunAna.h"
-#include "FairRuntimeDb.h"
-#include "L1Def.h"
-#include "TClonesArray.h"
-#include "TH1F.h"
-#include "TH2F.h"
-#include "TLinearFitter.h"
-
-#include <cmath>
-#include <iostream>
-#include <list>
-#include <map>
-#include <vector>
-
-using std::cout;
-using std::endl;
-using std::fabs;
-using std::map;
-using std::pair;
-using std::set;
-using std::vector;
-
-//#include "L1CATrdDraw.h"
-
-ClassImp(CbmL1CATrdTrackFinderSA);
-
-
-CbmL1CATrdTrackFinderSA* CbmL1CATrdTrackFinderSA::fInstance = 0;
-
-// ----------------------- Default constructor ---------------------------
-CbmL1CATrdTrackFinderSA::CbmL1CATrdTrackFinderSA()
-  : geoLayer()
-  , fNTrdHits(0)
-  , fNoTrdStations(0)
-  , fNoTrdPerStation(0)
-  , planeHits()
-  , fivTrdHitArr()
-  , fArrayTrdHit(new TClonesArray("CbmTrdHit"))
-  , fArrayTrdTrack(new TClonesArray("CbmTrdTrack"))
-  , TrdPar(0)
-  , fEvents(0)
-  , fNofEvents(0)
-  , fMCTrackArray(0)
-  , fMCPointArray(0)
-  , trdTrackFitterKF(new CbmTrdTrackFitterKF(1, 11))
-  , fVerbose(1)
-  ,
-
-  fvTempArray()
-  , fvFoundTracks()
-  , tempTrack()
-  ,
-
-  iStation1()
-  , iStation2()
-  , fImapSt1()
-  , fImapSt2()
-  , itTrackletsLeft()
-  , itTrackletsRight()
-  ,
-
-  iHitMap1(0)
-  , iHitMap2(0)
-  , iHitMapY1(0)
-  , iHitMapY2(0)
-  , fTrd13_Z(0)
-  , fTrd14_Z(0)
-  , fTrd21_Z(0)
-  , fTrd24_Z(0)
-  , fTrd31_Z(0)
-  , fKfTrack(0)
-  , createSegments()
-  , findNeighbour()
-  , createSPs()
-  , createSPs_SL()
-  , sortSPs()
-  , doFind()
-  , sortHits()
-  , tagTracks()
-  , createTracks()
-  , selectTracks()
-  , delTime()
-  , secondLoopTime()
-  , refittingKF()
-  , thirdLoopTime()
-  , totCreateSegments(0)
-  , totFindNeighbour(0)
-  , totCreateSPs(0)
-  , totCreateSPs_SL(0)
-  , totSortSPs(0)
-  , totDoFind(0)
-  , totSortHits(0)
-  , totTagTracks(0)
-  , totCreateTracks(0)
-  , totDelTime(0)
-  , totSecondLoopTime(0)
-  , totThirdLoopTime(0)
-  , totSelectTracks(0)
-  , totRefittingKF(0)
-  , fh_chi2hit(0)
-  , fh_chi2hit_plane(0)
-  , fDistLongX(0)
-  , fDistLongY(0)
-  , fDistShortX(0)
-  , fDistShortY(0)
-  , fDistLongBX(0)
-  , fDistLongBY(0)
-  , fDistShortBX(0)
-  , fDistShortBY(0)
-  , fDistY12(0)
-  , fMomDistLongPrimaryX(0)
-  , fMomDistLongPrimaryY(0)
-  , fMomDistLongExtraX(0)
-  , fMomDistLongExtraY(0)
-  , fMomDistExtrapolPrimaryX(0)
-  , fMomDistExtrapolPrimaryY(0)
-  , fMomDistExtrapolExtraX(0)
-  , fMomDistExtrapolExtraY(0)
-  , fMomDistShortPrimaryX(0)
-  , fMomDistShortPrimaryY(0)
-  , fMomDistShortExtraX(0)
-  , fMomDistShortExtraY(0)
-  , fDistY(0)
-  , fDistX(0)
-  , fPlane1Ydens(0)
-  , fPlane5Ydens(0)
-  , fPlane9Ydens(0)
-  , fSPlength(0)
-  , fSPlengthMC(0)
-  , fYat0(0)
-  , fYat0MC(0)
-  , fNoEvTime(0)
-  , fh_SP_xDiff_MC(0)
-  , fh_SP_yDiff_MC(0)
-  , fh_SP_xDiff_nMC(0)
-  , fh_SP_yDiff_nMC(0)
-  , fUsedHitsPerPlane(0)
-  , fUnUsedHitsPerPlane(0)
-  , fRUsedHits()
-  , fRUnUsedHits()
-  , fTotHits()
-{
-  if (!fInstance) fInstance = this;
-}
-// -----------------------------------------------------------------------
-
-// --------------------------- Destructor --------------------------------
-CbmL1CATrdTrackFinderSA::~CbmL1CATrdTrackFinderSA()
-{
-  delete fArrayTrdHit;
-  delete fArrayTrdTrack;
-  delete trdTrackFitterKF;
-  //  delete fKfTrack;
-  if (fInstance == this) fInstance = 0;
-}
-// -----------------------------------------------------------------------
-
-
-// ------------------------- Initialisation ------------------------------
-void CbmL1CATrdTrackFinderSA::Init()
-{
-  // Create histogramms
-  CreateHistogramms();
-  // Activate data branches
-  DataBranches();
-
-  FairRootManager* ioman = FairRootManager::Instance();
-  if (!ioman) {
-    cout << "-E- CbmL1CATrdTrackFinderSA::Init: "
-         << "RootManager not instantised!" << endl;
-    return;
-  }
-
-  // Get MCTrack array
-  fMCTrackArray = L1_DYNAMIC_CAST<TClonesArray*>(ioman->GetObject("MCTrack"));
-  if (!fMCTrackArray) {
-    cout << "-E- CbmL1CATrdTrackFinderSA::Init: No MCTrack array!" << endl;
-    return;
-  }
-
-  // Get MCPoint array
-  fMCPointArray = L1_DYNAMIC_CAST<TClonesArray*>(ioman->GetObject("TrdPoint"));
-  if (!fMCPointArray) {
-    cout << "-E- CbmL1CATrdTrackFinderSA::Init: No MCPoint array!" << endl;
-    return;
-  }
-
-  // Determine the TRD layout
-  TrdLayout();
-
-  // Init KF Track fitter
-  trdTrackFitterKF->Init();
-}
-// -----------------------------------------------------------------------
-
-
-// -------------------- Algorithm implementation -------------------------
-Int_t CbmL1CATrdTrackFinderSA::DoFind(TClonesArray* hitArray, TClonesArray* trackArray)
-{
-
-#ifdef DRAW
-  InitL1Draw();
-#endif
-
-  fArrayTrdHit   = hitArray;
-  fArrayTrdTrack = trackArray;
-
-  fNofEvents++;
-
-  doFind.Start();
-
-  // Initialize control counters
-  //  Int_t nNoTrdPoint  = 0;
-  Int_t nNoTrdHit         = 0;
-  Int_t trdPlaneID        = 0;
-  Int_t ptIndex           = 0;
-  Int_t noHitsPerTracklet = 4;
-
-  // Create pointers to TRD hit and TrdPoint
-  CbmTrdHit* pHit    = NULL;
-  CbmTrdPoint* pMCpt = NULL;
-  //   CbmMCTrack*  pMCtr = NULL;
-
-  //--- Function: CreateSpacePoint --------------------------------------
-  Double_t          //    b
-    sigmaA_FL = 2,  //3 3 3 2.5 2.5
-    sigmaB_FL = 2,  //3 3 3 2.5 2.5
-    sigmaA_SL = 3,  //4 4 4 3   3
-    sigmaB_SL = 3,  //4 4 4 3   3
-    sigmaA_TL = 4,  //4 4 4 4   4
-    sigmaB_TL = 4;  //4 4 4 4   4
-  //--- Function: CreateSegments; Data from MC, look inside function ----
-  Double_t dY_FL = 0.3,  //0.5 0.5 0.5 0.4 0.4
-    dX_FL        = 0.3,  //0.5 0.5 0.5 0.4 0.4
-    dY_SL        = 0.5,  //0.7 0.6 0.8 0.6 0.6
-    dX_SL        = 0.5,  //0.8 0.8 0.8 0.6 0.6
-    dY_TL        = 0.7,  //0.7 0.6 0.8 0.7 0.8
-    dX_TL        = 0.7;  //0.8 0.8 0.8 0.7 0.8
-
-  //--- Function: FindNeighbour ------------------------------------------
-  //distance from Y-propagated point, around which we look for neighbours
-  Double_t distPropLongY_FL = 2.5,  //3 3 3 3 2
-    distPropLongX_FL        = 2.5,  //3 3 3 3 2
-    distPropLongY_SL        = 3,    //4 4 4 3 3
-    distPropLongX_SL        = 3,    //8 6 8 3 3
-    distPropLongY_TL        = 4,    //4 4 4 3 4
-    distPropLongX_TL        = 4;    //8 6 8 3 4
-
-  //----------------------------------------------------------------------
-  Bool_t competition    = true;
-  Bool_t removeUsedHits = true;
-  Bool_t secondLoop     = true;
-  Bool_t thirdLoop      = true;
-  Int_t segment         = 0;  //0 = long tracks, 1 = segments only
-  //Int_t  nrLoop         = 1;
-
-  //---- Simulate detector inefficiency -----------------------------------
-  Int_t accept = 100;
-  set<Int_t> globalSetRejectedHits;
-  globalSetRejectedHits.clear();
-  //----------------------------------------------------------------------
-
-
-  sortHits.Start();
-  //--- hit sorting procedure ------------------------------------------------
-  Int_t nTrdHit = hitArray->GetEntriesFast();
-  for (Int_t iHit = 0; iHit < nTrdHit; iHit++) {
-    // Loop over hits. Get corresponding MCPoint and MCTrack index
-    pHit = L1_DYNAMIC_CAST<CbmTrdHit*>(hitArray->At(iHit));
-
-    if (!Rejection(accept)) {
-      // Simulate detector inefficiency
-      globalSetRejectedHits.insert(iHit);
-      continue;
-    }
-    if (!pHit) {
-      cout << "-E- CbmL1CATrdTrackFinderSA::DoFind: Empty slot "
-           << "in HitArray at position " << iHit << endl;
-      nNoTrdHit++;
-      continue;
-    }
-
-    ptIndex = pHit->GetRefId();
-    //if (ptIndex < 0) continue;           // fake or background hit
-    pMCpt = L1_DYNAMIC_CAST<CbmTrdPoint*>(fMCPointArray->At(ptIndex));
-    //if (!pMCpt) {
-    //  nNoTrdPoint++;
-    //  continue;
-    //}
-    //     pMCtr = L1_DYNAMIC_CAST<CbmMCTrack*>(fMCTrackArray->At(pMCpt->GetTrackID()));
-    //if ( ! pMCtr ) continue;
-
-    trdPlaneID        = pHit->GetPlaneId();
-    Int_t trdPlaneIDN = trdPlaneID - 1;
-
-    planeHits.mcTrackID = pMCpt->GetTrackID();
-    planeHits.hitIndex  = iHit;
-    planeHits.X         = pHit->GetX();
-    planeHits.Y         = pHit->GetY();
-    planeHits.Z         = pHit->GetZ();
-    planeHits.DX        = pHit->GetDx();
-    planeHits.DY        = pHit->GetDy();
-    planeHits.planeID   = trdPlaneID;
-    fvTrdHitArr[trdPlaneIDN].push_back(planeHits);
-
-    //    cout << "geoLayer: " <<geoLayer.Y[trdPlaneID] <<", "<< geoLayer.Z[trdPlaneID] << endl;
-    //ptIndex = pHit->GetRefIndex();
-    //pMCpt = (CbmTrdPoint*) (fMCPointArray->At(ptIndex));
-
-    //planeHits.hitIndex = ptIndex;
-    //planeHits.X  = pMCpt->GetX();
-    //planeHits.Y  = pMCpt->GetY();
-    //planeHits.Z  = pMCpt->GetZ();
-    //planeHits.DX = 0;
-    //planeHits.DY = 0;;
-    //fvTrdPointArr[trdPlaneIDN].push_back(planeHits);
-  }
-
-  for (Int_t i = 0; i < 12; i++) {
-    sort(fvTrdHitArr[i].begin(), fvTrdHitArr[i].end(), CompareY);
-  }
-
-  /*
-  //-----------------------------------------------------------
-  vector <LayerWithHits>::iterator ivT;
-  LayerWithHits pl;
-  for(ivT = fvTrdHitArr[0].begin();
-  ivT != fvTrdHitArr[0].end();
-  ivT++){
-  pl = (*ivT);
-  cout <<"(X:Y) "<<pl.X<<"\t"<< pl.Y << endl;
-  fPlane1Ydens->Fill(pl.Y);
-  }
-
-  for(ivT = fvTrdHitArr[5].begin();
-  ivT != fvTrdHitArr[5].end();
-  ivT++){
-  pl = (*ivT);
-  //    cout << pl.Y << endl;
-  fPlane5Ydens->Fill(pl.Y);
-  }
-  for(ivT = fvTrdHitArr[9].begin();
-  ivT != fvTrdHitArr[9].end();
-  ivT++){
-  pl = (*ivT);
-  //    cout << pl.Y << endl;
-  fPlane9Ydens->Fill(pl.Y);
-  }
-  //-----------------------------------------------------------
-  */
-  sortHits.Stop();
-
-  if (fVerbose > 2) {
-    cout << "-I- CbmL1CATrdTrackFinderSA::DoFind " << endl;
-    for (Int_t i = 0; i < 12; i++) {
-      cout << " Size of vector " << i << ": " << fvTrdHitArr[i].size() << endl;
-    }
-  }
-
-  //create vectors that will hold the tracklet (4-hit) objects
-  vector<CbmL1TrdTracklet4*> clTracklets[3];
-  vector<CbmL1TrdTracklet4*> clTrackletsNew[3];
-
-  //create vectors that will hold the mini-tracklet (2-hit) objects - Space Points
-  vector<CbmL1TrdTracklet*> clSpacePoints[6];
-
-  if (noHitsPerTracklet == 4) {  //noHitsPerTracklet == 4
-    //------ creation of mini tracklet 1-2 -------------------------------------
-    cout << endl
-         << "-I- CbmL1CATrdTrackFinderSA::DoFind " << endl
-         << "--------------------------------------------------" << endl
-         << "     ### Start creation of Space Points" << endl
-         << "--------------------------------------------------" << endl;
-
-    createSPs.Start();
-    for (Int_t i = 0, j = 0; i < 6; i++, j = j + 2) {
-      CreateSpacePoints(fvTrdHitArr[j], fvTrdHitArr[j + 1], clSpacePoints[i], sigmaA_FL, sigmaB_FL);
-    }
-    createSPs.Stop();
-
-    //------- Sorting spacepoints -------------------------------------------------
-    sortSPs.Start();
-    for (Int_t i = 0; i < 6; i++) {
-      sort(clSpacePoints[i].begin(), clSpacePoints[i].end(), CbmL1TrdTracklet::Compare1);
-    }
-    sortSPs.Stop();
-
-    // --------------- Creation tracklet from 4 space points ----------------
-    cout << endl
-         << "-I- CbmL1CATrdTrackFinderSA::DoFind " << endl
-         << "--------------------------------------------------" << endl
-         << "     ### Start creation tracklets" << endl
-         << "--------------------------------------------------" << endl;
-    createSegments.Start();
-    //joining SP together to create 4-hit tracklets
-    for (Int_t i = 0, j = 0; i < 3; i++, j = j + 2) {
-      CreateSegments(clSpacePoints[j], clSpacePoints[j + 1], clTracklets[i], dX_FL, dY_FL);
-    }
-    createSegments.Stop();
-
-    //--- TESTING -------------------------------
-    /* How many segments have 4 hits belonging to the same track (has the same trackID)*/
-    /*
-      vector<CbmL1TrdTracklet4*>::iterator itclTrackletsRight;
-      vector<CbmL1TrdTracklet4*>::iterator iTrackletT;
-      Int_t iSumSegment = 0;
-      CbmTrdHit *trdHit;
-      CbmTrdPoint* trdPoint;
-
-      for(int i = 0; i < 3; i++){
-      Double_t clSegmentSize = clTracklets[i].size();
-      cout <<"Tracklet size: "<< clSegmentSize << endl;
-      iSumSegment = 0;
-
-      for(iTrackletT  = clTracklets[i].begin();
-      iTrackletT != clTracklets[i].end();
-      iTrackletT++){
-
-      Int_t k = 0;
-      Int_t Ind0 = (*iTrackletT)->GetInd(0);
-      trdHit = L1_DYNAMIC_CAST<CbmTrdHit*>(  hitArray->At(Ind0);
-      trdPoint = (CbmTrdPoint*) fMCPointArray->At(trdHit->GetRefIndex());
-      Double_t trackID1 = trdPoint->GetTrackID();
-
-      for(int iw = 1; iw < 4; iw++){
-      Int_t Ind1 = (*iTrackletT)->GetInd(iw);
-      trdHit = L1_DYNAMIC_CAST<CbmTrdHit*>(  hitArray->At(Ind1);
-      trdPoint = (CbmTrdPoint*) fMCPointArray->At(trdHit->GetRefIndex());
-      Double_t trackID2 = trdPoint->GetTrackID();
-
-      if(trackID1 == trackID2) k++;
-      }
-      if(k == 3){
-      iSumSegment++;
-      }
-      }
-
-      Double_t sumSegmentWith4 = (iSumSegment*100)/clSegmentSize;
-      //printf("(size %f, %i, %f)\n", clSegmentSize, iSumSegment, sumSegmentWith4);
-      }
-      //---------------------------------------------
-      */
-
-    //---------- BEGIN: Find friend ------------------------------------------------
-    findNeighbour.Start();
-
-    cout << "--- Finding neighbour 14-58" << endl;
-    FindNeighbour(clTracklets[0], clTracklets[1], distPropLongX_FL, distPropLongY_FL);
-
-    cout << "--- Finding neighbour 58-912" << endl;
-    FindNeighbour(clTracklets[1], clTracklets[2], distPropLongX_FL, distPropLongY_FL);
-
-    findNeighbour.Stop();
-
-  }  //end of noHitsPerTracklet == 4
-
-  //###################################################################################################
-
-
-  cout << endl
-       << "-I- CbmL1CATrdTrackFinderSA::DoFind " << endl
-       << "--------------------------------------------------" << endl
-       << "     ### (FL) in Event No. " << fNofEvents << " ###" << endl
-       << "--------------------------------------------------" << endl;
-
-  if (fVerbose > 2) {
-    cout << "size of segment vector 14 = " << clTracklets[0].size() << endl
-         << "size of segment vector 58 = " << clTracklets[1].size() << endl
-         << "size of segment vector 912 = " << clTracklets[2].size() << endl;
-  }
-
-  if (fVerbose > 1)
-    cout << "-I- CbmL1CATrdTrackFinderSA::DoFind " << endl
-         << "Tracklet finding phase completed." << endl
-         << "Now constructing tracks from tracklets..." << endl;
-
-
-  tagTracks.Start();
-
-  if (noHitsPerTracklet == 4) {  //noHitsPerTracklet == 4
-    //BEGIN: Tagging procedure ------------------------------------------------------
-    cout << endl
-         << "-I- CbmL1CATrdTrackFinderSA::DoFind " << endl
-         << "--------------------------------------------------" << endl
-         << "     ### Starting tagging procedure" << endl
-         << "--------------------------------------------------" << endl;
-
-    TagSegments(clTracklets[1], clTracklets[2], 1);
-    cout << "--- Tagging 58-921 done." << endl;
-
-    TagSegments(clTracklets[0], clTracklets[1], 0);
-    cout << "--- Tagging 14-58 done." << endl;
-  }  //end of noHitsPerTracklet == 4
-
-  tagTracks.Stop();
-  //-------------------------------------------------------------------------
-
-
-  //--------------------------------------------------------------------------------------
-  //    Counting number of segments which have a value of 4, 3, 2, ... etc.
-  CbmL1TrdTracklet4* clSegRight;  //segment nearer to the target
-
-  map<Int_t, Int_t> segValues14;
-  map<Int_t, Int_t> segValues58;
-  map<Int_t, Int_t> segValues912;
-  Int_t segValue;
-
-  vector<CbmL1TrdTracklet4*>::iterator itclTrackletsRight;
-  //for tracklets in the 1st station
-  for (itclTrackletsRight = clTracklets[0].begin(); itclTrackletsRight != clTracklets[0].end(); itclTrackletsRight++) {
-
-    clSegRight = *itclTrackletsRight;
-    segValue   = clSegRight->GetVal();
-    segValues14[segValue]++;
-    if (segValue == 3) clTrackletsNew[0].push_back(clSegRight);
-  }
-
-  //for tracklets in the 2nd station
-  for (itclTrackletsRight = clTracklets[1].begin(); itclTrackletsRight != clTracklets[1].end(); itclTrackletsRight++) {
-
-    clSegRight = *itclTrackletsRight;
-    segValue   = clSegRight->GetVal();
-    segValues58[segValue]++;
-    if (segValue == 2) clTrackletsNew[1].push_back(clSegRight);
-  }
-
-  //for tracklets in the 3rd station
-  for (itclTrackletsRight = clTracklets[2].begin(); itclTrackletsRight != clTracklets[2].end(); itclTrackletsRight++) {
-
-    clSegRight = *itclTrackletsRight;
-    segValue   = clSegRight->GetVal();
-    segValues912[segValue]++;
-    if (segValue == 1) clTrackletsNew[2].push_back(clSegRight);
-  }
-
-  //--- For test only ----------------------------------------------------
-  if (fVerbose > 0) {
-    map<Int_t, Int_t>::iterator mIt;
-
-    cout << "--- Map no. 14 has: " << endl;
-    for (mIt = segValues14.begin(); mIt != segValues14.end(); mIt++) {
-      cout << mIt->first << " segment has a count of " << mIt->second << endl;
-    }
-
-    cout << "--- Map no. 58 has: " << endl;
-    for (mIt = segValues58.begin(); mIt != segValues58.end(); mIt++) {
-      cout << mIt->first << " segment has a count of " << mIt->second << endl;
-    }
-
-    cout << "--- Map no. 912 has: " << endl;
-    for (mIt = segValues912.begin(); mIt != segValues912.end(); mIt++) {
-      cout << mIt->first << " segment has a count of " << mIt->second << endl;
-    }
-
-    cout << endl;
-  }
-  //-------------------------------------------------------------------------
-
-  //vector<CbmTrdTrack*> vTrdTrackCand;
-  //vector<CbmTrdTrack*> vTempTrdTrackCand;
-  //vector<CbmTrdTrack*>::iterator ivTempTrdTrackCand;
-  //vector<CbmTrdTrack*> trackCand1;
-
-  cout << "--------------------------------------------------" << endl
-       << "   ### Starting creating the tracks               " << endl
-       << "--------------------------------------------------" << endl;
-
-  createTracks.Start();
-
-  set<Int_t> globalSetUsedHits;
-  globalSetUsedHits.clear();
-
-  if (segment == 0) {  //segment == 0 -> we create long tracks
-
-    if (fVerbose > 2) {
-      cout << "Outer area: " << endl
-           << "--- size of fArrayTrdTrack    = " << fArrayTrdTrack->GetEntriesFast() << endl
-           << "--- size of globalSetUsedHits = " << globalSetUsedHits.size() << endl;
-    }
-
-    //create long tracks from 3 sorts of tracklets - station 1,2,3
-    CreateTracks(clTracklets[0], clTracklets[1], clTracklets[2], globalSetUsedHits, removeUsedHits, competition, 1);
-
-    createTracks.Stop();
-
-    //clearing and removing objects that are not needed anymore
-    for (Int_t i = 0; i < 3; i++) {
-      DeleteTracklets(clTracklets[i]);
-      clTracklets[i].clear();
-    }
-    //----------------------------------------------------
-
-    for (Int_t i = 0; i < 6; i++) {
-      DeleteTracklets(clSpacePoints[i]);
-      clSpacePoints[i].clear();
-    }
-
-    //--- [Second Loop] ------------------------------------------------------
-    secondLoopTime.Start();
-
-    cout << endl
-         << "-I- CbmL1CATrdTrackFinderSA::DoFind (Second loop)" << endl
-         << "--------------------------------------------------" << endl
-         << "     ### (SL) in Event No. " << fNofEvents << " ###" << endl
-         << "--------------------------------------------------" << endl;
-
-    if (secondLoop) {
-
-      for (Int_t i = 0; i < 12; i++) {
-        fvTrdHitArr[i].clear();
-      }
-
-      set<Int_t>::iterator iglobalSetUsedHits;
-      set<Int_t>::iterator iglobalSetRejectedHits;
-
-      for (Int_t iHit = 0; iHit < nTrdHit; iHit++) {
-        pHit = L1_DYNAMIC_CAST<CbmTrdHit*>(hitArray->At(iHit));
-
-        //	if(!Rejection(accept)) continue;
-
-        if (!pHit) {
-          cout << "-E- CbmL1CATrdTrackFinderSA::DoFind: Empty slot "
-               << "in HitArray at position " << iHit << endl;
-          nNoTrdHit++;
-          continue;
-        }
-
-        //---- Simulate detector inefficiency -----------------------------------
-        iglobalSetRejectedHits = globalSetRejectedHits.find(iHit);
-        if (iglobalSetRejectedHits != globalSetRejectedHits.end()) continue;
-        //----------------------------------------------------------------------
-
-        iglobalSetUsedHits = globalSetUsedHits.find(iHit);
-        if (iglobalSetUsedHits != globalSetUsedHits.end()) continue;
-
-        trdPlaneID        = pHit->GetPlaneId();
-        Int_t trdPlaneIDN = trdPlaneID - 1;
-
-        planeHits.mcTrackID = pMCpt->GetTrackID();
-        planeHits.hitIndex  = iHit;
-        planeHits.X         = pHit->GetX();
-        planeHits.Y         = pHit->GetY();
-        planeHits.Z         = pHit->GetZ();
-        planeHits.DX        = pHit->GetDx();
-        planeHits.DY        = pHit->GetDy();
-        fvTrdHitArr[trdPlaneIDN].push_back(planeHits);
-      }
-
-      for (Int_t i = 0; i < 12; i++) {
-        sort(fvTrdHitArr[i].begin(), fvTrdHitArr[i].end(), CompareY);
-      }
-
-      //for(Int_t i = 0; i < 12; i++){
-      // cout <<" Size of vector "<< i <<": "<< fvTrdHitArr[i].size() << endl;
-      //}
-      //--------------------------------------------------------------------------------------
-
-      createSPs_SL.Start();
-
-      //performing second step - make all previous tasks but with less restrictive conditions
-      cout << "[Second Loop]::Creating space points" << endl;
-
-      for (Int_t i = 0, j = 0; i < 6; i++, j = j + 2) {
-        CreateSpacePoints(fvTrdHitArr[j], fvTrdHitArr[j + 1], clSpacePoints[i], sigmaA_SL, sigmaB_SL);
-      }
-      createSPs_SL.Stop();
-
-      for (Int_t i = 0; i < 6; i++) {
-        sort(clSpacePoints[i].begin(), clSpacePoints[i].end(), CbmL1TrdTracklet::Compare1);
-      }
-
-      cout << "[Second Loop]::Creating tracklets" << endl;
-      for (Int_t i = 0, j = 0; i < 3; i++, j = j + 2) {
-        CreateSegments(clSpacePoints[j], clSpacePoints[j + 1], clTracklets[i], dX_SL, dY_SL);
-      }
-
-      if (fVerbose > 2) {
-        cout << "--- size of segment vector 14 = " << clTracklets[0].size() << endl
-             << "--- size of segment vector 58 = " << clTracklets[1].size() << endl
-             << "--- size of segment vector 912 = " << clTracklets[2].size() << endl;
-      }
-
-      cout << "[Second Loop]::Finding friends 14-58" << endl;
-      FindNeighbour(clTracklets[0], clTracklets[1], distPropLongX_SL, distPropLongY_SL);
-
-      cout << "[Second Loop]::Finding friends 58-912" << endl;
-      FindNeighbour(clTracklets[1], clTracklets[2], distPropLongX_SL, distPropLongY_SL);
-
-      cout << "[Second Loop]::Tagging segments 58-912" << endl;
-      TagSegments(clTracklets[1], clTracklets[2], 1);
-
-      //--------------------------------------------------------------------------------------------
-      cout << "[Second Loop]::Tagging segments 14-58" << endl;
-      TagSegments(clTracklets[0], clTracklets[1], 0);
-
-      //--------------------------------------------------------------------------------------------
-      cout << "[Second Loop]::Creating tracks" << endl;
-      CreateTracks(clTracklets[0], clTracklets[1], clTracklets[2], globalSetUsedHits, removeUsedHits, competition, 2);
-      //competition -> selects the best track candidate from each branch
-    }
-
-    for (Int_t i = 0; i < 3; i++) {
-      DeleteTracklets(clTracklets[i]);
-      clTracklets[i].clear();
-    }
-    for (Int_t i = 0; i < 6; i++) {
-      DeleteTracklets(clSpacePoints[i]);
-      clSpacePoints[i].clear();
-    }
-
-    secondLoopTime.Stop();
-
-    thirdLoopTime.Start();
-
-    cout << endl
-         << "-I- CbmL1CATrdTrackFinderSA::DoFind (Third loop)" << endl
-         << "--------------------------------------------------" << endl
-         << "     ### (TL) in Event No. " << fNofEvents << " ###" << endl
-         << "--------------------------------------------------" << endl;
-
-    if (thirdLoop) {
-
-      for (Int_t i = 0; i < 12; i++) {
-        fvTrdHitArr[i].clear();
-      }
-
-      set<Int_t>::iterator iglobalSetUsedHits;
-      set<Int_t>::iterator iglobalSetRejectedHits;
-
-      for (Int_t iHit = 0; iHit < nTrdHit; iHit++) {
-        pHit = L1_DYNAMIC_CAST<CbmTrdHit*>(hitArray->At(iHit));
-
-        //	if(!Rejection(accept)) continue;
-
-        if (!pHit) {
-          cout << "-E- CbmL1CATrdTrackFinderSA::DoFind: Empty slot "
-               << "in HitArray at position " << iHit << endl;
-          nNoTrdHit++;
-          continue;
-        }
-
-        //---- Simulate detector inefficiency -----------------------------------
-        iglobalSetRejectedHits = globalSetRejectedHits.find(iHit);
-        if (iglobalSetRejectedHits != globalSetRejectedHits.end()) continue;
-        //----------------------------------------------------------------------
-
-        iglobalSetUsedHits = globalSetUsedHits.find(iHit);
-        if (iglobalSetUsedHits != globalSetUsedHits.end()) continue;
-
-        trdPlaneID        = pHit->GetPlaneId();
-        Int_t trdPlaneIDN = trdPlaneID - 1;
-
-        planeHits.mcTrackID = pMCpt->GetTrackID();
-        planeHits.hitIndex  = iHit;
-        planeHits.X         = pHit->GetX();
-        planeHits.Y         = pHit->GetY();
-        planeHits.Z         = pHit->GetZ();
-        planeHits.DX        = pHit->GetDx();
-        planeHits.DY        = pHit->GetDy();
-        fvTrdHitArr[trdPlaneIDN].push_back(planeHits);
-      }
-
-      for (Int_t i = 0; i < 12; i++) {
-        sort(fvTrdHitArr[i].begin(), fvTrdHitArr[i].end(), CompareY);
-      }
-
-      for (Int_t i = 0, j = 0; i < 6; i++, j = j + 2) {
-        CreateSpacePoints(fvTrdHitArr[j], fvTrdHitArr[j + 1], clSpacePoints[i], sigmaA_TL, sigmaB_TL);
-      }
-
-      for (Int_t i = 0; i < 6; i++) {
-        sort(clSpacePoints[i].begin(), clSpacePoints[i].end(), CbmL1TrdTracklet::Compare1);
-      }
-
-      for (Int_t i = 0, j = 0; i < 3; i++, j = j + 2) {
-        CreateSegments(clSpacePoints[j], clSpacePoints[j + 1], clTracklets[i], dX_TL, dY_TL);
-      }
-
-      FindNeighbour(clTracklets[0], clTracklets[1], distPropLongX_TL, distPropLongY_TL);
-      FindNeighbour(clTracklets[1], clTracklets[2], distPropLongX_TL, distPropLongY_TL);
-      TagSegments(clTracklets[1], clTracklets[2], 1);
-
-      TagSegments(clTracklets[0], clTracklets[1], 0);
-
-      CreateTracks(clTracklets[0], clTracklets[1], clTracklets[2], globalSetUsedHits, removeUsedHits, competition, 3);
-    }
-
-    thirdLoopTime.Stop();
-
-  }  //end segment == 0
-
-
-  if (segment == 1) {  //segment == 1 -> we create only 4-hit, 1-segment tracks!
-    CreateAndManageSegments(clTracklets[0], clTracklets[1], clTracklets[2]);
-  }
-
-
-  //------ Used and Unused hists in the TRD's planes ------------------------
-  //------ Histogramming
-  set<Int_t>::iterator iglSetUsedHits;
-  nTrdHit = hitArray->GetEntriesFast();
-
-  for (Int_t iHit = 0; iHit < nTrdHit; iHit++) {
-    pHit = L1_DYNAMIC_CAST<CbmTrdHit*>(hitArray->At(iHit));
-
-    trdPlaneID = pHit->GetPlaneId();
-    fTotHits[trdPlaneID]++;
-
-    iglSetUsedHits = globalSetUsedHits.find(iHit);
-    if (iglSetUsedHits != globalSetUsedHits.end()) {
-      fRUsedHits[trdPlaneID]++;
-      //fUsedHitsPerPlane->Fill(trdPlaneID-1);
-    }
-    else {
-      fRUnUsedHits[trdPlaneID]++;
-      //fUnUsedHitsPerPlane->Fill(trdPlaneID-1);
-    }
-  }
-  //---------------------------------------------------------------------------
-
-
-  cout << endl
-       << "-I- CbmL1CATrdTrackFinderSA::DoFind " << endl
-       << "--------------------------------------------------" << endl
-       << "     ### Summary" << endl
-       << "--------------------------------------------------" << endl
-       << "--- Number of found tracks: " << fArrayTrdTrack->GetEntriesFast() << endl
-       << endl;
-
-  delTime.Start();
-
-  cout << "\n-I- CbmL1CATrdTrackFinderSA::DoFind " << endl
-       << "--------------------------------------------------" << endl
-       << "     ### Delete:Clear" << endl
-       << "--------------------------------------------------" << endl;
-
-  for (Int_t i = 0; i < 12; i++) {
-    fvTrdHitArr[i].clear();
-  }
-
-  //----------------------------------------------------
-  for (Int_t i = 0; i < 3; i++) {
-    DeleteTracklets(clTracklets[i]);
-    clTracklets[i].clear();
-  }
-
-  //----------------------------------------------------
-  for (Int_t i = 0; i < 6; i++) {
-    DeleteTracklets(clSpacePoints[i]);
-    clSpacePoints[i].clear();
-  }
-  //----------------------------------------------------
-
-  //segValues14.clear();
-  //segValues58.clear();
-  //segValues912.clear();
-
-  delTime.Stop();
-  doFind.Stop();
-
-
-  //-------------------------------------------------------
-#ifdef DRAW
-
-  fNTrdHits = hitArray->GetEntriesFast();
-
-  for (Int_t iHit = 0; iHit < fNTrdHits; iHit++) {
-    pHit = L1_DYNAMIC_CAST<CbmTrdHit*>(  hitArray->At(iHit);
-
-    ptIndex = pHit->GetRefIndex();
-    pMCpt = (CbmTrdPoint*) (fMCPointArray->At(ptIndex));
-//     pMCtr = (CbmMCTrack*) fMCTrackArray->At(pMCpt->GetTrackID());
-
-    trdPlaneID = pHit->GetPlaneID();
-    Int_t trdPlaneIDN = trdPlaneID-1;
-
-    planeHits.mcTrackID = pMCpt->GetTrackID();
-    planeHits.hitIndex = iHit;
-    planeHits.X  = pHit->GetX();
-    planeHits.Y  = pHit->GetY();
-    planeHits.Z  = pHit->GetZ();
-    planeHits.DX = pHit->GetDx();
-    planeHits.DY = pHit->GetDy();
-    planeHits.planeID = trdPlaneID;
-    fvTrdHitArr[trdPlaneIDN].push_back(planeHits);
-  }
-
-  Draw2();
-  DrawAsk();
-
-  for (Int_t i = 0; i < 12; i++) {
-    fvTrdHitArr[i].clear();
-  }
-
-#endif
-
-
-  //-------------------------------------------------------
-
-
-  //-----------------------------------------------------------------
-  Double_t rtime;
-  Double_t ctime;
-  Double_t qtime = Double_t(fNofEvents);
-
-  cout << endl
-       << "\n-I- CbmL1CATrdTrackFinderSA::DoFind " << endl
-       << "--------------------------------------------------" << endl
-       << "     ### Time" << endl
-       << "--------------------------------------------------" << endl;
-  cout << "         Do find: ";
-
-  rtime = doFind.RealTime();
-  ctime = doFind.CpuTime();
-  totDoFind += ctime;
-  printf("RealTime=%4.2f s, CpuTime=%4.2f s, TotCpu=%4.2f s, %4.2f/event\n", rtime, ctime, totDoFind,
-         totDoFind / qtime);
-
-  cout << "       Sort Hits: ";
-  rtime = sortHits.RealTime();
-  ctime = sortHits.CpuTime();
-  totSortHits += ctime;
-  printf("RealTime=%4.2f s, CpuTime=%4.2f s, TotCpu=%4.2f s, %4.2f/event\n", rtime, ctime, totSortHits,
-         totSortHits / qtime);
-
-  cout << "      Create SPs: ";
-  rtime = createSPs.RealTime();
-  ctime = createSPs.CpuTime();
-  totCreateSPs += ctime;
-  printf("RealTime=%4.2f s, CpuTime=%4.2f s, TotCpu=%4.2f s, %4.2f/event\n", rtime, ctime, totCreateSPs,
-         totCreateSPs / qtime);
-
-  cout << "        Sort SPs: ";
-  rtime = sortSPs.RealTime();
-  ctime = sortSPs.CpuTime();
-  totSortSPs += ctime;
-  printf("RealTime=%4.2f s, CpuTime=%4.2f s, TotCpu=%4.2f s, %4.2f/event\n", rtime, ctime, totSortSPs,
-         totSortSPs / qtime);
-
-  cout << " Create segments: ";
-  rtime = createSegments.RealTime();
-  ctime = createSegments.CpuTime();
-  totCreateSegments += ctime;
-  printf("RealTime=%4.2f s, CpuTime=%4.2f s, TotCpu=%4.2f s, %4.2f/event\n", rtime, ctime, totCreateSegments,
-         totCreateSegments / qtime);
-
-  cout << "     Find friend: ";
-  rtime = findNeighbour.RealTime();
-  ctime = findNeighbour.CpuTime();
-  totFindNeighbour += ctime;
-  printf("RealTime=%4.2f s, CpuTime=%4.2f s, TotCpu=%4.2f s, %4.2f/event\n", rtime, ctime, totFindNeighbour,
-         totFindNeighbour / qtime);
-
-  cout << "   Tag Tracklets: ";
-  rtime = tagTracks.RealTime();
-  ctime = tagTracks.CpuTime();
-  totTagTracks += ctime;
-  printf("RealTime=%4.2f s, CpuTime=%4.2f s, TotCpu=%4.2f s, %4.2f/event\n", rtime, ctime, totTagTracks,
-         totTagTracks / qtime);
-
-  cout << "   Create Tracks: ";
-  rtime = createTracks.RealTime();
-  ctime = createTracks.CpuTime();
-  totCreateTracks += ctime;
-  printf("RealTime=%4.2f s, CpuTime=%4.2f s, TotCpu=%4.2f s, %4.2f/event\n", rtime, ctime, totCreateTracks,
-         totCreateTracks / qtime);
-
-  cout << "Refitting Tracks: ";
-  rtime = refittingKF.RealTime();
-  ctime = refittingKF.CpuTime();
-  totRefittingKF += ctime;
-  printf("RealTime=%4.2f s, CpuTime=%4.2f s, TotCpu=%4.2f s, %4.2f/event\n", rtime, ctime, totRefittingKF,
-         totRefittingKF / qtime);
-
-  cout << "     Second Loop: ";
-  rtime = secondLoopTime.RealTime();
-  ctime = secondLoopTime.CpuTime();
-  totSecondLoopTime += ctime;
-  printf("RealTime=%4.2f s, CpuTime=%4.2f s, TotCpu=%4.2f s, %4.2f/event\n", rtime, ctime, totSecondLoopTime,
-         totSecondLoopTime / qtime);
-
-  cout << "      Third Loop: ";
-  rtime = thirdLoopTime.RealTime();
-  ctime = thirdLoopTime.CpuTime();
-  totThirdLoopTime += ctime;
-  printf("RealTime=%4.2f s, CpuTime=%4.2f s, TotCpu=%4.2f s, %4.2f/event\n", rtime, ctime, totThirdLoopTime,
-         totThirdLoopTime / qtime);
-
-  cout << "Deleting Objects: ";
-  rtime = delTime.RealTime();
-  ctime = delTime.CpuTime();
-  totDelTime += ctime;
-  printf("RealTime=%4.2f s, CpuTime=%4.2f s, TotCpu=%4.2f s, %4.2f/event\n", rtime, ctime, totDelTime,
-         totDelTime / qtime);
-
-  cout << "[Second Loop]" << endl;
-  cout << "      Create SPs: ";
-  rtime = createSPs_SL.RealTime();
-  ctime = createSPs_SL.CpuTime();
-  totCreateSPs_SL += ctime;
-  printf("RealTime=%4.2f s, CpuTime=%4.2f s, TotCpu=%4.2f s, %4.2f/event\n", rtime, ctime, totCreateSPs_SL,
-         totCreateSPs_SL / qtime);
-
-
-  cout << endl
-       << "-I- CbmL1CATrdTrackFinderSA::DoFind " << endl
-       << "--------------------------------------------------" << endl
-       << "     ### END: Track constructing phase completed" << endl
-       << "--------------------------------------------------" << endl;
-
-  fNoEvTime->Fill(fArrayTrdTrack->GetEntriesFast(), doFind.RealTime());
-
-  return 1;
-}
-// -----------------------------------------------------------------------
-
-void CbmL1CATrdTrackFinderSA::DeleteTracklets(vector<CbmL1TrdTracklet4*> vect)
-{
-
-  vector<CbmL1TrdTracklet4*>::iterator it;
-  for (it = vect.begin(); it != vect.end(); it++) {
-    delete (*it);
-  }
-}
-
-// -----------------------------------------------------------------------
-
-void CbmL1CATrdTrackFinderSA::DeleteTracklets(vector<CbmL1TrdTracklet*> vect)
-{
-  vector<CbmL1TrdTracklet*>::iterator it;
-  for (it = vect.begin(); it != vect.end(); it++) {
-    delete (*it);
-  }
-}
-
-
-// ---------------------- Create histogramms -----------------------------
-void CbmL1CATrdTrackFinderSA::CreateHistogramms()
-{
-
-  fUsedHitsPerPlane   = new TH1F("h_UsedHitsPerPlane", "h_UsedHitsPerPlane", 13, 0, 13);
-  fUnUsedHitsPerPlane = new TH1F("h_UnUsedHitsPerPlane", "h_UnUsedHitsPerPlane", 13, 0, 13);
-
-
-  // Normalized distance to hit
-  fh_chi2hit = new TH1F("h_chi2hit", "Normalized distance to hit", 500, 0., 50.);
-  fh_chi2hit_plane =
-    new TH2F("h_chi2hit_plane", "Normalized distance to hit vs. plane number", 500, 0., 50., 12, 0., 12.);
-
-  fDistLongX  = new TH1F("DistLongX", "DistLongX", 100, -200, 200);
-  fDistLongY  = new TH1F("DistLongY", "DistLongY", 100, -200, 200);
-  fDistShortX = new TH1F("DistShortX", "DistShortX", 100, -10, 10);
-  fDistShortY = new TH1F("DistShortY", "DistShortY", 100, -10, 10);
-
-  fDistLongBX  = new TH1F("DistLongBX", "DistLongBX", 100, -200, 200);
-  fDistLongBY  = new TH1F("DistLongBY", "DistLongBY", 100, -200, 200);
-  fDistShortBX = new TH1F("DistShortBX", "DistShortBX", 100, -200, 200);
-  fDistShortBY = new TH1F("DistShortBY", "DistShortBY", 100, -200, 200);
-
-  fDistY12 = new TH1F("DistY12", "DistY12", 100, -1, 1);
-
-  fMomDistLongPrimaryX     = new TH2F("MomDistLongPrimaryX", "MomDistLongPrimaryX", 100, 0, 10, 100, -30, 30);
-  fMomDistLongPrimaryY     = new TH2F("MomDistLongPrimaryY", "MomDistLongPrimaryY", 100, 0, 10, 100, -30, 30);
-  fMomDistExtrapolPrimaryX = new TH2F("MomDistExtrapolPrimaryX", "MomDistExtrapolPrimaryX", 100, 0, 10, 200, -20, 20);
-  fMomDistExtrapolPrimaryY = new TH2F("MomDistExtrapolPrimaryY", "MomDistExtrapolPrimaryY", 100, 0, 10, 200, -20, 20);
-
-  fMomDistLongExtraX     = new TH2F("MomDistLongExtraX", "MomDistLongExtraX", 100, 0, 10, 100, -30, 30);
-  fMomDistLongExtraY     = new TH2F("MomDistLongExtraY", "MomDistLongExtraY", 100, 0, 10, 100, -30, 30);
-  fMomDistExtrapolExtraX = new TH2F("MomDistExtrapolExtraX", "MomDistExtrapolExtraX", 100, 0, 10, 200, -20, 20);
-  fMomDistExtrapolExtraY = new TH2F("MomDistExtrapolExtraY", "MomDistExtrapolExtraY", 100, 0, 10, 200, -20, 20);
-
-  fMomDistShortPrimaryX = new TH2F("MomDistShortPrimaryX", "MomDistShortPrimaryX", 100, 0, 10, 100, -5, 5);
-  fMomDistShortPrimaryY = new TH2F("MomDistShortPrimaryY", "MomDistShortPrimaryY", 100, 0, 10, 100, -5, 5);
-  fMomDistShortExtraX   = new TH2F("MomDistShortExtraX", "MomDistShortExtraX", 100, 0, 10, 100, -5, 5);
-  fMomDistShortExtraY   = new TH2F("MomDistShortExtraY", "MomDistShortExtraY", 100, 0, 10, 100, -5, 5);
-
-  fDistY = new TH1F("DistY", "DistY", 1000, -10, 10);
-  fDistX = new TH1F("DistX", "DistX", 1000, -10, 10);
-
-  fPlane1Ydens = new TH1F("Plane1Ydens", "Plane1Ydens", 1000, -1000, 1000);
-  fPlane5Ydens = new TH1F("Plane5Ydens", "Plane5Ydens", 1000, -1000, 1000);
-  fPlane9Ydens = new TH1F("Plane9Ydens", "Plane9Ydens", 1000, -1000, 1000);
-
-  fSPlengthMC = new TH1F("SPlengthMC", "SPlengthMC", 200, 0, 20);
-  fSPlength   = new TH1F("SPlength", "SPlength", 200, 0, 20);
-
-  fYat0   = new TH1F("Yat0", "Yat0", 500, -500, 500);
-  fYat0MC = new TH1F("Yat0MC", "Yat0MC", 500, -500, 500);
-
-  fNoEvTime = new TH2F("NoEvTime", "NoEvTime", 1000, 0, 1000, 1000, 0, 5);
-
-  fh_SP_xDiff_MC = new TH1F("fh_SP_xDiff_MC", "fh_SP_xDiff_MC", 400, -20, 20);
-  fh_SP_yDiff_MC = new TH1F("fh_SP_yDiff_MC", "fh_SP_yDiff_MC", 400, -20, 20);
-
-  fh_SP_xDiff_nMC = new TH1F("fh_SP_xDiff_nMC", "fh_SP_xDiff_nMC", 400, -20, 20);
-  fh_SP_yDiff_nMC = new TH1F("fh_SP_yDiff_nMC", "fh_SP_yDiff_nMC", 400, -20, 20);
-}
-// -----------------------------------------------------------------------
-
-
-// -------------------- Activates data branches --------------------------
-void CbmL1CATrdTrackFinderSA::DataBranches()
-{
-
-  // Get pointer to the ROOT manager
-  FairRootManager* rootMgr = FairRootManager::Instance();
-  if (NULL == rootMgr) {
-    cout << "-E- CbmL1CATrdTrackFinderSA::DataBranches : "
-         << "ROOT manager is not instantiated" << endl;
-    return;
-  }
-
-  fArrayTrdHit = L1_DYNAMIC_CAST<TClonesArray*>(rootMgr->GetObject("TrdHit"));
-  if (!fArrayTrdHit) {
-    cout << "-E- CbmL1CATrdTrackFinderSA::Init: No TrdHit array!" << endl;
-    return;
-  }
-}
-// -----------------------------------------------------------------------
-
-
-// ------------------- Determines the TRD layout -------------------------
-void CbmL1CATrdTrackFinderSA::TrdLayout()
-{
-
-  // Get the pointer to the singleton FairRunAna object
-  FairRunAna* ana = FairRunAna::Instance();
-  if (NULL == ana) {
-    cout << "-E- CbmL1CATrdTrackFinderSA::TrdLayout :"
-         << " no FairRunAna object!" << endl;
-    return;
-  }
-  // Get the pointer to run-time data base
-  FairRuntimeDb* rtdb = ana->GetRuntimeDb();
-  if (NULL == rtdb) {
-    cout << "-E- CbmL1CATrdTrackFinderSA::TrdLayout :"
-         << " no runtime database!" << endl;
-    return;
-  }
-  // Get the pointer to container of base parameters
-  FairBaseParSet* baseParSet = L1_DYNAMIC_CAST<FairBaseParSet*>(rtdb->getContainer("FairBaseParSet"));
-  if (NULL == baseParSet) {
-    cout << "-E- CbmL1CATrdTrackFinderSA::TrdLayout :"
-         << " no container of base parameters!" << endl;
-    return;
-  }
-
-  TrdPar           = L1_DYNAMIC_CAST<CbmGeoTrdPar*>(rtdb->findContainer("CbmGeoTrdPar"));
-  TObjArray* Nodes = TrdPar->GetGeoSensitiveNodes();
-  for (Int_t i = 0; i < Nodes->GetEntriesFast(); i++) {
-    FairGeoNode* node = dynamic_cast<FairGeoNode*>(Nodes->At(i));
-    //FairGeoNode *node = (FairGeoNode*) Nodes->At(i);
-    if (!node) continue;
-
-    TString name = node->getName();
-    //TString Sname = node->getShapePointer()->GetName();
-    FairGeoVector nodeV = node->getLabTransform()->getTranslation();  //in cm
-
-    //    FairGeoBasicShape *gShapePointer = (FairGeoBasicShape *)node->getShapePointer();
-    //gShapePointer->printParam();
-
-    //    node->print();
-
-    //Int_t id = node->getMCid();
-    //cout <<"name: "<< name <<"\tid: "<< id << endl;
-    cout << " name: " << name << "\t(z): " << nodeV.Z() << endl;
-
-    //     if(name.Contains("trd13")) fTrd13_Z = nodeV.Z();
-    //     if(name.Contains("trd14")) fTrd14_Z = nodeV.Z();
-    //     if(name.Contains("trd21")) fTrd21_Z = nodeV.Z();
-    //     if(name.Contains("trd24")) fTrd24_Z = nodeV.Z();
-    //     if(name.Contains("trd31")) fTrd31_Z = nodeV.Z();
-
-    if (name == "trd1gas#3") fTrd13_Z = Int_t(nodeV.Z());
-    if (name == "trd1gas#4") fTrd14_Z = Int_t(nodeV.Z());
-    if (name == "trd2gas#1") fTrd21_Z = Int_t(nodeV.Z());
-    if (name == "trd2gas#4") fTrd24_Z = Int_t(nodeV.Z());
-    if (name == "trd3gas#1") fTrd31_Z = Int_t(nodeV.Z());
-
-    //     if(name == "trd13") fTrd13_Z = nodeV.Z();
-    //     if(name == "trd14") fTrd14_Z = nodeV.Z();
-    //     if(name == "trd21") fTrd21_Z = nodeV.Z();
-    //     if(name == "trd24") fTrd24_Z = nodeV.Z();
-    //     if(name == "trd31") fTrd31_Z = nodeV.Z();
-
-    if (name == "trd1gas#1") geoLayer.Z[0] = nodeV.Z();
-    if (name == "trd1gas#2") geoLayer.Z[1] = nodeV.Z();
-    if (name == "trd1gas#3") geoLayer.Z[2] = nodeV.Z();
-    if (name == "trd1gas#4") geoLayer.Z[3] = nodeV.Z();
-    if (name == "trd2gas#1") geoLayer.Z[4] = nodeV.Z();
-    if (name == "trd2gas#2") geoLayer.Z[5] = nodeV.Z();
-    if (name == "trd2gas#3") geoLayer.Z[6] = nodeV.Z();
-    if (name == "trd2gas#4") geoLayer.Z[7] = nodeV.Z();
-    if (name == "trd3gas#1") geoLayer.Z[8] = nodeV.Z();
-    if (name == "trd3gas#2") geoLayer.Z[9] = nodeV.Z();
-    if (name == "trd3gas#3") geoLayer.Z[10] = nodeV.Z();
-    if (name == "trd3gas#4") geoLayer.Z[11] = nodeV.Z();
-  }
-
-#ifdef DRAW
-  for (int i = 0; i < 4; i++) {
-    geoLayer.Y[i] = 273.1;
-  }
-  for (int i = 4; i < 8; i++) {
-    geoLayer.Y[i] = 396.0;
-  }
-  for (int i = 8; i < 12; i++) {
-    geoLayer.Y[i] = 518.9;
-  }
-
-  Int_t scaleZ  = 300;
-  Int_t scaleZA = 0;
-  for (int i = 0; i < 12; i++) {
-    if (i == 4) scaleZA = 1000;
-    if (i == 8) scaleZA *= 2;
-
-    geoLayer.scale[i] += ((i + 1) * scaleZ) + scaleZA;
-    geoLayer.Z[i] += geoLayer.scale[i];
-  }
-#endif
-
-  /*
-    TrdPar = (CbmGeoTrdPar*) (rtdb->findContainer("CbmGeoTrdPar"));
-    //TObjArray *Nodes = TrdPar->GetGeoSensitiveNodes();
-    Nodes = TrdPar->GetGeoSensitiveNodes();
-    for( Int_t i=0;i<Nodes->GetEntriesFast(); i++) {
-    FairGeoNode *node = dynamic_cast<FairGeoNode*> (Nodes->At(i));
-    if ( !node ) continue;
-
-    TString name = node->getName();
-    FairGeoVector nodeV = node->getLabTransform()->getTranslation(); //in cm
-
-    Int_t uid = i+1;
-    cout <<"name, uid, Z: "<< name <<", "<< uid <<", "<< nodeV.Z() << endl;
-
-    if(uid == 3) fTrd13_Z = nodeV.Z();
-    if(uid == 4) fTrd14_Z = nodeV.Z();
-    if(uid == 5) fTrd21_Z = nodeV.Z();
-    if(uid == 8) fTrd24_Z = nodeV.Z();
-    if(uid == 9) fTrd31_Z = nodeV.Z();
-    }
-  */
-
-  // Get the pointer to detector list
-  TObjArray* detList = baseParSet->GetDetList();
-  if (NULL == detList) {
-    cout << "-E- CbmL1CATrdTrackFinderSA::TrdLayout :"
-         << " no detector list!" << endl;
-    return;
-  }
-  // Find TRD detector
-  FairDetector* trd = L1_DYNAMIC_CAST<FairDetector*>(detList->FindObject("TRD"));
-  if (NULL == trd) {
-    cout << "-E- CbmL1CATrdTrackFinderSA::TrdLayout :"
-         << " no TRD detector!" << endl;
-    return;
-  }
-  // Determine the geometry version
-  TString name = trd->GetGeometryFileName();
-  if (name.Contains("9")) {
-    cout << "-I- CbmL1CATrdTrackFinderSA::TrdLayout :"
-         << " TRD geometry : 3x3." << endl;
-    fNoTrdStations   = 3;
-    fNoTrdPerStation = 3;
-  }
-  else if (name.Contains("12")) {
-    cout << "-I- CbmL1CATrdTrackFinderSA::TrdLayout :"
-         << " TRD geometry : 3x4." << endl;
-    fNoTrdStations   = 3;
-    fNoTrdPerStation = 4;
-  }
-  else if (name.Contains("6x2")) {
-    cout << "-I- CbmL1CATrdTrackFinderSA::TrdLayout :"
-         << " TRD geometry : 6x2." << endl;
-    fNoTrdStations   = 6;
-    fNoTrdPerStation = 2;
-  }
-  fNoTrdStations   = 3;
-  fNoTrdPerStation = 4;
-}
-// -----------------------------------------------------------------------
-
-
-// ------------------------- Write histogramms ---------------------------
-void CbmL1CATrdTrackFinderSA::WriteHistogramms()
-{
-
-  fh_chi2hit->Write();
-  fh_chi2hit_plane->Write();
-
-  fDistLongBX->Write();
-  fDistLongBY->Write();
-  fDistShortBX->Write();
-  fDistShortBY->Write();
-
-  fDistY12->Write();
-
-  //----------------------------------------------------------
-  fMomDistLongPrimaryX->Write();
-  fMomDistLongPrimaryY->Write();
-  fMomDistLongExtraX->Write();
-  fMomDistLongExtraY->Write();
-
-  fMomDistExtrapolPrimaryX->Write();
-  fMomDistExtrapolPrimaryY->Write();
-  fMomDistExtrapolExtraX->Write();
-  fMomDistExtrapolExtraY->Write();
-
-  fMomDistShortPrimaryX->Write();
-  fMomDistShortPrimaryY->Write();
-  fMomDistShortExtraX->Write();
-  fMomDistShortExtraY->Write();
-
-  fDistLongX->Write();
-  fDistLongY->Write();
-  fDistShortX->Write();
-  fDistShortY->Write();
-
-  fDistY->Write();
-  fDistX->Write();
-
-  fPlane1Ydens->Write();
-  fPlane5Ydens->Write();
-  fPlane9Ydens->Write();
-
-  fSPlength->Write();
-  fSPlengthMC->Write();
-
-  fYat0->Write();
-  fYat0MC->Write();
-
-  fNoEvTime->Write();
-
-  fh_SP_xDiff_MC->Write();
-  fh_SP_yDiff_MC->Write();
-
-  fh_SP_xDiff_nMC->Write();
-  fh_SP_yDiff_nMC->Write();
-
-
-  //---------------------------------------------------------------------
-  map<Int_t, Int_t>::iterator iUsedHits;
-  map<Int_t, Int_t>::iterator iUnUsedHits;
-  map<Int_t, Int_t>::iterator iTotHits;
-  Double_t nContent;
-
-  for (iUsedHits = fRUsedHits.begin(); iUsedHits != fRUsedHits.end(); iUsedHits++) {
-
-    iTotHits = fTotHits.find(iUsedHits->first);
-    nContent = (iUsedHits->second * 100) / iTotHits->second;
-    //     cout << iUsedHits->first  <<", "
-    // 	 << iUsedHits->second <<", "
-    // 	 << iTotHits->second <<", "
-    // 	 << nContent << endl;
-    fUsedHitsPerPlane->SetBinContent((iUsedHits->first), nContent);
-  }
-  for (iUnUsedHits = fRUnUsedHits.begin(); iUnUsedHits != fRUnUsedHits.end(); iUnUsedHits++) {
-
-    iTotHits = fTotHits.find(iUnUsedHits->first);
-    nContent = (iUnUsedHits->second * 100) / iTotHits->second;
-    fUnUsedHitsPerPlane->SetBinContent((iUnUsedHits->first), nContent);
-  }
-  fUsedHitsPerPlane->Write();
-  fUnUsedHitsPerPlane->Write();
-  //---------------------------------------------------------------------
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-Double_t CbmL1CATrdTrackFinderSA::FitLinear(CbmTrdTrack* tr, Int_t /*var*/ = 1)
-{
-  //fit using a least square method
-
-
-  //  cout << ">>> Trying to fit a track..." << endl;
-  Int_t noHits = tr->GetNofHits();
-  //  cout << "No Hits in the track : " << noHits << endl;
-  Int_t iHit;
-  CbmTrdHit* hit;
-
-  Double_t C1[12];
-  Double_t C2[12];
-  Double_t Z[12];
-
-  Double_t n = 12;
-
-  for (int i = 0; i < 12; i++) {
-    C1[i] = 0;
-    C2[i] = 0;
-    Z[i]  = 0;
-  }
-
-  //  Int_t ind = 0;
-
-  for (int i = 0; i < noHits; i++) {
-
-    iHit = tr->GetHitIndex(i);
-    hit  = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(iHit));
-
-    C1[i] = hit->GetX();
-    C2[i] = hit->GetY();
-    Z[i]  = hit->GetZ();
-  }
-
-  Double_t sumXZ = 0, sumYZ = 0, sumX = 0, sumY = 0, sumZx = 0, sumZy = 0, sumX2 = 0, sumY2 = 0, sumZx2 = 0, sumZy2 = 0;
-
-  for (int i = 0; i < 12; i += 2) {
-    //    cout << "C1[" << i << "]=" << C1[i] << endl;
-    //    cout << "C2[" << i << "]=" << C2[i] << endl;
-
-    //    if(!(i % 2))
-    {
-      sumXZ += C1[i] * Z[i];
-
-      sumX += C1[i];
-      sumX2 += C1[i] * C1[i];
-
-      sumZx += Z[i];
-      sumZx2 += Z[i] * Z[i];
-    }
-  }
-
-  for (int i = 1; i < 12; i += 2) {
-    //    cout << "C1[" << i << "]=" << C1[i] << endl;
-    //    cout << "C2[" << i << "]=" << C2[i] << endl;
-
-    //    if(!((1i % 2))
-    {
-      sumYZ += C2[i] * Z[i];
-
-      sumY += C2[i];
-      sumY2 += C2[i] * C2[i];
-
-      sumZy += Z[i];
-      sumZy2 += Z[i] * Z[i];
-    }
-  }
-
-
-  cout << "";
-  //   Double_t a = (n*sumXZ - sumX*sumZ)/(n*sumX2 - sumX*sumX);
-  //   Double_t b = (sumZ - a*sumX)/n;
-  Double_t r1 = (n * sumXZ - sumX * sumZx) / sqrt((n * sumX2 - sumX * sumX) * (n * sumZx2 - sumZx * sumZx));
-  //  Double_t Sa = sqrt((n*(sumY2 -a*sumXZ-b*sumY))/((n-2)*(n*sumX2-sumX*sumX)));
-  //  Double_t Sb = Sa*sqrt(sumX2/n);
-
-
-  Double_t r2 = (n * sumYZ - sumY * sumZy) / sqrt((n * sumY2 - sumY * sumY) * (n * sumZy2 - sumZy * sumZy));
-
-
-  //   cout << "Linear coefficients: a= "
-  //        << a << ", Sa= " << Sa << ", b= " << b << ", Sb= " << Sb << endl
-  //        << ", r=" << r << ", chi2=" << tr->GetChi2() << endl;
-
-
-  return sqrt(r1 * r1 + r2 * r2);
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-Double_t CbmL1CATrdTrackFinderSA::DistTwoTrackletsY(Int_t iIndexFirst, Int_t iIndexSecond, Double_t zed)
-{
-  //returns an extrapolated coordinate
-  CbmTrdHit *pHitFirst, *pHitSecond;
-  Double_t dist;
-
-  Double_t Y1 = 0;
-  Double_t Z1 = 0;
-
-  // Get hits from first and second plane in station
-  if (iIndexFirst != -1) {
-    pHitFirst = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(iIndexFirst));
-    Y1        = pHitFirst->GetY();
-    Z1        = pHitFirst->GetZ();
-  }
-
-  pHitSecond = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(iIndexSecond));
-
-  // Get position Y & Z of hits
-
-  Double_t Y4 = pHitSecond->GetY();
-  Double_t Z4 = pHitSecond->GetZ();
-
-  Double_t a = (Y4 - Y1) / (Z4 - Z1);
-  Double_t b = Y1 - a * Z1;
-  Double_t Y = a * zed + b;  // - Y1;
-  dist       = Y;
-  //      cout << "From the coords (y1,z1) = ("
-  // 	  << Y1 << ", " << Z1 << endl
-  //           << "From the coords (y2,z2) = ("
-  // 	  << Y4 << ", " << Z4 << endl
-  //           << "     we get the value = "
-  //           << dist
-  //           << endl;
-  return dist;
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-
-Double_t CbmL1CATrdTrackFinderSA::DistTwoTrackletsX(Int_t iIndexFirst, Int_t iIndexSecond, Double_t zed)
-{
-  CbmTrdHit *pHitFirst, *pHitSecond;
-  Double_t dist;
-
-  Double_t X1 = 0;
-  Double_t Z1 = 0;
-
-  // Get hits from first and second plane in station
-  if (iIndexFirst != -1) {
-    pHitFirst = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(iIndexFirst));
-    X1        = pHitFirst->GetX();
-    Z1        = pHitFirst->GetZ();
-  }
-
-  pHitSecond = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(iIndexSecond));
-
-
-  Double_t X4 = pHitSecond->GetX();
-  Double_t Z4 = pHitSecond->GetZ();
-
-  Double_t a = (X4 - X1) / (Z4 - Z1);
-  Double_t b = X1 - a * Z1;
-  //  Double_t X = (dz)/(dx)*(zed - Z1);
-  Double_t X = a * zed + b;
-  //    = dy/dz * (zed + Z1) - X1;
-  dist = X;
-  //       cout << "From the coords (x1,z1) = ("
-  // 	   << X1 << ", " << Z1 << endl
-  //            << "From the coords (x4,z4) = ("
-  // 	   << X4 << ", " << Z4 << endl
-  // 	   << "and at zed = " << zed << endl
-  //            << "     we get the value = "
-  //            << dist
-  //            << endl;
-  return dist;
-}
-// -----------------------------------------------------------------------
-
-// -----------------------------------------------------------------------
-void CbmL1CATrdTrackFinderSA::FindNeighbour(vector<CbmL1TrdTracklet4*>& v1, vector<CbmL1TrdTracklet4*>& v2, Double_t dY,
-                                            Double_t dX)
-{
-
-  vector<CbmL1TrdTracklet4*>::iterator iv1;
-  CbmL1TrdTracklet4* tr1;
-
-  Double_t extY = 0,
-           extX = 0,     //two extrapolated coords from the first tracklet
-    mesY = 0, mesX = 0,  //two measured coords from the second tracklet
-    aminY, amaxY, aminX, amaxX;
-  Int_t indexA, indexB;
-  Int_t Left = 0, Right, Mid = 0;
-
-  Int_t il = 0;
-  for (iv1 = v1.begin(); iv1 != v1.end(); iv1++) {
-    il++;
-    tr1    = *iv1;
-    extY   = tr1->GetExt(0);
-    extX   = tr1->GetExt(1);
-    indexA = tr1->GetIndex();
-    amaxY  = extY + dY;
-    aminY  = extY - dY;
-    amaxX  = extX + dX;
-    aminX  = extX - dX;
-
-    Left  = 0;
-    Right = v2.size();
-    Mid   = 0;
-
-    // ----------- looking by bisection ------------------
-    while (Left < Right) {
-      Mid  = (Left + Right) / 2;
-      mesY = v2[Mid]->GetCoord(0);
-
-      if (amaxY < mesY) {
-        Left = Mid + 1;
-      }
-      else {
-        Right = Mid - 1;
-      }
-
-      /*
-	cout << il << ": Size: "<< v1.size()
-	<<" mesY: "<< v2[Mid]->GetCoord(0)
-	<<" extY: "<< extY
-	<<" Mid: "<< Mid
-	<< endl;
-      */
-    }
-    //----------------------------------------------------
-
-    Int_t size = v2.size();
-    for (Int_t i = Mid; i < size; i++) {
-      mesY = v2[i]->GetCoord(0);
-      mesX = v2[i]->GetCoord(1);
-      //cout <<"(mesX,MesY) "<< mesX <<"\t"<< mesY << endl;
-      indexB = v2[i]->GetIndex();
-      //cout <<"indexB "<< indexB << endl;
-
-      if (mesY > amaxY) continue;
-      if (mesY < aminY) break;
-
-      //      cout <<"----------- Setting vAccost [Right|Left]"<< endl;
-
-      //      cout << aminX <<", "<< mesX <<", "<< amaxX << endl;
-
-      if (aminX < mesX && mesX < amaxX) {
-        tr1->vAccostRight.push_back(indexB);
-        v2[i]->vAccostLeft.push_back(indexA);
-        //	cout << aminX <<", "<< mesX <<", "<< amaxX << endl;
-      }
-    }
-  }
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-Bool_t CbmL1CATrdTrackFinderSA::OverlapsHitsXY(Int_t posA, Int_t posB)
-{
-  Bool_t overlap = false;
-
-  CbmTrdHit *pHitA, *pHitB;
-
-  Double_t hitPosA_X, hitPosA_Y, hitPosB_X, hitPosB_Y,
-    dMul1 = 3,  //sigma multiplier for calculating the range of overlapping hits
-    dMul2 = 3;  //sigma multiplier for calculating the range of overlapping hits
-
-  Double_t hitPosA_DX, hitPosA_DY, hitPosB_DX, hitPosB_DY;
-
-  pHitA      = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(posA));
-  hitPosA_X  = pHitA->GetX();
-  hitPosA_Y  = pHitA->GetY();
-  hitPosA_DX = pHitA->GetDx();
-  hitPosA_DY = pHitA->GetDy();
-
-  pHitB      = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(posB));
-  hitPosB_X  = pHitB->GetX();
-  hitPosB_Y  = pHitB->GetY();
-  hitPosB_DX = pHitB->GetDx();
-  hitPosB_DY = pHitB->GetDy();
-
-  //   cout
-  //     << "Overlap function...\n"
-  //     << "X1=" << hitPosA_X << ", dX1=" << hitPosA_DX << ", Y1=" << hitPosA_Y << ", dY1=" << hitPosA_DY
-  //     << "X2=" << hitPosB_X << ", dX2=" << hitPosB_DX << ", Y2=" << hitPosB_Y << ", dY2=" << hitPosB_DY
-  //     << endl;
-
-
-  if (((hitPosA_X + dMul1 * hitPosA_DX) >= (hitPosB_X - dMul2 * hitPosB_DX))
-      && ((hitPosA_X - dMul1 * hitPosA_DX) <= (hitPosB_X + dMul2 * hitPosB_DX))
-      && ((hitPosA_Y + dMul2 * hitPosA_DY) >= (hitPosB_Y - dMul1 * hitPosB_DY))
-      && ((hitPosA_Y - dMul2 * hitPosA_DY) <= (hitPosB_Y + dMul1 * hitPosB_DY))) {
-    overlap = true;
-  }
-
-  //   CbmTrdPoint *pt1 = (CbmTrdPoint*)fMCPointArray->At(posA);
-  //   CbmTrdPoint *pt2 = (CbmTrdPoint*)fMCPointArray->At(posB);
-
-  //   if(overlap && (pt1->GetTrackID() == pt2->GetTrackID())) return true;
-  //   else return false;
-
-  return overlap;
-}
-
-
-// -----------------------------------------------------------------------
-void CbmL1CATrdTrackFinderSA::TagSegments(vector<CbmL1TrdTracklet4*>& clTrackletsA,
-                                          vector<CbmL1TrdTracklet4*>& clTrackletsB, Int_t /*noCombSegments*/)
-{
-  //asigning numbers to each segment, 4- highest, 0 - lowest
-
-  //  cout << "TagSegments: engaging... " << endl;
-
-  //  vector<CbmL1TrdTracklet4*>::iterator itclTrackletsLeft;
-  vector<CbmL1TrdTracklet4*>::iterator itclTrackletsRight;
-
-  CbmL1TrdTracklet4* clSegRight;
-
-  vector<Int_t> vLeft;
-  vector<Int_t> vRight;
-
-  vector<Int_t>::iterator ivLeft;
-  //  vector <Int_t>::iterator ivRight;
-
-  Int_t valLeft = 0, valRight = 0;
-
-  //     CbmL1TrdTracklet4* clSegLeft; //segment farther from the target
-  //     CbmL1TrdTracklet4* clSegRight; //segment nearer to the target
-
-
-  //  cout << "Engaging Right loop " << endl;
-  for (itclTrackletsRight = clTrackletsB.begin(); itclTrackletsRight != clTrackletsB.end(); itclTrackletsRight++) {
-
-    clSegRight = *itclTrackletsRight;
-    //cout << "---> X of tracklet = " << clSegRight->GetCoord(0) << endl;
-    vLeft = clSegRight->vAccostLeft;
-    //cout << "Size of Right vector = " << clSegRight->vAccostRight.size() << endl;
-    //cout << "Size of Left vector  = " << clSegRight->vAccostLeft.size() << endl;
-    //    iHitRightA = clSegRight->GetInd(0);
-    //    iHitRightB = clSegRight->GetInd(1);
-
-    //      cout << "Tracklets 912: iHitRight:   " << iHitRight << "\t" << endl;
-    if (vLeft.size() > 0) {
-      //      cout << "Processing Comrade vector of size " << vLeft.size() << endl;
-      valRight = clSegRight->GetVal();
-      if (valRight == 0) {
-        clSegRight->SetVal(1);
-        valRight++;
-      }
-      for (ivLeft = vLeft.begin(); ivLeft != vLeft.end(); ivLeft++) {
-        valLeft = (clTrackletsA[*ivLeft])->GetVal();
-        if (valLeft <= valRight) clTrackletsA[*ivLeft]->SetVal(valRight + 1);
-      }
-    }
-
-    //    if(noCombSegments == 1){
-    //  if((*itclTrackletsRight)->GetVal() != 2) clTrackletsB.erase(itclTrackletsRight);
-    //}
-
-    //cout << "clSegRight = " << clSegRight->GetVal() << endl;
-    //if(isAlone == true) clSegRight->SetIsAlone(true);
-  }
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-void CbmL1CATrdTrackFinderSA::CreateTracks(vector<CbmL1TrdTracklet4*> clTracklets14,
-                                           vector<CbmL1TrdTracklet4*> clTracklets58,
-                                           vector<CbmL1TrdTracklet4*> clTracklets912, set<Int_t>& globalSetUsedHits,
-                                           Bool_t removeUsedHits, Bool_t competition, Int_t /*nrLoop*/)
-{
-  //create long tracks from previously selected segments
-
-  if (fVerbose > 2) {
-    cout << "Inner area: " << endl
-         << "--- size of fArrayTrdTrack    = " << fArrayTrdTrack->GetEntriesFast() << endl
-         << "--- size of globalSetUsedHits = " << globalSetUsedHits.size() << endl;
-  }
-
-  CbmL1TrdTracklet4 *clTrdSeg1, *clTrdSeg2;
-
-  vector<CbmL1TrdTracklet4*>::iterator itclSeg3;
-
-  Bool_t isEmpty = true;
-
-  Int_t licz = 0, counter = 0;
-
-  CbmTrdTrack* tr1 = NULL;
-  //  CbmTrdTrack* tr2 = NULL;
-  //   CbmTrdHit* hit1 = NULL;
-  //CbmTrdHit* hit2 = NULL;
-
-  vector<CbmTrdTrack*> vTempTrdTrackCand;
-  vector<CbmTrdTrack*>::iterator ivTempTrdTrackCand;
-
-  set<Int_t>::iterator iglobalSetUsedHits;
-
-  vector<CbmTrdTrack*>::iterator ivTrdTrackCand;
-
-  Int_t iFakeTrack  = 0;
-  Int_t iHit        = 0;
-  Bool_t bTrueTrack = true;
-
-  FairTrackParam* trParam;
-  trParam = new FairTrackParam();
-  trParam->SetQp(0.);
-
-  CbmVertex vtx;
-  TVector3 vzero(0, 0, 0);
-  vtx.Position(vzero);
-
-  Int_t iSecondLoop = 1;
-  Int_t trMax       = 1;  //number of tracks from one tree accepted as tracks candidates
-  Int_t noHitsAccepted =
-    0;  //number of used hits above which the tracks is recognized as fake; 0 = all tracks are fake.
-
-  vector<TempTrackStruct> auxTrack;
-  auxTrack.clear();
-
-  Int_t trdInd;
-  vector<TempTrackStruct>::iterator ikol;
-
-  cout << "--- Engaging main loop..." << endl;
-
-  if (fVerbose > 2) cout << "--- No of outer iterations to go: " << clTracklets14.size() << endl;
-  //  Int_t vSize = Int_t(clTracklets14.size());
-  //for(int i = 0; i < vSize; i++) {
-  //  if( (clTracklets14[i])->GetVal() == 3) licz++;
-  //   }
-  //   cout << "* No of 3 in vector: " << licz << endl;
-
-  Int_t trackArrayInd = fArrayTrdTrack->GetEntriesFast();
-  Int_t trlsNo[]      = {0, 0, 0};
-
-  for (itclSeg3 = clTracklets14.begin(); itclSeg3 != clTracklets14.end();
-       itclSeg3++) {  //loop over tracklets with value of 3
-    if ((*itclSeg3)->GetVal() != 3) {
-      trlsNo[0]++;
-      continue;
-    }
-    for (int i = 0; i < 12; i++)
-      tempTrack.M[i] = 0;
-
-    tempTrack.M[0] = (*itclSeg3)->GetInd(0);
-    tempTrack.M[1] = (*itclSeg3)->GetInd(1);
-    tempTrack.M[2] = (*itclSeg3)->GetInd(2);
-    tempTrack.M[3] = (*itclSeg3)->GetInd(3);
-
-    Int_t iInd2 = 0;
-    Int_t size2 = Int_t((*itclSeg3)->vAccostRight.size());
-    for (Int_t iSeg2 = 0; iSeg2 < size2; iSeg2++) {  //loop over clTracklets with value of 2
-      iInd2     = (*itclSeg3)->vAccostRight[iSeg2];
-      clTrdSeg2 = clTracklets58[iInd2];
-      if (clTrdSeg2->GetVal() != 2) continue;
-
-      tempTrack.M[4] = clTrdSeg2->GetInd(0);
-      tempTrack.M[5] = clTrdSeg2->GetInd(1);
-      tempTrack.M[6] = clTrdSeg2->GetInd(2);
-      tempTrack.M[7] = clTrdSeg2->GetInd(3);
-
-      Int_t iInd1 = 0;
-      Int_t size1 = Int_t(clTrdSeg2->vAccostRight.size());
-      for (Int_t iSeg1 = 0; iSeg1 < size1; iSeg1++) {  //loop over clTracklets with value of 1
-        iInd1     = clTrdSeg2->vAccostRight[iSeg1];
-        clTrdSeg1 = clTracklets912[iInd1];
-        if (clTrdSeg1->GetVal() != 1) continue;
-
-        tempTrack.M[8]  = clTrdSeg1->GetInd(0);
-        tempTrack.M[9]  = clTrdSeg1->GetInd(1);
-        tempTrack.M[10] = clTrdSeg1->GetInd(2);
-        tempTrack.M[11] = clTrdSeg1->GetInd(3);
-
-        counter++;
-        isEmpty = false;
-
-        /*
-	//-------------------------------------
-	tr2 = new CbmTrdTrack();
-	tr2->SetParamFirst(*trParam);
-	tr2->SetParamLast(*trParam);
-
-	for(Int_t we = 0; we < 12; we++) {
-	hit1 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(tempTrack.M[we]);
-	tr2->AddHit(tempTrack.M[we], hit1);
-	}
-	tr2->SortHits();
-	FitKF(tr2);
-	//	  trdTrackFitterKF->DoFit(tr2);
-	tempTrack.Chi2 = tr2->GetChi2();
-	delete tr2;
-	//-------------------------------------	  */
-
-        //tempTrack.Chi2 = FitTLinearFitter(tempTrack.M);
-        //tempTrack.Chi2 = FitLinear(tempTrack.M, 1);
-        //tempTrack.Chi2 = FitLSM(tempTrack.M);
-        tempTrack.Chi2 = Fit(tempTrack.M);
-
-        auxTrack.push_back(tempTrack);
-
-        //if((counter%1000) == 0) {
-        //printf("\rTracks: %i",counter);
-        //fflush(stdout);
-        //}
-      }  //end::loop 1
-    }    //end::loop 2
-
-    //if(iSecondLoop%2 == 0)
-    {
-      iSecondLoop = 0;
-      sort(auxTrack.begin(), auxTrack.end(), CompareChi2);
-      //if(nrLoop == 1) trMax = 1000;
-      //if(nrLoop == 2) trMax = 1000;
-      //	if(nrLoop == 1) cout <<"auxTrack.size(): "<< auxTrack.size() << endl;
-      Int_t li = 0;
-      //CbmTrdTrack *T3;
-      //Double_t chiMax = 1000;
-
-      for (ikol = auxTrack.begin(); ikol != auxTrack.end(); ikol++) {
-        if (li >= trMax) break;
-
-        tr1 = new CbmTrdTrack();
-
-        for (Int_t we = 0; we < 12; we++) {
-          trdInd = (*ikol).M[we];
-          // 	  hit1 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(trdInd) );
-
-          tr1->AddHit(trdInd, kTRDHIT);
-        }
-        //	tr1->SortHits();
-        //tr1->SetChi2((*ikol).Chi2);
-        //cout << tempTrack.Chi2 << endl;
-
-        /*// Set reliable Q/p value. Based on MC values ----------------
-	  CbmTrdPoint *pMCpt;
-	  CbmMCTrack *mcTr;
-	  Int_t ptIndex;
-	  Double_t mom;
-	  trdInd = tr1->GetTrdHitIndex(0);
-	  hit1 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(trdInd);
-	  ptIndex = hit1->GetRefIndex();
-	  pMCpt = (CbmTrdPoint*) (fMCPointArray->At(ptIndex));
-
-	  mcTr = (CbmMCTrack*)fMCTrackArray->At(pMCpt->GetTrackID());
-	  mom = mcTr->GetMomentum().Mag();
-	  Int_t pdgCode = mcTr->GetPdgCode();
-	  Int_t charge = PdgToCharge(pdgCode);
-	  trParam->SetQp(charge/mom);
-	  //trParam->SetQp(1.);
-	  //cout <<"(pdg, Qp) "<< pdgCode <<", "<< charge/mom << endl;
-	  //-------------------------------------------------------------
-	  */
-
-        tr1->SetParamFirst(trParam);
-        tr1->SetParamLast(trParam);
-
-        //FitKF(tr1);
-        //  if(tr1->GetChi2() < chiMax){
-        // T3 = tr1;
-        //  chiMax = tr1->GetChi2();
-        //}
-        //if((*ikol).Chi2 < 3)
-        vTempTrdTrackCand.push_back(tr1);
-        li++;
-      }
-      //vTempTrdTrackCand.push_back(T3);
-      auxTrack.clear();
-      //      cout << "------------------"<< endl;
-    }
-    //cout << iSecondLoop << endl;
-    iSecondLoop++;
-  }  //loop over 3s
-
-  //cout << clTracklets14.size() <<"\t"
-  //     << trlsNo[0] << endl;
-
-  //  if(nrLoop == 2) competition = false;
-  if (competition) {
-    refittingKF.Start();
-    cout << "\n--- Refiting by KF..." << endl;
-    /* Refit using KF fitter                                                     */
-    //Int_t iKlops = 0;
-    //cout << "vTempTrdTrackCand.size(): " << vTempTrdTrackCand.size() << endl;
-    for (ivTempTrdTrackCand = vTempTrdTrackCand.begin(); ivTempTrdTrackCand != vTempTrdTrackCand.end();
-         ivTempTrdTrackCand++) {
-
-      //FitKF(*ivTempTrdTrackCand);
-      //trdTrackFitterKF->DoFit(*ivTempTrdTrackCand, &vtx);
-      trdTrackFitterKF->DoFit(*ivTempTrdTrackCand);
-      //       Double_t mX = (*ivTempTrdTrackCand)->GetParamLast()->GetX();
-      //       Double_t mY = (*ivTempTrdTrackCand)->GetParamLast()->GetY();
-      //       Double_t mXY = sqrt(mX*mX+mY*mY);
-      //       Double_t mChi2 = (*ivTempTrdTrackCand)->GetChi2();
-      //       (*ivTempTrdTrackCand)->SetChi2(mChi2*mX2);
-      //cout <<"Chi2: "<< (*ivTempTrdTrackCand)->GetChi2() << endl;
-      //iKlops++;
-      //cout << iKlops <<": GetNofTrdHits(): " << (*ivTempTrdTrackCand)->GetNofTrdHits() << endl;
-    }
-    refittingKF.Stop();
-
-    sort(vTempTrdTrackCand.begin(), vTempTrdTrackCand.end(), CompareChi2TrdTrack);
-  }
-
-  CbmTrdTrack* trCand;
-  Int_t firstHitSunk = 0;
-  for (ivTrdTrackCand = vTempTrdTrackCand.begin(); ivTrdTrackCand != vTempTrdTrackCand.end();
-       ivTrdTrackCand++) {  //Loop over track candidates; mark used hits
-    trCand = (*ivTrdTrackCand);
-    //cout << "Track no " << trackInd++
-    //	 << " has " << (*ivTrdTrackCand)->GetNofTrdHits()
-    //	 << " hits and chi2= " << (*ivTrdTrackCand)->GetChi2() << endl;
-
-    // if(nrLoop == 2) removeUsedHits = false;
-
-    if (removeUsedHits) {  //RemoveHits
-      Int_t noHitsA = trCand->GetNofHits();
-
-      bTrueTrack   = true;
-      firstHitSunk = 0;
-
-      for (int i = 0; i < noHitsA; i++) {
-        iHit               = trCand->GetHitIndex(i);
-        iglobalSetUsedHits = globalSetUsedHits.find(iHit);
-
-        if (iglobalSetUsedHits != globalSetUsedHits.end()) {
-          if (firstHitSunk == noHitsAccepted) {
-            bTrueTrack = false;
-            iFakeTrack++;
-            break;
-          }
-          firstHitSunk++;
-        }
-      }
-
-      //       Int_t k = 0;
-      //       for(int i = 0; i < noHitsA; i++) {
-      // 	if(i != 11) k = SA[i]+SA[i+1];
-      // 	//	if(i != 10) k = SA[i]+SA[i+1]+SA[i+2];
-      // 	if(k == noHitsAccepted){
-      // 	    bTrueTrack = false;
-      // 	    iFakeTrack++;
-      // 	    break;
-      // 	  }
-      //       }
-
-      //if(firstHitSunk != 0) cout << firstHitSunk << endl;
-      if (bTrueTrack) {
-        new ((*fArrayTrdTrack)[trackArrayInd]) CbmTrdTrack(*trCand);
-        trackArrayInd++;
-        for (int i = 0; i < noHitsA; i++) {
-          iHit = trCand->GetHitIndex(i);
-          globalSetUsedHits.insert(iHit);
-        }
-        delete trCand;
-      }
-    }
-    else {  // end of RemoveHits
-      new ((*fArrayTrdTrack)[trackArrayInd]) CbmTrdTrack(*trCand);
-      trackArrayInd++;
-      delete trCand;
-    }
-  }
-
-  cout << "\n--- Finding tracks finished" << endl;
-  cout << ":::Track candidates: " << vTempTrdTrackCand.size() << endl
-       << ":::Fake tracks:      " << iFakeTrack << endl
-       << ":::fArrayTrdTrack:   " << fArrayTrdTrack->GetEntriesFast() << endl;
-
-  vTempTrdTrackCand.clear();
-  //  delete trParam;
-
-  if (!isEmpty) {
-    licz++;
-    isEmpty = true;
-  }
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-void CbmL1CATrdTrackFinderSA::CreateSegments(vector<CbmL1TrdTracklet*> clSpacePointsAB,
-                                             vector<CbmL1TrdTracklet*> clSpacePointsCD,
-                                             vector<CbmL1TrdTracklet4*>& clTrackletsAD, Double_t dX, Double_t dY)
-{
-  //--- method to create 4-hit tracklets from Space Points (smaller 2-hit tracklets) ---
-  vector<CbmL1TrdTracklet*>::iterator iSpacePtA;
-  vector<CbmL1TrdTracklet*>::iterator iSpacePtB;
-  vector<CbmL1TrdTracklet*>::iterator iSpacePtStart;
-
-  Int_t iIndex = 0,  //index
-    indSpacePtA,     //index of 1st miniTracklet
-    indSpacePtB,     //index of 2nd miniTracklet
-    indSpacePtC,     //index of 3rd miniTracklet
-    indSpacePtD,     //index of 4th miniTracklet
-    noXSurv    = 0,  //number of tracklets that survived the X distance cut
-    noYSurv    = 0,  //number of tracklets that survived the Y distance cut
-    noXYSurv   = 0,  //number of tracklets that survived both X & Y distance cuts
-    noAllPairs = 0, iSegAcc14 = 0;
-
-  CbmL1TrdTracklet4* clTr;
-
-  CbmL1TrdTracklet *trLeft, *trRight;
-
-  iSpacePtStart = clSpacePointsCD.begin();
-
-  //---------- BEGIN: Creation tracklet 12-34 ---------------------------------
-  for (iSpacePtA = clSpacePointsAB.begin(); iSpacePtA != clSpacePointsAB.end(); iSpacePtA++) {
-    trLeft      = *iSpacePtA;
-    indSpacePtA = trLeft->GetIndLeft();
-    indSpacePtB = trLeft->GetIndRight();
-
-    //    cout << "GetCoord1: " << trLeft->GetCoord1() << endl;
-    //cout << "--------------------" << clSpacePointsCD.size() << endl;
-
-
-    //--- extrapolate --------------------------------------------
-    Double_t y1 = trLeft->GetCoord(0), x1 = trLeft->GetCoord(1), y1z = trLeft->GetCoord(2), x1z = trLeft->GetCoord(3),
-             x2 = 0, y2 = 0, distBetweenLayer = x1z - y1z, y2z = y1z + distBetweenLayer * 2,
-             x2z = x1z + distBetweenLayer * 2;
-
-    y2 = (y1 / y1z) * y2z;
-    x2 = (x1 / x1z) * x2z;
-    //--- end: extrapolate --------------------------------------
-
-    Bool_t bFirst = true;
-
-    //for(y = 0; y < trsize; y++){//y
-    //trRight = clSpacePointsCD[y];
-    //cout << trRight->GetCoord(0) << endl;
-    //    Bool_t bFirst = true;
-    for (iSpacePtB = iSpacePtStart; iSpacePtB != clSpacePointsCD.end(); iSpacePtB++) {
-      trRight = *iSpacePtB;
-
-      indSpacePtC = trRight->GetIndLeft();
-      indSpacePtD = trRight->GetIndRight();
-      noAllPairs++;
-
-      Double_t yB = trRight->GetCoord(0), xB = trRight->GetCoord(1), yBz = trRight->GetCoord(2),
-               xBz = trRight->GetCoord(3);
-
-      /*
-      //--- for estimation dx and dy ----------------------------
-      trdHit1 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indSpacePtA);
-      Int_t refInd1 = trdHit1->GetRefIndex();
-      trdHit1 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indSpacePtB);
-      Int_t refInd2 = trdHit1->GetRefIndex();
-
-      trdHit1 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indSpacePtC);
-      Int_t refInd3 = trdHit1->GetRefIndex();
-      trdHit1 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indSpacePtD);
-      Int_t refInd4 = trdHit1->GetRefIndex();
-
-      CbmTrdPoint
-      *pPointAy,
-      *pPointBx,
-      *pPointCy,
-      *pPointDx;
-
-      pPointAy = (CbmTrdPoint*) fMCPointArray->At(refInd1);
-      pPointBx = (CbmTrdPoint*) fMCPointArray->At(refInd2);
-      pPointCy = (CbmTrdPoint*) fMCPointArray->At(refInd3);
-      pPointDx = (CbmTrdPoint*) fMCPointArray->At(refInd4);
-
-      Int_t trIDAy = pPointAy->GetTrackID();
-      Int_t trIDBx = pPointBx->GetTrackID();
-      Int_t trIDCy = pPointCy->GetTrackID();
-      Int_t trIDDx = pPointDx->GetTrackID();
-
-      CbmMCTrack *pMCtrack;
-      Int_t noTRDPoints;
-
-      Double_t
-      x1  = pPointBx->GetX(),
-      y1  = pPointAy->GetY(),
-      z1y = pPointAy->GetZ(),
-      z1x = pPointBx->GetZ(),
-      x2  = 0,
-      y2  = 0,
-      z2y = z1y+distBetweenLayer*2,
-      z2x = z1x+distBetweenLayer*2;
-
-      y2 = (y1/z1y)*z2y;
-      x2 = (x1/z1x)*z2x;
-
-      if(trIDAy == trIDCy){
-      pMCtrack = (CbmMCTrack*) fMCTrackArray->At(trIDAy);
-      noTRDPoints = pMCtrack->GetTrdPoints();
-
-      if(noTRDPoints == 12){
-      Double_t fPosY = pPointCy->GetY();
-      fDistY->Fill(fabs(fPosY-y2));
-      }
-      }
-
-      if(trIDBx == trIDDx){
-      pMCtrack = (CbmMCTrack*) fMCTrackArray->At(trIDBx);
-      noTRDPoints = pMCtrack->GetTrdPoints();
-
-      if(noTRDPoints == 12){
-      Double_t fPosX = pPointDx->GetX();
-      fDistX->Fill(fabs(fPosX-x2));
-      }
-      }
-      //--- end: for estimation dx and dy -------------------------------
-      */
-
-      if (trRight->GetCoord(0) > y2 + dY) {
-        continue;
-      }
-      else {
-        if (bFirst) {
-          bFirst        = false;
-          iSpacePtStart = iSpacePtB;
-        }
-      }
-      if (trRight->GetCoord(0) < y2 - dY) break;
-
-
-      if ((trRight->GetCoord(1) < x2 + dX) && (trRight->GetCoord(1) > x2 - dX)) {
-
-        iSegAcc14++;  //we have one more tracklet
-        //we create a new tracklet object to add it into a vector
-        clTr = new CbmL1TrdTracklet4();
-
-        clTr->SetCoord(0, y1);
-        clTr->SetCoord(1, x1);
-        clTr->SetCoord(2, yB);
-        clTr->SetCoord(3, xB);
-
-        clTr->M[0] = y1z;
-        clTr->M[1] = x1z;
-        clTr->M[2] = yBz;
-        clTr->M[3] = xBz;
-
-        //zed is a z-axis value to which we extrapolate
-        Double_t zed = 0;
-
-        //cout << trdHit1->GetZ() <<" : "<< trRight->GetCoord(3) << endl;
-        if (Int_t(trRight->GetCoord(3) + 1) == fTrd14_Z) {
-          zed = fTrd21_Z;
-          //cout <<"fTrd21_Z: "<< fTrd21_Z << endl;
-        }
-        //cout << trRight->GetCoord(3) <<"\t"<< fTrd14_Z << endl;
-        if (Int_t(trRight->GetCoord(3) + 1) == fTrd24_Z) {
-          zed = fTrd31_Z;
-          //cout <<"fTrd31_Z: "<< fTrd31_Z << endl;
-        }
-        //cout << trRight->GetCoord(3) <<"\t"<< fTrd24_Z << endl;
-
-        //if(trRight->GetPlanesID(1) == 4) zed = fTrd21_Z;
-        //if(trRight->GetPlanesID(1) == 8) zed = fTrd31_Z;
-        //	if(trRight->GetPlanesID(1) == 4) zed = 970;
-        //if(trRight->GetPlanesID(1) == 8) zed = fTrd31_Z;
-
-        /* //Extrapolated by CbmTrdTrackFitterKF::Extrapolate insteas fo DistTwoTrackletsY
-	   //Extrapolate && fo DistTwoTrackletsY give the same results
-	   CbmTrdTrack *trdTrack = new CbmTrdTrack();
-	   CbmTrdHit *hit1;
-
-	   hit1 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indSpacePtA);
-	   trdTrack->AddHit(indSpacePtA, hit1);
-	   hit1 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indSpacePtB);
-	   trdTrack->AddHit(indSpacePtB, hit1);
-	   hit1 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indSpacePtC);
-	   trdTrack->AddHit(indSpacePtC, hit1);
-	   hit1 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indSpacePtD);
-	   trdTrack->AddHit(indSpacePtD, hit1);
-
-	   trdTrack->SortHits();
-
-	   FairTrackParam *trParam;
-	   trParam = new FairTrackParam();
-	   trParam->SetQp(0.);
-	   trdTrack->SetParamFirst(*trParam);
-	   trdTrack->SetParamLast(*trParam);
-
-	   trdTrackFitterKF->DoFit(trdTrack);
-
-	   //FairTrackParam *e_track = new FairTrackParam();
-	   trdTrackFitterKF->Extrapolate(trdTrack, zed, trParam);
-
-	   clTr->SetExt(0, trParam->GetY());
-	   clTr->SetExt(1, trParam->GetX());
-
-	   cout <<"(MY, KF) "
-	   << DistTwoTrackletsY(indSpacePtB, indSpacePtD, zed) <<", "
-	   << trParam->GetX() << endl;
-	*/
-
-        //set the extrapolated coordinates - Y
-        clTr->SetExt(0, DistTwoTrackletsY(indSpacePtA, indSpacePtC, zed));
-        //set the extrapolated coordinates - X
-        clTr->SetExt(1, DistTwoTrackletsX(indSpacePtB, indSpacePtD, zed + distBetweenLayer));
-        //set the indices of all 4 point in tracklet
-        clTr->SetInd(0, indSpacePtA);
-        clTr->SetInd(1, indSpacePtB);
-        clTr->SetInd(2, indSpacePtC);
-        clTr->SetInd(3, indSpacePtD);
-        //initial value is always 0; it is modified if necessary
-        clTr->SetVal(0);
-
-        //position of the tracklet in tracklets vector
-        clTr->SetIndex(iIndex);
-        iIndex++;
-
-        //add a tracklet to a vector
-        clTrackletsAD.push_back(clTr);
-        noXYSurv++;
-      }
-    }
-  }
-  if (fVerbose > 2) {
-    cout << " ----------- Tracklet 12-34 ------------------" << endl;
-    cout << " Number of X survivors: " << noXSurv << endl;
-    cout << " Number of Y survivors: " << noYSurv << endl;
-    cout << "Number of XY survivors: " << noXYSurv << endl;
-    cout << "   Number of all pairs: " << noAllPairs << endl;
-  }
-}
-// -----------------------------------------------------------------------
-
-void CbmL1CATrdTrackFinderSA::CreateSpacePoints(vector<LayerWithHits> vTrdHitArrayA,
-                                                vector<LayerWithHits> vTrdHitArrayB,
-                                                vector<CbmL1TrdTracklet*>& clSpacePointsAB, Double_t sigmaA,
-                                                Double_t sigmaB)
-{
-  //method to create Space Points (SP) from two individual detector hist
-
-  vector<LayerWithHits>::iterator itA;
-  vector<LayerWithHits>::iterator itB;
-  vector<LayerWithHits>::iterator itStart;
-
-  Int_t noOverlapsAB = 0,
-        //    noMCOverlapsAB = 0,
-    iInd = 0;
-
-  CbmL1TrdTracklet* clSpacePt;
-
-  Int_t indA, indB;
-
-  Double_t A_X, A_Y, A_Z, A_DX, A_DY;
-
-  Double_t B_X, B_Y, B_Z, B_DX, B_DY;
-
-  Int_t A_planeID, B_planeID;
-
-  Int_t A_mcTrID, B_mcTrID;
-
-  //   Double_t SPlength;
-
-
-  /*
-    68,0%; <= 1sigma
-    95,5%; <= 2sigma
-    99,7%, <= 3sigma
-  */
-
-  itStart = vTrdHitArrayB.begin();
-
-  for (itA = vTrdHitArrayA.begin(); itA != vTrdHitArrayA.end(); itA++) {
-
-    indA      = (*itA).hitIndex;
-    A_X       = (*itA).X;
-    A_Y       = (*itA).Y;
-    A_Z       = (*itA).Z;
-    A_DX      = (*itA).DX;
-    A_DY      = (*itA).DY;
-    A_planeID = (*itA).planeID;
-    A_mcTrID  = (*itA).mcTrackID;
-
-    /*//--- extrapolate --------------------------------------------
-      Double_t distBetweenLayer = fTrd14_Z-fTrd13_Z;
-      cout << "distBetweenLayer: " << distBetweenLayer << endl;
-
-      Double_t
-      x1  = A_X,
-      y1  = A_Y,
-      z1y = A_Z,
-      z1x = A_Z,
-      x2  = 0,
-      y2  = 0,
-      z2y = z1y+distBetweenLayer, // 12 is a distance beetwen plane in TRD
-      z2x = z1x+distBetweenLayer; // 12 is a distance beetwen plane in TRD
-
-      y2 = (y1/z1y)*z2y;
-      x2 = (x1/z1x)*z2x;
-      //--- end: extrapolate --------------------------------------*/
-
-    Bool_t bFirst = true;
-    for (itB = itStart; itB != vTrdHitArrayB.end(); itB++) {
-
-      indB      = (*itB).hitIndex;
-      B_X       = (*itB).X;
-      B_Y       = (*itB).Y;
-      B_Z       = (*itB).Z;
-      B_DX      = (*itB).DX;
-      B_DY      = (*itB).DY;
-      B_planeID = (*itB).planeID;
-      B_mcTrID  = (*itB).mcTrackID;
-
-      if (B_Y + sigmaB * B_DY < A_Y - sigmaA * A_DY) {
-        continue;
-      }
-      else {
-        /* Finding the bottom level to begin the second loop.
-	     The value of bottom level is taken from previous "second loop".*/
-        if (bFirst) {
-          itStart = itB;
-          bFirst  = false;
-        }
-      }
-
-      if (B_Y - sigmaB * B_DY > A_Y + sigmaA * A_DY) break;
-
-      // cout <<"(A_X, A_DX, sigmaA*A_DX) "<< A_X <<", "<< A_DX <<", "<< sigmaA*A_DX <<", "<< endl;
-      // cout <<"(A_Y, A_DY, sigmaA*A_DY) "<< A_Y <<", "<< A_DY <<", "<< sigmaA*A_DY <<", "<< endl;
-      // cout <<"(B_X, B_DX, sigmaB*B_DX) "<< B_X <<", "<< B_DX <<", "<< sigmaB*B_DX <<", "<< endl;
-      // cout <<"(B_Y, B_DY, sigmaB*B_DY) "<< B_Y <<", "<< B_DY <<", "<< sigmaB*B_DY <<", "<< endl;
-      // cout <<"-----------------------------------------"<< endl;
-      //      if (B_Y < y2 - sigmaB*A_DY) continue;
-      //      if (B_Y > y2 + sigmaB*A_DY) break;
-      //      cout <<"[Extrapol, Real, Diff] "
-      //   << y2 <<", "<< B_Y <<", "<< B_Y-y2 << endl;
-
-      if ((B_X - sigmaB * B_DX < A_X + sigmaA * A_DX) && (B_X + sigmaB * B_DX > A_X - sigmaA * A_DX)) {
-
-        noOverlapsAB++;
-        clSpacePt = new CbmL1TrdTracklet();
-
-        clSpacePt->SetIndLeft(indA);
-        clSpacePt->SetIndRight(indB);
-        clSpacePt->SetVal(0);
-        clSpacePt->SetIndex(iInd);
-        clSpacePt->SetCoord(0, A_Y);
-        clSpacePt->SetCoord(1, B_X);
-        clSpacePt->SetCoord(2, A_Z);
-        clSpacePt->SetCoord(3, B_Z);
-        clSpacePt->SetPlanesID(A_planeID, B_planeID);
-
-        // 	//----------------------------------------
-        // 	TVector3 t1, t2, t3;
-        // 	t1.SetXYZ(A_X, A_Y, A_Z);
-        // 	t2.SetXYZ(B_X, B_Y, B_Z);
-        // 	t3 = t2 - t1;
-        // 	SPlength = t3.Mag();
-
-        // 	Double_t
-        // 	  x = 0,
-        // 	  y = 0,
-        // 	  z = 0,
-        // 	  t = 0;
-
-        // 	 t = (z - A_Z)/(B_Z - A_Z);
-        // 	 x = A_X + t*(B_X-A_X);
-        // 	 y = A_Y + t*(B_Y-A_Y);
-
-        // 	//SPlength = sqrt(2*(B_Y-A_Y)*(B_Y-A_Y));
-        // 	 if(Station == 1){
-        // 	   if(A_mcTrID == B_mcTrID){
-        // 	     noMCOverlapsAB++;
-        // 	     fSPlengthMC->Fill(SPlength);
-        // 	     fYat0MC->Fill(x);
-        // 	   }else{
-        // 	     fSPlength->Fill(SPlength);
-        // 	     fYat0->Fill(x);
-        // 	   }
-        // 	 }
-        iInd++;
-
-        clSpacePointsAB.push_back(clSpacePt);
-
-        if (A_mcTrID == B_mcTrID) {
-          fh_SP_xDiff_MC->Fill(A_X - B_X);
-          fh_SP_yDiff_MC->Fill(A_Y - B_Y);
-        }
-        else {
-          fh_SP_xDiff_nMC->Fill(A_X - B_X);
-          fh_SP_yDiff_nMC->Fill(A_Y - B_Y);
-        }
-      }
-    }
-  }
-  iInd = 0;
-  if (fVerbose > 1) cout << "--- No Space Points: " << noOverlapsAB << endl;
-  //   cout <<"--- (No SP, MCSP) "
-  //        << noOverlapsAB <<", "
-  //        << noMCOverlapsAB <<endl;
-}
-
-
-// -----------------------------------------------------------------------
-void CbmL1CATrdTrackFinderSA::CreateAndManageSegments(vector<CbmL1TrdTracklet4*> clTracklets14,
-                                                      vector<CbmL1TrdTracklet4*> clTracklets58,
-                                                      vector<CbmL1TrdTracklet4*> clTracklets912)
-{
-  //CreateAndManageSegments with no long track creation, 1 track = 1 segment
-
-  vector<CbmL1TrdTracklet4*>::iterator itclSeg;
-
-  CbmTrdTrack* tr1 = NULL;
-  //   CbmTrdHit* hit1 = NULL;
-  //   CbmTrdHit* hit2 = NULL;
-  //   CbmTrdHit* hit3 = NULL;
-  //   CbmTrdHit* hit4 = NULL;
-
-  CbmL1TrdTracklet4* clTrdSeg;
-
-  Int_t trackArrayInd = 0;
-
-  Int_t indTrdHit1, indTrdHit2, indTrdHit3, indTrdHit4;
-
-  for (itclSeg = clTracklets14.begin(); itclSeg != clTracklets14.end(); itclSeg++) {
-
-    clTrdSeg = *itclSeg;
-    tr1      = new CbmTrdTrack();
-
-    indTrdHit1 = clTrdSeg->GetInd(0);
-    //     hit1 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indTrdHit1) );
-    tr1->AddHit(indTrdHit1, kTRDHIT);
-
-    indTrdHit2 = clTrdSeg->GetInd(1);
-    //     hit2 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indTrdHit2) );
-    tr1->AddHit(indTrdHit2, kTRDHIT);
-
-    indTrdHit3 = clTrdSeg->GetInd(2);
-    //     hit3 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indTrdHit3) );
-    tr1->AddHit(indTrdHit3, kTRDHIT);
-
-    indTrdHit4 = clTrdSeg->GetInd(3);
-    //     hit4 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indTrdHit4) );
-    tr1->AddHit(indTrdHit4, kTRDHIT);
-
-    //    tr1->SortHits();
-
-    new ((*fArrayTrdTrack)[trackArrayInd]) CbmTrdTrack(*tr1);
-
-    delete tr1;
-    trackArrayInd++;
-  }
-
-  for (itclSeg = clTracklets58.begin(); itclSeg != clTracklets58.end(); itclSeg++) {
-
-    clTrdSeg = *itclSeg;
-    tr1      = new CbmTrdTrack();
-
-    indTrdHit1 = clTrdSeg->GetInd(0);
-    //     hit1 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indTrdHit1) );
-    tr1->AddHit(indTrdHit1, kTRDHIT);
-
-    indTrdHit2 = clTrdSeg->GetInd(1);
-    //     hit2 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indTrdHit2) );
-    tr1->AddHit(indTrdHit2, kTRDHIT);
-
-    indTrdHit3 = clTrdSeg->GetInd(2);
-    //     hit3 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indTrdHit3) );
-    tr1->AddHit(indTrdHit3, kTRDHIT);
-
-    indTrdHit4 = clTrdSeg->GetInd(3);
-    //     hit4 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indTrdHit4) );
-    tr1->AddHit(indTrdHit4, kTRDHIT);
-
-    //    tr1->SortHits();
-
-    new ((*fArrayTrdTrack)[trackArrayInd]) CbmTrdTrack(*tr1);
-
-    delete tr1;
-    trackArrayInd++;
-  }
-
-  for (itclSeg = clTracklets912.begin(); itclSeg != clTracklets912.end(); itclSeg++) {
-
-    clTrdSeg = *itclSeg;
-    tr1      = new CbmTrdTrack();
-
-    indTrdHit1 = clTrdSeg->GetInd(0);
-    //     hit1 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indTrdHit1) );
-    tr1->AddHit(indTrdHit1, kTRDHIT);
-
-    indTrdHit2 = clTrdSeg->GetInd(1);
-    //     hit2 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indTrdHit2) );
-    tr1->AddHit(indTrdHit2, kTRDHIT);
-
-    indTrdHit3 = clTrdSeg->GetInd(2);
-    //     hit3 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indTrdHit3) );
-    tr1->AddHit(indTrdHit3, kTRDHIT);
-
-    indTrdHit4 = clTrdSeg->GetInd(3);
-    //     hit4 = L1_DYNAMIC_CAST<CbmTrdHit*>( fArrayTrdHit->At(indTrdHit4) );
-    tr1->AddHit(indTrdHit4, kTRDHIT);
-
-    //    tr1->SortHits();
-
-    new ((*fArrayTrdTrack)[trackArrayInd]) CbmTrdTrack(*tr1);
-
-    delete tr1;
-    trackArrayInd++;
-  }
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-Double_t CbmL1CATrdTrackFinderSA::Fit(CbmTrdTrack* tr)
-{  //fits a track with a straight line and caluculates each point's deviation
-
-  Double_t chi2 = 0;
-
-  Int_t iHit;
-  CbmTrdHit* pHit[12];
-
-  Double_t y1, y2, z1, z2, yA[12], zA[12], yB[12], zB[12];
-
-  Double_t dist1 = 0;
-  Double_t dist2 = 0;
-  //  Double_t sum1 = 0;
-  //  Double_t sum2 = 0;
-  Double_t yS1 = 0;
-  Double_t yS2 = 0;
-
-  Int_t noHits = tr->GetNofHits();
-
-  for (int i = 0; i < noHits; i++) {
-    iHit = tr->GetHitIndex(i);
-
-    pHit[i] = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(iHit));
-  }
-
-  //first and last X(orY) pointa in the track
-  yA[0]  = pHit[0]->GetY();
-  zA[0]  = pHit[0]->GetZ();
-  yB[10] = pHit[10]->GetY();
-  zB[10] = pHit[10]->GetZ();
-
-  //first and last Y(orX) pointa in the track
-  yA[1]  = pHit[1]->GetX();
-  zA[1]  = pHit[1]->GetZ();
-  yB[11] = pHit[11]->GetX();
-  zB[11] = pHit[11]->GetZ();
-
-  Int_t t1 = 0;
-  Int_t t2 = 1;
-
-  for (int i = 0; i < 4; i++) {
-
-    //for X(orY) coordinates
-    t1 += 2;
-    y1 = fabs(pHit[t1]->GetY());
-    z1 = pHit[t1]->GetZ();
-
-    yS1   = fabs((((yB[10] - yA[0]) * (z1 - zA[0])) / (zB[10] - zA[0])) + yA[0]);
-    dist1 = fabs(yS1 - y1);
-
-    //for Y(orX) coordinates
-    t2 += 2;
-    y2 = fabs(pHit[t2]->GetX());
-    z2 = pHit[t2]->GetZ();
-
-    yS2   = fabs((((yB[11] - yA[1]) * (z2 - zA[1])) / (zB[11] - zA[1])) + yA[1]);
-    dist2 = fabs(yS2 - y2);
-
-    chi2 += (dist1 + dist2) / 2;
-  }
-
-  //  cout << "chi2: " << chi2 << endl;
-
-
-  //   for(int i = 0; i < 4; i++){
-
-  //     //for X(orY) coordinates
-  //     t1+=2;
-  //     y1 = fabs(pHit[t1]->Y());
-  //     z1 = pHit[t1]->Z();
-
-  //     yS1 = fabs((((yB[10]-yA[0])*(z1-zA[0]))/(zB[10]-zA[0]))+yA[0]);
-  //     dist1 = fabs(yS1-y1);
-  //     sum1+=dist1;
-
-  //     //for Y(orX) coordinates
-  //     t2+=2;
-  //     y2 = fabs(pHit[t2]->X());
-  //     z2 = pHit[t2]->Z();
-
-  //     yS2 = fabs((((yB[11]-yA[1])*(z2-zA[1]))/(zB[11]-zA[1]))+yA[1]);
-  //     dist2 = fabs(yS2-y2);
-  //     sum2+=dist2;
-  //   }
-  //  chi2=sum1+sum2;
-
-
-  // Calculate length of the track ---------------
-  //   Double_t
-  //     length0 = 0,
-  //     length1 = 0,
-  //     length2 = 0;
-
-  //   t1 = 0;
-  //   t2 = 1;
-
-  //   Double_t
-  //     x = 0,
-  //     y = 0,
-  //     z = 0;
-
-  //   for(int i = 0; i < 4; i++){
-  //     y = fabs(pHit[t1+2]->Y())-fabs(pHit[t1]->Y());
-  //     z = (pHit[t1+2]->Z())-(pHit[t1]->Z());
-  //     length1 += sqrt(y*y + z*z);
-  //     t1+=2;
-
-  //     x = fabs(pHit[t2+2]->X())-fabs(pHit[t2]->X());
-  //     z = (pHit[t2+2]->Z())-(pHit[t2]->Z());
-  //     length2 += sqrt(x*x + z*z);
-  //     t2+=2;
-  //   }
-
-  //   width0 = width1 + width2;
-  //   //  cout << width0 << endl;
-
-  return chi2;
-  //return length0;
-}
-// -----------------------------------------------------------------------
-
-Double_t CbmL1CATrdTrackFinderSA::Fit(Int_t M[])
-{  //fits a track with a straight line and caluculates each point's deviation
-
-  Double_t chi2 = 0;
-
-  Int_t iHit;
-  CbmTrdHit* pHit[12];
-
-  Double_t y1, y2, z1, z2, yA[12], zA[12], yB[12], zB[12];
-
-  Double_t dist1 = 0;
-  Double_t dist2 = 0;
-  Double_t yS1   = 0;
-  Double_t yS2   = 0;
-
-  Int_t noHits = 12;
-
-  for (int i = 0; i < noHits; i++) {
-    iHit    = M[i];
-    pHit[i] = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(iHit));
-  }
-
-  //first and last X(orY) pointa in the track
-  yA[0]  = pHit[0]->GetY();
-  zA[0]  = pHit[0]->GetZ();
-  yB[10] = pHit[10]->GetY();
-  zB[10] = pHit[10]->GetZ();
-
-  //first and last Y(orX) pointa in the track
-  yA[1]  = pHit[1]->GetX();
-  zA[1]  = pHit[1]->GetZ();
-  yB[11] = pHit[11]->GetX();
-  zB[11] = pHit[11]->GetZ();
-
-  Int_t t1 = 0;
-  Int_t t2 = 1;
-
-  for (int i = 0; i < 4; i++) {
-
-    //for X(orY) coordinates
-    t1 += 2;
-    y1 = fabs(pHit[t1]->GetY());
-    z1 = pHit[t1]->GetZ();
-
-    yS1   = fabs((((yB[10] - yA[0]) * (z1 - zA[0])) / (zB[10] - zA[0])) + yA[0]);
-    dist1 = fabs(yS1 - y1);
-
-    //for Y(orX) coordinates
-    t2 += 2;
-    y2 = fabs(pHit[t2]->GetX());
-    z2 = pHit[t2]->GetZ();
-
-    yS2   = fabs((((yB[11] - yA[1]) * (z2 - zA[1])) / (zB[11] - zA[1])) + yA[1]);
-    dist2 = fabs(yS2 - y2);
-
-    //chi2 += (dist2+dist1)/2;
-    chi2 += sqrt(dist1 * dist1 + dist2 * dist2);
-  }
-  return chi2;
-}
-// -----------------------------------------------------------------------
-
-// -----------------------------------------------------------------------
-Double_t CbmL1CATrdTrackFinderSA::FitLinear(Int_t M[], Int_t /*var*/ = 1)
-{
-  //fit using a least square method
-
-
-  Int_t noHits = 12;
-
-  Int_t iHit;
-  CbmTrdHit* hit;
-
-  Double_t C1[12];
-  Double_t C2[12];
-  Double_t Z[12];
-
-  Double_t n = 12;
-
-  for (int i = 0; i < 12; i++) {
-    C1[i] = 0;
-    C2[i] = 0;
-    Z[i]  = 0;
-  }
-
-  //  Int_t ind = 0;
-
-  for (int i = 0; i < noHits; i++) {
-
-    iHit = M[i];
-    hit  = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(iHit));
-
-    C1[i] = hit->GetX();
-    C2[i] = hit->GetY();
-    Z[i]  = hit->GetZ();
-  }
-
-  Double_t sumXZ = 0, sumYZ = 0, sumX = 0, sumY = 0, sumZx = 0, sumZy = 0, sumX2 = 0, sumY2 = 0, sumZx2 = 0, sumZy2 = 0;
-
-  for (int i = 0; i < 12; i += 2) {
-    //    cout << "C1[" << i << "]=" << C1[i] << endl;
-    //    cout << "C2[" << i << "]=" << C2[i] << endl;
-    //    if(!(i % 2))
-    {
-      sumXZ += C1[i] * Z[i];
-
-      sumX += C1[i];
-      sumX2 += C1[i] * C1[i];
-
-      sumZx += Z[i];
-      sumZx2 += Z[i] * Z[i];
-    }
-  }
-
-  for (int i = 1; i < 12; i += 2) {
-    //    cout << "C1[" << i << "]=" << C1[i] << endl;
-    //    cout << "C2[" << i << "]=" << C2[i] << endl;
-    //    if(!((1i % 2))
-    {
-      sumYZ += C2[i] * Z[i];
-
-      sumY += C2[i];
-      sumY2 += C2[i] * C2[i];
-
-      sumZy += Z[i];
-      sumZy2 += Z[i] * Z[i];
-    }
-  }
-
-
-  cout << "";
-  //   Double_t a = (n*sumXZ - sumX*sumZ)/(n*sumX2 - sumX*sumX);
-  //   Double_t b = (sumZ - a*sumX)/n;
-  Double_t r1 = (n * sumXZ - sumX * sumZx) / sqrt((n * sumX2 - sumX * sumX) * (n * sumZx2 - sumZx * sumZx));
-  //  Double_t Sa = sqrt((n*(sumY2 -a*sumXZ-b*sumY))/((n-2)*(n*sumX2-sumX*sumX)));
-  //  Double_t Sb = Sa*sqrt(sumX2/n);
-
-
-  Double_t r2 = (n * sumYZ - sumY * sumZy) / sqrt((n * sumY2 - sumY * sumY) * (n * sumZy2 - sumZy * sumZy));
-
-
-  //   cout << "Linear coefficients: a= "
-  //        << a << ", Sa= " << Sa << ", b= " << b << ", Sb= " << Sb << endl
-  //        << ", r=" << r << ", chi2=" << tr->GetChi2() << endl;
-
-
-  return sqrt(r1 * r1 + r2 * r2);
-}
-
-Double_t CbmL1CATrdTrackFinderSA::FitLSM(Int_t M[])
-{
-
-  Double_t chi2 = 0;
-  Int_t iHit;
-  CbmTrdHit* pHit[12];
-
-  Int_t noHits = 12;
-  for (int i = 0; i < noHits; i++) {
-    iHit    = M[i];
-    pHit[i] = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(iHit));
-  }
-
-  Double_t xAv = 0, yAv = 0, zAvx = 0, zAvy = 0, sumXiXav = 0, sumYiYav = 0, sumXiXav_ZiZAv = 0, sumYiYav_ZiZAv = 0,
-           sumZiZav_x = 0, sumZiZav_y = 0, bY = 0, bX = 0;
-
-  for (int i = 0; i < 12; i += 2) {
-    yAv += pHit[i]->GetY();
-    zAvy += pHit[i]->GetZ();
-  }
-  for (int i = 1; i < 12; i += 2) {
-    xAv += pHit[i]->GetX();
-    zAvx += pHit[i]->GetZ();
-  }
-
-  for (int i = 0; i < 12; i += 2) {
-    Double_t dy = pHit[i]->GetY() - yAv;
-    Double_t dz = pHit[i]->GetZ() - zAvy;
-    sumYiYav_ZiZAv += dy * dz;
-    sumYiYav += dy * dy;
-    sumZiZav_y += dz * dz;
-  }
-  for (int i = 1; i < 12; i += 2) {
-    Double_t dx = pHit[i]->GetX() - xAv;
-    Double_t dz = pHit[i]->GetZ() - zAvx;
-    sumXiXav_ZiZAv += dx * dz;
-    sumXiXav += dx * dx;
-    sumZiZav_x += dz * dz;
-  }
-
-  bY = sumYiYav_ZiZAv / sumYiYav;
-  bX = sumXiXav_ZiZAv / sumXiXav;
-
-  chi2 = sqrt((sumZiZav_y - bY * sumYiYav_ZiZAv) / (4)) + sqrt((sumZiZav_x - bX * sumXiXav_ZiZAv) / (4));
-
-  return chi2;
-}
-
-
-Double_t CbmL1CATrdTrackFinderSA::FitKF(CbmTrdTrack* pTrack)
-{
-
-  // Declare variables outside the loop
-  CbmTrdHit* pHit     = NULL;
-  CbmKFTrdHit* pKFHit = NULL;
-  Int_t hitIndex      = 0;
-  //   Int_t materialIndex = 0;
-  Double_t eLoss = 0.;
-
-  // Loop over TRD hits of the track
-  Int_t nTracks = pTrack->GetNofHits();
-  for (Int_t iHit = 0; iHit < nTracks; iHit++) {
-    // Get current hit index
-    hitIndex = pTrack->GetHitIndex(iHit);
-    //Get the pointer to the CbmTrdHit
-    pHit = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(hitIndex));
-    // Accumulate TR energy loss
-    eLoss += pHit->GetELoss();
-    // Create CbmKFTrdHit
-    pKFHit = new CbmKFTrdHit();
-    pKFHit->Create(pHit);
-    //     materialIndex = pKFHit->MaterialIndex;
-    // Add to the KFTrack
-    fKfTrack->fHits.push_back(pKFHit);
-  }  // Loop over TRD hits
-
-  fKfTrack->GetRefChi2() = 0.;
-  fKfTrack->GetRefNDF()  = 0;
-  fKfTrack->SetTrackParam(*(const_cast<FairTrackParam*>(pTrack->GetParamLast())));
-
-  fKfTrack->Fit();
-  // Store parameters at first layer
-  fKfTrack->GetTrackParam(*(const_cast<FairTrackParam*>(pTrack->GetParamFirst())));
-  // Store parameters at last layer
-  fKfTrack->GetTrackParam(*(const_cast<FairTrackParam*>(pTrack->GetParamLast())));
-  // Store chi2 of fit
-  pTrack->SetChiSq(fKfTrack->GetRefChi2());
-  pTrack->SetNDF(fKfTrack->GetRefNDF());
-
-  // Store accumulated TR energy loss
-  pTrack->SetELoss(eLoss);
-
-  // Delete CbmKFTrdHit objects
-  vector<CbmKFHit*>::iterator it;
-  for (it = fKfTrack->fHits.begin(); it != fKfTrack->fHits.end(); it++) {
-    pKFHit = L1_DYNAMIC_CAST<CbmKFTrdHit*>(*it);
-    delete pKFHit;
-  }
-  fKfTrack->fHits.clear();
-
-  return 0;
-}
-
-Double_t CbmL1CATrdTrackFinderSA::FitTLinearFitter(Int_t M[])
-{
-
-  Double_t chi2      = 0;
-  Double_t chi2x     = 0;
-  Double_t chi2y     = 0;
-  const Int_t nrPnts = 12;
-  Int_t k            = 0;
-  Int_t w            = 0;
-  Int_t j            = 6;
-  Double_t ax[6];
-  Double_t ay[6];
-  Double_t az1[6];
-  //   Double_t az2[6];
-
-  CbmTrdHit* trdHit;
-  for (int i = 0; i < nrPnts; i++) {
-    trdHit = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(M[i]));
-    k      = i + 1;
-    if ((k % 2) == 0) {
-      ax[w]  = trdHit->GetX();
-      az1[w] = trdHit->GetZ();
-      w++;
-    }
-    else {
-      ay[w] = trdHit->GetY();
-      //       az2[w] = trdHit->GetZ();
-    }
-  }
-
-  TLinearFitter* lf;
-  lf = new TLinearFitter(2);
-  lf->SetFormula("hyp2");
-  lf->StoreData(0);
-
-  TVectorD x;
-  x.Use(j, ax);
-  TVectorD z1;
-  z1.Use(j, az1);
-  lf->AssignData(j, 1, ax, az1);
-  lf->Eval();
-  chi2x = lf->GetChisquare();
-
-  delete lf;
-  //--------------------------------
-  lf = new TLinearFitter(2);
-  lf->SetFormula("hyp2");
-  lf->StoreData(0);
-
-  TVectorD y;
-  x.Use(j, ay);
-  TVectorD z2;
-  z2.Use(j, az1);
-  lf->AssignData(j, 1, ay, az1);
-  lf->Eval();
-  chi2y = lf->GetChisquare();
-
-  chi2 = chi2x + chi2y;
-
-  return chi2;
-}
-
-Int_t CbmL1CATrdTrackFinderSA::PdgToCharge(Int_t pdgCode)
-{
-  Int_t value;
-  switch (pdgCode) {  //switch
-    case 11:          //electron
-    {
-      value = -1;
-      break;
-    }
-    case -11:  //positron
-    {
-      value = +1;
-      break;
-    }
-    case 13:  //muon-
-    {
-      value = -1;
-      break;
-    }
-    case -13:  //muon+
-    {
-      value = +1;
-      break;
-    }
-    case 22: {
-      value = 0;  //gamma
-      break;
-    }
-    case 211: {
-      value = +1;  //pi+
-      break;
-    }
-    case -211: {
-      value = -1;  //pi-
-      break;
-    }
-    case 111: {
-      value = 0;  //pi0
-      break;
-    }
-    case 213: {
-      value = +1;  //rho+
-      break;
-    }
-    case -213: {
-      value = -1;  //rho-
-      break;
-    }
-    case 113: {
-      value = 0;  //rho0
-      break;
-    }
-    case 221: {
-      value = 0;  //eta
-      break;
-    }
-    case 323: {
-      value = 0;  //omega
-      break;
-    }
-    case 333: {
-      value = 0;  //phi
-      break;
-    }
-    case 321: {
-      value = +1;  //kaon+
-      break;
-    }
-    case -321: {
-      value = -1;  //kaon-
-      break;
-    }
-
-    case 443: {
-      value = 0;  //jpsi
-      break;
-    }
-    case 2112: {
-      value = 0;  //neutron
-      break;
-    }
-    case 2212: {
-      value = +1;  //proton
-      break;
-    }
-    case -2212: {
-      value = 0;  //anti-proton (?!)
-      break;
-    }
-    case 3222: {
-      value = +1;  //sigma+
-      break;
-    }
-    case 3112: {
-      value = -1;  //sigma-
-      break;
-    }
-    case 3212: {
-      value = 0;  //sigma0
-      break;
-    }
-    default: {
-      value = -1000;
-      break;
-    }
-  }
-  return value;
-}
-
-Bool_t CbmL1CATrdTrackFinderSA::Rejection(Double_t Procent, Int_t num)
-{
-
-  Bool_t accept = true;
-  Int_t random;
-
-  random = (rand() % num);
-
-  if (random >= Procent) accept = false;
-
-  return accept;
-}
diff --git a/reco/KF/obsolete/CbmL1CATrdTrackFinderSA.h b/reco/KF/obsolete/CbmL1CATrdTrackFinderSA.h
deleted file mode 100644
index 15f0909f1ac59919c9924107f8e9e7817096f007..0000000000000000000000000000000000000000
--- a/reco/KF/obsolete/CbmL1CATrdTrackFinderSA.h
+++ /dev/null
@@ -1,295 +0,0 @@
-/* Copyright (C) 2006-2010 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Arkadiusz Bubak, M. Krauze, Sergey Gorbunov, Denis Bertini [committer] */
-
-// -----------------------------------------------------------------------
-// -----                    CbmL1CATrdTrackFinderSA                  -----
-// -----            Created 2/12/2006 by A. Bubak & M. Krauze        -----
-// -----------------------------------------------------------------------
-
-/** CbmL1CATrdTrackFinderSA_Hits
- *@author A.Bubak<abubak@nuph.us.edu.pl> & M.Krauze<meszik@nuph.us.edu.pl>
- ** Algorithm for track finding in TRD, based on Cellular Automathon algorithm
- **/
-
-
-#ifndef CBML1CATRDTRACKFINDERSA_HITS
-#define CBML1CATRDTRACKFINDERSA_HITS
-
-#include "CbmTrdTrack.h"
-#include "CbmTrdTrackFinder.h"
-#include "TStopwatch.h"
-
-#include <map>
-#include <set>
-#include <vector>
-
-class TClonesArray;
-class CbmTrdHit;
-class CbmKF;
-class CbmKFTrack;
-class TH1F;
-class TH2F;
-class CbmGeoTrdPar;
-class CbmTrdTrackFitterKF;
-class CbmL1TrdTracklet;
-class CbmL1TrdTracklet4;
-
-class CbmL1CATrdTrackFinderSA : public CbmTrdTrackFinder {
- private:
-  CbmL1CATrdTrackFinderSA(const CbmL1CATrdTrackFinderSA&);
-  CbmL1CATrdTrackFinderSA operator=(const CbmL1CATrdTrackFinderSA&);
-
- public:
-  /** Default constructor **/
-  CbmL1CATrdTrackFinderSA();
-
-  /** Destructor **/
-  virtual ~CbmL1CATrdTrackFinderSA();
-
-
-  static CbmL1CATrdTrackFinderSA* Instance() { return fInstance; }
-  static CbmL1CATrdTrackFinderSA* fInstance;
-
-  /** Initialisation **/
-  void Init();
-
-  /** Track finding algorithm **/
-  Int_t DoFind(TClonesArray* hitArray, TClonesArray* trackArray);
-
-  struct Layer {
-    Layer() {}
-    Double_t X[12];
-    Double_t Y[12];
-    Double_t Z[12];
-    Double_t scale[12];
-  } geoLayer;
-
-  Int_t fNTrdHits;
-
-  /** TRD layout **/
-  Int_t fNoTrdStations;
-  Int_t fNoTrdPerStation;
-
-  /**  Structure contains trd hits divided per given station **/
-  struct LayerWithHits {
-    LayerWithHits() : hitIndex(0), mcTrackID(0), X(0), Y(0), Z(0), DX(0), DY(0), planeID(0) {}
-    Int_t hitIndex;
-    Int_t mcTrackID;
-    Double_t X;
-    Double_t Y;
-    Double_t Z;
-    Double_t DX;
-    Double_t DY;
-    Int_t planeID;
-  } planeHits;
-
-  //--- vector with hits which belong to given trd plane
-  std::vector<LayerWithHits> fvTrdHitArr[12];
-  std::vector<LayerWithHits> fvTrdPointArr[12];
-
-  std::vector<LayerWithHits>::iterator fivTrdHitArr;
-
-  /** Data branches **/
-  TClonesArray* fArrayTrdHit;
-  TClonesArray* fArrayTrdTrack;
-
- private:
-  CbmGeoTrdPar* TrdPar;
-
-  /** Event counter **/
-  Int_t fEvents;
-  Int_t fNofEvents;
-
-  /** Arrays of MC information **/
-  TClonesArray* fMCTrackArray;
-  TClonesArray* fMCPointArray;
-
-  /** Traxk fitter **/
-  CbmTrdTrackFitterKF* trdTrackFitterKF;
-
-  /** Verbosity level **/
-  Int_t fVerbose;
-
-  /** Array of sorted TRD hits **/
-  Int_t fNoTrdHits[12];
-  Int_t fTrdHitIndex[12][10000];
-
-  /** Arrays for TRD tracks **/
-  std::vector<CbmTrdTrack*> fvTempArray;
-  std::vector<CbmTrdTrack*> fvFoundTracks;
-
-  inline static Bool_t CompareY(LayerWithHits A, LayerWithHits B) { return (A.Y < B.Y); };
-
-  /** Structure contains temporary values of track candidates **/
-  struct TempTrackStruct {
-    TempTrackStruct() : Chi2(0){};
-    Double_t Chi2;
-    Int_t M[12];
-  } tempTrack;
-
-  inline static Bool_t CompareChi2(TempTrackStruct A, TempTrackStruct B) { return (A.Chi2 < B.Chi2); };
-
-
-  // iterators to vectors
-  std::vector<Int_t>::iterator iStation1;
-  std::vector<Int_t>::iterator iStation2;
-
-  std::vector<Int_t>::iterator fImapSt1;
-  std::vector<Int_t>::iterator fImapSt2;
-
-  std::vector<CbmL1TrdTracklet4*>::iterator itTrackletsLeft;
-  std::vector<CbmL1TrdTracklet4*>::iterator itTrackletsRight;
-
-  Int_t iHitMap1, iHitMap2;
-  Double_t iHitMapY1, iHitMapY2;
-
-  /** Z position selected trd layers **/
-  Double_t fTrd13_Z, fTrd14_Z, fTrd21_Z, fTrd24_Z, fTrd31_Z;
-
-  CbmKFTrack* fKfTrack;  // KF track
-
-  /** To check time comsumption of procedures **/
-  TStopwatch createSegments, findNeighbour, createSPs, createSPs_SL, sortSPs, doFind, sortHits, tagTracks, createTracks,
-    selectTracks, delTime, secondLoopTime, refittingKF, thirdLoopTime;
-
-  Double_t totCreateSegments, totFindNeighbour, totCreateSPs, totCreateSPs_SL, totSortSPs, totDoFind, totSortHits,
-    totTagTracks, totCreateTracks, totDelTime, totSecondLoopTime, totThirdLoopTime, totSelectTracks, totRefittingKF;
-
-  void DeleteTracklets(std::vector<CbmL1TrdTracklet4*> vect);
-  void DeleteTracklets(std::vector<CbmL1TrdTracklet*> vect);
-
-  Double_t DistTwoTrackletsX(Int_t iIndexFirst, Int_t iIndexSecond, Double_t zed);
-
-  Double_t DistTwoTrackletsY(Int_t iIndexFirst, Int_t iIndexSecond, Double_t zed);
-
-  void CreateSpacePoints(std::vector<LayerWithHits> vTrdHitArrayA, std::vector<LayerWithHits> vTrdHitArrayB,
-                         std::vector<CbmL1TrdTracklet*>& clSpacePointsAB, Double_t sigmaA, Double_t sigmaB);
-
-  void CreateSegments(std::vector<CbmL1TrdTracklet*> clSpacePointsAB, std::vector<CbmL1TrdTracklet*> clSpacePointsCD,
-                      std::vector<CbmL1TrdTracklet4*>& clTrackletsAD, Double_t dX, Double_t dY);
-
-  void TagSegments(std::vector<CbmL1TrdTracklet4*>& clTrackletsA, std::vector<CbmL1TrdTracklet4*>& clTrackletsB,
-                   Int_t noCombSegments = 0);
-
-  void CreateTracks(std::vector<CbmL1TrdTracklet4*> clTracklets14, std::vector<CbmL1TrdTracklet4*> clTracklets58,
-                    std::vector<CbmL1TrdTracklet4*> clTracklets912, std::set<Int_t>& setUsedHits, Bool_t removeUsedHits,
-                    Bool_t competition = true, Int_t nrLoop = 0);
-
-  void CreateAndManageSegments(std::vector<CbmL1TrdTracklet4*> clTracklets14,
-                               std::vector<CbmL1TrdTracklet4*> clTracklets58,
-                               std::vector<CbmL1TrdTracklet4*> clTracklets912);
-
-  Bool_t OverlapsHitsXY(Int_t posA, Int_t posB);
-
-  void FindNeighbour(std::vector<CbmL1TrdTracklet4*>& v1, std::vector<CbmL1TrdTracklet4*>& v2, Double_t dY,
-                     Double_t dX);
-
-  /** Fitting procedures **/
-  Double_t FitLinear(CbmTrdTrack* tr,
-                     Int_t var);  //var = {1,2} => which coordinate to use
-  Double_t FitLinear(Int_t M[],
-                     Int_t var);  //var = {1,2} => which coordinate to use
-  Double_t Fit(CbmTrdTrack* tr);
-  Double_t Fit(Int_t M[]);
-  Double_t FitKF(CbmTrdTrack* pTrack);
-  Double_t FitTLinearFitter(Int_t M[]);
-  Double_t FitLSM(Int_t M[]);
-
-
-  /** Rejection procedure **/
-  Bool_t Rejection(Double_t Procent, Int_t num = 100);
-
-  /** Pdg to charge conversion **/
-  Int_t PdgToCharge(Int_t pdgCode);
-
-  /** Create histogramms **/
-  void CreateHistogramms();
-
-  /** Activates data branches **/
-  void DataBranches();
-
-  /** Determine detector layout **/
-  void TrdLayout();
-
- public:
-  /** Write histogramms **/
-  void WriteHistogramms();
-
-  /** Public accessors **/
-  inline const Int_t& GetVerbose() const { return fVerbose; };
-
-  /** Public modifiers **/
-  inline void SetVerbose(const Int_t& verbose) { fVerbose = verbose; };
-
-  /** Histogramms **/
-  TH1F* fh_chi2hit;
-  TH2F* fh_chi2hit_plane;
-
-  // Histogramms for the distance cuts
-  TH1F* fDistLongX;
-  TH1F* fDistLongY;
-  TH1F* fDistShortX;
-  TH1F* fDistShortY;
-
-  TH1F* fDistLongBX;
-  TH1F* fDistLongBY;
-  TH1F* fDistShortBX;
-  TH1F* fDistShortBY;
-
-  TH1F* fDistY12;
-
-  TH2F* fMomDistLongPrimaryX;
-  TH2F* fMomDistLongPrimaryY;
-  TH2F* fMomDistLongExtraX;
-  TH2F* fMomDistLongExtraY;
-
-  TH2F* fMomDistExtrapolPrimaryX;
-  TH2F* fMomDistExtrapolPrimaryY;
-  TH2F* fMomDistExtrapolExtraX;
-  TH2F* fMomDistExtrapolExtraY;
-
-  TH2F* fMomDistShortPrimaryX;
-  TH2F* fMomDistShortPrimaryY;
-  TH2F* fMomDistShortExtraX;
-  TH2F* fMomDistShortExtraY;
-
-  TH1F* fDistY;
-  TH1F* fDistX;
-
-  TH1F* fPlane1Ydens;
-  TH1F* fPlane5Ydens;
-  TH1F* fPlane9Ydens;
-
-  TH1F* fSPlength;
-  TH1F* fSPlengthMC;
-
-  TH1F* fYat0;
-  TH1F* fYat0MC;
-
-  TH2F* fNoEvTime;
-
-  TH1F* fh_SP_xDiff_MC;
-  TH1F* fh_SP_yDiff_MC;
-
-  TH1F* fh_SP_xDiff_nMC;
-  TH1F* fh_SP_yDiff_nMC;
-
-  TH1F *fUsedHitsPerPlane, *fUnUsedHitsPerPlane;
-
-
-  std::map<Int_t, Int_t> fRUsedHits;
-  std::map<Int_t, Int_t> fRUnUsedHits;
-  std::map<Int_t, Int_t> fTotHits;
-
-  /** Function for sorting **/
-  static Bool_t CompareChi2TrdTrack(const CbmTrdTrack* a, const CbmTrdTrack* b)
-  {
-    return (a->GetChiSq() / static_cast<Double_t>(a->GetNDF()) < b->GetChiSq() / static_cast<Double_t>(b->GetNDF()));
-  };
-
-  ClassDef(CbmL1CATrdTrackFinderSA, 1);
-};
-
-
-#endif
diff --git a/reco/KF/obsolete/CbmL1TofMerger.cxx b/reco/KF/obsolete/CbmL1TofMerger.cxx
deleted file mode 100644
index 3f6343db2af2dca375dc462d2a4aeb7f44b82f74..0000000000000000000000000000000000000000
--- a/reco/KF/obsolete/CbmL1TofMerger.cxx
+++ /dev/null
@@ -1,259 +0,0 @@
-/* Copyright (C) 2006-2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Denis Bertini [committer] */
-
-// ------------------------------------------------------------------
-// -----                     CbmL1TofMerger                     -----
-// -----             Created 24-01-2006 by D.Kresan             -----
-// ------------------------------------------------------------------
-#include "CbmL1TofMerger.h"
-
-#include "CbmGlobalTrack.h"
-#include "CbmKFTrack.h"
-#include "CbmTofHit.h"
-#include "CbmTrdTrack.h"
-#include "FairRootManager.h"
-#include "TClonesArray.h"
-#include "TMath.h"
-
-#include <iostream>
-#include <map>
-#include <utility>
-
-using std::cout;
-using std::endl;
-using std::make_pair;
-using std::map;
-using std::pair;
-
-//___________________________________________________________________
-//
-// CbmL1TofMerger
-//
-// Concrete implementation of the global track - TOF hit merging
-// algorithm
-//
-
-
-// ------------------------------------------------------------------
-CbmL1TofMerger::CbmL1TofMerger() : fArrayTrdTrack(nullptr)
-{
-  // Default constructor
-}
-// ------------------------------------------------------------------
-
-
-// ------------------------------------------------------------------
-CbmL1TofMerger::CbmL1TofMerger(Int_t) : fArrayTrdTrack(nullptr)
-{
-  // Standard constructor
-  fVerbose = 1;
-}
-// ------------------------------------------------------------------
-
-
-// ------------------------------------------------------------------
-CbmL1TofMerger::~CbmL1TofMerger()
-{
-  // Destructor
-}
-// ------------------------------------------------------------------
-
-
-// ------------------------------------------------------------------
-void CbmL1TofMerger::Init()
-{
-  // Initialisation
-  FairRootManager* rootMgr = FairRootManager::Instance();
-  if (nullptr == rootMgr) {
-    cout << "-E- CbmL1TofMerger::Init(): "
-         << "ROOT manager is not instantiated!" << endl;
-    return;
-  }
-  fArrayTrdTrack = dynamic_cast<TClonesArray*>(rootMgr->GetObject("TrdTrack"));
-  if (nullptr == fArrayTrdTrack) {
-    cout << "-W- CbmL1TofMerger::Init: "
-         << "no TRD track array" << endl;
-  }
-}
-// ------------------------------------------------------------------
-
-
-// ------------------------------------------------------------------
-Int_t CbmL1TofMerger::DoMerge(TClonesArray* glbTracks, TClonesArray* tofHits)
-{
-  // Implementation of the merging algorithm
-  Int_t nMerged = 0;
-
-  // Map from tof hit index to boolean flag
-  map<Int_t, Bool_t> mapTofHitUsed;
-  mapTofHitUsed.clear();
-  // Map from tof hit index to chi2 value
-  map<Int_t, Double_t> mapTofHitChi2;
-  mapTofHitChi2.clear();
-  // Map from tof hit index to track index
-  map<Int_t, Int_t> mapTofHitTrack;
-  mapTofHitTrack.clear();
-  // Map from track index to the boolean flag
-  map<Int_t, Bool_t> mapTrack;
-  mapTrack.clear();
-  for (Int_t iTrack = 0; iTrack < glbTracks->GetEntriesFast(); iTrack++) {
-    mapTrack[iTrack] = kTRUE;
-  }
-  // Map from track-tof index to boolean flag
-  map<pair<Int_t, Int_t>, Bool_t> mapForbidden;
-  mapForbidden.clear();
-
-  // Declare variables outside the loop
-  CbmGlobalTrack* track;
-  Int_t oldTrackIndex;
-  CbmGlobalTrack* track2;
-  Int_t trdTrackIndex;
-  CbmTrdTrack* trdTrack;
-  CbmKFTrack kfTrack;
-  CbmTofHit* tofHit;
-  Double_t zposTof;
-  Double_t chi2;
-  Double_t chi2min;
-  Int_t indexOfClosest;
-
-
-  while (mapTrack.size() > 0) {
-
-    // Loop over global tracks
-    for (Int_t iTrack = 0; iTrack < glbTracks->GetEntriesFast(); iTrack++) {
-
-      // Skip if not in list
-      if (mapTrack.find(iTrack) == mapTrack.end()) continue;
-
-      // Get pointer to the global track
-      track = dynamic_cast<CbmGlobalTrack*>(glbTracks->At(iTrack));
-      if (nullptr == track) {
-        mapTrack.erase(iTrack);
-        continue;
-      }
-
-      // Skip if has no STS or TRD track
-      if (track->GetStsTrackIndex() < 0 || track->GetTrdTrackIndex() < 0) {
-        mapTrack.erase(iTrack);
-        continue;
-      }
-
-      // Get TRD track
-      trdTrackIndex = track->GetTrdTrackIndex();
-      trdTrack      = dynamic_cast<CbmTrdTrack*>(fArrayTrdTrack->At(trdTrackIndex));
-      if (nullptr == trdTrack) {
-        mapTrack.erase(iTrack);
-        continue;
-      }
-
-      // Set track parameters
-      kfTrack.SetTrackParam(*(const_cast<FairTrackParam*>(trdTrack->GetParamLast())));
-      chi2min        = 1e16;
-      indexOfClosest = -1;
-
-      // Loop over TOF hits
-      for (Int_t iTof = 0; iTof < tofHits->GetEntriesFast(); iTof++) {
-        // Check if pair is not forbidden
-        if (mapForbidden[make_pair(iTrack, iTof)]) continue;
-        // Get TOF hit
-        tofHit = dynamic_cast<CbmTofHit*>(tofHits->At(iTof));
-        if (nullptr == tofHit) continue;
-        // Get z position of hit
-        zposTof = tofHit->GetZ();
-        // Extrapolate to current z-plane
-        kfTrack.Extrapolate(zposTof);
-        // Check for geometrical overlap
-        if (kFALSE == Overlap(kfTrack, tofHit)) continue;
-        // Get chi2 to hit
-        chi2 = GetChi2ToHit(kfTrack, tofHit);
-        // Find smallest chi2
-        if (chi2 < chi2min) {
-          chi2min        = chi2;
-          indexOfClosest = iTof;
-        }
-      }  // Loop over TOF hits
-
-      // Save index of TOF hit
-      if (-1 != indexOfClosest) {
-        // Check if already used
-        if (mapTofHitUsed[indexOfClosest]) {
-          // Check if this track is closer
-          if (chi2min < mapTofHitChi2[indexOfClosest]) {
-            // Force previous track to be reprocessed
-            oldTrackIndex = mapTofHitTrack[indexOfClosest];
-            track2        = dynamic_cast<CbmGlobalTrack*>(glbTracks->At(oldTrackIndex));
-            track2->SetTofHitIndex(-1);
-            mapTrack[oldTrackIndex] = kTRUE;
-            nMerged -= 1;
-            // Forbid this combination
-            mapForbidden[make_pair(oldTrackIndex, indexOfClosest)] = kTRUE;
-            // Attach hit to current track
-            track->SetTofHitIndex(indexOfClosest);
-            mapTofHitChi2[indexOfClosest]  = chi2min;
-            mapTofHitTrack[indexOfClosest] = iTrack;
-            mapTrack.erase(iTrack);
-            nMerged += 1;
-          }
-          else {
-            // Forbid this combination
-            mapForbidden[make_pair(iTrack, indexOfClosest)] = kTRUE;
-          }
-        }
-        else {
-          track->SetTofHitIndex(indexOfClosest);
-          mapTofHitUsed[indexOfClosest]  = kTRUE;
-          mapTofHitChi2[indexOfClosest]  = chi2min;
-          mapTofHitTrack[indexOfClosest] = iTrack;
-          mapTrack.erase(iTrack);
-          nMerged += 1;
-        }
-      }
-      else {
-        mapTrack.erase(iTrack);
-      }
-
-    }  // Loop over global tracks
-  }
-
-
-  return nMerged;
-}
-// ------------------------------------------------------------------
-
-
-// ------------------------------------------------------------------
-Bool_t CbmL1TofMerger::Overlap(CbmKFTrack& track, const CbmTofHit* tofHit)
-{
-  // Check for geometrical overlap between track extrapolation
-  // and TOF hit
-  Double_t x1      = track.GetTrack()[0];
-  Double_t x2      = tofHit->GetX();
-  Double_t dx2     = tofHit->GetDx();
-  Bool_t overlap_x = TMath::Abs(x1 - x2) <= (5 + 3 * dx2);
-  Double_t y1      = track.GetTrack()[1];
-  Double_t y2      = tofHit->GetY();
-  Double_t dy2     = tofHit->GetDy();
-  Bool_t overlap_y = TMath::Abs(y1 - y2) <= (5 + 3 * dy2);
-  return (overlap_x && overlap_y);
-}
-// ------------------------------------------------------------------
-
-
-// ------------------------------------------------------------------
-Double_t CbmL1TofMerger::GetChi2ToHit(CbmKFTrack& track, const CbmTofHit* tofHit)
-{
-  // Get chi2 from the track extrapolation to the TOF hit
-  Double_t dx = track.GetTrack()[0] - tofHit->GetX();
-  Double_t dy = track.GetTrack()[1] - tofHit->GetY();
-  /*    Double_t c0 = track.GetCovMatrix()[0] + tofHit->GetDx()*tofHit->GetDx();
-    Double_t c1 = track.GetCovMatrix()[1];
-    Double_t c2 = track.GetCovMatrix()[2] + tofHit->GetDy()*tofHit->GetDy();
-    Double_t chi2 = 0.5*(dx*dx*c0-2*dx*dy*c1+dy*dy*c2)/(c0*c2-c1*c1);*/
-  Double_t chi2 = TMath::Sqrt(dx * dx + dy * dy);
-  return chi2;
-}
-// ------------------------------------------------------------------
-
-
-ClassImp(CbmL1TofMerger);
diff --git a/reco/KF/obsolete/CbmL1TofMerger.h b/reco/KF/obsolete/CbmL1TofMerger.h
deleted file mode 100644
index 306bc09bbb7c20ae9609f543e9be34be60a38081..0000000000000000000000000000000000000000
--- a/reco/KF/obsolete/CbmL1TofMerger.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright (C) 2006-2010 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Denis Bertini [committer] */
-
-// ------------------------------------------------------------------
-// -----                     CbmL1TofMerger                     -----
-// -----             Created 24-01-2006 by D.Kresan             -----
-// ------------------------------------------------------------------
-#ifndef _CBML1TOFMERGER_
-#define _CBML1TOFMERGER_
-
-#include "CbmTofMerger.h"
-
-class TClonesArray;
-class CbmKFTrack;
-class CbmTofHit;
-class FairTrackParam;
-
-
-class CbmL1TofMerger : public CbmTofMerger {
- private:
-  CbmL1TofMerger(const CbmL1TofMerger&);  // CHECKME
-  CbmL1TofMerger operator=(const CbmL1TofMerger&);
-
- private:
-  TClonesArray* fArrayTrdTrack;  // Array of TRD tracks
-
-  Bool_t Overlap(CbmKFTrack& track, const CbmTofHit* tofHit);
-  Double_t GetChi2ToHit(CbmKFTrack& track, const CbmTofHit* tofHit);
-
- public:
-  CbmL1TofMerger();
-  CbmL1TofMerger(Int_t verbose);
-  ~CbmL1TofMerger();
-
-  void Init();
-  Int_t DoMerge(TClonesArray* glbTracks, TClonesArray* tofHits);
-
-  ClassDef(CbmL1TofMerger, 1);
-};
-
-
-#endif
diff --git a/reco/KF/obsolete/CbmL1TrackMerger.cxx b/reco/KF/obsolete/CbmL1TrackMerger.cxx
deleted file mode 100644
index 35b1331f6e06012908b351762cff6516c6565f6b..0000000000000000000000000000000000000000
--- a/reco/KF/obsolete/CbmL1TrackMerger.cxx
+++ /dev/null
@@ -1,474 +0,0 @@
-/* Copyright (C) 2006-2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Denis Bertini [committer] */
-
-// ------------------------------------------------------------------
-// -----                    CbmL1TrackMerger                    -----
-// -----             Created 2006-01-24 by D.Kresan             -----
-// ------------------------------------------------------------------
-#include "CbmL1TrackMerger.h"
-
-#include "CbmGlobalTrack.h"
-#include "CbmKFTrack.h"
-#include "CbmStsTrack.h"
-#include "CbmTrackMatch.h"
-#include "CbmTrdTrack.h"
-#include "FairRootManager.h"
-#include "TClonesArray.h"
-#include "TH2F.h"
-#include "TMath.h"
-
-#include <iostream>
-#include <map>
-
-using std::cout;
-using std::endl;
-using std::map;
-
-//___________________________________________________________________
-//
-// CbmL1TrackMerger
-//
-// Concrete implementation of the STS-TRD track merging.
-// Two methods are availible:
-// 1) Merging based on the value of CbmTrdTrack::GetStsTrackIndex().
-//    Selected by ::SetMethod(1). To be used for STS-based TRD track
-//    finder
-// 2) Merging at the first TRD plane. Selected by ::SetMethod(2). To
-//    be used for standalone TRD track finder
-//
-
-
-// ------------------------------------------------------------------
-CbmL1TrackMerger::CbmL1TrackMerger()
-  : fMethod(1)
-  ,  // Merging method: 1 - based on StsTrackIndex from TRD track
-  fArrayStsTrackM(nullptr)
-  ,  // Array of STS track matches
-  fArrayTrdTrackM(nullptr)
-  ,  // Array of TRD track matches
-  fh_dx_true(nullptr)
-  ,  // Control histogramm
-  fh_dx_false(nullptr)
-  ,  // Control histogramm
-  fh_dy_true(nullptr)
-  ,  // Control histogramm
-  fh_dy_false(nullptr)
-  ,  // Control histogramm
-  fh_dtx_true(nullptr)
-  ,  // Control histogramm
-  fh_dtx_false(nullptr)
-  ,  // Control histogramm
-  fh_dty_true(nullptr)
-  ,                      // Control histogramm
-  fh_dty_false(nullptr)  // Control histogramm
-{
-  // Default constructor
-  fVerbose = 1;
-  CreateHistogramms();
-}
-// ------------------------------------------------------------------
-
-
-// ------------------------------------------------------------------
-CbmL1TrackMerger::CbmL1TrackMerger(Int_t verbose)
-  : fMethod(1)
-  ,  // Merging method: 1 - based on StsTrackIndex from TRD track
-  fArrayStsTrackM(nullptr)
-  ,  // Array of STS track matches
-  fArrayTrdTrackM(nullptr)
-  ,  // Array of TRD track matches
-  fh_dx_true(nullptr)
-  ,  // Control histogramm
-  fh_dx_false(nullptr)
-  ,  // Control histogramm
-  fh_dy_true(nullptr)
-  ,  // Control histogramm
-  fh_dy_false(nullptr)
-  ,  // Control histogramm
-  fh_dtx_true(nullptr)
-  ,  // Control histogramm
-  fh_dtx_false(nullptr)
-  ,  // Control histogramm
-  fh_dty_true(nullptr)
-  ,                      // Control histogramm
-  fh_dty_false(nullptr)  // Control histogramm
-{
-  // Standard constructor
-  fVerbose = verbose;
-  CreateHistogramms();
-}
-// ------------------------------------------------------------------
-
-
-// ------------------------------------------------------------------
-CbmL1TrackMerger::~CbmL1TrackMerger()
-{
-  // Destructor
-}
-// ------------------------------------------------------------------
-
-
-// ------------------------------------------------------------------
-void CbmL1TrackMerger::Init()
-{
-  // Initialisation
-  FairRootManager* rootMgr = FairRootManager::Instance();
-  if (nullptr == rootMgr) {
-    cout << "-E- CbmL1TrackMerger::Init : "
-         << "FairRootManager is not instantiated!" << endl;
-    return;
-  }
-  fArrayStsTrackM = dynamic_cast<TClonesArray*>(rootMgr->GetObject("StsTrackMatch"));
-  if (nullptr == fArrayStsTrackM) {
-    cout << "-W- CbmL1TrackMerger::Init : "
-         << "no STS track match array" << endl;
-  }
-  fArrayTrdTrackM = dynamic_cast<TClonesArray*>(rootMgr->GetObject("TrdTrackMatch"));
-  if (nullptr == fArrayTrdTrackM) {
-    cout << "-W- CbmL1TrackMerger::Init : "
-         << "no TRD track match array" << endl;
-  }
-}
-// ------------------------------------------------------------------
-
-
-// ------------------------------------------------------------------
-Int_t CbmL1TrackMerger::DoMerge(TClonesArray* stsTracks, TClonesArray* trdTracks, TClonesArray* glbTracks)
-{
-  // Implementation of the merging algorithm
-  if (1 == fMethod) {
-    return MergeSimple(stsTracks, trdTracks, glbTracks);
-  }
-  else if (2 == fMethod) {
-    return MergeImPlane(stsTracks, trdTracks, glbTracks);
-  }
-  else {
-    cout << "-E- CbmL1TrackMerger::DoMerge : "
-         << "unknown method " << fMethod << endl;
-  }
-  return 0;
-}
-// ------------------------------------------------------------------
-
-
-// ------------------------------------------------------------------
-Int_t CbmL1TrackMerger::MergeSimple(TClonesArray* stsTracks, TClonesArray* trdTracks, TClonesArray* glbTracks)
-{
-  // Simple merging algorithm. To be used for STS based TRD track
-  // finding
-  Int_t nGlb = 0;
-
-  CbmTrdTrack* trdTrack    = nullptr;
-  CbmGlobalTrack* glbTrack = nullptr;
-
-  map<Int_t, Int_t> mapStsTrackUsed;
-
-  // Loop over TRD tracks, create corresponding global track
-  // and attach STS track
-  for (Int_t iTrdTrack = 0; iTrdTrack < trdTracks->GetEntriesFast(); iTrdTrack++) {
-    // Get pointer to the TRD track
-    trdTrack = dynamic_cast<CbmTrdTrack*>(trdTracks->At(iTrdTrack));
-    if (nullptr == trdTrack) continue;
-    // Create global track
-    glbTrack = new ((*glbTracks)[nGlb]) CbmGlobalTrack();
-    nGlb += 1;
-    // Set STS and TRD track indices
-    glbTrack->SetStsTrackIndex(trdTrack->GetPreviousTrackId());
-    glbTrack->SetTrdTrackIndex(iTrdTrack);
-    // Mark STS track as used
-    mapStsTrackUsed[trdTrack->GetPreviousTrackId()] = kTRUE;
-    if (fVerbose > 1) {
-      cout << "-I- CbmL1TrackMerger::MergeSimple" << endl
-           << "                      global track : " << nGlb - 1
-           << "                         sts track : " << trdTrack->GetPreviousTrackId() << endl
-           << "                         trd track : " << iTrdTrack << endl;
-    }
-  }  // Loop over TRD tracks
-
-  // Loop over STS tracks
-  for (Int_t iSts = 0; iSts < stsTracks->GetEntriesFast(); iSts++) {
-    // Skip, if already used
-    if (mapStsTrackUsed[iSts]) continue;
-    // Create global track
-    glbTrack = new ((*glbTracks)[nGlb]) CbmGlobalTrack();
-    nGlb += 1;
-    glbTrack->SetStsTrackIndex(iSts);
-    if (fVerbose > 1) {
-      cout << "-I- CbmL1TrackMerger::MergeSimple" << endl
-           << "                      global track : " << nGlb - 1 << "                         sts track : " << iSts
-           << "                         trd track : " << -1 << endl;
-    }
-  }
-
-  return nGlb;
-}
-// ------------------------------------------------------------------
-
-
-// ------------------------------------------------------------------
-Int_t CbmL1TrackMerger::MergeImPlane(TClonesArray* stsTracks, TClonesArray* trdTracks, TClonesArray* glbTracks)
-{
-  // Real merging algorithm. To be used for standalone
-  // TRD track finders
-  if (!stsTracks || !trdTracks || !glbTracks) return 0;
-  if (!fArrayStsTrackM || !fArrayTrdTrackM) return 0;
-
-  CbmStsTrack* stsTrack;
-  CbmKFTrack kfTrack;
-  CbmTrdTrack* trdTrack;
-  CbmGlobalTrack* glbTrack;
-  CbmTrackMatch* stsTrackM;
-  CbmTrackMatch* trdTrackM;
-  Int_t nGlb    = 0;
-  Int_t nMerged = 0;
-  Double_t dx;
-  Double_t dy;
-  Double_t dtx;
-  Double_t dty;
-  Double_t theta;
-  Double_t chi2XY;
-  Double_t dx_cut;
-  Double_t dy_cut;
-  Double_t dtx_cut;
-
-  // Map from the TRD track index to the boolean flag
-  map<Int_t, Bool_t> mapTrdTrackUsed;
-
-  // Loop over STS tracks
-  for (Int_t iStsTrack = 0; iStsTrack < stsTracks->GetEntriesFast(); iStsTrack++) {
-    // Get pointer to the STS track and track match
-    stsTrack = dynamic_cast<CbmStsTrack*>(stsTracks->At(iStsTrack));
-    if (nullptr == stsTrack) continue;
-    stsTrackM = dynamic_cast<CbmTrackMatch*>(fArrayStsTrackM->At(iStsTrack));
-    if (nullptr == stsTrackM) continue;
-
-    // Create global track
-    new ((*glbTracks)[nGlb]) CbmGlobalTrack();
-    glbTrack = dynamic_cast<CbmGlobalTrack*>(glbTracks->At(nGlb));
-    if (nullptr == glbTrack) continue;
-    nGlb += 1;
-    // Set STS track index
-    glbTrack->SetStsTrackIndex(iStsTrack);
-    // Merge with TRD
-    kfTrack.SetTrackParam(*stsTrack->GetParamLast());
-    // Loop over TRD tracks
-    Double_t minChi2XY   = 1e16;
-    Int_t indexOfClosest = -1;
-    for (Int_t iTrdTrack = 0; iTrdTrack < trdTracks->GetEntriesFast(); iTrdTrack++) {
-      // Skip if already merged
-      if (mapTrdTrackUsed[iTrdTrack]) continue;
-      // Get pointer to the TRD track and track match
-      trdTrack = dynamic_cast<CbmTrdTrack*>(trdTracks->At(iTrdTrack));
-      if (nullptr == trdTrack) continue;
-      trdTrackM = dynamic_cast<CbmTrackMatch*>(fArrayTrdTrackM->At(iTrdTrack));
-      if (nullptr == trdTrackM) continue;
-      // Extrapolate STS track to the first plane of TRD track
-      kfTrack.Extrapolate(trdTrack->GetParamFirst()->GetZ());
-
-      // Fill histogramms
-      Double_t tx = kfTrack.GetTrack()[2];
-      Double_t ty = kfTrack.GetTrack()[3];
-      dx          = kfTrack.GetTrack()[0] - trdTrack->GetParamFirst()->GetX();
-      dy          = kfTrack.GetTrack()[1] - trdTrack->GetParamFirst()->GetY();
-      dtx         = tx - trdTrack->GetParamFirst()->GetTx();
-      dty         = ty - trdTrack->GetParamFirst()->GetTy();
-      theta       = 180. / TMath::Pi() * TMath::ACos(1. / TMath::Sqrt(1 + tx * tx + ty * ty));
-      if (stsTrackM->GetMCTrackId() == trdTrackM->GetMCTrackId()) {
-        fh_dx_true->Fill(dx, theta);
-      }
-      else {
-        fh_dx_false->Fill(dx, theta);
-      }
-
-      // Cut on dx
-      if (theta < 5) {
-        dx_cut = 1;
-      }
-      else if (theta < 10) {
-        dx_cut = 4;
-      }
-      else if (theta < 15) {
-        dx_cut = 4;
-      }
-      else if (theta < 20) {
-        dx_cut = 4;
-      }
-      else if (theta < 25) {
-        dx_cut = 4;
-      }
-      else if (theta < 30) {
-        dx_cut = 4;
-      }
-      else if (theta < 35) {
-        dx_cut = 4;
-      }
-      else if (theta < 40) {
-        dx_cut = 2;
-      }
-      else {
-        dx_cut = 0.;
-      }
-      if (TMath::Abs(dx) > dx_cut) continue;
-      // Fill histogramms
-      if (stsTrackM->GetMCTrackId() == trdTrackM->GetMCTrackId()) {
-        fh_dy_true->Fill(dy, theta);
-      }
-      else {
-        fh_dy_false->Fill(dy, theta);
-      }
-
-      // Cut on dy
-      if (theta < 5) {
-        dy_cut = 1;
-      }
-      else if (theta < 10) {
-        dy_cut = 2;
-      }
-      else if (theta < 15) {
-        dy_cut = 2;
-      }
-      else if (theta < 20) {
-        dy_cut = 3;
-      }
-      else if (theta < 25) {
-        dy_cut = 3;
-      }
-      else if (theta < 30) {
-        dy_cut = 3;
-      }
-      else if (theta < 35) {
-        dy_cut = 3;
-      }
-      else {
-        dy_cut = 0.;
-      }
-      if (TMath::Abs(dy) > dy_cut) continue;
-      // Fill histogramms
-      if (stsTrackM->GetMCTrackId() == trdTrackM->GetMCTrackId()) {
-        fh_dtx_true->Fill(dtx, theta);
-      }
-      else {
-        fh_dtx_false->Fill(dtx, theta);
-      }
-
-      // Cut on dtx
-      if (theta < 10) {
-        dtx_cut = 0.001;
-      }
-      else if (theta < 15) {
-        dtx_cut = 0.002;
-      }
-      else if (theta < 20) {
-        dtx_cut = 0.003;
-      }
-      else if (theta < 25) {
-        dtx_cut = 0.004;
-      }
-      else if (theta < 30) {
-        dtx_cut = 0.005;
-      }
-      else if (theta < 35) {
-        dtx_cut = 0.013;
-      }
-      else {
-        dtx_cut = 0.;
-      }
-      dtx_cut *= 10;
-      if (TMath::Abs(dtx) > dtx_cut) continue;
-      // Fill histogramms
-      if (stsTrackM->GetMCTrackId() == trdTrackM->GetMCTrackId()) {
-        fh_dty_true->Fill(dty, theta);
-      }
-      else {
-        fh_dty_false->Fill(dty, theta);
-      }
-
-      if (TMath::Abs(dty) > dtx_cut) continue;
-
-      // Get chi2
-      chi2XY = GetChi2XY(kfTrack, const_cast<FairTrackParam*>(trdTrack->GetParamFirst()));
-      // Choose the closest
-      if (chi2XY < minChi2XY) {
-        minChi2XY      = chi2XY;
-        indexOfClosest = iTrdTrack;
-      }
-    }
-    if (indexOfClosest < 0) continue;
-    // Attach TRD track
-    glbTrack->SetTrdTrackIndex(indexOfClosest);
-    mapTrdTrackUsed[indexOfClosest] = kTRUE;
-    nMerged += 1;
-  }
-
-  // Loop over free TRD tracks
-  for (Int_t iTrdTrack = 0; iTrdTrack < trdTracks->GetEntriesFast(); iTrdTrack++) {
-    // Skip if already merged
-    if (mapTrdTrackUsed[iTrdTrack]) continue;
-    // Create global track
-    new ((*glbTracks)[nGlb]) CbmGlobalTrack();
-    glbTrack = dynamic_cast<CbmGlobalTrack*>(glbTracks->At(nGlb));
-    if (nullptr == glbTrack) continue;
-    nGlb += 1;
-    // Set TRD track index
-    glbTrack->SetTrdTrackIndex(iTrdTrack);
-  }
-
-  return nMerged;
-}
-// ------------------------------------------------------------------
-
-
-// ------------------------------------------------------------------
-Double_t CbmL1TrackMerger::GetChi2XY(CbmKFTrack& kfTrack, FairTrackParam* trackParam)
-{
-  // Get the chi2 from track extrapolation to TRD track parameters
-  Double_t dx   = kfTrack.GetTrack()[0] - trackParam->GetX();
-  Double_t dy   = kfTrack.GetTrack()[1] - trackParam->GetY();
-  Double_t c0   = kfTrack.GetCovMatrix()[0] + trackParam->GetCovariance(0, 0);
-  Double_t c1   = kfTrack.GetCovMatrix()[1] + trackParam->GetCovariance(0, 1);
-  Double_t c2   = kfTrack.GetCovMatrix()[2] + trackParam->GetCovariance(1, 1);
-  Double_t chi2 = 0.5 * (dx * dx * c0 - 2 * dx * dy * c1 + dy * dy * c2) / (c0 * c2 - c1 * c1);
-  //    Double_t chi2 = TMath::Sqrt(dx*dx + dy*dy);
-  return chi2;
-}
-// ------------------------------------------------------------------
-
-
-// ------------------------------------------------------------------
-void CbmL1TrackMerger::CreateHistogramms()
-{
-  // Create control histogramms
-  fh_dx_true  = new TH2F("h_dx_true", "", 200, -10., 10., 9, 0., 45.);
-  fh_dx_false = new TH2F("h_dx_false", "", 200, -10., 10., 9, 0., 45.);
-
-  fh_dy_true  = new TH2F("h_dy_true", "", 200, -10., 10., 9, 0., 45.);
-  fh_dy_false = new TH2F("h_dy_false", "", 200, -10., 10., 9, 0., 45.);
-
-  fh_dtx_true  = new TH2F("h_dtx_true", "", 200, -0.1, 0.1, 9, 0., 45.);
-  fh_dtx_false = new TH2F("h_dtx_false", "", 200, -0.1, 0.1, 9, 0., 45.);
-
-  fh_dty_true  = new TH2F("h_dty_true", "", 200, -0.1, 0.1, 9, 0., 45.);
-  fh_dty_false = new TH2F("h_dty_false", "", 200, -0.1, 0.1, 9, 0., 45.);
-}
-// ------------------------------------------------------------------
-
-
-// ------------------------------------------------------------------
-void CbmL1TrackMerger::WriteHistogramms()
-{
-  // Write control histogramms to the file
-  fh_dx_true->Write();
-  fh_dx_false->Write();
-  fh_dy_true->Write();
-  fh_dy_false->Write();
-
-  fh_dtx_true->Write();
-  fh_dtx_false->Write();
-  fh_dty_true->Write();
-  fh_dty_false->Write();
-}
-// ------------------------------------------------------------------
-
-
-ClassImp(CbmL1TrackMerger);
diff --git a/reco/KF/obsolete/CbmL1TrackMerger.h b/reco/KF/obsolete/CbmL1TrackMerger.h
deleted file mode 100644
index ec42c914da73af9e534c809fe2fd4a874f72a626..0000000000000000000000000000000000000000
--- a/reco/KF/obsolete/CbmL1TrackMerger.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright (C) 2006-2010 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Denis Bertini [committer] */
-
-// ------------------------------------------------------------------
-// -----                    CbmL1TrackMerger                    -----
-// -----             Created 2006-01-24 by D.Kresan             -----
-// ------------------------------------------------------------------
-#ifndef _CBM_L1_TRACK_MERGER_
-#define _CBM_L1_TRACK_MERGER_
-
-#include "CbmTrackMerger.h"
-
-class TClonesArray;
-class CbmKFTrack;
-class FairTrackParam;
-class TH2F;
-
-
-class CbmL1TrackMerger : public CbmTrackMerger {
- private:
-  CbmL1TrackMerger(const CbmL1TrackMerger&);  // CHECKME
-  CbmL1TrackMerger operator=(const CbmL1TrackMerger&);
-
- private:
-  Int_t fMethod;                  // Merging method: 1 - based on StsTrackIndex from TRD track
-                                  //                 2 - merging of tracks at the first
-  TClonesArray* fArrayStsTrackM;  // Array of STS track matches
-  TClonesArray* fArrayTrdTrackM;  // Array of TRD track matches
-  TH2F* fh_dx_true;               // Control histogramm
-  TH2F* fh_dx_false;              // Control histogramm
-  TH2F* fh_dy_true;               // Control histogramm
-  TH2F* fh_dy_false;              // Control histogramm
-  TH2F* fh_dtx_true;              // Control histogramm
-  TH2F* fh_dtx_false;             // Control histogramm
-  TH2F* fh_dty_true;              // Control histogramm
-  TH2F* fh_dty_false;             // Control histogramm
-
-  Double_t GetChi2XY(CbmKFTrack& kfTrack, FairTrackParam* trackParam);
-  void CreateHistogramms();
-  Int_t MergeSimple(TClonesArray* stsTracks, TClonesArray* trdTracks, TClonesArray* glbTracks);
-  Int_t MergeImPlane(TClonesArray* stsTracks, TClonesArray* trdTracks, TClonesArray* glbTracks);
-
- public:
-  CbmL1TrackMerger();
-  CbmL1TrackMerger(Int_t verbose);
-  virtual ~CbmL1TrackMerger();
-
-  void Init();
-  Int_t DoMerge(TClonesArray* stsTracks, TClonesArray* trdTracks, TClonesArray* glbTracks);
-  void WriteHistogramms();
-
-  inline Int_t GetVerbose() const { return fVerbose; }
-  inline Int_t GetMethod() const { return fMethod; }
-
-  inline void SetVerbose(Int_t verbose) { fVerbose = verbose; }
-  inline void SetMethod(Int_t method) { fMethod = method; }
-
-  ClassDef(CbmL1TrackMerger, 1);
-};
-
-
-#endif
diff --git a/reco/KF/obsolete/CbmL1TrdHit.h b/reco/KF/obsolete/CbmL1TrdHit.h
deleted file mode 100644
index cf980b6ac928198291f5f85040f2c806d1a88b90..0000000000000000000000000000000000000000
--- a/reco/KF/obsolete/CbmL1TrdHit.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (C) 2006 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Ivan Kisel,  Sergey Gorbunov, Denis Bertini [committer] */
-
-/*
- *====================================================================
- *
- *  CBM Level 1 Reconstruction 
- *  
- *  Authors: I.Kisel,  S.Gorbunov
- *
- *  e-mail : ikisel@kip.uni-heidelberg.de 
- *
- *====================================================================
- *
- *  TRD hit description for L1
- *
- *====================================================================
- */
-
-#ifndef _CbmL1TrdHit_h_
-#define _CbmL1TrdHit_h_
-
-struct CbmL1TrdHit  //:public CbmL1KFUMeasurement
-{
-
-  // hit information
-
-  int iStation;  // TRD station
-
-  // Monte Carlo information
-
-  int MC_Point;
-
-  static bool compareStation(const CbmL1TrdHit& a, const CbmL1TrdHit& b) { return (a.iStation < b.iStation); }
-};
-
-#endif
diff --git a/reco/KF/obsolete/CbmL1TrdTrackFinderSts.cxx b/reco/KF/obsolete/CbmL1TrdTrackFinderSts.cxx
deleted file mode 100644
index 5ded92782845224b34af76e84d59b664a05d2b39..0000000000000000000000000000000000000000
--- a/reco/KF/obsolete/CbmL1TrdTrackFinderSts.cxx
+++ /dev/null
@@ -1,955 +0,0 @@
-/* Copyright (C) 2006-2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Denis Bertini [committer], Sergey Gorbunov */
-
-// -----------------------------------------------------------------------
-// -----                    CbmL1TrdTrackFinderSts                   -----
-// -----                 Created 6/12/05  by D. Kresan               -----
-// -----------------------------------------------------------------------
-
-#include "CbmL1TrdTrackFinderSts.h"
-
-#include "CbmKFTrack.h"
-#include "CbmKFTrdHit.h"
-#include "CbmStsTrack.h"
-#include "CbmTrackMatch.h"
-#include "CbmTrdHit.h"
-#include "CbmTrdPoint.h"
-#include "CbmTrdTrack.h"
-#include "FairBaseParSet.h"
-#include "FairDetector.h"
-#include "FairRootManager.h"
-#include "FairRunAna.h"
-#include "FairRuntimeDb.h"
-#include "L1Def.h"
-#include "TArc.h"
-#include "TCanvas.h"
-#include "TClonesArray.h"
-#include "TGraph.h"
-#include "TH1F.h"
-#include "TH2F.h"
-#include "TLine.h"
-#include "TMath.h"
-
-#include <iostream>
-#include <map>
-#include <vector>
-
-using std::cout;
-using std::endl;
-using std::map;
-using std::vector;
-
-
-//________________________________________________________________________
-//
-// CbmL1TrdTrackFinderSts
-//
-// Engine for track finding in the TRD. Based on the track extrapolation
-// from the STS and further track following.
-//
-
-
-// -----------------------------------------------------------------------
-CbmL1TrdTrackFinderSts::CbmL1TrdTrackFinderSts()
-  : fEvents(0)
-  ,  // Number of events processed
-  fVerbose(1)
-  ,  // Verbosity level
-  fArrayTrdPoint(NULL)
-  ,  // Array of TRD points
-  fArrayTrdHit(0)
-  ,  // Array of TRD hits
-  fArrayStsTrack(NULL)
-  ,  // Array of STS tracks
-  fArrayStsTrackM(NULL)
-  ,  // Array of STS tracks
-  fArrayKFTrdHit(new TClonesArray("CbmKFTrdHit"))
-  ,  // Array of KF TRD hits
-  fvTrdTrack()
-  , fArrayTrdTrack(NULL)
-  ,  // Output Array of TRD tracks
-  fPid(211)
-  ,  // PID assumption
-  fNoTrdStations(0)
-  ,  // Number of TRD stations
-  fNoTrdPerStation(0)
-  ,  // Number of TRD layers per station
-  fmapHitUsed()
-  , fh_chi2hit(0)
-  ,  // Control histogramm
-  fh_chi2hit_plane(0)
-  ,  // Control histogramm
-  fh_resx_plane_true(0)
-  ,  // Control histogramm
-  fh_resy_plane_true(0)
-  ,  // Control histogramm
-  fh_resx_plane_fake(0)
-  ,  // Control histogramm
-  fh_resy_plane_fake(0)
-  ,  // Control histogramm
-  fh_resx_mom_true(0)
-  ,  // Control histogramm
-  fh_resy_mom_true(0)
-  ,  // Control histogramm
-  fh_pullx_plane_true(0)
-  ,  // Control histogramm
-  fh_pully_plane_true(0)
-  ,  // Control histogramm
-  fh_pullx_plane_fake(0)
-  ,  // Control histogramm
-  fh_pully_plane_fake(0)
-  ,  // Control histogramm
-  fLostTracks()
-{
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-CbmL1TrdTrackFinderSts::CbmL1TrdTrackFinderSts(Int_t verbose)
-  : fEvents(0)
-  ,  // Number of events processed
-  fVerbose(verbose)
-  ,  // Verbosity level
-  fArrayTrdPoint(NULL)
-  ,  // Array of TRD points
-  fArrayTrdHit(0)
-  ,  // Array of TRD hits
-  fArrayStsTrack(NULL)
-  ,  // Array of STS tracks
-  fArrayStsTrackM(NULL)
-  ,  // Array of STS tracks
-  fArrayKFTrdHit(new TClonesArray("CbmKFTrdHit"))
-  ,  // Array of KF TRD hits
-  fvTrdTrack()
-  , fArrayTrdTrack(NULL)
-  ,  // Output Array of TRD tracks
-  fPid(211)
-  ,  // PID assumption
-  fNoTrdStations(0)
-  ,  // Number of TRD stations
-  fNoTrdPerStation(0)
-  ,  // Number of TRD layers per station
-  fmapHitUsed()
-  , fh_chi2hit(0)
-  ,  // Control histogramm
-  fh_chi2hit_plane(0)
-  ,  // Control histogramm
-  fh_resx_plane_true(0)
-  ,  // Control histogramm
-  fh_resy_plane_true(0)
-  ,  // Control histogramm
-  fh_resx_plane_fake(0)
-  ,  // Control histogramm
-  fh_resy_plane_fake(0)
-  ,  // Control histogramm
-  fh_resx_mom_true(0)
-  ,  // Control histogramm
-  fh_resy_mom_true(0)
-  ,  // Control histogramm
-  fh_pullx_plane_true(0)
-  ,  // Control histogramm
-  fh_pully_plane_true(0)
-  ,  // Control histogramm
-  fh_pullx_plane_fake(0)
-  ,  // Control histogramm
-  fh_pully_plane_fake(0)
-  ,  // Control histogramm
-  fLostTracks()
-{
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-CbmL1TrdTrackFinderSts::~CbmL1TrdTrackFinderSts()
-{
-  // Destructor
-  if (fArrayKFTrdHit) fArrayKFTrdHit->Delete();
-  delete fArrayKFTrdHit;
-  // why delete the trdtrack array? This pointer
-  // is passed from CbmTrdFindTracks and is registered with the iomanager...
-  // should be not our business to delete the TClonesArray pointer
-  if (fArrayTrdTrack) fArrayTrdTrack->Delete();
-  //  delete fArrayTrdTrack;
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-void CbmL1TrdTrackFinderSts::Init()
-{
-  // Initialisation of the algorithm
-
-  // Create histogramms
-  CreateHistogramms();
-  // Activate data branches
-  DataBranches();
-  // Determine the TRD layout
-  TrdLayout();
-  //    fNoTrdStations = 3;
-  //    fNoTrdPerStation = 4;
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-Int_t CbmL1TrdTrackFinderSts::DoFind(TClonesArray* hitArray, TClonesArray* trackArray)
-{
-  // Implementation of the track finding algorithm
-  if (NULL == hitArray) {
-    return 0;
-  }
-  fArrayTrdHit   = hitArray;
-  fArrayTrdTrack = trackArray;
-
-  fmapHitUsed.clear();
-  fLostTracks.clear();
-
-  // Sort the TRD hits by plane number
-  SortTrdHits();
-
-  // Main part of algorithm
-  // Follow the track in TRD
-
-  Process();
-
-  Int_t nTrdTracks = fArrayTrdTrack->GetEntriesFast();
-
-  // Event output
-  if (fVerbose > 0) {
-    cout << "---------------------------------------" << endl
-         << "-I-     CbmL1TrdTrackFinderSts      -I-" << endl
-         << "-I-         Event summary           -I-" << endl
-         << "-I-        STS tracks : " << fArrayStsTrack->GetEntriesFast() << endl
-         << "-I-  TRD tracks found : " << nTrdTracks << endl
-         << "-I-  TRD tracks lost  : " << fLostTracks.size() << endl
-         << "---------------------------------------" << endl
-         << endl;
-  }
-  else {
-    cout << "-I- CbmL1TrdTrackFinderSts::DoFind : " << nTrdTracks << " TRD tracks found." << endl;
-  }
-
-  // Clear array of KF trd hits
-  fArrayKFTrdHit->Clear();
-
-  // Increment number of events
-  fEvents += 1;
-
-  // control output
-  cout << "-I- CbmL1TrdTrackFinder : " << fEvents << " events processed" << endl;
-
-  // Return number of found TRD tracks
-  return nTrdTracks;
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-void CbmL1TrdTrackFinderSts::Process()
-{
-  // Create TRD tracks from STS tracks, process them throug all stations
-  // and move to the output array
-
-  /*    new TCanvas("c1", "", 10, 10, 800, 800);
-    Int_t n;
-    Double_t x[10000], y[10000];
-    Int_t index;
-    CbmTrdPoint *pt;
-    TVector3 pos;
-    for(Int_t i = 0; i < fNoTrdHits[0]; i++) {
-	index = fTrdHitIndex[0][i];
-	pt = (CbmTrdPoint*) fArrayTrdPoint->At(index);
-	if(NULL == pt) continue;
-	pt->Position(pos);
-	x[n] = pos.X();
-	y[n] = pos.Y();
-        n += 1;
-    }
-    TGraph *gr = new TGraph(n, x, y);
-    gr->SetMarkerStyle(24);
-    gr->SetMarkerColor(4);
-    gr->SetMarkerSize(0.5);
-    gr->SetTitle("first layer");
-    gr->Draw("AP");
-    gr->GetHistogram()->GetXaxis()->SetRangeUser(0., 273.);
-    gr->GetHistogram()->GetXaxis()->SetTitle("x (cm)");
-    gr->GetHistogram()->GetYaxis()->SetRangeUser(0., 273.);
-    gr->GetHistogram()->GetYaxis()->SetTitle("y (cm)");*/
-
-
-  Sts2Trd(0., 1e16, 0., 1e16);
-
-  ProcessAllStations();
-  //    RemoveFakes();
-  MoveOut();
-
-  /*
-    Sts2Trd(0., 1.,
-	    0., 1e16);
-    ProcessAllStations();
-//    RemoveFakes();
-    MoveOut();*/
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-void CbmL1TrdTrackFinderSts::Sts2Trd(Double_t pmin, Double_t pmax, Double_t chi2min, Double_t chi2max)
-{
-  // Create TRD track from each STS track, that fullfill the selection
-  // criteria
-
-  Int_t nStsTrack       = fArrayStsTrack->GetEntriesFast();
-  CbmStsTrack* stsTrack = NULL;
-  CbmTrdTrack* trdTrack = NULL;
-  /*    Double_t mom;
-    Double_t chi2;*/
-  // Loop over STS tracks
-  for (Int_t iStsTrack = 0; iStsTrack < nStsTrack; iStsTrack++) {
-    // Get pointer to the STS track
-    stsTrack = L1_DYNAMIC_CAST<CbmStsTrack*>(fArrayStsTrack->At(iStsTrack));
-    if (NULL == stsTrack) continue;
-    /*
-	// Cut on momentum
-        mom = 1./TMath::Abs(stsTrack->GetParamLast()->GetQp());
-	if(mom < pmin || mom >= pmax) continue;
-	// Cut on chi2
-	chi2 = stsTrack->GetChi2() / (Double_t)stsTrack->GetNDF();
-	if(chi2 < chi2min || chi2 >= chi2max) continue;
-*/
-    // Create TRD track
-    trdTrack = new CbmTrdTrack();
-    // Copy track parameters at plane of last hit
-    trdTrack->SetParamLast(stsTrack->GetParamLast());
-    // Copy chi2
-    trdTrack->SetChiSq(stsTrack->GetChiSq());
-    trdTrack->SetNDF(stsTrack->GetNDF());
-    // Set sts track index
-    trdTrack->SetPreviousTrackId(iStsTrack);
-    // Add it to the array
-    fvTrdTrack.push_back(trdTrack);
-    // Control output
-    if (fVerbose > 1) {
-      cout << "TRD track created from STS track " << iStsTrack << endl;
-    }
-  }
-  //    sort(fvTrdTrack.begin(), fvTrdTrack.end(), CbmTrdTrack::CompareMomentum);
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-void CbmL1TrdTrackFinderSts::ProcessAllStations()
-{
-  // Process all tracks through all stations
-
-  // Loop over tracks
-  for (Int_t station = 0; station < fNoTrdStations; station++) {
-    vector<CbmTrdTrack*>::iterator iter;
-    int itr = 0;
-    for (iter = fvTrdTrack.begin(); iter != fvTrdTrack.end(); iter++) {
-      // Attach hits to track
-      ProcessStation(*iter, station);
-      // Update track
-      UpdateTrack(station, *iter);
-      itr++;
-    }
-    Clear();
-    if (fVerbose > 0) {
-      cout << "track candidates: " << fvTrdTrack.size() << "." << endl;
-    }
-  }
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-void CbmL1TrdTrackFinderSts::MoveOut()
-{
-  // Move the tracks from temporary array to the output array
-  vector<CbmTrdTrack*>::iterator iter;
-  CbmTrdTrack* track;
-  Int_t nOut = fArrayTrdTrack->GetEntriesFast();
-  for (iter = fvTrdTrack.begin(); iter != fvTrdTrack.end(); iter++) {
-    track = *iter;
-    if (0 == track->GetFlag()) {
-      new ((*fArrayTrdTrack)[nOut]) CbmTrdTrack(*track);
-      nOut += 1;
-    }
-    delete track;
-  }
-  fvTrdTrack.clear();
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-void CbmL1TrdTrackFinderSts::ProcessStation(CbmTrdTrack* pTrack, const Int_t& station)
-{
-  // Extrapolate track parameters to the layers of current station,
-  // and pick up the closest hits
-
-  // Track parameters
-
-  CbmKFTrack kfTrack;
-  kfTrack.SetTrackParam(*(const_cast<FairTrackParam*>(pTrack->GetParamLast())));
-  kfTrack.SetPID(fPid);
-  Double_t qp0 = pTrack->GetParamLast()->GetQp();
-  Double_t* T  = kfTrack.GetTrack();
-
-  // Declare variables outside the loop
-  Int_t plane      = 0;
-  Double_t ze      = 0.;
-  Int_t hitIndex   = 0;
-  CbmTrdHit* pHit  = NULL;
-  Double_t chi2hit = 0;
-
-  Int_t indexOfClosest;
-  Double_t minChi2;
-  //   CbmTrdHit* closestHit = 0;
-  Int_t pointIndex;
-  CbmTrdPoint* trdPoint;
-  TVector3 pos;
-
-  Int_t stsTrackIndex = pTrack->GetPreviousTrackId();
-  if (stsTrackIndex < 0) {
-    Fatal("ProcessStation", "Invalid track index");
-  }
-  CbmTrackMatch* stsM = L1_DYNAMIC_CAST<CbmTrackMatch*>(fArrayStsTrackM->At(stsTrackIndex));
-  Int_t trackID       = stsM->GetMCTrackId();
-
-  // Loop over layers in this station
-  for (Int_t iLayer = 0; iLayer < fNoTrdPerStation; iLayer++) {
-
-    if (pTrack->GetFlag()) {
-      return;
-    }
-    // Plane number
-    plane = station * fNoTrdPerStation + iLayer;
-    // Skip if no TRD hits
-    if (fNoTrdHits[plane] < 1) continue;
-    // Get z coordinate of plane
-    ze = (L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(fTrdHitIndex[plane][0])))->GetZ();
-    // Extrapolate to the plane
-    kfTrack.Extrapolate(ze, &qp0);
-
-    minChi2        = 1e16;
-    indexOfClosest = -1;
-
-    // Loop over TRD hits in this plane
-    for (Int_t iHit = 0; iHit < fNoTrdHits[plane]; iHit++) {
-
-      // Get hit index
-      hitIndex = fTrdHitIndex[plane][iHit];
-      // If the hit is used, skip
-      if (fmapHitUsed[hitIndex]) continue;
-      // Get pointer to the hit
-      pHit = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(hitIndex));
-      // Get MC point
-      pointIndex = pHit->GetRefId();
-      trdPoint   = L1_DYNAMIC_CAST<CbmTrdPoint*>(fArrayTrdPoint->At(pointIndex));
-      trdPoint->Position(pos);
-
-      Double_t c1 = kfTrack.GetCovMatrix()[0];
-      Double_t c2 = kfTrack.GetCovMatrix()[2];
-      if (finite(c1) && c1 > 1.e-10)
-        c1 = (T[0] - pos.X()) / TMath::Sqrt(c1);
-      else
-        c1 = 100;
-      if (finite(c2) && c2 > 1.e-10)
-        c2 = (T[1] - pos.Y()) / TMath::Sqrt(c2);
-      else
-        c2 = 0;
-
-      if (trdPoint->GetTrackID() == trackID) {
-        fh_resx_plane_true->Fill(T[0] - pos.X(), plane);
-        fh_resy_plane_true->Fill(T[1] - pos.Y(), plane);
-        fh_pullx_plane_true->Fill(c1, plane);
-        fh_pully_plane_true->Fill(c2, plane);
-        /*		if(0==plane && kfTrack.GetTrack()[0]>0 && kfTrack.GetTrack()[1]>0) {
-			TArc *arc = new TArc(kfTrack.GetTrack()[0], kfTrack.GetTrack()[1], TMath::Max(TMath::Sqrt(kfTrack.GetCovMatrix()[0]),
-			TMath::Sqrt(kfTrack.GetCovMatrix()[2])));
-			arc->SetLineColor(2);
-		    arc->Draw();
-		    TLine *line  = new TLine(kfTrack.GetTrack()[0], kfTrack.GetTrack()[1], pos.X(), pos.Y());
-		    line->Draw();
-
-		    fh_resx_mom_true->Fill(kfTrack.GetTrack()[0]-pos.X(), 1./TMath::Abs(qp0));
-		    fh_resy_mom_true->Fill(kfTrack.GetTrack()[1]-pos.Y(), 1./TMath::Abs(qp0));
-		}*/
-      }
-      else {
-
-        fh_resx_plane_fake->Fill(T[0] - pos.X(), plane);
-        fh_resy_plane_fake->Fill(T[1] - pos.Y(), plane);
-        fh_pullx_plane_fake->Fill(c1, plane);
-        fh_pully_plane_fake->Fill(c2, plane);
-      }
-      // Check for geometrical overlap
-      if (kFALSE == Overlap(kfTrack, pHit)) {
-        if (trdPoint->GetTrackID() == trackID) {
-          if (fVerbose > 1) {
-            cout << "-W- Lost true hit:   plane:" << plane << "   track: (" << T[0] << ", " << T[1] << ") ("
-                 << TMath::Sqrt(TMath::Abs(kfTrack.GetCovMatrix()[0])) << ", "
-                 << TMath::Sqrt(TMath::Abs(kfTrack.GetCovMatrix()[2])) << "),   hit: (" << pHit->GetX() << ", "
-                 << pHit->GetY() << ") (" << pHit->GetDx() << ", " << pHit->GetDy() << "),   point: (" << pos.X()
-                 << ", " << pos.Y() << ")" << endl;
-          }
-          fLostTracks[trackID] = kTRUE;
-        }
-
-        continue;
-      }
-      // Calculate normalised distance to hit
-      chi2hit = GetChi2Hit(kfTrack, pHit);
-      // Fill histogramms
-      fh_chi2hit->Fill(chi2hit);
-      fh_chi2hit_plane->Fill(chi2hit, plane);
-      // Take the smallest chi2
-      if (chi2hit < minChi2) {
-        minChi2        = chi2hit;
-        indexOfClosest = hitIndex;
-        // 	closestHit = pHit;
-      }
-    }  // Loop over TRD hits
-
-    // Add hit to the track
-    if (indexOfClosest != -1) {
-      pTrack->AddHit(indexOfClosest, kTRDHIT);
-    }
-    else {
-      pTrack->SetFlag(1);
-    }
-  }  // Loop over layers
-  //  pTrack->SortHits();
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-void CbmL1TrdTrackFinderSts::UpdateTrack(Int_t station, CbmTrdTrack* pTrack)
-{
-  // Update track parameters using Kalman Filter
-
-  // Get number of hits
-  Int_t nHits = pTrack->GetNofHits();
-  if (nHits < static_cast<Int_t>((station + 1) * fNoTrdPerStation)) {
-    pTrack->SetFlag(1);
-    return;
-  }
-  // Kalman filter track
-  CbmKFTrack kfTrack;
-  kfTrack.SetTrackParam(*(const_cast<FairTrackParam*>(pTrack->GetParamLast())));
-  kfTrack.GetRefChi2() = pTrack->GetChiSq();
-  kfTrack.GetRefNDF()  = pTrack->GetNDF();
-  kfTrack.SetPID(fPid);
-  // Loop over hits
-  Int_t hitIndex      = 0;
-  CbmTrdHit* pHit     = NULL;
-  CbmKFTrdHit* pKFHit = NULL;
-  Double_t qp0        = pTrack->GetParamLast()->GetQp();
-  for (Int_t iHit = static_cast<Int_t>(station * fNoTrdPerStation); iHit < nHits; iHit++) {
-    // Get hit index
-    hitIndex = pTrack->GetHitIndex(iHit);
-    // Get pointer to the hit
-    pHit = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(hitIndex));
-    // Extrapolate to this hit
-    kfTrack.Extrapolate(pHit->GetZ());
-    // Get KF TRD hit
-    pKFHit = L1_DYNAMIC_CAST<CbmKFTrdHit*>(fArrayKFTrdHit->At(hitIndex));
-    // Add measurement
-    pKFHit->Filter(kfTrack, kTRUE, qp0);
-  }  // Loop over hits
-  // Set track parameters
-  kfTrack.GetTrackParam(*(const_cast<FairTrackParam*>(pTrack->GetParamLast())));
-  pTrack->SetChiSq(kfTrack.GetRefChi2());
-  pTrack->SetNDF(kfTrack.GetRefNDF());
-  if (station == (fNoTrdStations - 1)) {
-    if (pTrack->GetChiSq() / static_cast<Double_t>(pTrack->GetNDF()) > 100) pTrack->SetFlag(1);
-  }
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-void CbmL1TrdTrackFinderSts::Clear(const Option_t* a)
-{
-  // Delete bad tracks from track array
-  CbmTrdTrack* track;
-  for (vector<CbmTrdTrack*>::iterator iter = fvTrdTrack.begin(); iter != fvTrdTrack.end(); iter++) {
-    track = *iter;
-    if (0 != track->GetFlag()) {
-      fvTrdTrack.erase(iter);
-      iter--;
-      delete track;
-    }
-  }
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-void CbmL1TrdTrackFinderSts::RemoveFakes()
-{
-  // Remove ghost tracks from the track candidate array. Among two
-  // tracks with common hits, priority has one with smaller chi2.
-
-  /** Map from sts track index to boolean flag **/
-  map<Int_t, Bool_t> mapStsTrackUsed;
-
-  // Sort found tracks by chi2
-  sort(fvTrdTrack.begin(), fvTrdTrack.end(), CompareChi2);
-
-  Int_t n_false;
-
-  // Loop over sorted tracks
-  CbmTrdTrack* track;
-  Int_t nHits    = 0;
-  Int_t hitIndex = 0;
-  vector<CbmTrdTrack*>::iterator iter;
-  for (iter = fvTrdTrack.begin(); iter != fvTrdTrack.end(); iter++) {
-    // Pointer to the track
-    track = *iter;
-    if (track->GetFlag()) {
-      //	    fvTrdTrack.erase(iter);
-      //	    delete track;
-      continue;
-    }
-
-    // Loop over hits of this track, check if they are already
-    // attached
-    nHits   = track->GetNofHits();
-    n_false = 0;
-    for (Int_t iHit = 0; iHit < nHits; iHit++) {
-      // Get hit index
-      hitIndex = track->GetHitIndex(iHit);
-      // Check flag
-      if (fmapHitUsed[hitIndex]) {
-        n_false += 1;
-      }
-    }  // Loop over hits
-
-    //	if((Double_t)n_false/(Double_t)nHits > 0.3) {
-    if (n_false > 0) {
-      track->SetFlag(1);
-    }
-
-    if (mapStsTrackUsed[track->GetPreviousTrackId()]) {
-      track->SetFlag(1);
-    }
-
-    // Skip the fake tracks
-    if (track->GetFlag()) {
-      //	    fvTrdTrack.erase(iter);
-      //	    delete track;
-      continue;
-    }
-
-    // Mark hits as attached
-    for (Int_t iHit = 0; iHit < nHits; iHit++) {
-      // Get hit index
-      hitIndex = track->GetHitIndex(iHit);
-      // Set flag
-      fmapHitUsed[hitIndex] = kTRUE;
-    }  // Loop over hits
-
-    mapStsTrackUsed[track->GetPreviousTrackId()] = kTRUE;
-  }  // Loop over tracks
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-Bool_t CbmL1TrdTrackFinderSts::Overlap(CbmKFTrack& track, CbmTrdHit* pHit)
-{
-  // Check for geometrical overlap between track extrapolation and hit
-  if (track.GetCovMatrix()[0] > 100) {
-    return kFALSE;
-  }
-  if (track.GetCovMatrix()[2] > 100) {
-    return kFALSE;
-  }
-
-  Bool_t overlap;
-  if (pHit->GetDx() < 1e-9 && pHit->GetDy() < 1e-9) {
-    /*	Double_t x1 = track.GetTrack()[0];
-	Double_t dx1 = TMath::Sqrt(track.GetCovMatrix()[0]);
-	Double_t x2 = pHit->GetX();
-	Bool_t overlap_x = ( ((x1+10*dx1) >= x2) &&
-			    ((x1-10*dx1) <= x2) );
-	Double_t y1 = track.GetTrack()[1];
-	Double_t dy1 = TMath::Sqrt(track.GetCovMatrix()[2]);
-	Double_t y2 = pHit->GetY();
-	Bool_t overlap_y = ( ((y1+10*dy1) >= y2) &&
-			    ((y1-10*dy1) <= y2) );
-     		    overlap = overlap_x && overlap_y;*/
-    Double_t x1      = track.GetTrack()[0];
-    Double_t x2      = pHit->GetX();
-    Bool_t overlap_x = TMath::Abs(x1 - x2) < 7;
-    Double_t y1      = track.GetTrack()[1];
-    Double_t y2      = pHit->GetY();
-    Bool_t overlap_y = TMath::Abs(y1 - y2) < 7;
-    overlap          = overlap_x && overlap_y;
-  }
-  else {
-    /*	Double_t x1 = track.GetTrack()[0];
-	Double_t dx1 = TMath::Sqrt(track.GetCovMatrix()[0]);
-	Double_t x2 = pHit->GetX();
-	Double_t dx2 = pHit->GetDx() * 1e-4;
-	Bool_t overlap_x1 = ((x1+5*dx1) <= (x2+3*dx2)) &&
-	    ((x1+5*dx1) >= (x2-3*dx2));
-	Bool_t overlap_x2 = ((x1-5*dx1) <= (x2+3*dx2)) &&
-	    ((x1-5*dx1) >= (x2-3*dx2));
-	Bool_t overlap_x3 = ((x1+5*dx1) >= (x2+3*dx2)) &&
-	    ((x1-5*dx1) <= (x2-3*dx2));
-        Bool_t overlap_x = overlap_x1 || overlap_x2 || overlap_x3;
-	Double_t y1 = track.GetTrack()[1];
-	Double_t dy1 = TMath::Sqrt(track.GetCovMatrix()[2]);
-	Double_t y2 = pHit->GetY();
-	Double_t dy2 = pHit->GetDy() * 1e-4;
-	Bool_t overlap_y1 = ((y1+5*dy1) <= (y2+3*dy2)) &&
-	    ((y1+5*dy1) >= (y2-3*dy2));
-	Bool_t overlap_y2 = ((y1-5*dy1) <= (y2+3*dy2)) &&
-	    ((y1-5*dy1) >= (y2-3*dy2));
-	Bool_t overlap_y3 = ((y1+5*dy1) >= (y2+3*dy2)) &&
-	    ((y1-5*dy1) <= (y2-3*dy2));
-        Bool_t overlap_y = overlap_y1 || overlap_y2 || overlap_y3;
-        overlap = overlap_x && overlap_y;*/
-    Double_t x1      = track.GetTrack()[0];
-    Double_t x2      = pHit->GetX();
-    Double_t dx2     = pHit->GetDx();
-    Bool_t overlap_x = TMath::Abs(x1 - x2) <= (1.117 * 3 + 3 * dx2);
-    Double_t y1      = track.GetTrack()[1];
-    Double_t y2      = pHit->GetY();
-    Double_t dy2     = pHit->GetDy();
-    Bool_t overlap_y = TMath::Abs(y1 - y2) <= (1.314 * 3 + 3 * dy2);
-    overlap          = overlap_x && overlap_y;
-  }
-  return overlap;
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-Double_t CbmL1TrdTrackFinderSts::GetChi2Hit(CbmKFTrack& track, CbmTrdHit* pHit)
-{
-  // Get chi2 from track extrapolation to hit
-  Double_t chi2 = 0.;
-  if (pHit->GetDx() < 1e-14 && pHit->GetDx() > pHit->GetDy() && pHit->GetDy() < 1e-14) {
-    Double_t dx = track.GetTrack()[0] - pHit->GetX();
-    Double_t dy = track.GetTrack()[1] - pHit->GetY();
-    Double_t c0 = track.GetCovMatrix()[0];
-    Double_t c1 = track.GetCovMatrix()[1];
-    Double_t c2 = track.GetCovMatrix()[2];
-    chi2        = 0.5 * (dx * dx * c0 - 2 * dx * dy * c1 + dy * dy * c2) / (c0 * c2 - c1 * c1);
-  }
-  else if (pHit->GetDx() < pHit->GetDy()) {
-    Double_t dx = track.GetTrack()[0] - pHit->GetX();
-    Double_t c0 = track.GetCovMatrix()[0] + pHit->GetDx() * pHit->GetDx();
-    chi2        = dx * dx / c0;
-  }
-  else {
-    Double_t dy = track.GetTrack()[1] - pHit->GetY();
-    Double_t c2 = track.GetCovMatrix()[2] + pHit->GetDy() * pHit->GetDy();
-    chi2        = dy * dy / c2;
-  }
-  return chi2;
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-void CbmL1TrdTrackFinderSts::CreateHistogramms()
-{
-  // Create control histogramms
-
-  // Normalized distance to hit
-  fh_chi2hit = new TH1F("h_chi2hit", "Normalized distance to hit", 500, 0., 50.);
-  fh_chi2hit_plane =
-    new TH2F("h_chi2hit_plane", "Normalized distance to hit vs. plane number", 500, 0., 50., 12, 0., 12.);
-
-  fh_resx_plane_true = new TH2F("h_resx_plane_true", "", 200, -10., 10., 12, 0., 12.);
-  fh_resy_plane_true = new TH2F("h_resy_plane_true", "", 200, -10., 10., 12, 0., 12.);
-  fh_resx_plane_fake = new TH2F("h_resx_plane_fake", "", 200, -10., 10., 12, 0., 12.);
-  fh_resy_plane_fake = new TH2F("h_resy_plane_fake", "", 200, -10., 10., 12, 0., 12.);
-  fh_resx_mom_true   = new TH2F("h_resx_mom_true", "", 200, -10., 10., 100, 0., 10.);
-  fh_resy_mom_true   = new TH2F("h_resy_mom_true", "", 200, -10., 10., 100, 0., 10.);
-
-  fh_pullx_plane_true = new TH2F("h_pullx_plane_true", "", 200, -10., 10., 12, 0., 12.);
-  fh_pully_plane_true = new TH2F("h_pully_plane_true", "", 200, -10., 10., 12, 0., 12.);
-  fh_pullx_plane_fake = new TH2F("h_pullx_plane_fake", "", 200, -10., 10., 12, 0., 12.);
-  fh_pully_plane_fake = new TH2F("h_pully_plane_fake", "", 200, -10., 10., 12, 0., 12.);
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-void CbmL1TrdTrackFinderSts::DataBranches()
-{
-  // Initialisation
-
-  // Get pointer to the ROOT manager
-  FairRootManager* rootMgr = FairRootManager::Instance();
-  if (NULL == rootMgr) {
-    cout << "-E- CbmL1TrdTrackFinderSts::DataBranches : "
-         << "ROOT manager is not instantiated" << endl;
-    return;
-  }
-  // Get pointer to the TRD points
-  fArrayTrdPoint = L1_DYNAMIC_CAST<TClonesArray*>(rootMgr->GetObject("TrdPoint"));
-  if (NULL == fArrayTrdPoint) {
-    cout << "-W- CbmL1TrdTrackFinderSts::DataBranches : "
-         << "no TRD point array" << endl;
-  }
-  // Get pointer to the STS track array
-  fArrayStsTrack = L1_DYNAMIC_CAST<TClonesArray*>(rootMgr->GetObject("StsTrack"));
-  if (NULL == fArrayStsTrack) {
-    cout << "-W- CbmL1TrdTrackFinderSts::DataBranches : "
-         << "no STS track array" << endl;
-  }
-  // Get pointer to the STS track match array
-  fArrayStsTrackM = L1_DYNAMIC_CAST<TClonesArray*>(rootMgr->GetObject("StsTrackMatch"));
-  if (NULL == fArrayStsTrackM) {
-    cout << "-W- CbmL1TrdTrackFinderSts::DataBranches : "
-         << "no STS track match array" << endl;
-  }
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-void CbmL1TrdTrackFinderSts::TrdLayout()
-{
-  // Determine the actual TRD layout from the parameter file
-
-  // Get the pointer to the singleton FairRunAna object
-  FairRunAna* ana = FairRunAna::Instance();
-  if (NULL == ana) {
-    cout << "-E- CbmL1TrdTrackFinderSts::TrdLayout :"
-         << " no FairRunAna object!" << endl;
-    return;
-  }
-  // Get the pointer to run-time data base
-  FairRuntimeDb* rtdb = ana->GetRuntimeDb();
-  if (NULL == rtdb) {
-    cout << "-E- CbmL1TrdTrackFinderSts::TrdLayout :"
-         << " no runtime database!" << endl;
-    return;
-  }
-  // Get the pointer to container of base parameters
-  FairBaseParSet* baseParSet = L1_DYNAMIC_CAST<FairBaseParSet*>(rtdb->getContainer("FairBaseParSet"));
-  if (NULL == baseParSet) {
-    cout << "-E- CbmL1TrdTrackFinderSts::TrdLayout :"
-         << " no container of base parameters!" << endl;
-    return;
-  }
-  // Get the pointer to detector list
-  TObjArray* detList = baseParSet->GetDetList();
-  if (NULL == detList) {
-    cout << "-E- CbmL1TrdTrackFinderSts::TrdLayout :"
-         << " no detector list!" << endl;
-    return;
-  }
-  // Find TRD detector
-  FairDetector* trd = L1_DYNAMIC_CAST<FairDetector*>(detList->FindObject("TRD"));
-  if (NULL == trd) {
-    cout << "-E- CbmL1TrdTrackFinderSts::TrdLayout :"
-         << " no TRD detector!" << endl;
-    return;
-  }
-  // Determine the geometry version
-  TString name = trd->GetGeometryFileName();
-  if (name.Contains("9")) {
-    cout << "-I- CbmL1TrdTrackFinderSts::TrdLayout :"
-         << " TRD geometry : 3x3." << endl;
-    fNoTrdStations   = 3;
-    fNoTrdPerStation = 3;
-  }
-  else if (name.Contains("12")) {
-    cout << "-I- CbmL1TrdTrackFinderSts::TrdLayout :"
-         << " TRD geometry : 3x4." << endl;
-    fNoTrdStations   = 3;
-    fNoTrdPerStation = 4;
-  }
-  else if (name.Contains("6x2")) {
-    cout << "-I- CbmL1TrdTrackFinderSts::TrdLayout :"
-         << " TRD geometry : 6x2." << endl;
-    fNoTrdStations   = 6;
-    fNoTrdPerStation = 2;
-  }
-  else if (name.Contains("standard")) {
-    cout << "-I- CbmL1TrdTrackFinderSts::TrdLayout :"
-         << " TRD geometry : 3x4 standard." << endl;
-    fNoTrdStations   = 3;
-    fNoTrdPerStation = 4;
-  }
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-void CbmL1TrdTrackFinderSts::SortTrdHits()
-{
-  // Sort TRD hits by plane number
-  for (Int_t i = 0; i < 12; i++) {
-    fNoTrdHits[i] = 0;
-  }
-  // Declare variables outside the loop
-  Int_t nTrdHits     = fArrayTrdHit->GetEntriesFast();
-  CbmTrdHit* hit     = NULL;
-  CbmKFTrdHit* kfHit = NULL;
-  Int_t planeNumber  = 0;
-  // Loop over TRD hits
-  for (Int_t iHit = 0; iHit < nTrdHits; iHit++) {
-    // Get pointer to the hit
-    hit = L1_DYNAMIC_CAST<CbmTrdHit*>(fArrayTrdHit->At(iHit));
-    if (NULL == hit) continue;
-    // Create KF TRD hit
-    new ((*fArrayKFTrdHit)[iHit]) CbmKFTrdHit();
-    kfHit = L1_DYNAMIC_CAST<CbmKFTrdHit*>(fArrayKFTrdHit->At(iHit));
-    kfHit->Create(hit);
-    // Get plane number
-    planeNumber = hit->GetPlaneId() - 1;
-    if (planeNumber < 0 || planeNumber > 12) {
-      cout << "-W- CbmL1TrdTrackFinderSts::SortTrdHits : "
-           << "wrong plane number." << endl;
-      continue;
-    }
-    // Store hit index in the array
-    fTrdHitIndex[planeNumber][fNoTrdHits[planeNumber]] = iHit;
-    // Increment number of hits in plane
-    fNoTrdHits[planeNumber] += 1;
-  }
-  // Control output
-  cout << endl << "-I- CbmL1TrdTrackFinderSts::SortTrdHits : " << endl;
-  for (Int_t i = 0; i < (fNoTrdStations * fNoTrdPerStation); i++) {
-    cout << "TRD plane no. " << i << " has " << fNoTrdHits[i] << " hits" << endl;
-  }
-}
-// -----------------------------------------------------------------------
-
-
-// -----------------------------------------------------------------------
-void CbmL1TrdTrackFinderSts::WriteHistogramms()
-{
-  // Write control histogramms to file
-  fh_chi2hit->Write();
-  fh_chi2hit_plane->Write();
-  fh_resx_plane_true->Write();
-  fh_resy_plane_true->Write();
-  fh_resx_plane_fake->Write();
-  fh_resy_plane_fake->Write();
-  fh_resx_mom_true->Write();
-  fh_resy_mom_true->Write();
-  fh_pullx_plane_true->Write();
-  fh_pully_plane_true->Write();
-  fh_pullx_plane_fake->Write();
-  fh_pully_plane_fake->Write();
-}
-// -----------------------------------------------------------------------
-
-
-ClassImp(CbmL1TrdTrackFinderSts);
diff --git a/reco/KF/obsolete/CbmL1TrdTrackFinderSts.h b/reco/KF/obsolete/CbmL1TrdTrackFinderSts.h
deleted file mode 100644
index e49530fb9fb744ba1a5aea738cced9fc78779545..0000000000000000000000000000000000000000
--- a/reco/KF/obsolete/CbmL1TrdTrackFinderSts.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Copyright (C) 2006-2010 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Denis Bertini [committer] */
-
-// -----------------------------------------------------------------------
-// -----                    CbmL1TrdTrackFinderSts                   -----
-// -----                 Created 6/12/05  by D. Kresan               -----
-// -----------------------------------------------------------------------
-
-#ifndef CBM_L1_TRD_TRACK_FINDER_STS
-#define CBM_L1_TRD_TRACK_FINDER_STS
-
-#include "CbmTrdTrack.h"
-#include "CbmTrdTrackFinder.h"
-
-#include <map>
-#include <vector>
-
-class TClonesArray;
-class CbmTrdHit;
-class CbmKFTrack;
-class TH1F;
-class TH2F;
-
-
-class CbmL1TrdTrackFinderSts : public CbmTrdTrackFinder {
- private:
-  CbmL1TrdTrackFinderSts(const CbmL1TrdTrackFinderSts&);
-  CbmL1TrdTrackFinderSts operator=(const CbmL1TrdTrackFinderSts&);
-
- private:
-  Int_t fEvents;                         // Number of events processed
-  Int_t fVerbose;                        // Verbosity level
-  TClonesArray* fArrayTrdPoint;          // Array of TRD points
-  TClonesArray* fArrayTrdHit;            // Array of TRD hits
-  TClonesArray* fArrayStsTrack;          // Array of STS tracks
-  TClonesArray* fArrayStsTrackM;         // Array of STS tracks
-  TClonesArray* fArrayKFTrdHit;          // Array of KF TRD hits
-  std::vector<CbmTrdTrack*> fvTrdTrack;  // Working array of TRD tracks
-  TClonesArray* fArrayTrdTrack;          // Output Array of TRD tracks
-  Int_t fPid;                            // PID assumption
-  Int_t fNoTrdStations;                  // Number of TRD stations
-  Int_t fNoTrdPerStation;                // Number of TRD layers per station
-  Int_t fNoTrdHits[12];                  // Number of TRD hits per station
-  Int_t fTrdHitIndex[12][10000];         // Indices of TRD hits per station
-  std::map<Int_t, Bool_t> fmapHitUsed;   // Map from hit index to boolean flag
-  TH1F* fh_chi2hit;                      // Control histogramm
-  TH2F* fh_chi2hit_plane;                // Control histogramm
-  TH2F* fh_resx_plane_true;              // Control histogramm
-  TH2F* fh_resy_plane_true;              // Control histogramm
-  TH2F* fh_resx_plane_fake;              // Control histogramm
-  TH2F* fh_resy_plane_fake;              // Control histogramm
-  TH2F* fh_resx_mom_true;                // Control histogramm
-  TH2F* fh_resy_mom_true;                // Control histogramm
-  TH2F* fh_pullx_plane_true;             // Control histogramm
-  TH2F* fh_pully_plane_true;             // Control histogramm
-  TH2F* fh_pullx_plane_fake;             // Control histogramm
-  TH2F* fh_pully_plane_fake;             // Control histogramm
-  std::map<Int_t, Bool_t> fLostTracks;
-
-  void CreateHistogramms();
-  void DataBranches();
-  void TrdLayout();
-  void SortTrdHits();
-  void Process();
-  void Sts2Trd(Double_t pmin, Double_t pmax, Double_t chi2min, Double_t chi2max);
-  void ProcessAllStations();
-  void MoveOut();
-  void ProcessStation(CbmTrdTrack* pTrack, const Int_t& station);
-  void UpdateTrack(Int_t station, CbmTrdTrack* track);
-  virtual void Clear(const Option_t* a = 0);
-  void RemoveFakes();
-  Bool_t Overlap(CbmKFTrack& track, CbmTrdHit* pHit);
-  Double_t GetChi2Hit(CbmKFTrack& track, CbmTrdHit* pHit);
-
- public:
-  CbmL1TrdTrackFinderSts();
-  CbmL1TrdTrackFinderSts(Int_t verbose);
-  virtual ~CbmL1TrdTrackFinderSts();
-
-  void Init();
-  Int_t DoFind(TClonesArray* hitArray, TClonesArray* trackArray);
-  void WriteHistogramms();
-
-  inline void SetVerbose(Int_t verbose) { fVerbose = verbose; }
-
-  static Bool_t CompareChi2(const CbmTrdTrack* a, const CbmTrdTrack* b)
-  {
-    return (a->GetChiSq() / static_cast<Double_t>(a->GetNDF()) < b->GetChiSq() / static_cast<Double_t>(b->GetNDF()));
-  };
-
-  ClassDef(CbmL1TrdTrackFinderSts, 1);
-};
-
-
-#endif
diff --git a/reco/KF/obsolete/CbmL1TrdTracklet.cxx b/reco/KF/obsolete/CbmL1TrdTracklet.cxx
deleted file mode 100644
index a66246aae1879e48a84470c4e2dc9aba40e0ddb6..0000000000000000000000000000000000000000
--- a/reco/KF/obsolete/CbmL1TrdTracklet.cxx
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Copyright (C) 2006-2010 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Igor Kulakov, Denis Bertini [committer], Sergey Gorbunov */
-
-#include "CbmL1TrdTracklet.h"
-
-ClassImp(CbmL1TrdTracklet);
-
-// ----------------------- Default constructor ---------------------------
-CbmL1TrdTracklet::CbmL1TrdTracklet()
-  : vAccostTracklet()
-  , fIndLeft(0)
-  , fIndRight(0)
-  , fVal(0)
-  , fY(0)
-  , fIsAlone(0)
-  , fIndex(0){};
-
-// ----------------------- Default destructor ---------------------------
-CbmL1TrdTracklet::~CbmL1TrdTracklet(){};
diff --git a/reco/KF/obsolete/CbmL1TrdTracklet.h b/reco/KF/obsolete/CbmL1TrdTracklet.h
deleted file mode 100644
index 5904ad83b4d0db5e256bd653c96191332922db1c..0000000000000000000000000000000000000000
--- a/reco/KF/obsolete/CbmL1TrdTracklet.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Copyright (C) 2006-2007 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Denis Bertini [committer], Sergey Gorbunov */
-
-#ifndef CBML1TRDTRACKLET_H
-#define CBML1TRDTRACKLET_H 1
-
-#include "TObject.h"
-
-#include <vector>
-
-class CbmL1TrdTracklet : public TObject {
-
- public:
-  /** Default constructor **/
-  CbmL1TrdTracklet();
-
-  /** Destructor **/
-  virtual ~CbmL1TrdTracklet();
-
-  inline Int_t GetIndLeft() { return fIndLeft; };
-  inline Int_t GetIndRight() { return fIndRight; };
-  inline Int_t GetVal() { return fVal; };
-  inline Int_t GetIsAlone() { return fIsAlone; };
-  inline Int_t GetIndex() { return fIndex; };
-  inline Double_t GetCoord(Int_t ind) { return fCoord[ind]; };
-  inline Int_t GetPlanesID(Int_t num) { return fID[num]; };
-
-  inline void SetIndLeft(Int_t indLeft) { fIndLeft = indLeft; };
-  inline void SetIndRight(Int_t indRight) { fIndRight = indRight; };
-  inline void SetVal(Int_t segVal) { fVal = segVal; };
-  inline void SetIsAlone(Bool_t isAlone) { fIsAlone = isAlone; };
-  inline void SetIndex(Int_t index) { fIndex = index; };
-  inline void SetCoord(Int_t ind, Double_t val) { fCoord[ind] = val; };
-  inline void SetPlanesID(Int_t A_ID, Int_t B_ID)
-  {
-    fID[0] = A_ID;
-    fID[1] = B_ID;
-  };
-
-
-  std::vector<Int_t> vAccostTracklet;
-
-  //compares the first or second two coordinates of two tracklets
-  inline static Bool_t Compare1(CbmL1TrdTracklet* tr1, CbmL1TrdTracklet* tr2)
-  {
-    return (tr1->GetCoord(0) > tr2->GetCoord(0));
-  };
-
-  inline static Bool_t Compare2(CbmL1TrdTracklet* tr1, CbmL1TrdTracklet* tr2)
-  {
-    return (tr1->GetCoord(1) > tr2->GetCoord(1));
-  };
-
- private:
-  Int_t fID[2];
-  Int_t fIndLeft;
-  Int_t fIndRight;
-  Int_t fVal;
-  Int_t fY;
-  Bool_t fIsAlone;
-  Int_t fIndex;
-  Double_t fCoord[4];
-
-  ClassDef(CbmL1TrdTracklet, 1);
-};
-
-#endif
diff --git a/reco/KF/obsolete/CbmL1TrdTracklet4.cxx b/reco/KF/obsolete/CbmL1TrdTracklet4.cxx
deleted file mode 100644
index aa836b941feb309d52ee43f88f6a601254e158fa..0000000000000000000000000000000000000000
--- a/reco/KF/obsolete/CbmL1TrdTracklet4.cxx
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Copyright (C) 2006-2010 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Igor Kulakov, Denis Bertini [committer] */
-
-#include "CbmL1TrdTracklet4.h"
-
-ClassImp(CbmL1TrdTracklet4);
-
-// ----------------------- Default constructor ---------------------------
-CbmL1TrdTracklet4::CbmL1TrdTracklet4()
-  : vAccostTracklet()
-  , vAccostLeft()
-  , vAccostRight()
-  , fVal(0)
-  , fY(0)
-  , fIsAlone(0)
-  , fIndex(0)
-  , fExt1(0)
-  , fExt2(0){};
-
-// ----------------------- Default destructor ---------------------------
-CbmL1TrdTracklet4::~CbmL1TrdTracklet4(){};
diff --git a/reco/KF/obsolete/CbmL1TrdTracklet4.h b/reco/KF/obsolete/CbmL1TrdTracklet4.h
deleted file mode 100644
index 62f80be0b789b66d3b16324f9b773c83f6bb495a..0000000000000000000000000000000000000000
--- a/reco/KF/obsolete/CbmL1TrdTracklet4.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/* Copyright (C) 2006-2007 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Denis Bertini [committer], Sergey Gorbunov */
-
-#ifndef CBML1TRDTRACKLET4_H
-#define CBML1TRDTRACKLET4_H 1
-
-#include "TObject.h"
-
-#include <vector>
-
-class CbmL1TrdTracklet4 : public TObject {
-
- public:
-  /** Default constructor **/
-  CbmL1TrdTracklet4();
-
-  //CbmL1TrdTracklet(Int_t indLeft, Int_t indRight) {fIndLeft=indLeft; fIndRight=indRight;};
-
-  /** Destructor **/
-  virtual ~CbmL1TrdTracklet4();
-
-  //get a given hit hit index
-  inline Int_t GetInd(Int_t i) { return fInd[i]; };
-
-  //gets the appropriate coordinate values
-  inline Double_t GetCoord(Int_t ind) { return fCoord[ind]; };
-
-  //value of the tracklet used in tagging
-  inline Int_t GetVal() { return fVal; };
-
-  //says if this tracklet has any left-side neighbours
-  inline Int_t GetIsAlone() { return fIsAlone; };
-
-  inline Int_t GetIndex() { return fIndex; };
-
-
-  //sets the index of a given hit
-  inline void SetInd(Int_t ind, Int_t val) { fInd[ind] = val; };
-
-  //sets the appropriate coordinate values
-  inline void SetCoord(Int_t ind, Double_t val) { fCoord[ind] = val; };
-
-  //set value of the tracklet used in tagging
-  inline void SetVal(Int_t segVal) { fVal = segVal; };
-
-  //sets flag if this tracklet has any left-side neighbours
-  inline void SetIsAlone(Bool_t isAlone) { fIsAlone = isAlone; };
-
-  inline void SetIndex(Int_t index) { fIndex = index; };
-
-  /** Get extrapolated value of the precise coordinate of the 1st and 2nd layer **/
-  inline Double_t GetExt(Int_t ind) { return fExt[ind]; };
-
-  /** Set extrapolated value of the precise coordinate of the 1st and 2nd layer **/
-  //ind == 0 1st layer
-  //ind == 1 2nd layer
-  inline void SetExt(Int_t ind, Double_t val) { fExt[ind] = val; };
-
-  std::vector<Int_t> vAccostTracklet;  //position of next tracklets in vector
-  std::vector<Int_t> vAccostLeft;      //position of next tracklets in vector
-  std::vector<Int_t> vAccostRight;     //position of next tracklets in vector
-
-  //compares two first (or two second) coordinates of two tracklets
-  inline static Bool_t compare1(CbmL1TrdTracklet4* tr1, CbmL1TrdTracklet4* tr2)
-  {
-    return (tr1->GetCoord(0) < tr2->GetCoord(0));
-  };
-
-  inline static Bool_t compare2(CbmL1TrdTracklet4* tr1, CbmL1TrdTracklet4* tr2)
-  {
-    return (tr1->GetCoord(1) < tr2->GetCoord(1));
-  };
-
-  inline static Bool_t Compare3S(CbmL1TrdTracklet4* tr1, CbmL1TrdTracklet4* tr2)
-  {
-    return (tr1->GetVal() > tr2->GetVal());
-  };
-
-  //to store 4 Z value
-  Double_t M[4];
-
- private:
-  //indexes of the four consistuent hits
-  Int_t fInd[4];
-
-  //tracklet tag value
-  Int_t fVal;
-
-
-  Int_t fY;
-
-  //says if a tracklet has any left-sede neighbours
-  Bool_t fIsAlone;
-  Int_t fIndex;
-
-  Double_t fExt1;  //coordinates extrapolated to the next station (X or Y)
-  Double_t fExt2;
-  Double_t fExt[2];
-
-  Double_t fCoord[4];
-
-  ClassDef(CbmL1TrdTracklet4, 1);
-};
-
-#endif