diff --git a/core/data/CMakeLists.txt b/core/data/CMakeLists.txt
index ea147c107f1346d3d43f2dc6af9fa9129b77a9b0..2b3bd5a6c0975ac4a774b124085e487028ffaedc 100644
--- a/core/data/CMakeLists.txt
+++ b/core/data/CMakeLists.txt
@@ -31,7 +31,6 @@ set(SRCS
   CbmCluster.cxx
   CbmModuleList.cxx
   CbmErrorMessage.cxx
-  CbmRawEvent.cxx
   CbmMCTrack.cxx
   CbmMCEventInfo.cxx
   CbmMCEventList.cxx
diff --git a/core/data/CbmDataLinkDef.h b/core/data/CbmDataLinkDef.h
index a6c2d44494378c3a9eb1b9bd8fe2ac7a4485e94b..67b82b4b7cdbcc59eda1f7f82b94ef7da33465fc 100644
--- a/core/data/CbmDataLinkDef.h
+++ b/core/data/CbmDataLinkDef.h
@@ -26,7 +26,6 @@
 #pragma link C++ class CbmLink + ;
 #pragma link C++ class CbmModuleList;
 #pragma link C++ class CbmErrorMessage + ;
-#pragma link C++ class CbmRawEvent + ;
 #pragma link C++ class CbmTsEventHeader + ;
 #pragma link C++ class std::vector < CbmErrorMessage> + ;
 
diff --git a/core/data/CbmRawEvent.cxx b/core/data/CbmRawEvent.cxx
deleted file mode 100644
index cc2c320cd839723f5857bb43df4fa7723b7606bf..0000000000000000000000000000000000000000
--- a/core/data/CbmRawEvent.cxx
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (C) 2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Volker Friese [committer] */
-
-/*
- * CbmRawEvent.cxx
- *
- *  Created on: 27.03.2021
- *      Author: vfriese
- */
-
-
-#include "CbmRawEvent.h"
-
-
-// -----   Number of digis per system
-size_t CbmRawEvent::GetNofDigis(ECbmModuleId system) const
-{
-  switch (system) {
-    case ECbmModuleId::kMvd: return fDigisMvd.size(); break;
-    case ECbmModuleId::kSts: return fDigisSts.size(); break;
-    case ECbmModuleId::kRich: return fDigisRich.size(); break;
-    case ECbmModuleId::kMuch: return fDigisMuch.size(); break;
-    case ECbmModuleId::kTrd: return fDigisTrd.size(); break;
-    case ECbmModuleId::kTof: return fDigisTof.size(); break;
-    case ECbmModuleId::kPsd: return fDigisPsd.size(); break;
-    default: return 0; break;
-  }
-}
-
-
-// -----   Total number of digis
-size_t CbmRawEvent::GetNofDigis() const
-{
-  size_t result = fDigisMvd.size();
-  result += fDigisSts.size();
-  result += fDigisRich.size();
-  result += fDigisMuch.size();
-  result += fDigisTrd.size();
-  result += fDigisTof.size();
-  result += fDigisPsd.size();
-  return result;
-}
-
-
-// -----   String output
-std::string CbmRawEvent::ToString() const
-{
-  std::stringstream ss;
-  ss << "Event " << fNumber << " at t = " << fTime << " ns. Digis: " << GetNofDigis() << " (MVD " << fDigisMvd.size()
-     << "  STS " << fDigisSts.size() << "  RICH " << fDigisRich.size() << "  MUCH " << fDigisMuch.size() << "  TRD "
-     << fDigisTrd.size() << "  TOF " << fDigisTof.size() << "  PSD " << fDigisPsd.size() << ")";
-  return ss.str();
-}
-// -------------------------------------------------------------------------
diff --git a/core/data/CbmRawEvent.h b/core/data/CbmRawEvent.h
deleted file mode 100644
index 81e9e806c59d4f3d8bf7057881a6cbe7d269b976..0000000000000000000000000000000000000000
--- a/core/data/CbmRawEvent.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/* Copyright (C) 2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Volker Friese [committer] */
-
-/** @file CbmRawEvent.h
- ** @author Volker Friese <v.friese@gsi.de>
- ** @date 25.03.2021
- **/
-
-
-#ifndef CBMRAWEVENT_H
-#define CBMRAWEVENT_H 1
-
-#include "CbmDefs.h"  // for ECbmDataType, ECbmModuleId::kStsTrack
-//#include "CbmMatch.h"  // for CbmMatch
-#include "CbmMuchDigi.h"
-#include "CbmMvdDigi.h"
-#include "CbmPsdDigi.h"
-#include "CbmRichDigi.h"
-#include "CbmStsDigi.h"
-#include "CbmTofDigi.h"
-#include "CbmTrdDigi.h"
-//#include "CbmVertex.h"  // for CbmVertex, found in core/data/global
-
-//#include <Rtypes.h>          // for THashConsistencyHolder, ClassDef
-//#include <TMatrixFSymfwd.h>  // for TMatrixFSym
-//#include <TObject.h>         // for TObject
-
-
-//#include <cstdint>
-//#include <map>  // for map, map<>::mapped_type
-//#include <span>
-//#include <string>  // for string
-//#include <utility>
-#include <vector>  // for vector
-
-
-/** @class CbmRawEvent
- ** @brief Data class as collections of digis for each detector system
- ** @author V.Friese <v.friese@gsi.de>
- ** @version 1.0
- **
- **/
-class CbmRawEvent : public TObject {
-
-public:
-  /** @brief Default constructor **/
-  CbmRawEvent() {};
-
-
-  /** @brief Constructor with event number and time
-   ** @param number    Event number
-   ** @param time      Event trigger time [ns]
-   **/
-  CbmRawEvent(uint64_t number, double time = 0) : fNumber(number), fTime(time) {};
-
-
-  /** @brief Copy constructor **/
-  CbmRawEvent(const CbmRawEvent&) = default;
-
-
-  /** @brief Move constructor **/
-  CbmRawEvent(CbmRawEvent&&) = default;
-
-
-  /** @brief Assignment operator **/
-  CbmRawEvent& operator=(const CbmRawEvent&) = default;
-
-
-  /** @brief Destructor **/
-  virtual ~CbmRawEvent() {};
-
-
-  /** @brief Add a digi to the event
-   ** @param data Digi
-   ** TODO: Somehow, this does not work, so dedicated methods were implemented.
-   **/
-  template<class Digi>
-  void AddDigi(ECbmModuleId system, Digi digi)
-  {
-    switch (system) {
-      case ECbmModuleId::kMvd: fDigisMvd.push_back(digi); break;
-      case ECbmModuleId::kSts: fDigisSts.push_back(digi); break;
-      case ECbmModuleId::kRich: fDigisRich.push_back(digi); break;
-      case ECbmModuleId::kMuch: fDigisMuch.push_back(digi); break;
-      case ECbmModuleId::kTrd: fDigisTrd.push_back(digi); break;
-      case ECbmModuleId::kTof: fDigisTof.push_back(digi); break;
-      case ECbmModuleId::kPsd: fDigisPsd.push_back(digi); break;
-      default: break;
-    }
-  }
-
-
-  void AddDigiMvd(CbmMvdDigi digi) { fDigisMvd.push_back(digi); }
-  void AddDigiSts(CbmStsDigi digi) { fDigisSts.push_back(digi); }
-  void AddDigiRich(CbmRichDigi digi) { fDigisRich.push_back(digi); }
-  void AddDigiMuch(CbmMuchDigi digi) { fDigisMuch.push_back(digi); }
-  void AddDigiTrd(CbmTrdDigi digi) { fDigisTrd.push_back(digi); }
-  void AddDigiTof(CbmTofDigi digi) { fDigisTof.push_back(digi); }
-  void AddDigiPsd(CbmPsdDigi digi) { fDigisPsd.push_back(digi); }
-
-
-  /** @brief Read-only access to a single digi
-   ** @param system  System identifier (ECbmModuleId)
-   ** @param index Index of digi in its vector
-   ** @return Reference to digi object
-   **/
-  template<class Digi>
-  const Digi& GetDigi(ECbmModuleId system, size_t index) const
-  {
-    switch (system) {
-      case ECbmModuleId::kMvd: return fDigisMvd.at(index); break;
-      case ECbmModuleId::kSts: return fDigisSts.at(index); break;
-      case ECbmModuleId::kRich: return fDigisRich.at(index); break;
-      case ECbmModuleId::kMuch: return fDigisMuch.at(index); break;
-      case ECbmModuleId::kTrd: return fDigisTrd.at(index); break;
-      case ECbmModuleId::kTof: return fDigisTof.at(index); break;
-      case ECbmModuleId::kPsd: return fDigisPsd.at(index); break;
-      default: break;
-    }
-  }
-
-
-  /** @brief Read-only access to digi vectors
-   ** @param system  System identifier (ECbmModuleId)
-   ** @return Reference to digi vector for the specified system
-   **/
-  template<class Digi>
-  const std::vector<Digi>& GetDigis(ECbmModuleId system) const
-  {
-    switch (system) {
-      case ECbmModuleId::kMvd: return (&fDigisMvd); break;
-      case ECbmModuleId::kSts: return (&fDigisSts); break;
-      case ECbmModuleId::kRich: return (&fDigisRich); break;
-      case ECbmModuleId::kMuch: return (&fDigisMuch); break;
-      case ECbmModuleId::kTrd: return (&fDigisTrd); break;
-      case ECbmModuleId::kTof: return (&fDigisTof); break;
-      case ECbmModuleId::kPsd: return (&fDigisPsd); break;
-      default: break;
-    }
-  }
-
-
-  /** @brief Number of digis for a given system
-   ** @param systemId   System identifier (ECbmModuleId)
-   ** @return Number of digis for the specified system
-   **/
-  size_t GetNofDigis(ECbmModuleId) const;
-
-
-  /** @brief Total number of digis (all systems)
-   ** @return Number of digis in event
-   **/
-  size_t GetNofDigis() const;
-
-
-  /** @brief Event number
-   ** @return Event number
-	 **/
-  uint64_t GetNumber() const { return fNumber; }
-
-
-  /** @brief Event time
-   ** @return Event trigger time [ns]
-   **/
-  double GetTime() const { return fTime; }
-
-
-  /** @brief Set event time
-   ** @param time  Event trigger time [ns]
-	 **/
-  void SetTime(double time) { fTime = time; }
-
-
-  /** @brief String output **/
-  std::string ToString() const;
-
-
-private:
-  /** Event meta data **/
-  uint64_t fNumber;  ///< Event number
-  double fTime;      ///< Trigger time for this event [ns]
-
-  std::vector<CbmMvdDigi> fDigisMvd   = {};
-  std::vector<CbmStsDigi> fDigisSts   = {};
-  std::vector<CbmRichDigi> fDigisRich = {};
-  std::vector<CbmMuchDigi> fDigisMuch = {};
-  std::vector<CbmTrdDigi> fDigisTrd   = {};
-  std::vector<CbmTofDigi> fDigisTof   = {};
-  std::vector<CbmPsdDigi> fDigisPsd   = {};
-
-
-  ClassDef(CbmRawEvent, 1);
-};
-
-#endif /* CBMRAWEVENT_H_ */
diff --git a/macro/beamtime/mcbm2021/run_reco_mcbm_nh.C b/macro/beamtime/mcbm2021/run_reco_mcbm_nh.C
deleted file mode 100644
index 9154ba5301f960de4d42768c984b4ed79b451029..0000000000000000000000000000000000000000
--- a/macro/beamtime/mcbm2021/run_reco_mcbm_nh.C
+++ /dev/null
@@ -1,322 +0,0 @@
-/* Copyright (C) 2020-2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Volker Friese [committer], Dominik Smith */
-
-/** @file run_reco.C
- ** @author Volker Friese <v.friese@gsi.de>
- ** @since 14 November 2020
- **/
-
-
-// --- Includes needed for IDE
-#include <RtypesCore.h>
-#if !defined(__CLING__)
-#include "CbmBuildEventsFromTracksReal.h"
-#include "CbmBuildEventsIdeal.h"
-#include "CbmBuildEventsQa.h"
-#include "CbmDefs.h"
-#include "CbmEvbuildRawTask.h"
-#include "CbmFindPrimaryVertex.h"
-#include "CbmKF.h"
-#include "CbmL1.h"
-#include "CbmL1StsTrackFinder.h"
-#include "CbmLitFindGlobalTracks.h"
-#include "CbmMCDataManager.h"
-#include "CbmMatchRecoToMC.h"
-#include "CbmMuchFindHitsGem.h"
-#include "CbmMvdClusterfinder.h"
-#include "CbmMvdHitfinder.h"
-#include "CbmPVFinderKF.h"
-#include "CbmPrimaryVertexFinder.h"
-#include "CbmPsdHitProducer.h"
-#include "CbmRecoSts.h"
-#include "CbmRichHitProducer.h"
-#include "CbmRichReconstruction.h"
-#include "CbmSetup.h"
-#include "CbmStsFindTracks.h"
-#include "CbmStsFindTracksEvents.h"
-#include "CbmStsTrackFinder.h"
-#include "CbmTaskBuildRawEvents.h"
-#include "CbmTofSimpClusterizer.h"
-#include "CbmTrdClusterFinder.h"
-#include "CbmTrdHitProducer.h"
-
-#include <FairFileSource.h>
-#include <FairMonitor.h>
-#include <FairParAsciiFileIo.h>
-#include <FairParRootFileIo.h>
-#include <FairRunAna.h>
-#include <FairRuntimeDb.h>
-#include <FairSystemInfo.h>
-
-#include <TStopwatch.h>
-#endif
-
-
-/** @brief Macro for CBM reconstruction
- ** @author Volker Friese <v.friese@gsi.de>
- ** @since  14 November 2020
- ** @param input          Name of input file (w/o extension .raw.root)
- ** @param nTimeSlices    Number of time-slices to process
- ** @param firstTimeSlice First time-slice (entry) to be processed
- ** @param output         Name of output file (w/o extension .rec.root)
- ** @param sEvBuildRaw    Option for raw event building
- ** @param setup          Name of predefined geometry setup
- ** @param paramFile      Parameter ROOT file (w/o extension .par.root)
- ** @param useMC          Option to provide the trackfinder with MC information
- **
- ** This macro performs from the digis in a time-slice. It can be used
- ** for simulated data (result of run_digi.C) or real data after unpacking.
- **
- ** The macro covers both time-based reconstruction and event-based
- ** reconstruction using raw events build from digis. This can be selected
- ** by the forth argument. If left empty, no raw event builder will be
- ** employed and reconstruction will be time-based. The option "Ideal"
- ** selects the ideal raw event builder, which associates digis to events
- ** based on the MC truth. The option "Real" selects a real raw event builder
- ** (latest version, for older versions use "Real2018" or "Real2019").
- ** 
- **
- ** The file names must be specified without extensions. The convention is
- ** that the raw (input) file is [input].raw.root. The output file
- ** will be [input].rec.root if not specified by the user. The parameter file
- ** has the extension .par.root. It is assumed to be [input].par.root if
- ** not specified by the user.
- **
- ** If no argument is specified, the input will be set to "test". This allows
- ** to execute the macro chain (run_tra_file.C, run_digi.C and run_reco.C)
- ** from the ROOT prompt without user intervention.
- **
- **/
-void run_reco_mcbm_nh(TString input = "data/1588_node8_1_0000", Int_t nTimeSlices = 1000, Int_t firstTimeSlice = 0,
-                      TString output = "", TString sEvBuildRaw = "Real", TString setup = "mcbm_beam_2021_03",
-                      TString paramFile = "", Bool_t useMC = false)
-{
-
-  // ========================================================================
-  //          Adjust this part according to your requirements
-
-  // --- Logger settings ----------------------------------------------------
-  TString logLevel     = "info";
-  TString logVerbosity = "LOW";
-  // ------------------------------------------------------------------------
-
-  // -----   Environment   --------------------------------------------------
-  TString myName = "run_reco";                     // this macro's name for screen output
-  TString srcDir = gSystem->Getenv("VMCWORKDIR");  // top source directory
-  // ------------------------------------------------------------------------
-
-
-  // -----   In- and output file names   ------------------------------------
-  if (input.IsNull()) input = "test";
-  TString rawFile = input + ".digi.root";
-  TString traFile = input + ".tra.root";
-  if (output.IsNull()) output = input;
-  TString outFile = output + ".reco.root";
-  TString monFile = output + ".moni_reco.root";
-  if (paramFile.IsNull()) paramFile = input;
-  TString parFile = paramFile + ".par.root";
-  std::cout << "Inputfile " << rawFile << std::endl;
-  std::cout << "Outfile " << outFile << std::endl;
-  std::cout << "Parfile " << parFile << std::endl;
-
-  TString shcmd = "rm -v " + parFile;
-  gSystem->Exec(shcmd.Data());
-
-  // -----   Load the geometry setup   -------------------------------------
-  std::cout << std::endl;
-  std::cout << "-I- " << myName << ": Loading setup " << setup << std::endl;
-  CbmSetup* geo = CbmSetup::Instance();
-  geo->LoadSetup(setup);
-  // ------------------------------------------------------------------------
-
-
-  // -----   Some global switches   -----------------------------------------
-  Bool_t eventBased = !sEvBuildRaw.IsNull();
-  Bool_t useMvd     = geo->IsActive(ECbmModuleId::kMvd);
-  Bool_t useSts     = geo->IsActive(ECbmModuleId::kSts);
-  Bool_t useRich    = geo->IsActive(ECbmModuleId::kRich);
-  Bool_t useMuch    = geo->IsActive(ECbmModuleId::kMuch);
-  Bool_t useTrd     = geo->IsActive(ECbmModuleId::kTrd);
-  Bool_t useTof     = geo->IsActive(ECbmModuleId::kTof);
-  Bool_t usePsd     = geo->IsActive(ECbmModuleId::kPsd);
-
-  useMvd  = kFALSE;
-  useMuch = kFALSE;
-  useRich = kFALSE;
-  useTrd  = kFALSE;
-  useTof  = kFALSE;
-  usePsd  = kFALSE;
-  // ------------------------------------------------------------------------
-
-
-  // -----   Parameter files as input to the runtime database   -------------
-  std::cout << std::endl;
-  std::cout << "-I- " << myName << ": Defining parameter files " << std::endl;
-  TList* parFileList = new TList();
-  TString geoTag;
-
-  // - TRD digitisation parameters
-  if (CbmSetup::Instance()->GetGeoTag(ECbmModuleId::kTrd, geoTag)) {
-    const Char_t* npar[4] = {"asic", "digi", "gas", "gain"};
-    TObjString* trdParFile(NULL);
-    for (Int_t i(0); i < 4; i++) {
-      trdParFile = new TObjString(srcDir + "/parameters/trd/trd_" + geoTag + "." + npar[i] + ".par");
-      parFileList->Add(trdParFile);
-      std::cout << "-I- " << myName << ": Using parameter file " << trdParFile->GetString() << std::endl;
-    }
-  }
-
-  // - TOF digitisation parameters
-  if (CbmSetup::Instance()->GetGeoTag(ECbmModuleId::kTof, geoTag)) {
-    TObjString* tofBdfFile = new TObjString(srcDir + "/parameters/tof/tof_" + geoTag + ".digibdf.par");
-    parFileList->Add(tofBdfFile);
-    std::cout << "-I- " << myName << ": Using parameter file " << tofBdfFile->GetString() << std::endl;
-  }
-  // ------------------------------------------------------------------------
-
-  // In general, the following parts need not be touched
-  // ========================================================================
-
-
-  // -----   Timer   --------------------------------------------------------
-  TStopwatch timer;
-  timer.Start();
-  // ------------------------------------------------------------------------
-
-
-  // -----   FairRunAna   ---------------------------------------------------
-  FairRunAna* run             = new FairRunAna();
-  FairFileSource* inputSource = new FairFileSource(rawFile);
-  if (useMC) { inputSource->AddFriend(traFile); }
-  run->SetSource(inputSource);
-  run->SetOutputFile(outFile);
-  run->SetGenerateRunInfo(kTRUE);
-  FairMonitor::GetMonitor()->EnableMonitor(kTRUE, monFile);
-  // ------------------------------------------------------------------------
-
-  // -----   MCDataManager  -----------------------------------
-  if (useMC) {
-    CbmMCDataManager* mcManager = new CbmMCDataManager("MCDataManager", 0);
-    mcManager->AddFile(traFile);
-    run->AddTask(mcManager);
-  }
-  // ------------------------------------------------------------------------
-
-  // -----   Logger settings   ----------------------------------------------
-  FairLogger::GetLogger()->SetLogScreenLevel(logLevel.Data());
-  FairLogger::GetLogger()->SetLogVerbosityLevel(logVerbosity.Data());
-  // ------------------------------------------------------------------------
-
-
-  // -----   Raw event building from digis   --------------------------------
-  if (eventBased) {
-    if (sEvBuildRaw.EqualTo("Ideal", TString::ECaseCompare::kIgnoreCase)) {
-      FairTask* evBuildRaw = new CbmBuildEventsIdeal();
-      run->AddTask(evBuildRaw);
-      std::cout << "-I- " << myName << ": Added task " << evBuildRaw->GetName() << std::endl;
-      eventBased = kTRUE;
-    }  //? Ideal raw event building
-    else if (sEvBuildRaw.EqualTo("Real", TString::ECaseCompare::kIgnoreCase)) {
-      CbmEvbuildRawTask* evBuildRaw = new CbmEvbuildRawTask();
-
-      //Choose between NoOverlap, MergeOverlap, AllowOverlap
-      evBuildRaw->SetEventOverlapMode(EOverlapModeRaw::AllowOverlap);
-
-      // Remove detectors where digis not found
-      if (!useRich) evBuildRaw->RemoveDetector(kRawEventBuilderDetRich);
-      if (!useMuch) evBuildRaw->RemoveDetector(kRawEventBuilderDetMuch);
-      if (!usePsd) evBuildRaw->RemoveDetector(kRawEventBuilderDetPsd);
-      if (!useTof) evBuildRaw->RemoveDetector(kRawEventBuilderDetTof);
-      if (!useTrd) evBuildRaw->RemoveDetector(kRawEventBuilderDetTrd);
-      if (!useSts) {
-        std::cerr << "-E- " << myName << ": Sts must be present for raw event "
-                  << "building using ``Real2019'' option. Terminating macro." << std::endl;
-        return;
-      }
-      // Set STS as reference detector
-      evBuildRaw->SetReferenceDetector(kRawEventBuilderDetTof);
-      evBuildRaw->SetTsParameters(0.0, 1.e7, 0.0);
-
-      // Use CbmMuchDigi instead of CbmMuchBeamtimeDigi
-      // evBuildRaw->ChangeMuchBeamtimeDigiFlag(kFALSE);
-
-      //evBuildRaw->SetTriggerMinNumber(ECbmModuleId::kSts, 1000);
-      evBuildRaw->SetTriggerMinNumber(ECbmModuleId::kTof, 10);
-      evBuildRaw->SetTriggerWindow(ECbmModuleId::kTof, -5, 50);
-      //evBuildRaw->SetTriggerMaxNumber(ECbmModuleId::kSts, -1);
-      evBuildRaw->SetTriggerWindow(ECbmModuleId::kSts, -500, 500);
-
-      run->AddTask(evBuildRaw);
-      std::cout << "-I- " << myName << ": Added task " << evBuildRaw->GetName() << std::endl;
-      eventBased = kTRUE;
-    }  //? Real raw event building
-    else {
-      std::cerr << "-E- " << myName << ": Unknown option " << sEvBuildRaw
-                << " for raw event building! Terminating macro execution." << std::endl;
-      return;
-    }
-  }  //? event-based reco
-  // ------------------------------------------------------------------------
-
-
-  // -----  Parameter database   --------------------------------------------
-  std::cout << std::endl << std::endl;
-  std::cout << "-I- " << myName << ": Set runtime DB" << std::endl;
-  FairRuntimeDb* rtdb        = run->GetRuntimeDb();
-  FairParRootFileIo* parIo1  = new FairParRootFileIo();
-  FairParAsciiFileIo* parIo2 = new FairParAsciiFileIo();
-  parIo1->open(parFile.Data(), "UPDATE");
-  rtdb->setFirstInput(parIo1);
-  if (!parFileList->IsEmpty()) {
-    parIo2->open(parFileList, "in");
-    rtdb->setSecondInput(parIo2);
-  }
-  // ------------------------------------------------------------------------
-
-
-  // -----   Run initialisation   -------------------------------------------
-  std::cout << std::endl;
-  std::cout << "-I- " << myName << ": Initialise run" << std::endl;
-  run->Init();
-  rtdb->setOutput(parIo1);
-  rtdb->saveOutput();
-  rtdb->print();
-  // ------------------------------------------------------------------------
-
-
-  // -----   Start run   ----------------------------------------------------
-  std::cout << std::endl << std::endl;
-  std::cout << "-I- " << myName << ": Starting run" << std::endl;
-  run->Run(firstTimeSlice, nTimeSlices);
-  // ------------------------------------------------------------------------
-
-
-  // -----   Finish   -------------------------------------------------------
-  timer.Stop();
-  FairMonitor::GetMonitor()->Print();
-  Double_t rtime = timer.RealTime();
-  Double_t ctime = timer.CpuTime();
-  std::cout << std::endl << std::endl;
-  std::cout << "Macro finished successfully." << std::endl;
-  std::cout << "Output file is    " << outFile << std::endl;
-  std::cout << "Parameter file is " << parFile << std::endl;
-  std::cout << "Real time " << rtime << " s, CPU time " << ctime << " s" << std::endl;
-  FairSystemInfo sysInfo;
-  Float_t maxMemory = sysInfo.GetMaxMemory();
-  std::cout << "<DartMeasurement name=\"MaxMemory\" type=\"numeric/double\">";
-  std::cout << maxMemory;
-  std::cout << "</DartMeasurement>" << std::endl;
-  Float_t cpuUsage = ctime / rtime;
-  std::cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">";
-  std::cout << cpuUsage;
-  std::cout << "</DartMeasurement>" << std::endl;
-  // ------------------------------------------------------------------------
-
-
-  // -----   This is to prevent a malloc error when exiting ROOT   ----------
-  // The source of the error is unknown. Related to TGeoManager.
-  //RemoveGeoManager();
-  // ------------------------------------------------------------------------
-
-}  // End of main macro function
diff --git a/macro/run/run_reco_mcbm.C b/macro/run/run_reco_mcbm.C
deleted file mode 100644
index 24d42280f788de947f2e0764a852b2ee1b54ec66..0000000000000000000000000000000000000000
--- a/macro/run/run_reco_mcbm.C
+++ /dev/null
@@ -1,311 +0,0 @@
-/* Copyright (C) 2020-2021 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Volker Friese [committer], Dominik Smith */
-
-/** @file run_reco.C
- ** @author Volker Friese <v.friese@gsi.de>
- ** @since 14 November 2020
- **/
-
-
-// --- Includes needed for IDE
-#include <RtypesCore.h>
-#if !defined(__CLING__)
-#include "CbmBuildEventsFromTracksReal.h"
-#include "CbmBuildEventsIdeal.h"
-#include "CbmBuildEventsQa.h"
-#include "CbmDefs.h"
-#include "CbmEvbuildRawTask.h"
-#include "CbmFindPrimaryVertex.h"
-#include "CbmKF.h"
-#include "CbmL1.h"
-#include "CbmL1StsTrackFinder.h"
-#include "CbmLitFindGlobalTracks.h"
-#include "CbmMCDataManager.h"
-#include "CbmMatchRecoToMC.h"
-#include "CbmMuchFindHitsGem.h"
-#include "CbmMvdClusterfinder.h"
-#include "CbmMvdHitfinder.h"
-#include "CbmPVFinderKF.h"
-#include "CbmPrimaryVertexFinder.h"
-#include "CbmPsdHitProducer.h"
-#include "CbmRecoSts.h"
-#include "CbmRichHitProducer.h"
-#include "CbmRichReconstruction.h"
-#include "CbmSetup.h"
-#include "CbmStsFindTracks.h"
-#include "CbmStsFindTracksEvents.h"
-#include "CbmStsTrackFinder.h"
-#include "CbmTaskBuildRawEvents.h"
-#include "CbmTofSimpClusterizer.h"
-#include "CbmTrdClusterFinder.h"
-#include "CbmTrdHitProducer.h"
-
-#include <FairFileSource.h>
-#include <FairMonitor.h>
-#include <FairParAsciiFileIo.h>
-#include <FairParRootFileIo.h>
-#include <FairRunAna.h>
-#include <FairRuntimeDb.h>
-#include <FairSystemInfo.h>
-
-#include <TStopwatch.h>
-#endif
-
-
-/** @brief Macro for CBM reconstruction
- ** @author Volker Friese <v.friese@gsi.de>
- ** @since  14 November 2020
- ** @param input          Name of input file (w/o extension .raw.root)
- ** @param nTimeSlices    Number of time-slices to process
- ** @param firstTimeSlice First time-slice (entry) to be processed
- ** @param output         Name of output file (w/o extension .rec.root)
- ** @param sEvBuildRaw    Option for raw event building
- ** @param setup          Name of predefined geometry setup
- ** @param paramFile      Parameter ROOT file (w/o extension .par.root)
- ** @param useMC          Option to provide the trackfinder with MC information
- **
- ** This macro performs from the digis in a time-slice. It can be used
- ** for simulated data (result of run_digi.C) or real data after unpacking.
- **
- ** The macro covers both time-based reconstruction and event-based
- ** reconstruction using raw events build from digis. This can be selected
- ** by the forth argument. If left empty, no raw event builder will be
- ** employed and reconstruction will be time-based. The option "Ideal"
- ** selects the ideal raw event builder, which associates digis to events
- ** based on the MC truth. The option "Real" selects a real raw event builder
- ** (latest version, for older versions use "Real2018" or "Real2019").
- ** 
- **
- ** The file names must be specified without extensions. The convention is
- ** that the raw (input) file is [input].raw.root. The output file
- ** will be [input].rec.root if not specified by the user. The parameter file
- ** has the extension .par.root. It is assumed to be [input].par.root if
- ** not specified by the user.
- **
- ** If no argument is specified, the input will be set to "test". This allows
- ** to execute the macro chain (run_tra_file.C, run_digi.C and run_reco.C)
- ** from the ROOT prompt without user intervention.
- **
- **/
-void run_reco_mcbm(TString input = "", Int_t nTimeSlices = -1, Int_t firstTimeSlice = 0, TString output = "",
-                   TString sEvBuildRaw = "", TString setup = "sis100_electron", TString paramFile = "",
-                   Bool_t useMC = false)
-{
-
-  // ========================================================================
-  //          Adjust this part according to your requirements
-
-  // --- Logger settings ----------------------------------------------------
-  TString logLevel     = "debug";
-  TString logVerbosity = "LOW";
-  // ------------------------------------------------------------------------
-
-  // -----   Environment   --------------------------------------------------
-  TString myName = "run_reco";                     // this macro's name for screen output
-  TString srcDir = gSystem->Getenv("VMCWORKDIR");  // top source directory
-  // ------------------------------------------------------------------------
-
-
-  // -----   In- and output file names   ------------------------------------
-  if (input.IsNull()) input = "test";
-  TString rawFile = input + ".raw.root";
-  TString traFile = input + ".tra.root";
-  if (output.IsNull()) output = input;
-  TString outFile = output + ".reco.root";
-  TString monFile = output + ".moni_reco.root";
-  if (paramFile.IsNull()) paramFile = input;
-  TString parFile = paramFile + ".par.root";
-  std::cout << "Inputfile " << rawFile << std::endl;
-  std::cout << "Outfile " << outFile << std::endl;
-  std::cout << "Parfile " << parFile << std::endl;
-
-  // -----   Load the geometry setup   -------------------------------------
-  std::cout << std::endl;
-  std::cout << "-I- " << myName << ": Loading setup " << setup << std::endl;
-  CbmSetup* geo = CbmSetup::Instance();
-  geo->LoadSetup(setup);
-  // ------------------------------------------------------------------------
-
-
-  // -----   Some global switches   -----------------------------------------
-  Bool_t eventBased = !sEvBuildRaw.IsNull();
-  Bool_t useMvd     = geo->IsActive(ECbmModuleId::kMvd);
-  Bool_t useSts     = geo->IsActive(ECbmModuleId::kSts);
-  Bool_t useRich    = geo->IsActive(ECbmModuleId::kRich);
-  Bool_t useMuch    = geo->IsActive(ECbmModuleId::kMuch);
-  Bool_t useTrd     = geo->IsActive(ECbmModuleId::kTrd);
-  Bool_t useTof     = geo->IsActive(ECbmModuleId::kTof);
-  Bool_t usePsd     = geo->IsActive(ECbmModuleId::kPsd);
-  // ------------------------------------------------------------------------
-
-
-  // -----   Parameter files as input to the runtime database   -------------
-  std::cout << std::endl;
-  std::cout << "-I- " << myName << ": Defining parameter files " << std::endl;
-  TList* parFileList = new TList();
-  TString geoTag;
-
-  // - TRD digitisation parameters
-  if (CbmSetup::Instance()->GetGeoTag(ECbmModuleId::kTrd, geoTag)) {
-    const Char_t* npar[4] = {"asic", "digi", "gas", "gain"};
-    TObjString* trdParFile(NULL);
-    for (Int_t i(0); i < 4; i++) {
-      trdParFile = new TObjString(srcDir + "/parameters/trd/trd_" + geoTag + "." + npar[i] + ".par");
-      parFileList->Add(trdParFile);
-      std::cout << "-I- " << myName << ": Using parameter file " << trdParFile->GetString() << std::endl;
-    }
-  }
-
-  // - TOF digitisation parameters
-  if (CbmSetup::Instance()->GetGeoTag(ECbmModuleId::kTof, geoTag)) {
-    TObjString* tofBdfFile = new TObjString(srcDir + "/parameters/tof/tof_" + geoTag + ".digibdf.par");
-    parFileList->Add(tofBdfFile);
-    std::cout << "-I- " << myName << ": Using parameter file " << tofBdfFile->GetString() << std::endl;
-  }
-  // ------------------------------------------------------------------------
-
-  // In general, the following parts need not be touched
-  // ========================================================================
-
-
-  // -----   Timer   --------------------------------------------------------
-  TStopwatch timer;
-  timer.Start();
-  // ------------------------------------------------------------------------
-
-
-  // -----   FairRunAna   ---------------------------------------------------
-  FairRunAna* run             = new FairRunAna();
-  FairFileSource* inputSource = new FairFileSource(rawFile);
-  if (useMC) { inputSource->AddFriend(traFile); }
-  run->SetSource(inputSource);
-  run->SetOutputFile(outFile);
-  run->SetGenerateRunInfo(kTRUE);
-  FairMonitor::GetMonitor()->EnableMonitor(kTRUE, monFile);
-  // ------------------------------------------------------------------------
-
-  // -----   MCDataManager  -----------------------------------
-  if (useMC) {
-    CbmMCDataManager* mcManager = new CbmMCDataManager("MCDataManager", 0);
-    mcManager->AddFile(traFile);
-    run->AddTask(mcManager);
-  }
-  // ------------------------------------------------------------------------
-
-  // -----   Logger settings   ----------------------------------------------
-  FairLogger::GetLogger()->SetLogScreenLevel(logLevel.Data());
-  FairLogger::GetLogger()->SetLogVerbosityLevel(logVerbosity.Data());
-  // ------------------------------------------------------------------------
-
-
-  // -----   Raw event building from digis   --------------------------------
-  if (eventBased) {
-    if (sEvBuildRaw.EqualTo("Ideal", TString::ECaseCompare::kIgnoreCase)) {
-      FairTask* evBuildRaw = new CbmBuildEventsIdeal();
-      run->AddTask(evBuildRaw);
-      std::cout << "-I- " << myName << ": Added task " << evBuildRaw->GetName() << std::endl;
-      eventBased = kTRUE;
-    }  //? Ideal raw event building
-    else if (sEvBuildRaw.EqualTo("Real", TString::ECaseCompare::kIgnoreCase)) {
-      CbmEvbuildRawTask* evBuildRaw = new CbmEvbuildRawTask();
-
-      //Choose between NoOverlap, MergeOverlap, AllowOverlap
-      evBuildRaw->SetEventOverlapMode(EOverlapModeRaw::AllowOverlap);
-
-      // Remove detectors where digis not found
-      if (!useRich) evBuildRaw->RemoveDetector(kRawEventBuilderDetRich);
-      if (!useMuch) evBuildRaw->RemoveDetector(kRawEventBuilderDetMuch);
-      if (!usePsd) evBuildRaw->RemoveDetector(kRawEventBuilderDetPsd);
-      if (!useTof) evBuildRaw->RemoveDetector(kRawEventBuilderDetTof);
-      if (!useTrd) evBuildRaw->RemoveDetector(kRawEventBuilderDetTrd);
-      if (!useSts) {
-        std::cerr << "-E- " << myName << ": Sts must be present for raw event "
-                  << "building using ``Real2019'' option. Terminating macro." << std::endl;
-        return;
-      }
-      // Set STS as reference detector
-      evBuildRaw->SetReferenceDetector(kRawEventBuilderDetTof);
-      evBuildRaw->SetTsParameters(0.0, 1.e7, 0.0);
-
-      // Use CbmMuchDigi instead of CbmMuchBeamtimeDigi
-      evBuildRaw->ChangeMuchBeamtimeDigiFlag(kFALSE);
-
-      //evBuildRaw->SetTriggerMinNumber(ECbmModuleId::kSts, 1000);
-      evBuildRaw->SetTriggerMinNumber(ECbmModuleId::kTof, 5);
-      //evBuildRaw->SetTriggerMaxNumber(ECbmModuleId::kSts, -1);
-      evBuildRaw->SetTriggerWindow(ECbmModuleId::kSts, -500, 500);
-
-      run->AddTask(evBuildRaw);
-      std::cout << "-I- " << myName << ": Added task " << evBuildRaw->GetName() << std::endl;
-      eventBased = kTRUE;
-    }  //? Real raw event building
-    else {
-      std::cerr << "-E- " << myName << ": Unknown option " << sEvBuildRaw
-                << " for raw event building! Terminating macro execution." << std::endl;
-      return;
-    }
-  }  //? event-based reco
-  // ------------------------------------------------------------------------
-
-
-  // -----  Parameter database   --------------------------------------------
-  std::cout << std::endl << std::endl;
-  std::cout << "-I- " << myName << ": Set runtime DB" << std::endl;
-  FairRuntimeDb* rtdb        = run->GetRuntimeDb();
-  FairParRootFileIo* parIo1  = new FairParRootFileIo();
-  FairParAsciiFileIo* parIo2 = new FairParAsciiFileIo();
-  parIo1->open(parFile.Data(), "UPDATE");
-  rtdb->setFirstInput(parIo1);
-  if (!parFileList->IsEmpty()) {
-    parIo2->open(parFileList, "in");
-    rtdb->setSecondInput(parIo2);
-  }
-  // ------------------------------------------------------------------------
-
-
-  // -----   Run initialisation   -------------------------------------------
-  std::cout << std::endl;
-  std::cout << "-I- " << myName << ": Initialise run" << std::endl;
-  run->Init();
-  rtdb->setOutput(parIo1);
-  rtdb->saveOutput();
-  rtdb->print();
-  // ------------------------------------------------------------------------
-
-
-  // -----   Start run   ----------------------------------------------------
-  std::cout << std::endl << std::endl;
-  std::cout << "-I- " << myName << ": Starting run" << std::endl;
-  run->Run(firstTimeSlice, nTimeSlices);
-  // ------------------------------------------------------------------------
-
-
-  // -----   Finish   -------------------------------------------------------
-  timer.Stop();
-  FairMonitor::GetMonitor()->Print();
-  Double_t rtime = timer.RealTime();
-  Double_t ctime = timer.CpuTime();
-  std::cout << std::endl << std::endl;
-  std::cout << "Macro finished successfully." << std::endl;
-  std::cout << "Output file is    " << outFile << std::endl;
-  std::cout << "Parameter file is " << parFile << std::endl;
-  std::cout << "Real time " << rtime << " s, CPU time " << ctime << " s" << std::endl;
-  FairSystemInfo sysInfo;
-  Float_t maxMemory = sysInfo.GetMaxMemory();
-  std::cout << "<DartMeasurement name=\"MaxMemory\" type=\"numeric/double\">";
-  std::cout << maxMemory;
-  std::cout << "</DartMeasurement>" << std::endl;
-  Float_t cpuUsage = ctime / rtime;
-  std::cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">";
-  std::cout << cpuUsage;
-  std::cout << "</DartMeasurement>" << std::endl;
-  // ------------------------------------------------------------------------
-
-
-  // -----   This is to prevent a malloc error when exiting ROOT   ----------
-  // The source of the error is unknown. Related to TGeoManager.
-  RemoveGeoManager();
-  // ------------------------------------------------------------------------
-
-}  // End of main macro function
diff --git a/reco/eventbuilder/CMakeLists.txt b/reco/eventbuilder/CMakeLists.txt
index 9ae5bdd12207e25faf46dc989cdd0c204bdef55b..e92704b85daf8775e305ad2f720dc30827a6a3e4 100644
--- a/reco/eventbuilder/CMakeLists.txt
+++ b/reco/eventbuilder/CMakeLists.txt
@@ -10,8 +10,6 @@ set(INCLUDE_DIRECTORIES
 
 
 set(SRCS
-  digis/CbmEvbuildRawAlgo.cxx
-  digis/CbmEvbuildRawTask.cxx
   digis/CbmAlgoBuildRawEvents.cxx
   digis/CbmTaskBuildRawEvents.cxx
   digis/CbmBuildEventsIdeal.cxx
diff --git a/reco/eventbuilder/CbmEventBuilderLinkDef.h b/reco/eventbuilder/CbmEventBuilderLinkDef.h
index 5e52abb52acdedf73dbd55d8da72d4a2ae07c06f..6ffede6df8ab80c981d68c0e9a6ec30166ae547b 100644
--- a/reco/eventbuilder/CbmEventBuilderLinkDef.h
+++ b/reco/eventbuilder/CbmEventBuilderLinkDef.h
@@ -8,8 +8,6 @@
 #pragma link off all classes;
 #pragma link off all functions;
 
-#pragma link C++ class CbmEvbuildRawAlgo + ;
-#pragma link C++ class CbmEvbuildRawTask + ;
 #pragma link C++ class CbmAlgoBuildRawEvents + ;
 #pragma link C++ class CbmTaskBuildRawEvents + ;
 #pragma link C++ class CbmBuildEventsFromTracksIdeal + ;
diff --git a/reco/eventbuilder/digis/CbmEvbuildRawAlgo.cxx b/reco/eventbuilder/digis/CbmEvbuildRawAlgo.cxx
deleted file mode 100644
index b54e0f7f84a70280d2faa80190cee51cd8034661..0000000000000000000000000000000000000000
--- a/reco/eventbuilder/digis/CbmEvbuildRawAlgo.cxx
+++ /dev/null
@@ -1,987 +0,0 @@
-/* Copyright (C) 2021 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Volker Friese [committer] */
-
-#include "CbmEvbuildRawAlgo.h"
-
-/// CBM headers
-#include "CbmMuchBeamTimeDigi.h"
-#include "CbmMuchDigi.h"
-#include "CbmPsdDigi.h"
-#include "CbmRawEvent.h"
-#include "CbmRichDigi.h"
-#include "CbmStsDigi.h"
-#include "CbmTofDigi.h"
-#include "CbmTrdDigi.h"
-
-#include "TimesliceMetaData.h"
-
-/// FAIRROOT headers
-#include <FairRootManager.h>
-#include <FairRunOnline.h>
-#include <Logger.h>
-
-/// FAIRSOFT headers (geant, boost, ...)
-#include <TCanvas.h>
-#include <TClonesArray.h>
-#include <TFolder.h>
-#include <TH1.h>
-#include <TH2.h>
-#include <THttpServer.h>
-#include <TStopwatch.h>
-
-template<>
-void CbmEvbuildRawAlgo::LoopOnSeeds<Double_t>();
-
-Bool_t CbmEvbuildRawAlgo::InitAlgo()
-{
-  LOG(info) << "CbmEvbuildRawAlgo::InitAlgo => Starting sequence";
-
-  if (fbGetTimings) {
-    fTimer = new TStopwatch;
-    fTimer->Start();
-  }
-
-  /// Check if reference detector is set and seed data are available,
-  /// otherwise look for explicit seed times
-  if (fRefDet.detId == ECbmModuleId::kNotExist) {
-    if (fSeedTimes == nullptr) {
-      LOG(fatal) << "No reference detector set and no seed times supplied, stopping there!";
-    }
-  }
-  else {
-    if (fSeedTimes != nullptr) {
-      LOG(fatal) << "Cannot have explicit seed times and reference detector, stopping there!";
-    }
-    if (kFALSE == CheckDataAvailable(fRefDet)) {
-      LOG(fatal) << "Reference detector set but no digi input found, stopping there!";
-    }
-  }
-
-  /// Check if data for detectors in selection list are available
-  for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) {
-    if (kFALSE == CheckDataAvailable(*det)) {
-      LOG(fatal) << "No digi input for one of selection detector, stopping there!";
-    }
-  }
-
-  /// Access the TS metadata to know TS start time if needed
-  if (fbUseTsMetaData) {
-    if (!fTimeSliceMetaDataArray) {
-      LOG(fatal) << "No TS metadata input found"
-                 << " => Please check in the unpacking macro if the following line was "
-                    "present!"
-                 << std::endl
-                 << "source->SetWriteOutputFlag(kTRUE);  // For writing TS metadata";
-    }
-  }
-  if (fbFillHistos) { CreateHistograms(); }
-  if (fTimer != nullptr) {
-    fTimer->Stop();
-    Double_t rtime = fTimer->RealTime();
-    Double_t ctime = fTimer->CpuTime();
-    LOG(info) << "CbmEvbuildRawAlgo::Init(): Real time " << rtime << " s, CPU time " << ctime << " s";
-  }
-
-  LOG(info) << "CbmEvbuildRawAlgo::InitAlgo => Done";
-  return kTRUE;
-}
-
-void CbmEvbuildRawAlgo::Finish()
-{
-  if (fbGetTimings) { PrintTimings(); }
-}
-
-void CbmEvbuildRawAlgo::PrintTimings()
-{
-  if (fTimer == nullptr) { LOG(fatal) << "Trying to print timings but timer not set"; }
-  else {
-    Double_t rtime = fTimer->RealTime();
-    Double_t ctime = fTimer->CpuTime();
-    LOG(info) << "CbmEvbuildRawAlgo: Real time " << rtime << " s, CPU time " << ctime << " s";
-  }
-}
-
-void CbmEvbuildRawAlgo::ClearEventVector()
-{
-  /// Need to delete the object the pointer points to first
-  int counter = 0;
-  for (CbmRawEvent* event : fEventVector) {
-    LOG(debug) << "Event " << counter << " has " << event->GetNofDigis() << " digis";
-    delete event;
-    counter++;
-  }
-  fEventVector.clear();
-}
-
-void CbmEvbuildRawAlgo::ProcessTs()
-{
-  LOG_IF(info, fuNrTs % 1000 == 0) << "Begin of TS " << fuNrTs;
-  if (fTimer != nullptr) { fTimer->Start(kFALSE); }
-  LOG(debug) << "Init timeslice";
-  InitTs();
-  LOG(debug) << "Init seed window";
-  InitSeedWindow();
-  LOG(debug) << "Build events";
-  BuildEvents();
-
-  /// Store last event with trigger if not done by other seed
-  if (nullptr != fCurrentEvent) {
-    /// TODO: store start time of current event ?
-    //        fCurrentEvent->SetStartTime( fPrevTime ); // Replace Seed time with time of first digi in event?
-    //fCurrentEvent->SetEndTime(fdPrevEvtEndTime);
-    fEventVector.push_back(fCurrentEvent);
-    fuCurEv++;
-
-    /// Prevent building over TS edge
-    fCurrentEvent = nullptr;
-  }
-
-  LOG(debug) << "Found " << fEventVector.size() << " triggered events";
-  if (fbFillHistos) { FillHistos(); }
-  if (fTimer != nullptr) { fTimer->Stop(); }
-
-  fuNrTs++;
-}
-
-void CbmEvbuildRawAlgo::InitTs()
-{
-  /// Reset TS based variables (analysis per TS = no building over the border)
-
-  /// Reference detector
-  if (fRefDet.detId != ECbmModuleId::kNotExist) {
-    fRefDet.fuStartIndex = 0;
-    fRefDet.fuEndIndex   = 0;
-  }
-  /// Loop on detectors in selection list
-  for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) {
-    (*det).fuStartIndex = 0;
-    (*det).fuEndIndex   = 0;
-  }
-}
-
-void CbmEvbuildRawAlgo::InitSeedWindow()
-{
-  /// Access the TS metadata if needed to know TS start time and overlap size
-  Double_t dTsStartTime  = fdTsStartTime;
-  Double_t dOverlapStart = fdTsStartTime + fdTsLength;
-  Double_t dOverlapSize  = fdTsOverLength;
-
-  if (fbUseTsMetaData) {
-    const TimesliceMetaData* pTsMetaData = dynamic_cast<TimesliceMetaData*>(fTimeSliceMetaDataArray->At(0));
-    if (nullptr == pTsMetaData)
-      LOG(fatal) << Form("CbmEvbuildRawAlgo::LoopOnSeeds => "
-                         "No TS metadata found for TS %6u.",
-                         fuNrTs);
-    dTsStartTime  = pTsMetaData->GetStartTime();
-    dOverlapStart = pTsMetaData->GetOverlapStartTime();
-    dOverlapSize  = pTsMetaData->GetOverlapDuration();
-  }
-
-  /// Print warning in first TS if time window borders out of potential overlap
-  if ((0.0 < fdEarliestTimeWinBeg && dOverlapSize < fdLatestTimeWinEnd) || (dOverlapSize < fdWidestTimeWinRange)) {
-    LOG(warning) << "CbmEvbuildRawAlgo::LoopOnSeeds => "
-                 << Form("Event window not fitting in TS overlap, risk of "
-                         "incomplete events: %f %f %f %f",
-                         fdEarliestTimeWinBeg, fdLatestTimeWinEnd, fdWidestTimeWinRange, dOverlapSize);
-  }  // if end of event window does not fit in overlap for a seed at edge of TS core
-
-  /// Define an acceptance window for the seeds in order to use the overlap
-  /// part of the TS to avoid incomplete events
-  if (fbIgnoreTsOverlap) {
-    fdSeedWindowBeg = dTsStartTime;
-    fdSeedWindowEnd = dOverlapStart;
-  }
-  else {
-    fdSeedWindowBeg = dTsStartTime + (0.0 < fdEarliestTimeWinBeg ? 0.0 : -fdEarliestTimeWinBeg);
-    fdSeedWindowEnd = dOverlapStart + (0.0 < fdEarliestTimeWinBeg ? 0.0 : -fdEarliestTimeWinBeg);
-  }
-}
-
-void CbmEvbuildRawAlgo::BuildEvents()
-{
-  /// Call LoopOnSeed with proper template argument
-  switch (fRefDet.detId) {
-    case ECbmModuleId::kSts: {
-      LoopOnSeeds<CbmStsDigi>();
-      break;
-    }
-    case ECbmModuleId::kMuch: {
-      if (fbUseMuchBeamtimeDigi) { LoopOnSeeds<CbmMuchBeamTimeDigi>(); }
-      else {
-        LoopOnSeeds<CbmMuchDigi>();
-      }
-      break;
-    }
-    case ECbmModuleId::kTrd: {
-      LoopOnSeeds<CbmTrdDigi>();
-      break;
-    }
-    case ECbmModuleId::kTof: {
-      LoopOnSeeds<CbmTofDigi>();
-      break;
-    }
-    case ECbmModuleId::kRich: {
-      LoopOnSeeds<CbmRichDigi>();
-      break;
-    }
-    case ECbmModuleId::kPsd: {
-      LoopOnSeeds<CbmPsdDigi>();
-      break;
-    }
-    case ECbmModuleId::kT0: {
-      LoopOnSeeds<CbmTofDigi>();
-      break;
-    }
-    case ECbmModuleId::kNotExist: {  //explicit seed times
-      LoopOnSeeds<Double_t>();
-      break;
-    }
-    default: {
-      LOG(fatal) << "CbmEvbuildRawAlgo::BuildEvents => "
-                 << "Trying to search event seeds with unsupported det: " << fRefDet.sName;
-      break;
-    }
-  }
-}
-
-template<>
-void CbmEvbuildRawAlgo::LoopOnSeeds<Double_t>()
-{
-  if (ECbmModuleId::kNotExist == fRefDet.detId) {
-    const UInt_t uNbSeeds = fSeedTimes->size();
-    /// Loop on size of vector
-    for (UInt_t uSeed = 0; uSeed < uNbSeeds; ++uSeed) {
-      LOG(debug) << Form("Checking seed %6u / %6u", uSeed, uNbSeeds);
-      Double_t dTime = fSeedTimes->at(uSeed);
-
-      /// Check if seed in acceptance window (is this needed here?)
-      if (dTime < fdSeedWindowBeg) { continue; }
-      else if (fdSeedWindowEnd < dTime) {
-        break;
-      }
-      /// Check Seed and build event if needed
-      CheckSeed(dTime, uSeed);
-    }
-  }
-  else {
-    LOG(fatal) << "Trying to read explicit seeds while reference detector is set.";
-  }
-}
-
-template<class DigiSeed>
-void CbmEvbuildRawAlgo::LoopOnSeeds()
-{
-  if (ECbmModuleId::kT0 == fRefDet.detId) {
-    const UInt_t uNbRefDigis = fT0DigiVec->size();
-    /// Loop on size of vector
-    for (UInt_t uDigi = 0; uDigi < uNbRefDigis; ++uDigi) {
-      LOG(debug) << Form("Checking seed %6u / %6u", uDigi, uNbRefDigis);
-      Double_t dTime = fT0DigiVec->at(uDigi).GetTime();
-      /// Check Seed and build event if needed
-      CheckSeed(dTime, uDigi);
-    }
-  }
-  else {
-    const UInt_t uNbRefDigis = GetNofDigis(fRefDet.detId);
-    /// Loop on size of vector
-    for (UInt_t uDigi = 0; uDigi < uNbRefDigis; ++uDigi) {
-      LOG(debug) << Form("Checking seed %6u / %6u", uDigi, uNbRefDigis);
-      const DigiSeed* pDigi = GetDigi<DigiSeed>(uDigi);
-      const Double_t dTime  = pDigi->GetTime();
-
-      /// Check if seed in acceptance window
-      if (dTime < fdSeedWindowBeg) { continue; }
-      else if (fdSeedWindowEnd < dTime) {
-        break;
-      }
-      /// Check Seed and build event if needed
-      CheckSeed(dTime, uDigi);
-    }
-  }
-}
-
-Double_t CbmEvbuildRawAlgo::GetSeedTimeWinRange()
-{
-  if (ECbmModuleId::kNotExist != fRefDet.detId) { return fRefDet.GetTimeWinRange(); }
-  else {
-    return fdSeedTimeWinEnd - fdSeedTimeWinBeg;
-  }
-}
-
-void CbmEvbuildRawAlgo::CheckSeed(Double_t dSeedTime, UInt_t uSeedDigiIdx)
-{
-  /// If previous event valid and event overlap not allowed, check if we are in overlap
-  /// and react accordingly
-  if (nullptr != fCurrentEvent
-      && (EOverlapModeRaw::AllowOverlap != fOverMode || dSeedTime - fdPrevEvtTime < GetSeedTimeWinRange())
-      && dSeedTime - fdPrevEvtTime < fdWidestTimeWinRange) {
-    /// Within overlap range
-    switch (fOverMode) {
-      case EOverlapModeRaw::NoOverlap: {
-        /// No overlap allowed => reject
-        LOG(debug1) << "Reject seed due to overlap";
-        return;
-        break;
-      }
-      case EOverlapModeRaw::MergeOverlap: {
-        /// Merge overlap mode => do nothing and go on filling current event
-        break;
-      }
-      case EOverlapModeRaw::AllowOverlap: {
-        /// In allow overlap mode => reject only if reference det is in overlap
-        /// to avoid cloning events due to single seed cluster
-        LOG(debug1) << "Reject seed because part of cluster of previous one";
-        return;
-        break;
-      }
-    }
-  }  // if( prev Event exists and mode forbiden overlap present )
-  else {
-    /// Out of overlap range or in overlap allowed mode
-    /// => store previous event if not empty and create new one
-    if (nullptr != fCurrentEvent) {
-      /// TODO: store start time of current event ?
-      //        fCurrentEvent->SetStartTime( fPrevTime ); // Replace Seed time with time of first digi in event?
-      //fCurrentEvent->SetEndTime(fdPrevEvtEndTime);
-      fEventVector.push_back(fCurrentEvent);
-      fuCurEv++;
-    }
-    fCurrentEvent = new CbmRawEvent(fuCurEv, dSeedTime);
-  }  // else of if( prev Event exists and mode forbiden overlap present )
-
-  if (fRefDet.detId != ECbmModuleId::kNotExist) {
-    /// If window open for reference detector, search for other reference Digis matching it
-    /// Otherwise only add the current seed
-    if (fRefDet.fdTimeWinBeg < fRefDet.fdTimeWinEnd) {
-      SearchMatches(dSeedTime, fRefDet);
-      /// Also add the seed if the window starts after the seed
-      if (0 < fRefDet.fdTimeWinBeg) AddDigiToEvent(fRefDet, uSeedDigiIdx);
-    }
-    else {
-      AddDigiToEvent(fRefDet, uSeedDigiIdx);
-    }
-  }
-
-  /// Search for matches for each detector in selection list
-  for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) {
-    SearchMatches(dSeedTime, *det);
-  }
-
-  CheckTriggerCondition(dSeedTime);
-}
-
-void CbmEvbuildRawAlgo::SearchMatches(Double_t dSeedTime, RawEventBuilderDetector& detMatch)
-{
-  switch (detMatch.detId) {
-    case ECbmModuleId::kSts: {
-      SearchMatches<CbmStsDigi>(dSeedTime, detMatch);
-      break;
-    }
-    case ECbmModuleId::kMuch: {
-      if (fbUseMuchBeamtimeDigi) { SearchMatches<CbmMuchBeamTimeDigi>(dSeedTime, detMatch); }
-      else {
-        SearchMatches<CbmMuchDigi>(dSeedTime, detMatch);
-      }
-      break;
-    }
-    case ECbmModuleId::kTrd: {
-      SearchMatches<CbmTrdDigi>(dSeedTime, detMatch);
-      break;
-    }
-    case ECbmModuleId::kTof: {
-      SearchMatches<CbmTofDigi>(dSeedTime, detMatch);
-      break;
-    }
-    case ECbmModuleId::kRich: {
-      SearchMatches<CbmRichDigi>(dSeedTime, detMatch);
-      break;
-    }
-    case ECbmModuleId::kPsd: {
-      SearchMatches<CbmPsdDigi>(dSeedTime, detMatch);
-      break;
-    }
-    case ECbmModuleId::kT0: {
-      SearchMatches<CbmTofDigi>(dSeedTime, detMatch);
-      break;
-    }
-    default: {
-      LOG(fatal) << "CbmEvbuildRawAlgo::LoopOnSeeds => "
-                 << "Trying to search matches with unsupported det: " << detMatch.sName << std::endl
-                 << "You may want to add support for it in the method.";
-      break;
-    }
-  }
-}
-
-template<class DigiCheck>
-void CbmEvbuildRawAlgo::SearchMatches(Double_t dSeedTime, RawEventBuilderDetector& detMatch)
-{
-  /// This algo relies on time sorted vectors for the selected detectors
-  UInt_t uLocalIndexStart = detMatch.fuStartIndex;
-  UInt_t uLocalIndexEnd   = detMatch.fuStartIndex;
-
-  /// Check the Digis until out of window
-  if (ECbmModuleId::kT0 == detMatch.detId) {
-
-    /// Loop on size of vector
-    const UInt_t uNbSelDigis = fT0DigiVec->size();
-    for (UInt_t uDigi = detMatch.fuStartIndex; uDigi < uNbSelDigis; ++uDigi) {
-      const Double_t dTime     = fT0DigiVec->at(uDigi).GetTime();
-      const Double_t dTimeDiff = dTime - dSeedTime;
-
-      /// Check if within time window, update start/stop indices if needed
-      if (dTimeDiff < detMatch.fdTimeWinBeg) {
-        ++uLocalIndexStart;
-        continue;
-      }
-      else if (detMatch.fdTimeWinEnd < dTimeDiff) {
-        /// Store as end the first digi out of window to avoid double counting in case of
-        /// merged overlap event mode
-        uLocalIndexEnd = uDigi;
-        break;
-      }
-      AddDigiToEvent(detMatch, uDigi);
-      if (fdPrevEvtEndTime < dTime) fdPrevEvtEndTime = dTime;
-    }
-
-    /// catch the case where we reach the end of the vector before being out of the time window
-    if (uLocalIndexEnd < uLocalIndexStart) uLocalIndexEnd = uNbSelDigis;
-  }
-  else {
-    const UInt_t uNbSelDigis = GetNofDigis(detMatch.detId);
-    /// Loop on size of vector
-    for (UInt_t uDigi = detMatch.fuStartIndex; uDigi < uNbSelDigis; ++uDigi) {
-      const DigiCheck* pDigi   = GetDigi<DigiCheck>(uDigi);
-      const Double_t dTime     = pDigi->GetTime();
-      const Double_t dTimeDiff = dTime - dSeedTime;
-      LOG(debug4) << detMatch.sName << Form(" => Checking match %6u / %6u, dt %f", uDigi, uNbSelDigis, dTimeDiff);
-
-      /// Check if within time window, update start/stop indices if needed
-      if (dTimeDiff < detMatch.fdTimeWinBeg) {
-        ++uLocalIndexStart;
-        continue;
-      }
-      else if (detMatch.fdTimeWinEnd < dTimeDiff) {
-        /// Store as end the first digi out of window to avoid double counting in case of
-        /// merged overlap event mode
-        uLocalIndexEnd = uDigi;
-        break;
-      }
-      AddDigiToEvent(detMatch, uDigi);
-      if (fdPrevEvtEndTime < dTime) fdPrevEvtEndTime = dTime;
-    }
-    /// catch the case where we reach the end of the vector before being out of the time window
-    if (uLocalIndexEnd < uLocalIndexStart) uLocalIndexEnd = uNbSelDigis;
-  }
-
-  /// Update the StartIndex and EndIndex for the next event seed
-  detMatch.fuStartIndex = uLocalIndexStart;
-  detMatch.fuEndIndex   = uLocalIndexEnd;
-}
-
-void CbmEvbuildRawAlgo::AddDigiToEvent(RawEventBuilderDetector& det, Int_t _entry)
-{
-  switch (det.detId) {
-    case ECbmModuleId::kSts: fCurrentEvent->AddDigiSts(fStsDigis->at(_entry)); break;
-    case ECbmModuleId::kRich: fCurrentEvent->AddDigiRich(fRichDigis->at(_entry)); break;
-    case ECbmModuleId::kMuch: fCurrentEvent->AddDigiMuch(fMuchDigis->at(_entry)); break;
-    case ECbmModuleId::kTrd: fCurrentEvent->AddDigiTrd(fTrdDigis->at(_entry)); break;
-    case ECbmModuleId::kTof: fCurrentEvent->AddDigiTof(fTofDigis->at(_entry)); break;
-    case ECbmModuleId::kPsd: fCurrentEvent->AddDigiPsd(fPsdDigis->at(_entry)); break;
-    default: break;
-  }
-}
-
-void CbmEvbuildRawAlgo::CheckTriggerCondition(Double_t dSeedTime)
-{
-  /// Check if event is filling trigger conditions and clear it if not
-  if (HasTrigger(fCurrentEvent)) {
-    fdPrevEvtTime = dSeedTime;
-
-    /// In case of NoOverlap or MergeOverlap, we can and should start checking the next window
-    /// from end of current window in order to save CPU and avoid duplicating
-    if (EOverlapModeRaw::NoOverlap == fOverMode || EOverlapModeRaw::MergeOverlap == fOverMode) {
-      /// Update reference detector
-      if (fRefDet.detId != ECbmModuleId::kNotExist) { fRefDet.fuStartIndex = fRefDet.fuEndIndex; }
-      /// Loop on selection detectors
-      for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) {
-        (*det).fuStartIndex = (*det).fuEndIndex;
-      }
-    }
-  }
-  else {
-    LOG(debug1) << "Reject seed due to Trigger requirements";
-    delete fCurrentEvent;
-    fCurrentEvent = nullptr;  /// delete does NOT set a pointer to nullptr...
-  }
-}
-
-Bool_t CbmEvbuildRawAlgo::HasTrigger(CbmRawEvent* event)
-{
-  /// Check first reference detector
-  if (fRefDet.detId != ECbmModuleId::kNotExist) {
-    if (kFALSE == CheckTriggerConditions(event, fRefDet)) { return kFALSE; }
-  }
-  /// Loop on selection detectors
-  for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) {
-    if (kFALSE == CheckTriggerConditions(event, *det)) return kFALSE;
-  }
-  /// All Ok, trigger is there
-  return kTRUE;
-}
-
-Bool_t CbmEvbuildRawAlgo::CheckTriggerConditions(CbmRawEvent* event, RawEventBuilderDetector& det)
-{
-  /// Check if both Trigger conditions disabled for this detector
-  if (0 == det.fuTriggerMinDigis && det.fiTriggerMaxDigis < 0) { return kTRUE; }
-
-  /// Check if detector present
-  if (!CheckDataAvailable(det.detId)) {
-    LOG(warning) << "Event does not have digis storage for " << det.sName
-                 << " while the following trigger min/max are defined: " << det.fuTriggerMinDigis << " "
-                 << det.fiTriggerMaxDigis;
-    return kFALSE;
-  }
-
-  /// Check trigger rejection by minimal number or absence
-  const Int_t iNbDigis = event->GetNofDigis(det.detId);
-  if ((-1 == iNbDigis) || (static_cast<UInt_t>(iNbDigis) < det.fuTriggerMinDigis)) {
-    LOG(debug2) << "Event does not have enough digis: " << iNbDigis << " vs " << det.fuTriggerMinDigis << " for "
-                << det.sName;
-    return kFALSE;
-  }
-
-  /// Check trigger rejection by maximal number
-  else if (0 < det.fiTriggerMaxDigis && det.fiTriggerMaxDigis < iNbDigis) {
-    LOG(debug2) << "Event Has too many digis: " << iNbDigis << " vs " << det.fiTriggerMaxDigis << " for " << det.sName;
-    return kFALSE;
-  }
-  else {
-    return kTRUE;
-  }
-}
-
-//----------------------------------------------------------------------
-
-Bool_t CbmEvbuildRawAlgo::CheckDataAvailable(RawEventBuilderDetector& det)
-{
-  if (!CheckDataAvailable(det.detId)) {
-    LOG(info) << "No " << det.sName << " digi input found.";
-    return kFALSE;
-  }
-  return kTRUE;
-}
-
-bool CbmEvbuildRawAlgo::CheckDataAvailable(ECbmModuleId detId)
-{
-  switch (detId) {
-    case ECbmModuleId::kSts: {
-      return fStsDigis != nullptr;
-    }
-    case ECbmModuleId::kMuch: {
-      if (fbUseMuchBeamtimeDigi) { return fMuchBeamTimeDigis != nullptr; }
-      else {
-        return fMuchDigis != nullptr;
-      }
-    }
-    case ECbmModuleId::kTrd: {
-      return fTrdDigis != nullptr;
-    }
-    case ECbmModuleId::kTof: {
-      return fTofDigis != nullptr;
-    }
-    case ECbmModuleId::kRich: {
-      return fRichDigis != nullptr;
-    }
-    case ECbmModuleId::kPsd: {
-      return fPsdDigis != nullptr;
-    }
-    case ECbmModuleId::kT0: {
-      return fT0DigiVec != nullptr;
-    }
-    default: {
-      LOG(fatal) << "CbmEvbuildRawAlgo::CheckDataAvailable => "
-                 << "Unsupported detector.";
-      return -1;
-    }
-  }
-}
-
-UInt_t CbmEvbuildRawAlgo::GetNofDigis(ECbmModuleId detId)
-{
-  switch (detId) {
-    case ECbmModuleId::kSts: {
-      return fStsDigis->size();
-    }
-    case ECbmModuleId::kMuch: {
-      if (fbUseMuchBeamtimeDigi) { return fMuchBeamTimeDigis->size(); }
-      else {
-        return fMuchDigis->size();
-      }
-    }
-    case ECbmModuleId::kTrd: {
-      return fTrdDigis->size();
-    }
-    case ECbmModuleId::kTof: {
-      return fTofDigis->size();
-    }
-    case ECbmModuleId::kRich: {
-      return fRichDigis->size();
-    }
-    case ECbmModuleId::kPsd: {
-      return fPsdDigis->size();
-    }
-    case ECbmModuleId::kT0: {
-      return fT0DigiVec->size();  //what to do here? Not in digi manager.
-    }
-    default: {
-      LOG(fatal) << "CbmEvbuildRawAlgo::GetNofDigis => "
-                 << "Trying to get digi number with unsupported detector.";
-      return -1;
-    }
-  }
-}
-
-template<>
-const CbmStsDigi* CbmEvbuildRawAlgo::GetDigi(UInt_t uDigi)
-{
-  return &((*fStsDigis)[uDigi]);
-}
-template<>
-const CbmMuchBeamTimeDigi* CbmEvbuildRawAlgo::GetDigi(UInt_t uDigi)
-{
-  return &((*fMuchBeamTimeDigis)[uDigi]);
-}
-template<>
-const CbmMuchDigi* CbmEvbuildRawAlgo::GetDigi(UInt_t uDigi)
-{
-  return &((*fMuchDigis)[uDigi]);
-}
-template<>
-const CbmTrdDigi* CbmEvbuildRawAlgo::GetDigi(UInt_t uDigi)
-{
-  return &((*fTrdDigis)[uDigi]);
-}
-template<>
-const CbmTofDigi* CbmEvbuildRawAlgo::GetDigi(UInt_t uDigi)
-{
-  return &((*fTofDigis)[uDigi]);
-}
-template<>
-const CbmRichDigi* CbmEvbuildRawAlgo::GetDigi(UInt_t uDigi)
-{
-  return &((*fRichDigis)[uDigi]);
-}
-template<>
-const CbmPsdDigi* CbmEvbuildRawAlgo::GetDigi(UInt_t uDigi)
-{
-  return &((*fPsdDigis)[uDigi]);
-}
-
-//----------------------------------------------------------------------
-void CbmEvbuildRawAlgo::CreateHistograms()
-{
-  outFolder = new TFolder("AlgoBuildRawEventsHist", " AlgoBuildRawEvents Histos");
-  outFolder->Clear();
-
-  fhEventTime = new TH1F("hEventTime", "seed time of the events; Seed time [s]; Events", 1000, 0, 0.001);
-  fhEventTime->SetCanExtend(TH1::kAllAxes);
-
-  fhEventDt =
-    new TH1F("fhEventDt", "interval in seed time of consecutive events; Seed time [s]; Events", 1000, 0, 0.0001);
-  fhEventDt->SetCanExtend(TH1::kAllAxes);
-
-  fhEventSize = new TH1F("hEventSize", "nb of all  digis in the event; Nb Digis []; Events []", 1000, 0, 100);
-  fhEventSize->SetCanExtend(TH1::kAllAxes);
-
-  fhNbDigiPerEvtTime = new TH2I("hNbDigiPerEvtTime",
-                                "nb of all  digis per event vs seed time of the events; Seed time "
-                                "[s]; Nb Digis []; Events []",
-                                1000, 0, 0.001, 1000, 0, 100);
-  fhNbDigiPerEvtTime->SetCanExtend(TH2::kAllAxes);
-
-  /// Loop on selection detectors
-  for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) {
-    /// In case name not provided, do not create the histo to avoid name conflicts!
-    if ("Invalid" == (*det).sName) {
-      fvhNbDigiPerEvtTimeDet.push_back(nullptr);
-      continue;
-    }
-    TH2I* hNbDigiPerEvtTimeDet = new TH2I(Form("hNbDigiPerEvtTime%s", (*det).sName.data()),
-                                          Form("nb of %s digis per event vs seed time of the events; Seed time "
-                                               "[s]; Nb Digis []; Events []",
-                                               (*det).sName.data()),
-                                          1000, 0, 0.001, 1000, 0, 100);
-    hNbDigiPerEvtTimeDet->SetCanExtend(TH2::kAllAxes);
-    fvhNbDigiPerEvtTimeDet.push_back(hNbDigiPerEvtTimeDet);
-  }
-
-  AddHistoToVector(fhEventTime, "evtbuild");
-  AddHistoToVector(fhEventDt, "evtbuild");
-  AddHistoToVector(fhEventSize, "evtbuild");
-  AddHistoToVector(fhNbDigiPerEvtTime, "evtbuild");
-  outFolder->Add(fhEventTime);
-  outFolder->Add(fhEventDt);
-  outFolder->Add(fhEventSize);
-  outFolder->Add(fhNbDigiPerEvtTime);
-
-  for (std::vector<TH2*>::iterator itHist = fvhNbDigiPerEvtTimeDet.begin(); itHist != fvhNbDigiPerEvtTimeDet.end();
-       ++itHist) {
-    if (nullptr != (*itHist)) {
-      AddHistoToVector((*itHist), "evtbuild");
-      outFolder->Add((*itHist));
-    }
-  }
-}
-
-void CbmEvbuildRawAlgo::FillHistos()
-{
-  Double_t dPreEvtTime = -1.0;
-  for (CbmRawEvent* evt : fEventVector) {
-    fhEventTime->Fill(evt->GetTime() * 1e-9);
-    if (0.0 <= dPreEvtTime) { fhEventDt->Fill((evt->GetTime() - dPreEvtTime) * 1e-9); }
-
-    fhEventSize->Fill(evt->GetNofDigis());
-    fhNbDigiPerEvtTime->Fill(evt->GetTime() * 1e-9, evt->GetNofDigis());
-
-    /// Loop on selection detectors
-    for (UInt_t uDetIdx = 0; uDetIdx < fvDets.size(); ++uDetIdx) {
-      if (nullptr == fvhNbDigiPerEvtTimeDet[uDetIdx]) continue;
-      fvhNbDigiPerEvtTimeDet[uDetIdx]->Fill(evt->GetTime() * 1e-9, evt->GetNofDigis(fvDets[uDetIdx].detId));
-    }
-    dPreEvtTime = evt->GetTime();
-  }
-}
-
-void CbmEvbuildRawAlgo::ResetHistograms(Bool_t /*bResetTime*/)
-{
-  fhEventTime->Reset();
-  fhEventDt->Reset();
-  fhEventSize->Reset();
-
-  fhNbDigiPerEvtTime->Reset();
-  /// Loop on histograms
-  for (std::vector<TH2*>::iterator itHist = fvhNbDigiPerEvtTimeDet.begin(); itHist != fvhNbDigiPerEvtTimeDet.end();
-       ++itHist) {
-    (*itHist)->Reset();
-  }
-  /*
-   if( kTRUE == bResetTime )
-   {
-      /// Also reset the Start time for the evolution plots!
-      fdStartTime = -1.0;
-   } 
-   */
-}
-
-void CbmEvbuildRawAlgo::SetReferenceDetector(ECbmModuleId refDet, ECbmDataType dataTypeIn, std::string sNameIn,
-                                             UInt_t uTriggerMinDigisIn, Int_t iTriggerMaxDigisIn,
-                                             Double_t fdTimeWinBegIn, Double_t fdTimeWinEndIn)
-{
-  /// FIXME: Deprecated method to be removed later. For now create temp object.
-  SetReferenceDetector(RawEventBuilderDetector(refDet, dataTypeIn, sNameIn, uTriggerMinDigisIn, iTriggerMaxDigisIn,
-                                               fdTimeWinBegIn, fdTimeWinEndIn));
-}
-void CbmEvbuildRawAlgo::AddDetector(ECbmModuleId selDet, ECbmDataType dataTypeIn, std::string sNameIn,
-                                    UInt_t uTriggerMinDigisIn, Int_t iTriggerMaxDigisIn, Double_t fdTimeWinBegIn,
-                                    Double_t fdTimeWinEndIn)
-{
-  /// FIXME: Deprecated method to be removed later. For now create temp object.
-  AddDetector(RawEventBuilderDetector(selDet, dataTypeIn, sNameIn, uTriggerMinDigisIn, iTriggerMaxDigisIn,
-                                      fdTimeWinBegIn, fdTimeWinEndIn));
-}
-
-void CbmEvbuildRawAlgo::SetReferenceDetector(RawEventBuilderDetector refDetIn)
-{
-  /// Loop on selection detectors
-  for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) {
-    if ((*det) == refDetIn) {
-      LOG(warning) << "CbmEvbuildRawAlgo::SetReferenceDetector => "
-                      "Reference detector already in selection detector list!"
-                   << refDetIn.sName;
-      LOG(warning) << "                                                         => "
-                      "It will be automatically removed from selection detector list!";
-      LOG(warning) << "                                                         => "
-                      "Please also remember to update the selection windows to store "
-                      "clusters!";
-      RemoveDetector(refDetIn);
-    }
-  }
-
-  if (fRefDet == refDetIn) {
-    LOG(warning) << "CbmEvbuildRawAlgo::SetReferenceDetector => "
-                    "Doing nothing, identical reference detector already in use";
-  }
-  else {
-    LOG(info) << "CbmEvbuildRawAlgo::SetReferenceDetector => "
-              << "Replacing " << fRefDet.sName << " with " << refDetIn.sName << " as reference detector";
-    LOG(warning) << "                                                         => "
-                    "You may want to use AddDetector after this command to add in "
-                    "selection "
-                 << refDetIn.sName;
-    LOG(warning) << "                                                         => "
-                    "Please also remember to update the selection windows!";
-  }
-  fRefDet = refDetIn;
-
-  /// Update the variables storing the earliest and latest time window boundaries
-  UpdateTimeWinBoundariesExtrema();
-  /// Update the variable storing the size if widest time window for overlap detection
-  UpdateWidestTimeWinRange();
-}
-
-void CbmEvbuildRawAlgo::AddDetector(RawEventBuilderDetector selDet)
-{
-  if (fRefDet == selDet) {
-    LOG(fatal) << "CbmEvbuildRawAlgo::AddDetector => Cannot "
-                  "add the reference detector as selection detector!"
-               << std::endl
-               << "=> Maybe first change the reference detector with "
-                  "SetReferenceDetector?";
-  }
-
-  /// Loop on selection detectors
-  for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) {
-    if ((*det) == selDet) {
-      LOG(warning) << "CbmEvbuildRawAlgo::AddDetector => "
-                      "Doing nothing, selection detector already in list!"
-                   << selDet.sName;
-      return;
-    }
-  }
-  fvDets.push_back(selDet);
-
-  /// Update the variables storing the earliest and latest time window boundaries
-  UpdateTimeWinBoundariesExtrema();
-  /// Update the variable storing the size if widest time window for overlap detection
-  UpdateWidestTimeWinRange();
-}
-
-void CbmEvbuildRawAlgo::RemoveDetector(RawEventBuilderDetector selDet)
-{
-  /// Loop on selection detectors
-  for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) {
-    if ((*det) == selDet) {
-      fvDets.erase(det);
-      return;
-    }
-  }
-  LOG(warning) << "CbmEvbuildRawAlgo::RemoveDetector => Doing "
-                  "nothing, selection detector not in list!"
-               << selDet.sName;
-}
-
-void CbmEvbuildRawAlgo::SetTriggerMinNumber(ECbmModuleId selDet, UInt_t uVal)
-{
-  /// Check first if reference detector
-  if (fRefDet.detId == selDet) {
-    fRefDet.fuTriggerMinDigis = uVal;
-    LOG(debug) << "Set Trigger min limit for " << fRefDet.sName << " to " << uVal;
-    return;
-  }
-
-  /// Loop on selection detectors
-  for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) {
-    if ((*det).detId == selDet) {
-      (*det).fuTriggerMinDigis = uVal;
-      LOG(debug) << "Set Trigger min limit for " << (*det).sName << " to " << uVal;
-      return;
-    }
-  }
-  LOG(warning) << "CbmEvbuildRawAlgo::SetTriggerMinNumber => "
-                  "Doing nothing, detector neither reference nor in selection list!"
-               << selDet;
-}
-
-void CbmEvbuildRawAlgo::SetTriggerMaxNumber(ECbmModuleId selDet, Int_t iVal)
-{
-  /// Check first if reference detector
-  if (fRefDet.detId == selDet) {
-    fRefDet.fiTriggerMaxDigis = iVal;
-    LOG(debug) << "Set Trigger min limit for " << fRefDet.sName << " to " << iVal;
-    return;
-  }
-
-  /// Loop on selection detectors
-  for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) {
-    if ((*det).detId == selDet) {
-      (*det).fiTriggerMaxDigis = iVal;
-      LOG(debug) << "Set Trigger min limit for " << (*det).sName << " to " << iVal;
-      return;
-    }
-  }
-  LOG(warning) << "CbmEvbuildRawAlgo::SetTriggerMaxNumber => "
-                  "Doing nothing, detector neither reference nor in selection list!"
-               << selDet;
-}
-
-void CbmEvbuildRawAlgo::SetTriggerWindow(ECbmModuleId selDet, Double_t dWinBeg, Double_t dWinEnd)
-{
-  /// Check if valid time window: end strictly after beginning
-  if (dWinEnd <= dWinBeg) {
-    LOG(fatal) << "CbmEvbuildRawAlgo::SetTriggerWindow => "
-                  "Invalid time window: [ "
-               << dWinBeg << ", " << dWinEnd << " ]";
-  }
-
-  Bool_t bFound = kFALSE;
-  /// Check first if reference detector
-  if (fRefDet.detId == selDet) {
-    fRefDet.fdTimeWinBeg = dWinBeg;
-    fRefDet.fdTimeWinEnd = dWinEnd;
-    bFound               = kTRUE;
-  }
-
-  /// Loop on selection detectors
-  for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) {
-    if ((*det).detId == selDet) {
-      (*det).fdTimeWinBeg = dWinBeg;
-      (*det).fdTimeWinEnd = dWinEnd;
-      bFound              = kTRUE;
-    }
-  }
-
-  if (kFALSE == bFound) {
-    LOG(warning) << "CbmEvbuildRawAlgo::SetTriggerWindow => "
-                    "Doing nothing, detector neither reference nor in selection list!"
-                 << selDet;
-  }
-
-  /// Update the variables storing the earliest and latest time window boundaries
-  UpdateTimeWinBoundariesExtrema();
-  /// Update the variable storing the size if widest time window for overlap detection
-  UpdateWidestTimeWinRange();
-}
-
-void CbmEvbuildRawAlgo::UpdateTimeWinBoundariesExtrema()
-{
-  /// Initialize with reference detector or explicit times
-  if (fRefDet.detId != ECbmModuleId::kNotExist) {
-    fdEarliestTimeWinBeg = fRefDet.fdTimeWinBeg;
-    fdLatestTimeWinEnd   = fRefDet.fdTimeWinEnd;
-  }
-  else {
-    fdEarliestTimeWinBeg = fdSeedTimeWinBeg;
-    fdLatestTimeWinEnd   = fdSeedTimeWinEnd;
-  }
-
-  /// Loop on selection detectors
-  for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) {
-    fdEarliestTimeWinBeg = std::min(fdEarliestTimeWinBeg, (*det).fdTimeWinBeg);
-    fdLatestTimeWinEnd   = std::max(fdLatestTimeWinEnd, (*det).fdTimeWinEnd);
-  }
-}
-
-void CbmEvbuildRawAlgo::UpdateWidestTimeWinRange()
-{
-  /// Initialize with reference detector
-  fdWidestTimeWinRange = GetSeedTimeWinRange();
-
-  /// Loop on selection detectors
-  for (std::vector<RawEventBuilderDetector>::iterator det = fvDets.begin(); det != fvDets.end(); ++det) {
-    fdWidestTimeWinRange = std::max(fdWidestTimeWinRange, (*det).fdTimeWinEnd - (*det).fdTimeWinBeg);
-  }
-}
-
-ClassImp(CbmEvbuildRawAlgo)
diff --git a/reco/eventbuilder/digis/CbmEvbuildRawAlgo.h b/reco/eventbuilder/digis/CbmEvbuildRawAlgo.h
deleted file mode 100644
index fcda90b9e8d0817e0744589170722369b7800557..0000000000000000000000000000000000000000
--- a/reco/eventbuilder/digis/CbmEvbuildRawAlgo.h
+++ /dev/null
@@ -1,341 +0,0 @@
-/* Copyright (C) 2021 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Volker Friese [committer] */
-
-#ifndef CBMEVBUILDRAWALGO_H
-#define CBMEVBUILDRAWALGO_H
-
-/// CBM headers
-#include "CbmAlgoBuildRawEvents.h"
-#include "CbmMuchBeamTimeDigi.h"
-#include "CbmMuchDigi.h"
-#include "CbmPsdDigi.h"
-#include "CbmRichDigi.h"
-#include "CbmStsDigi.h"
-#include "CbmTofDigi.h"
-#include "CbmTrdDigi.h"
-
-/// FAIRROOT headers
-#include "FairTask.h"
-
-/// FAIRSOFT headers (geant, boost, ...)
-
-/// C/C++ headers
-#include <tuple>
-
-#include <boost/any.hpp>
-
-#include <array>
-#include <map>
-#include <set>
-#include <vector>
-
-class TimesliceMetaData;
-class CbmRawEvent;
-class TClonesArray;
-class TFolder;
-class TH1;
-class TH2;
-class TNamed;
-class TStopwatch;
-class TCanvas;
-
-/*
-enum class EOverlapModeRaw
-{
-  NoOverlap,
-  MergeOverlap,
-  AllowOverlap
-};
-*/
-
-/*
-class RawEventBuilderDetector {
-public:
-  RawEventBuilderDetector() = default;
-
-  RawEventBuilderDetector(ECbmModuleId detIdIn, ECbmDataType dataTypeIn, std::string sNameIn)
-    : detId {detIdIn}
-    , dataType {dataTypeIn}
-    , sName {sNameIn}
-  {
-  }
-
-  RawEventBuilderDetector(ECbmModuleId detIdIn, ECbmDataType dataTypeIn, std::string sNameIn, UInt_t uTriggerMinDigisIn,
-                          Int_t iTriggerMaxDigisIn, Double_t fdTimeWinBegIn, Double_t fdTimeWinEndIn)
-    : RawEventBuilderDetector(detIdIn, dataTypeIn, sNameIn)
-  {
-    fuTriggerMinDigis = uTriggerMinDigisIn;
-    fiTriggerMaxDigis = iTriggerMaxDigisIn;
-    fdTimeWinBeg      = fdTimeWinBegIn;
-    fdTimeWinEnd      = fdTimeWinEndIn;
-  }
-
-  bool operator==(const RawEventBuilderDetector& other) const { return (other.detId == this->detId); }
-  bool operator!=(const RawEventBuilderDetector& other) const { return (other.detId != this->detId); }
-
-  Double_t GetTimeWinRange() { return fdTimeWinEnd - fdTimeWinBeg; }
-
-  /// Settings
-  ECbmModuleId detId    = ECbmModuleId::kNotExist;
-  ECbmDataType dataType = ECbmDataType::kUnknown;
-  std::string sName     = "Invalid";
-  /// Minimum number of T0 digis needed to generate a trigger, 0 means don't use for trigger generation
-  UInt_t fuTriggerMinDigis = 0;
-  /// Maximum number of digis per detector to generate an event, -1 means no cut, 0 means anti-coinc trigger
-  Int_t fiTriggerMaxDigis = -1;
-  /// Selection Window
-  Double_t fdTimeWinBeg = -100;
-  Double_t fdTimeWinEnd = 100;
-  /// Book-keeping variables
-  UInt_t fuStartIndex = 0;
-  UInt_t fuEndIndex   = 0;
-};
-
-/// Pre-defined detector types
-static const RawEventBuilderDetector kRawEventBuilderDetSts =
-  RawEventBuilderDetector(ECbmModuleId::kSts, ECbmDataType::kStsDigi, "Sts");
-static const RawEventBuilderDetector kRawEventBuilderDetMuch =
-  RawEventBuilderDetector(ECbmModuleId::kMuch, ECbmDataType::kMuchDigi, "Much");
-static const RawEventBuilderDetector kRawEventBuilderDetTrd =
-  RawEventBuilderDetector(ECbmModuleId::kTrd, ECbmDataType::kTrdDigi, "Trd");
-static const RawEventBuilderDetector kRawEventBuilderDetTof =
-  RawEventBuilderDetector(ECbmModuleId::kTof, ECbmDataType::kTofDigi, "Tof");
-static const RawEventBuilderDetector kRawEventBuilderDetRich =
-  RawEventBuilderDetector(ECbmModuleId::kRich, ECbmDataType::kRichDigi, "Rich");
-static const RawEventBuilderDetector kRawEventBuilderDetPsd =
-  RawEventBuilderDetector(ECbmModuleId::kPsd, ECbmDataType::kPsdDigi, "Psd");
-static const RawEventBuilderDetector kRawEventBuilderDetT0 =
-  RawEventBuilderDetector(ECbmModuleId::kT0, ECbmDataType::kT0Digi, "T0");
-static const RawEventBuilderDetector kRawEventBuilderDetUndef = RawEventBuilderDetector();
-
-*/
-
-class CbmEvbuildRawAlgo {
-public:
-  /** Default constructor **/
-  CbmEvbuildRawAlgo() = default;
-
-  CbmEvbuildRawAlgo(const CbmEvbuildRawAlgo&) = delete;
-  CbmEvbuildRawAlgo operator=(const CbmEvbuildRawAlgo&) = delete;
-
-  /** Destructor **/
-  ~CbmEvbuildRawAlgo() {};
-
-  /** Initiliazation at the beginning of a run **/
-  Bool_t InitAlgo();
-
-  /** Executed for each TS. **/
-  void ProcessTs();
-
-  /** Finish called at the end of the run **/
-  void Finish();
-
-  void SetFillHistos(Bool_t var) { fbFillHistos = var; }
-  void ResetHistograms(Bool_t bResetTime = kTRUE);
-
-  /** stopwatch timing **/
-  void SetTimings(Bool_t var) { fbGetTimings = var; }
-  void PrintTimings();
-
-  void SetReferenceDetector(ECbmModuleId refDet, ECbmDataType dataTypeIn, std::string sNameIn,
-                            UInt_t uTriggerMinDigisIn = 0, Int_t iTriggerMaxDigisIn = -1,
-                            Double_t fdTimeWinBegIn = -100, Double_t fdTimeWinEndIn = 100);
-  void AddDetector(ECbmModuleId selDet, ECbmDataType dataTypeIn, std::string sNameIn, UInt_t uTriggerMinDigisIn = 0,
-                   Int_t iTriggerMaxDigisIn = -1, Double_t fdTimeWinBegIn = -100, Double_t fdTimeWinEndIn = 100);
-
-  void SetReferenceDetector(RawEventBuilderDetector refDetIn);
-  void AddDetector(RawEventBuilderDetector selDet);
-  void RemoveDetector(RawEventBuilderDetector selDet);
-
-  void SetTriggerMinNumber(ECbmModuleId selDet, UInt_t uVal);
-  void SetTriggerMaxNumber(ECbmModuleId selDet, Int_t iVal);
-  void SetTriggerWindow(ECbmModuleId selDet, Double_t dWinBeg, Double_t dWinEnd);
-
-  void SetTsParameters(Double_t dTsStartTime, Double_t dTsLength, Double_t dTsOverLength)
-  {
-    fdTsStartTime   = dTsStartTime;
-    fdTsLength      = dTsLength;
-    fdTsOverLength  = dTsOverLength;
-    fbUseTsMetaData = kFALSE;
-  }
-
-  void SetSeedTimeWindow(Double_t timeWinBeg, Double_t timeWinEnd)
-  {
-    fdSeedTimeWinBeg = timeWinBeg;
-    fdSeedTimeWinEnd = timeWinEnd;
-    UpdateTimeWinBoundariesExtrema();
-    UpdateWidestTimeWinRange();
-  }
-
-  /// Control flags
-  void SetEventOverlapMode(EOverlapModeRaw mode) { fOverMode = mode; }
-  void SetIgnoreTsOverlap(Bool_t bFlagIn = kTRUE) { fbIgnoreTsOverlap = bFlagIn; }
-
-  void ChangeMuchBeamtimeDigiFlag(Bool_t bFlagIn = kFALSE) { fbUseMuchBeamtimeDigi = bFlagIn; }
-
-  /// For monitor algos
-  void AddHistoToVector(TNamed* pointer, std::string sFolder = "")
-  {
-    fvpAllHistoPointers.push_back(std::pair<TNamed*, std::string>(pointer, sFolder));
-  }
-  std::vector<std::pair<TNamed*, std::string>> GetHistoVector() { return fvpAllHistoPointers; }
-  void AddCanvasToVector(TCanvas* pointer, std::string sFolder = "")
-  {
-    fvpAllCanvasPointers.push_back(std::pair<TCanvas*, std::string>(pointer, sFolder));
-  }
-  std::vector<std::pair<TCanvas*, std::string>> GetCanvasVector() { return fvpAllCanvasPointers; }
-
-  /// Set digi containers
-  void SetT0Digis(const std::vector<CbmTofDigi>* T0DigiVec) { fT0DigiVec = T0DigiVec; }
-  void SetStsDigis(std::vector<CbmStsDigi>* StsDigis) { fStsDigis = StsDigis; }
-  void SetMuchDigis(std::vector<CbmMuchDigi>* MuchDigis) { fMuchDigis = MuchDigis; }
-  void SetTrdDigis(std::vector<CbmTrdDigi>* TrdDigis) { fTrdDigis = TrdDigis; }
-  void SetTofDigis(std::vector<CbmTofDigi>* TofDigis) { fTofDigis = TofDigis; }
-  void SetRichDigis(std::vector<CbmRichDigi>* RichDigis) { fRichDigis = RichDigis; }
-  void SetPsdDigis(std::vector<CbmPsdDigi>* PsdDigis) { fPsdDigis = PsdDigis; }
-  void SetMuchBeamTimeDigis(std::vector<CbmMuchBeamTimeDigi>* MuchBeamTimeDigis)
-  {
-    fMuchBeamTimeDigis = MuchBeamTimeDigis;
-  }
-
-  void SetSeedTimes(std::vector<Double_t>* SeedTimes) { fSeedTimes = SeedTimes; }
-
-  // TS metadata
-  void SetTimeSliceMetaDataArray(TClonesArray* TimeSliceMetaDataArray)
-  {
-    fTimeSliceMetaDataArray = TimeSliceMetaDataArray;
-  }
-
-  // Output folder for histograms
-  TFolder* GetOutFolder() { return outFolder; }
-
-  /// Data output access
-  std::vector<CbmRawEvent*>& GetEventVector() { return fEventVector; }
-  void ClearEventVector();
-
-private:
-  /// Internal methods
-  Bool_t CheckDataAvailable(RawEventBuilderDetector& det);
-  void InitTs();
-  void InitSeedWindow();
-  void BuildEvents();
-
-  void CreateHistograms();
-  void FillHistos();
-
-  template<class DigiSeed>
-  void LoopOnSeeds();
-
-  void CheckSeed(Double_t dSeedTime, UInt_t uSeedDigiIdx);
-  void CheckTriggerCondition(Double_t dSeedTime);
-
-  template<class DigiCheck>
-  void SearchMatches(Double_t dSeedTime, RawEventBuilderDetector& detMatch);
-  void SearchMatches(Double_t dSeedTime, RawEventBuilderDetector& detMatch);
-  void AddDigiToEvent(RawEventBuilderDetector& det, Int_t uIdx);
-  Bool_t HasTrigger(CbmRawEvent*);
-  Bool_t CheckTriggerConditions(CbmRawEvent* event, RawEventBuilderDetector& det);
-
-  void UpdateTimeWinBoundariesExtrema();
-  void UpdateWidestTimeWinRange();
-
-  TFolder* outFolder;  // oputput folder to store histograms
-
-  /// Constants
-  static constexpr Double_t kdDefaultTimeWinBeg = -100.0;
-  static constexpr Double_t kdDefaultTimeWinEnd = 100.0;
-
-  /// User parameters
-  /// Control flags
-  Bool_t fbIgnoreTsOverlap = kFALSE;      //! Ignore data in Overlap part of the TS
-  Bool_t fbFillHistos {kTRUE};            //! Switch ON/OFF filling of histograms
-  Bool_t fbUseMuchBeamtimeDigi = kTRUE;   //! Switch between MUCH digi classes
-  Bool_t fbGetTimings          = kFALSE;  //! Measure CPU time using stopwatch
-  Bool_t fbUseTsMetaData       = kTRUE;   //! Read Ts Parameters from input tree
-    /// Event building mode and detectors selection
-  EOverlapModeRaw fOverMode {EOverlapModeRaw::AllowOverlap};
-
-  TStopwatch* fTimer = nullptr;  //! is create when fbGetTimings is set before init
-
-  RawEventBuilderDetector fRefDet             = RawEventBuilderDetector(ECbmModuleId::kT0, ECbmDataType::kT0Digi, "T0");
-  std::vector<RawEventBuilderDetector> fvDets = {
-    RawEventBuilderDetector(ECbmModuleId::kSts, ECbmDataType::kStsDigi, "kSts"),
-    RawEventBuilderDetector(ECbmModuleId::kMuch, ECbmDataType::kMuchDigi, "kMuch"),
-    RawEventBuilderDetector(ECbmModuleId::kTrd, ECbmDataType::kTrdDigi, "kTrd"),
-    RawEventBuilderDetector(ECbmModuleId::kTof, ECbmDataType::kTofDigi, "kTof"),
-    RawEventBuilderDetector(ECbmModuleId::kRich, ECbmDataType::kRichDigi, "kRich"),
-    RawEventBuilderDetector(ECbmModuleId::kPsd, ECbmDataType::kPsdDigi, "kPsd")};
-
-  Double_t fdEarliestTimeWinBeg = kdDefaultTimeWinBeg;
-  Double_t fdLatestTimeWinEnd   = kdDefaultTimeWinEnd;
-  Double_t fdWidestTimeWinRange = kdDefaultTimeWinEnd - kdDefaultTimeWinBeg;
-  ///Seed window
-  Double_t fdSeedWindowBeg = 0;
-  Double_t fdSeedWindowEnd = 0;
-
-  Double_t fdTsStartTime  = -1;
-  Double_t fdTsLength     = -1;
-  Double_t fdTsOverLength = -1;
-
-  /// Data input
-  TClonesArray* fTimeSliceMetaDataArray = nullptr;  //!
-
-  const std::vector<CbmTofDigi>* fT0DigiVec                  = nullptr;
-  const std::vector<CbmMuchDigi>* fMuchDigis                 = nullptr;
-  const std::vector<CbmMuchBeamTimeDigi>* fMuchBeamTimeDigis = nullptr;
-  const std::vector<CbmStsDigi>* fStsDigis                   = nullptr;
-  const std::vector<CbmTrdDigi>* fTrdDigis                   = nullptr;
-  const std::vector<CbmTofDigi>* fTofDigis                   = nullptr;
-  const std::vector<CbmRichDigi>* fRichDigis                 = nullptr;
-  const std::vector<CbmPsdDigi>* fPsdDigis                   = nullptr;
-
-  // If explicit seed times are supplied.
-  const std::vector<Double_t>* fSeedTimes = nullptr;
-  Double_t fdSeedTimeWinBeg               = -100.0;
-  Double_t fdSeedTimeWinEnd               = 100.0;
-
-  bool CheckDataAvailable(ECbmModuleId detId);
-  UInt_t GetNofDigis(ECbmModuleId detId);
-  template<class Digi>
-  const Digi* GetDigi(UInt_t uDigi);
-
-  Double_t GetSeedTimeWinRange();
-
-  /// Data ouptut
-  CbmRawEvent* fCurrentEvent             = nullptr;  //! pointer to the event which is currently build
-  std::vector<CbmRawEvent*> fEventVector = {};       //! vector with all created events
-
-  /// Monitoring histograms
-  /// => Pointers should be filled with TH1*, TH2*, TProfile*, ...
-  /// ==> To check if object N is of type T, use "T ObjectPointer = dynamic_cast<T>( fvpAllHistoPointers[N].first );" and check for nullptr
-  /// ==> To get back the original class name use "fvpAllHistoPointers[N].first->ClassName()" which returns a const char * (e.g. "TH1I")
-  /// ===> Usage example with feeding a THttpServer:
-  /// ===> #include "TH2.h"
-  /// ===> std::string sClassName = vHistos[ uHisto ].first.ClassName();
-  /// ===> if( !strncmp( sClassName, "TH1", 3 ) )
-  /// ===>    server->Register( vHistos[ uHisto ].second.data(), dynamic_cast< TH1 * >(vHistos[ uHisto ].first) );
-  /// ===> else if( !strncmp( sClassName, "TH2", 3 ) )
-  /// ===>    server->Register( vHistos[ uHisto ].second.data(), dynamic_cast< TH2 * >(vHistos[ uHisto ].first) );
-  std::vector<std::pair<TNamed*, std::string>>
-    fvpAllHistoPointers;  //! Vector of pointers to histograms + optional folder name
-  std::vector<std::pair<TCanvas*, std::string>>
-    fvpAllCanvasPointers;  //! Vector of pointers to canvases + optional folder name
-
-  TH1* fhEventTime        = nullptr;  //! histogram with the seed time of the events
-  TH1* fhEventDt          = nullptr;  //! histogram with the interval in seed time of consecutive events
-  TH1* fhEventSize        = nullptr;  //! histogram with the nb of all  digis in the event
-  TH2* fhNbDigiPerEvtTime = nullptr;  //! histogram with the nb of all  digis per event vs seed time of the events
-  std::vector<TH2*> fvhNbDigiPerEvtTimeDet =
-    {};  //! histograms with the nb of digis in each detector per event vs seed time of the events
-
-  /// Internal state variables
-  UInt_t fuCurEv            = 0;   //! Event Counter
-  UInt_t fuNrTs             = 0;   //! Timeslice Counter
-  Double_t fdPrevEvtTime    = 0.;  //! Save previous time information
-  Double_t fdPrevEvtEndTime = 0.;  //! Save previous event last digi time information
-
-  ClassDefNV(CbmEvbuildRawAlgo, 1);
-};
-
-#endif  // CBMEVBUILDRAWALGO_H
diff --git a/reco/eventbuilder/digis/CbmEvbuildRawTask.cxx b/reco/eventbuilder/digis/CbmEvbuildRawTask.cxx
deleted file mode 100644
index 5a09112d7068a4fb30c1ea80f8305404d0fb9990..0000000000000000000000000000000000000000
--- a/reco/eventbuilder/digis/CbmEvbuildRawTask.cxx
+++ /dev/null
@@ -1,497 +0,0 @@
-/* Copyright (C) 2021 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Volker Friese [committer] */
-
-#include "CbmEvbuildRawTask.h"
-
-#include "CbmDigiManager.h"
-#include "CbmRawEvent.h"
-
-#include <FairRootManager.h>
-//#include <FairRunOnline.h>
-#include <Logger.h>
-
-#include <TClonesArray.h>
-#include <TFile.h>
-#include <TFolder.h>
-#include <TH1.h>
-#include <TH2.h>
-#include <THttpServer.h>
-#include <TStopwatch.h>
-
-#include <iomanip>
-
-using std::cout;
-using std::endl;
-using std::fixed;
-using std::left;
-using std::pair;
-using std::right;
-using std::setprecision;
-using std::setw;
-using std::stringstream;
-
-
-CbmEvbuildRawTask::CbmEvbuildRawTask() : FairTask("BuildRawEvents")
-{
-  /// Create Algo. To be made generic/switchable when more event building algo are available!
-  fpAlgo = new CbmEvbuildRawAlgo();
-}
-
-CbmEvbuildRawTask::~CbmEvbuildRawTask() {}
-
-void CbmEvbuildRawTask::SetParContainers() {}
-
-void CbmEvbuildRawTask::SetSeedTimeFiller(RawEventBuilderDetector seedDet)
-{
-  if (fSeedTimeDetList.size() > 0) { LOG(fatal) << "Cannot use seed detector list and single instance together."; }
-
-  fSeedTimeDet = seedDet;
-  if (fSeedTimeDet != kRawEventBuilderDetUndef) {
-    if (fSeedTimes == nullptr) { fSeedTimes = new std::vector<Double_t>; }
-  }
-  else {
-    if (fSeedTimes != nullptr) {
-      fSeedTimes->clear();
-      delete fSeedTimes;
-      fSeedTimes = nullptr;
-    }
-  }
-  fpAlgo->SetSeedTimes(fSeedTimes);
-}
-
-void CbmEvbuildRawTask::AddSeedTimeFillerToList(RawEventBuilderDetector seedDet)
-{
-  if (fSeedTimeDet != kRawEventBuilderDetUndef) {
-    LOG(fatal) << "Cannot use seed detector list and single instance together.";
-  }
-  if (fSeedTimes == nullptr) { fSeedTimes = new std::vector<Double_t>; }
-
-  fSeedTimeDetList.push_back(seedDet);
-  fpAlgo->SetSeedTimes(fSeedTimes);
-}
-
-InitStatus CbmEvbuildRawTask::Init()
-{
-  if (fbGetTimings) {
-    fTimer = new TStopwatch;
-    fTimer->Start();
-    fCopyTimer = new TStopwatch;
-    fCopyTimer->Reset();
-  }
-
-  /// Get a handle from the IO manager
-  FairRootManager* ioman = FairRootManager::Instance();
-
-  //T0 not included in digi manager.
-  fT0Digis = ioman->InitObjectAs<std::vector<CbmTofDigi> const*>("T0Digi");
-  if (!fT0Digis) { LOG(info) << "No T0 digi input."; }
-  else {
-    LOG(info) << "T0 digi input.";
-    fpAlgo->SetT0Digis(fT0Digis);
-  }
-
-  // Get a pointer to the previous already existing data level
-  fDigiMan = CbmDigiManager::Instance();
-  if (fbUseMuchBeamtimeDigi) { fDigiMan->UseMuchBeamTimeDigi(); }
-  fDigiMan->Init();
-
-  //Init STS digis
-  if (!fDigiMan->IsPresent(ECbmModuleId::kSts)) { LOG(info) << "No STS digi input."; }
-  else {
-    LOG(info) << "STS digi input.";
-    fStsDigis = new std::vector<CbmStsDigi>;
-    fpAlgo->SetStsDigis(fStsDigis);
-  }
-
-  //Init MUCH digis
-  if (!fDigiMan->IsPresent(ECbmModuleId::kMuch)) { LOG(info) << "No MUCH digi input."; }
-  else {
-    LOG(info) << "MUCH digi input.";
-    if (fbUseMuchBeamtimeDigi) {
-      fMuchBeamTimeDigis = new std::vector<CbmMuchBeamTimeDigi>;
-      fpAlgo->SetMuchBeamTimeDigis(fMuchBeamTimeDigis);
-    }
-    else {
-      fMuchDigis = new std::vector<CbmMuchDigi>;
-      fpAlgo->SetMuchDigis(fMuchDigis);
-    }
-  }
-
-  //Init TRD digis
-  if (!fDigiMan->IsPresent(ECbmModuleId::kTrd)) { LOG(info) << "No TRD digi input."; }
-  else {
-    LOG(info) << "TRD digi input.";
-    fTrdDigis = new std::vector<CbmTrdDigi>;
-    fpAlgo->SetTrdDigis(fTrdDigis);
-  }
-
-  //Init TOF digis
-  if (!fDigiMan->IsPresent(ECbmModuleId::kTof)) { LOG(info) << "No TOF digi input."; }
-  else {
-    LOG(info) << "TOF digi input.";
-    fTofDigis = new std::vector<CbmTofDigi>;
-    fpAlgo->SetTofDigis(fTofDigis);
-  }
-
-  //Init RICH digis
-  if (!fDigiMan->IsPresent(ECbmModuleId::kRich)) { LOG(info) << "No RICH digi input."; }
-  else {
-    LOG(info) << "RICH digi input.";
-    fRichDigis = new std::vector<CbmRichDigi>;
-    fpAlgo->SetRichDigis(fRichDigis);
-  }
-
-  //Init PSD digis
-  if (!fDigiMan->IsPresent(ECbmModuleId::kPsd)) { LOG(info) << "No PSD digi input."; }
-  else {
-    LOG(info) << "PSD digi input.";
-    fPsdDigis = new std::vector<CbmPsdDigi>;
-    fpAlgo->SetPsdDigis(fPsdDigis);
-  }
-
-  /// Register output array (CbmEvent)
-  fEvents = new TClonesArray("CbmRawEvent", 100);
-  ioman->Register("RawEvent", "CBM Raw Event", fEvents, IsOutputBranchPersistent("RawEvent"));
-  if (!fEvents) LOG(fatal) << "Output branch was not created";
-
-  // Set timeslice meta data
-  fpAlgo->SetTimeSliceMetaDataArray(dynamic_cast<TClonesArray*>(ioman->GetObject("TimesliceMetaData")));
-
-  if (fTimer != nullptr) {
-    fTimer->Stop();
-    Double_t rtime = fTimer->RealTime();
-    Double_t ctime = fTimer->CpuTime();
-    LOG(info) << "CbmEvbuildRawTask::Init(): Real time " << rtime << " s, CPU time " << ctime << " s";
-  }
-
-  /// Call Algo Init method
-  if (kTRUE == fpAlgo->InitAlgo()) return kSUCCESS;
-  else
-    return kFATAL;
-}
-
-
-InitStatus CbmEvbuildRawTask::ReInit() { return kSUCCESS; }
-
-void CbmEvbuildRawTask::Exec(Option_t* /*option*/)
-{
-  if (fTimer != nullptr) { fTimer->Start(kFALSE); }
-  TStopwatch timer;
-  timer.Start();
-
-  LOG(debug2) << "CbmEvbuildRawTask::Exec => Starting sequence";
-  //Warning: Int_t must be used for the loop counters instead of UInt_t,
-  //as the digi manager can return -1, which would be casted to +1
-  //during comparison, leading to an error.
-
-  if (fSeedTimeDet != kRawEventBuilderDetUndef && fSeedTimeDetList.size() > 0) {
-    LOG(fatal) << "Cannot use seed detector list and single instance together.";
-  }
-
-  //Reset explicit seed times if set
-  if (fSeedTimeDet != kRawEventBuilderDetUndef || fSeedTimeDetList.size() > 0) { fSeedTimes->clear(); }
-
-  if (fCopyTimer != nullptr) { fCopyTimer->Start(kFALSE); }
-
-  //Read STS digis
-  if (fDigiMan->IsPresent(ECbmModuleId::kSts)) {
-    fStsDigis->clear();
-    for (Int_t i = 0; i < fDigiMan->GetNofDigis(ECbmModuleId::kSts); i++) {
-      const CbmStsDigi* Digi = fDigiMan->Get<CbmStsDigi>(i);
-      fStsDigis->push_back(*Digi);
-      if (fSeedTimeDet.detId == ECbmModuleId::kSts) { fSeedTimes->push_back(Digi->GetTime()); }
-    }
-    LOG(debug) << "Read: " << fStsDigis->size() << " STS digis.";
-    LOG(debug) << "In DigiManager: " << fDigiMan->GetNofDigis(ECbmModuleId::kSts) << " STS digis.";
-  }
-
-  //Read MUCH digis
-  if (fDigiMan->IsPresent(ECbmModuleId::kMuch)) {
-    if (fbUseMuchBeamtimeDigi) {
-      fMuchBeamTimeDigis->clear();
-      for (Int_t i = 0; i < fDigiMan->GetNofDigis(ECbmModuleId::kMuch); i++) {
-        const CbmMuchBeamTimeDigi* Digi = fDigiMan->Get<CbmMuchBeamTimeDigi>(i);
-        fMuchBeamTimeDigis->push_back(*Digi);
-        if (fSeedTimeDet.detId == ECbmModuleId::kMuch) { fSeedTimes->push_back(Digi->GetTime()); }
-      }
-      LOG(debug) << "Read: " << fDigiMan->GetNofDigis(ECbmModuleId::kMuch) << " MUCH digis.";
-      LOG(debug) << "In DigiManager: " << fMuchBeamTimeDigis->size() << " MUCH digis.";
-    }
-    else {
-      fMuchDigis->clear();
-      for (Int_t i = 0; i < fDigiMan->GetNofDigis(ECbmModuleId::kMuch); i++) {
-        const CbmMuchDigi* Digi = fDigiMan->Get<CbmMuchDigi>(i);
-        fMuchDigis->push_back(*Digi);
-        if (fSeedTimeDet.detId == ECbmModuleId::kMuch) { fSeedTimes->push_back(Digi->GetTime()); }
-      }
-      LOG(debug) << "Read: " << fDigiMan->GetNofDigis(ECbmModuleId::kMuch) << " MUCH digis.";
-      LOG(debug) << "In DigiManager: " << fMuchDigis->size() << " MUCH digis.";
-    }
-  }
-
-  //Read TRD digis
-  if (fDigiMan->IsPresent(ECbmModuleId::kTrd)) {
-    fTrdDigis->clear();
-    for (Int_t i = 0; i < fDigiMan->GetNofDigis(ECbmModuleId::kTrd); i++) {
-      const CbmTrdDigi* Digi = fDigiMan->Get<CbmTrdDigi>(i);
-      fTrdDigis->push_back(*Digi);
-      if (fSeedTimeDet.detId == ECbmModuleId::kTrd) { fSeedTimes->push_back(Digi->GetTime()); }
-    }
-    LOG(debug) << "Read: " << fDigiMan->GetNofDigis(ECbmModuleId::kTrd) << " TRD digis.";
-    LOG(debug) << "In DigiManager: " << fTrdDigis->size() << " TRD digis.";
-  }
-
-  //Read TOF digis
-  if (fDigiMan->IsPresent(ECbmModuleId::kTof)) {
-    fTofDigis->clear();
-    for (Int_t i = 0; i < fDigiMan->GetNofDigis(ECbmModuleId::kTof); i++) {
-      const CbmTofDigi* Digi = fDigiMan->Get<CbmTofDigi>(i);
-      fTofDigis->push_back(*Digi);
-      if (fSeedTimeDet.detId == ECbmModuleId::kTof) { fSeedTimes->push_back(Digi->GetTime()); }
-    }
-    LOG(debug) << "Read: " << fDigiMan->GetNofDigis(ECbmModuleId::kTof) << " TOF digis.";
-    LOG(debug) << "In DigiManager: " << fTofDigis->size() << " TOF digis.";
-  }
-
-  //Read RICH digis
-  if (fDigiMan->IsPresent(ECbmModuleId::kRich)) {
-    fRichDigis->clear();
-    for (Int_t i = 0; i < fDigiMan->GetNofDigis(ECbmModuleId::kRich); i++) {
-      const CbmRichDigi* Digi = fDigiMan->Get<CbmRichDigi>(i);
-      fRichDigis->push_back(*Digi);
-      if (fSeedTimeDet.detId == ECbmModuleId::kRich) { fSeedTimes->push_back(Digi->GetTime()); }
-    }
-    LOG(debug) << "Read: " << fDigiMan->GetNofDigis(ECbmModuleId::kRich) << " RICH digis.";
-    LOG(debug) << "In DigiManager: " << fRichDigis->size() << " RICH digis.";
-  }
-
-  //Read PSD digis
-  if (fDigiMan->IsPresent(ECbmModuleId::kPsd)) {
-    fPsdDigis->clear();
-    for (Int_t i = 0; i < fDigiMan->GetNofDigis(ECbmModuleId::kPsd); i++) {
-      const CbmPsdDigi* Digi = fDigiMan->Get<CbmPsdDigi>(i);
-      fPsdDigis->push_back(*Digi);
-      if (fSeedTimeDet.detId == ECbmModuleId::kPsd) { fSeedTimes->push_back(Digi->GetTime()); }
-    }
-    LOG(debug) << "Read: " << fDigiMan->GetNofDigis(ECbmModuleId::kPsd) << " PSD digis.";
-    LOG(debug) << "In DigiManager: " << fPsdDigis->size() << " PSD digis.";
-  }
-
-  if (fCopyTimer != nullptr) { fCopyTimer->Stop(); }
-
-  if (fSeedTimeDetList.size() > 0) { FillSeedTimesFromDetList(); }
-  //DumpSeedTimesFromDetList();
-
-  /// Call Algo ProcessTs method
-  fpAlgo->ProcessTs();
-
-  /// Save the resulting vector of events in TClonesArray
-  FillOutput();
-  LOG(debug2) << "CbmEvbuildRawTask::Exec => Done";
-
-  if (fTimer != nullptr) { fTimer->Stop(); }
-
-  // --- Timeslice log and statistics
-  timer.Stop();
-  stringstream logOut;
-  logOut << setw(20) << left << GetName() << " [";
-  logOut << fixed << setw(8) << setprecision(1) << right << timer.RealTime() * 1000. << " ms] ";
-  logOut << "TS " << fNofTs;
-  if (fEvents) logOut << ", events " << fEvents->GetEntriesFast();
-  LOG(info) << logOut.str();
-  fNofTs++;
-  fNofEvents += fEvents->GetEntriesFast();
-  fTime += timer.RealTime();
-}
-
-void CbmEvbuildRawTask::FillSeedTimesFromDetList()
-{
-  std::map<ECbmModuleId, UInt_t> DigiNumbers;
-  std::map<ECbmModuleId, UInt_t> DigiCounters;
-  fSeedTimes->clear();
-
-  for (RawEventBuilderDetector& system : fSeedTimeDetList) {
-    DigiNumbers[system.detId]  = GetNofDigis(system.detId);
-    DigiCounters[system.detId] = 0;
-  }
-
-  do {
-    ECbmModuleId nextAddedSystem;
-    Double_t earliestTime = -1;
-
-    for (RawEventBuilderDetector& system : fSeedTimeDetList) {
-      if (DigiCounters[system.detId] < DigiNumbers[system.detId]) {
-        Double_t thisTime = GetDigiTime(system.detId, DigiCounters[system.detId]);
-        if (thisTime < earliestTime || earliestTime == -1) {
-          nextAddedSystem = system.detId;
-          earliestTime    = thisTime;
-        }
-      }
-    }
-    if (earliestTime != -1) {
-      fSeedTimes->push_back(earliestTime);
-      DigiCounters[nextAddedSystem]++;
-    }
-    else {
-      break;
-    }
-  } while (true);
-}
-
-void CbmEvbuildRawTask::DumpSeedTimesFromDetList()
-{
-  std::ofstream timesUnsorted("digiTimesUnsorted.dat", std::ofstream::out);
-  timesUnsorted << std::setprecision(16);
-
-  for (RawEventBuilderDetector& system : fSeedTimeDetList) {
-    for (UInt_t i = 0; i < GetNofDigis(system.detId); i++) {
-      timesUnsorted << GetDigiTime(system.detId, i) << std::endl;
-    }
-  }
-  timesUnsorted.close();
-  LOG(info) << "Completed write of unsorted digi list.";
-
-  std::ofstream timesSorted("digiTimesSorted.dat", std::ofstream::out);
-  timesSorted << std::setprecision(16);
-
-  for (UInt_t i = 0; i < fSeedTimes->size(); i++) {
-    timesSorted << fSeedTimes->at(i) << std::endl;
-  }
-  timesSorted.close();
-  LOG(info) << "Completed DumpSeedTimesFromDetList(). Closing.";
-  exit(0);  //terminate as this method should only be used for diagnostics
-}
-
-Double_t CbmEvbuildRawTask::GetDigiTime(ECbmModuleId _system, UInt_t _entry)
-{
-  switch (_system) {
-    case ECbmModuleId::kMuch:
-      if (fbUseMuchBeamtimeDigi) { return (fMuchBeamTimeDigis->at(_entry)).GetTime(); }
-      else {
-        return (fMuchDigis->at(_entry)).GetTime();
-      }
-    case ECbmModuleId::kSts: return (fStsDigis->at(_entry)).GetTime();
-    case ECbmModuleId::kTrd: return (fTrdDigis->at(_entry)).GetTime();
-    case ECbmModuleId::kTof: return (fTofDigis->at(_entry)).GetTime();
-    case ECbmModuleId::kRich: return (fRichDigis->at(_entry)).GetTime();
-    case ECbmModuleId::kPsd: return (fPsdDigis->at(_entry)).GetTime();
-    case ECbmModuleId::kT0: return (fT0Digis->at(_entry)).GetTime();
-    default: break;
-  }
-  return -1;
-}
-
-UInt_t CbmEvbuildRawTask::GetNofDigis(ECbmModuleId _system)
-{
-  switch (_system) {
-    case ECbmModuleId::kMuch:
-      if (fbUseMuchBeamtimeDigi) { return fMuchBeamTimeDigis->size(); }
-      else {
-        return fMuchDigis->size();
-      }
-    case ECbmModuleId::kSts: return fStsDigis->size();
-    case ECbmModuleId::kTrd: return fTrdDigis->size();
-    case ECbmModuleId::kTof: return fTofDigis->size();
-    case ECbmModuleId::kRich: return fRichDigis->size();
-    case ECbmModuleId::kPsd: return fPsdDigis->size();
-    case ECbmModuleId::kT0: return fT0Digis->size();
-    default: break;
-  }
-  return 0;
-}
-
-void CbmEvbuildRawTask::PrintTimings()
-{
-  if (fTimer == nullptr) { LOG(fatal) << "Trying to print timings but timer not set"; }
-  else {
-    Double_t rtime = fTimer->RealTime();
-    Double_t ctime = fTimer->CpuTime();
-    LOG(info) << "CbmEvbuildRawTask: Real time " << rtime << " s, CPU time " << ctime << " s";
-  }
-  if (fCopyTimer == nullptr) { LOG(fatal) << "Trying to print timings but timer not set"; }
-  else {
-    Double_t rtime = fCopyTimer->RealTime();
-    Double_t ctime = fCopyTimer->CpuTime();
-    LOG(info) << "CbmEvbuildRawTask (digi copy only): Real time " << rtime << " s, CPU time " << ctime << " s";
-  }
-}
-
-void CbmEvbuildRawTask::Finish()
-{
-  /// Call Algo finish method
-  fpAlgo->Finish();
-  if (fbFillHistos) { SaveHistos(); }
-  if (fbGetTimings) { PrintTimings(); }
-
-  std::cout << std::endl;
-  LOG(info) << "=====================================";
-  LOG(info) << GetName() << ": Run summary";
-  LOG(info) << "Time slices          : " << fNofTs;
-  LOG(info) << "Events               : " << fNofEvents;
-  LOG(info) << "Time  / TS           : " << fixed << setprecision(2) << 1000. * fTime / Double_t(fNofTs) << " ms";
-  LOG(info) << "=====================================";
-}
-
-void CbmEvbuildRawTask::FillOutput()
-{
-  /// Clear TClonesArray before usage.
-  fEvents->Delete();
-
-  /// Get vector reference from algo
-  std::vector<CbmRawEvent*> vEvents = fpAlgo->GetEventVector();
-
-  /// Move CbmEvent from temporary vector to TClonesArray
-  for (CbmRawEvent* event : vEvents) {
-    LOG(debug) << "Vector: " << event->ToString();
-    new ((*fEvents)[fEvents->GetEntriesFast()]) CbmRawEvent(std::move(*event));
-    LOG(debug) << "TClonesArray: " << static_cast<CbmRawEvent*>(fEvents->At(fEvents->GetEntriesFast() - 1))->ToString();
-  }
-  /// Clear event vector after usage
-  fpAlgo->ClearEventVector();
-}
-
-void CbmEvbuildRawTask::SaveHistos()
-{
-  if (fbWriteHistosToFairSink) {
-    if (!FairRootManager::Instance() || !FairRootManager::Instance()->GetSink()) {
-      LOG(error) << "No sink found";
-      return;
-    }
-    FairSink* sink = FairRootManager::Instance()->GetSink();
-    sink->WriteObject(dynamic_cast<TObject*>(fpAlgo->GetOutFolder()), nullptr);
-  }
-  else {
-
-    /// Obtain vector of pointers on each histo from the algo (+ optionally desired folder)
-    std::vector<std::pair<TNamed*, std::string>> vHistos = fpAlgo->GetHistoVector();
-
-    /// (Re-)Create ROOT file to store the histos
-    TDirectory* oldDir = NULL;
-    TFile* histoFile   = NULL;
-    /// Store current directory position to allow restore later
-    oldDir = gDirectory;
-    /// open separate histo file in recreate mode
-    histoFile = new TFile(fsOutFileName, "RECREATE");
-    histoFile->cd();
-
-    /// Save all plots and create folders if needed
-    for (UInt_t uHisto = 0; uHisto < vHistos.size(); ++uHisto) {
-      /// Make sure we end up in chosen folder
-      const TString sFolder = vHistos[uHisto].second.data();
-      if (nullptr == gDirectory->Get(sFolder)) gDirectory->mkdir(sFolder);
-      gDirectory->cd(sFolder);
-
-      /// Write plot
-      vHistos[uHisto].first->Write();
-      histoFile->cd();
-    }
-
-    /// Restore original directory position
-    oldDir->cd();
-    histoFile->Close();
-  }
-}
-
-
-ClassImp(CbmEvbuildRawTask)
diff --git a/reco/eventbuilder/digis/CbmEvbuildRawTask.h b/reco/eventbuilder/digis/CbmEvbuildRawTask.h
deleted file mode 100644
index e9048442dbb6d7450945a902a4ba791e821c90a2..0000000000000000000000000000000000000000
--- a/reco/eventbuilder/digis/CbmEvbuildRawTask.h
+++ /dev/null
@@ -1,174 +0,0 @@
-/* Copyright (C) 2021 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Volker Friese [committer] */
-
-#ifndef CBMEVBUILDRAWTASK_H
-#define CBMEVBUILDRAWTASK_H
-
-/// FAIRROOT headers
-#include "FairTask.h"
-
-/// FAIRSOFT headers (geant, boost, ...)
-
-/// C/C++ headers
-#include "CbmEvbuildRawAlgo.h"
-#include "CbmMuchBeamTimeDigi.h"
-#include "CbmMuchDigi.h"
-#include "CbmPsdDigi.h"
-#include "CbmRichDigi.h"
-#include "CbmStsDigi.h"
-#include "CbmTofDigi.h"
-#include "CbmTrdDigi.h"
-
-#include <tuple>
-
-#include <array>
-#include <map>
-#include <set>
-#include <vector>
-
-class CbmDigiManager;
-class RawEventBuilderDetector;
-class TClonesArray;
-class TStopwatch;
-
-enum class EOverlapModeRaw;
-
-class CbmEvbuildRawTask : public FairTask {
-public:
-  /** Default constructor **/
-  CbmEvbuildRawTask();
-
-  CbmEvbuildRawTask(const CbmEvbuildRawTask&) = delete;
-  CbmEvbuildRawTask operator=(const CbmEvbuildRawTask&) = delete;
-
-  /** Constructor with parameters (Optional) **/
-  //  CbmEvbuildRawTask(Int_t verbose);
-
-  /** Destructor **/
-  ~CbmEvbuildRawTask();
-
-  /** Initiliazation of task at the beginning of a run **/
-  virtual InitStatus Init();
-
-  /** ReInitiliazation of task when the runID changes **/
-  virtual InitStatus ReInit();
-
-  /** Executed for each event. **/
-  virtual void Exec(Option_t*);
-
-  /** Load the parameter container from the runtime database **/
-  virtual void SetParContainers();
-
-  /** Finish task called at the end of the run **/
-  virtual void Finish();
-
-  /** Setters **/
-  void SetOutFilename(TString sNameIn) { fsOutFileName = sNameIn; }
-  void SetWriteHistosToFairSink(Bool_t var) { fbWriteHistosToFairSink = var; }
-
-  void SetFillHistos(Bool_t bFlag = kTRUE)
-  {
-    fbFillHistos = bFlag;
-    if (nullptr != fpAlgo) fpAlgo->SetFillHistos(fbFillHistos);
-  }
-  void SetReferenceDetector(RawEventBuilderDetector refDet)
-  {
-    if (nullptr != fpAlgo) fpAlgo->SetReferenceDetector(refDet);
-  }
-  void AddDetector(RawEventBuilderDetector selDet)
-  {
-    if (nullptr != fpAlgo) fpAlgo->AddDetector(selDet);
-  }
-  void RemoveDetector(RawEventBuilderDetector selDet)
-  {
-    if (nullptr != fpAlgo) fpAlgo->RemoveDetector(selDet);
-  }
-  void SetTriggerMinNumber(ECbmModuleId selDet, UInt_t uVal)
-  {
-    if (nullptr != fpAlgo) fpAlgo->SetTriggerMinNumber(selDet, uVal);
-  }
-  void SetTriggerMaxNumber(ECbmModuleId selDet, Int_t iVal)
-  {
-    if (nullptr != fpAlgo) fpAlgo->SetTriggerMaxNumber(selDet, iVal);
-  }
-  void SetTriggerWindow(ECbmModuleId det, Double_t dWinBeg, Double_t dWinEnd)
-  {
-    if (nullptr != fpAlgo) fpAlgo->SetTriggerWindow(det, dWinBeg, dWinEnd);
-  }
-  void SetTsParameters(Double_t dTsStartTime, Double_t dTsLength, Double_t dTsOverLength)
-  {
-    if (nullptr != fpAlgo) fpAlgo->SetTsParameters(dTsStartTime, dTsLength, dTsOverLength);
-  }
-  void SetEventOverlapMode(EOverlapModeRaw mode)
-  {
-    if (nullptr != fpAlgo) fpAlgo->SetEventOverlapMode(mode);
-  }
-  void SetIgnoreTsOverlap(Bool_t bFlagIn)
-  {
-    if (nullptr != fpAlgo) fpAlgo->SetIgnoreTsOverlap(bFlagIn);
-  }
-  void ChangeMuchBeamtimeDigiFlag(Bool_t bFlagIn = kFALSE)
-  {
-    if (nullptr != fpAlgo) fpAlgo->ChangeMuchBeamtimeDigiFlag(bFlagIn);
-    fbUseMuchBeamtimeDigi = bFlagIn;
-  }
-  void SetTimings(Bool_t bFlagIn = kTRUE)
-  {
-    if (nullptr != fpAlgo) fpAlgo->SetTimings(bFlagIn);
-    fbGetTimings = bFlagIn;
-  }
-
-  void PrintTimings();
-  void SetSeedTimeFiller(RawEventBuilderDetector seedDet);
-  void AddSeedTimeFillerToList(RawEventBuilderDetector seedDet);
-  void DumpSeedTimesFromDetList();
-  void SetSeedTimeWindow(Double_t beg, Double_t end) { fpAlgo->SetSeedTimeWindow(beg, end); }
-
-private:
-  void FillOutput();
-  void SaveHistos();
-
-  Bool_t fbUseMuchBeamtimeDigi = kTRUE;  //! Switch between MUCH digi classes
-
-  CbmDigiManager* fDigiMan                             = nullptr;
-  const std::vector<CbmTofDigi>* fT0Digis              = nullptr;
-  std::vector<CbmMuchDigi>* fMuchDigis                 = nullptr;
-  std::vector<CbmMuchBeamTimeDigi>* fMuchBeamTimeDigis = nullptr;
-  std::vector<CbmStsDigi>* fStsDigis                   = nullptr;
-  std::vector<CbmTrdDigi>* fTrdDigis                   = nullptr;
-  std::vector<CbmTofDigi>* fTofDigis                   = nullptr;
-  std::vector<CbmRichDigi>* fRichDigis                 = nullptr;
-  std::vector<CbmPsdDigi>* fPsdDigis                   = nullptr;
-  std::vector<Double_t>* fSeedTimes                    = nullptr;
-
-  std::vector<RawEventBuilderDetector> fSeedTimeDetList;            //if multiple are desired
-  RawEventBuilderDetector fSeedTimeDet = kRawEventBuilderDetUndef;  //single seed det
-
-  Double_t GetDigiTime(ECbmModuleId _system, UInt_t _entry);
-  UInt_t GetNofDigis(ECbmModuleId _system);
-
-  void FillSeedTimesFromDetList();
-
-  TStopwatch* fTimer     = nullptr;  //! is created when fbGetTimings is set before init
-  TStopwatch* fCopyTimer = nullptr;  //! timing only for filling of std::vector<Digi> fields
-
-  CbmEvbuildRawAlgo* fpAlgo = nullptr;
-
-  TClonesArray* fEvents = nullptr;  //! output container of CbmEvents
-
-  Bool_t fbFillHistos {kTRUE};             //! Switch ON/OFF filling of histograms
-  Bool_t fbWriteHistosToFairSink {kTRUE};  //! Write histos to FairRootManager instead of separate file
-  Bool_t fbGetTimings = kFALSE;            //! Measure CPU time using stopwatch
-
-  /** Name of the histogram output file **/
-  TString fsOutFileName {"data/HistosEvtWin.root"};
-
-  Int_t fNofTs        = 0;
-  Long64_t fNofEvents = 0;
-  Double_t fTime      = 0.;
-
-  ClassDef(CbmEvbuildRawTask, 1);
-};
-
-#endif  // CBMEVBUILDRAWTASK_H