From 9a59856293392af7fae266acb076f85ee26ab6aa Mon Sep 17 00:00:00 2001
From: Pierre-Alain Loizeau <p.-a.loizeau@gsi.de>
Date: Thu, 26 Jan 2023 11:56:10 +0000
Subject: [PATCH] Change Tzd to Bmon everywhere, last change for #2631

---
 MQ/mcbm/CMakeLists.txt                        |  32 ++--
 MQ/mcbm/CbmDeviceBuildDigiEvents.cxx          |   2 +-
 MQ/mcbm/CbmDeviceBuildDigiEvents.h            |   4 +-
 MQ/mcbm/CbmDeviceBuildRawEvents.cxx           |  24 +--
 MQ/mcbm/CbmDeviceBuildRawEvents.h             |   4 +-
 MQ/mcbm/CbmDeviceDigiEventSink.cxx            |   4 +-
 MQ/mcbm/CbmDeviceDigiEventSink.h              |   6 +-
 MQ/mcbm/CbmDeviceUnpack.cxx                   |  86 +++++-----
 MQ/mcbm/CbmDeviceUnpack.h                     |  10 +-
 algo/data/CMakeLists.txt                      |   6 +-
 algo/test/_GTestEventBuilder.cxx              |   2 +-
 core/base/CbmDigiManager.cxx                  |   4 +-
 core/data/CMakeLists.txt                      |  10 +-
 core/data/CbmDataLinkDef.h                    |   7 +-
 core/data/base/CbmDigiData.h                  |   4 +-
 .../CbmTzdDigi.cxx => bmon/CbmBmonDigi.cxx}   |   6 +-
 .../CbmTzdDigi.h => bmon/CbmBmonDigi.h}       |  30 ++--
 .../CbmBmonDigiData.h}                        |  18 +--
 core/data/test/CMakeLists.txt                 |   9 +-
 core/data/test/bmon/_GTestCbmBmonDigi.cxx     | 152 ++++++++++++++++++
 core/data/test/bmon/compareBmonDigi.h         |  29 ++++
 core/data/tof/CbmTofDigi.cxx                  |   6 +-
 core/data/tof/CbmTofDigi.h                    |  14 +-
 macro/run/run_unpack_online.C                 |   4 +
 macro/run/run_unpack_tsa.C                    |  34 ++--
 reco/detectors/CMakeLists.txt                 |   2 +-
 reco/detectors/{tzd => bmon}/CMakeLists.txt   |   6 +-
 .../CbmBmonRecoLinkDef.h}                     |   4 +-
 .../bmon/unpack/CbmBmonUnpackAlgo.cxx         |  11 ++
 .../unpack/CbmBmonUnpackAlgo.h}               |  26 +--
 .../unpack/CbmBmonUnpackConfig.cxx}           |  18 +--
 .../unpack/CbmBmonUnpackConfig.h}             |  24 +--
 reco/detectors/tof/CMakeLists.txt             |   1 -
 reco/detectors/tof/CbmTofEventClusterizer.cxx |   4 +-
 reco/detectors/tof/CbmTofHitMaker.cxx         |   4 +-
 reco/detectors/tof/CbmTofRecoLinkDef.h        |   1 -
 .../tof/unpack/CbmBmonUnpackConfig.cxx        |  51 ------
 .../tof/unpack/CbmBmonUnpackConfig.h          |  75 ---------
 reco/detectors/tof/unpack/CbmTofUnpackAlgo.h  |   4 +-
 .../detectors/tzd/unpack/CbmTzdUnpackAlgo.cxx |  11 --
 .../digis/CbmAlgoBuildRawEvents.cxx           |  24 +--
 .../digis/CbmAlgoBuildRawEvents.h             |   8 +-
 .../digis/CbmSeedFinderSlidingWindow.cxx      |   4 +-
 .../digis/CbmTaskBuildRawEvents.h             |   4 +-
 reco/global/CbmRecoTzero.cxx                  |  44 ++---
 reco/global/CbmRecoTzero.h                    |  18 +--
 reco/steer/CMakeLists.txt                     |   2 +-
 reco/steer/CbmRecoUnpack.cxx                  |  34 ++--
 reco/steer/CbmRecoUnpack.h                    |  10 +-
 reco/tasks/CbmTaskBuildEvents.cxx             |   4 +-
 reco/tasks/CbmTaskMakeRecoEvents.cxx          |   6 +-
 reco/tasks/CbmTaskMakeRecoEvents.h            |   2 +-
 sim/detectors/CMakeLists.txt                  |   2 +-
 sim/detectors/{tzd => bmon}/CMakeLists.txt    |   4 +-
 .../CbmBmonDigitize.cxx}                      |  24 +--
 .../CbmBmonDigitize.h}                        |  18 +--
 .../CbmBmonSimLinkDef.h}                      |   4 +-
 sim/response/CMakeLists.txt                   |   2 +-
 sim/response/base/CbmDigitization.cxx         |   6 +-
 59 files changed, 521 insertions(+), 448 deletions(-)
 rename core/data/{global/CbmTzdDigi.cxx => bmon/CbmBmonDigi.cxx} (76%)
 rename core/data/{global/CbmTzdDigi.h => bmon/CbmBmonDigi.h} (82%)
 rename core/data/{global/CbmTzdDigiData.h => bmon/CbmBmonDigiData.h} (72%)
 create mode 100644 core/data/test/bmon/_GTestCbmBmonDigi.cxx
 create mode 100644 core/data/test/bmon/compareBmonDigi.h
 rename reco/detectors/{tzd => bmon}/CMakeLists.txt (87%)
 rename reco/detectors/{tzd/CbmTzdRecoLinkDef.h => bmon/CbmBmonRecoLinkDef.h} (76%)
 create mode 100644 reco/detectors/bmon/unpack/CbmBmonUnpackAlgo.cxx
 rename reco/detectors/{tzd/unpack/CbmTzdUnpackAlgo.h => bmon/unpack/CbmBmonUnpackAlgo.h} (93%)
 rename reco/detectors/{tzd/unpack/CbmTzdUnpackConfig.cxx => bmon/unpack/CbmBmonUnpackConfig.cxx} (71%)
 rename reco/detectors/{tzd/unpack/CbmTzdUnpackConfig.h => bmon/unpack/CbmBmonUnpackConfig.h} (82%)
 delete mode 100644 reco/detectors/tof/unpack/CbmBmonUnpackConfig.cxx
 delete mode 100644 reco/detectors/tof/unpack/CbmBmonUnpackConfig.h
 delete mode 100644 reco/detectors/tzd/unpack/CbmTzdUnpackAlgo.cxx
 rename sim/detectors/{tzd => bmon}/CMakeLists.txt (82%)
 rename sim/detectors/{tzd/CbmTzdDigitize.cxx => bmon/CbmBmonDigitize.cxx} (81%)
 rename sim/detectors/{tzd/CbmTzdDigitize.h => bmon/CbmBmonDigitize.h} (78%)
 rename sim/detectors/{tzd/CbmTzdSimLinkDef.h => bmon/CbmBmonSimLinkDef.h} (75%)

diff --git a/MQ/mcbm/CMakeLists.txt b/MQ/mcbm/CMakeLists.txt
index be4ddda2d5..4b8014c5cd 100644
--- a/MQ/mcbm/CMakeLists.txt
+++ b/MQ/mcbm/CMakeLists.txt
@@ -32,6 +32,7 @@ set(PUBLIC_DEPS
 
 set(PRIVATE_DEPS
   CbmFlibFlesTools
+  CbmBmonReco
   CbmMuchReco
   CbmPsdReco
   CbmRecoSts
@@ -39,7 +40,6 @@ set(PRIVATE_DEPS
   CbmSimSteer
   CbmTofReco
   CbmTrdReco
-  CbmTzdReco
   CbmEventBuilder
   FairMQ::Tools
   FairRoot::Base
@@ -56,8 +56,8 @@ set(INTERFACE_DEPS
 set(EXE_NAME McbmUnpack)
 set(SRCS CbmDeviceMcbmUnpack.cxx runMcbmUnpack.cxx)
 
-set(PUBLIC_DEPENDENCIES ${PUBLIC_DEPS}) 
-set(PRIVATE_DEPENDENCIES ${PRIVATE_DEPS}) 
+set(PUBLIC_DEPENDENCIES ${PUBLIC_DEPS})
+set(PRIVATE_DEPENDENCIES ${PRIVATE_DEPS})
 set(INTERFACE_DEPENDENCIES ${INTERFACE_DEPS})
 
 generate_cbm_executable()
@@ -65,8 +65,8 @@ generate_cbm_executable()
 set(EXE_NAME McbmMonitorPulser)
 set(SRCS CbmDeviceMcbmMonitorPulser.cxx runMcbmMonitorPulser.cxx)
 
-set(PUBLIC_DEPENDENCIES ${PUBLIC_DEPS}) 
-set(PRIVATE_DEPENDENCIES ${PRIVATE_DEPS}) 
+set(PUBLIC_DEPENDENCIES ${PUBLIC_DEPS})
+set(PRIVATE_DEPENDENCIES ${PRIVATE_DEPS})
 set(INTERFACE_DEPENDENCIES ${INTERFACE_DEPS})
 
 generate_cbm_executable()
@@ -74,8 +74,8 @@ generate_cbm_executable()
 set(EXE_NAME BuildRawEvents)
 set(SRCS CbmDeviceBuildRawEvents.cxx runBuildRawEvents.cxx)
 
-set(PUBLIC_DEPENDENCIES ${PUBLIC_DEPS}) 
-set(PRIVATE_DEPENDENCIES ${PRIVATE_DEPS}) 
+set(PUBLIC_DEPENDENCIES ${PUBLIC_DEPS})
+set(PRIVATE_DEPENDENCIES ${PRIVATE_DEPS})
 set(INTERFACE_DEPENDENCIES ${INTERFACE_DEPS})
 
 generate_cbm_executable()
@@ -84,7 +84,7 @@ generate_cbm_executable()
 set(EXE_NAME McbmEventBuilderWin)
 set(SRCS CbmDeviceMcbmEventBuilderWin.cxx runMcbmEvtBuilderWin.cxx)
 
-set(PUBLIC_DEPENDENCIES ${PUBLIC_DEPS}) 
+set(PUBLIC_DEPENDENCIES ${PUBLIC_DEPS})
 set(PRIVATE_DEPENDENCIES "${PRIVATE_DEPS};FairRoot::Online")
 set(INTERFACE_DEPENDENCIES ${INTERFACE_DEPS})
 
@@ -93,7 +93,7 @@ generate_cbm_executable()
 set(EXE_NAME McbmEventSink)
 set(SRCS CbmDeviceMcbmEventSink.cxx runMcbmEventSink.cxx)
 
-set(PUBLIC_DEPENDENCIES ${PUBLIC_DEPS}) 
+set(PUBLIC_DEPENDENCIES ${PUBLIC_DEPS})
 set(PRIVATE_DEPENDENCIES "${PRIVATE_DEPS};FairRoot::Online")
 set(INTERFACE_DEPENDENCIES ${INTERFACE_DEPS})
 
@@ -103,8 +103,8 @@ generate_cbm_executable()
 set(EXE_NAME MqUnpack)
 set(SRCS CbmDeviceUnpack.cxx runUnpack.cxx)
 
-set(PUBLIC_DEPENDENCIES ${PUBLIC_DEPS}) 
-set(PRIVATE_DEPENDENCIES ${PRIVATE_DEPS}) 
+set(PUBLIC_DEPENDENCIES ${PUBLIC_DEPS})
+set(PRIVATE_DEPENDENCIES ${PRIVATE_DEPS})
 set(INTERFACE_DEPENDENCIES ${INTERFACE_DEPS})
 
 generate_cbm_executable()
@@ -112,8 +112,8 @@ generate_cbm_executable()
 set(EXE_NAME BuildDigiEvents)
 set(SRCS CbmDeviceBuildDigiEvents.cxx runBuildDigiEvents.cxx)
 
-set(PUBLIC_DEPENDENCIES ${PUBLIC_DEPS}) 
-set(PRIVATE_DEPENDENCIES ${PRIVATE_DEPS}) 
+set(PUBLIC_DEPENDENCIES ${PUBLIC_DEPS})
+set(PRIVATE_DEPENDENCIES ${PRIVATE_DEPS})
 set(INTERFACE_DEPENDENCIES ${INTERFACE_DEPS})
 
 generate_cbm_executable()
@@ -121,7 +121,7 @@ generate_cbm_executable()
 set(EXE_NAME DigiEventSink)
 set(SRCS CbmDeviceDigiEventSink.cxx runDigiEventSink.cxx)
 
-set(PUBLIC_DEPENDENCIES ${PUBLIC_DEPS}) 
+set(PUBLIC_DEPENDENCIES ${PUBLIC_DEPS})
 set(PRIVATE_DEPENDENCIES "${PRIVATE_DEPS};FairRoot::Online")
 set(INTERFACE_DEPENDENCIES ${INTERFACE_DEPS})
 
@@ -131,8 +131,8 @@ generate_cbm_executable()
 set(EXE_NAME BmonMonitor)
 set(SRCS CbmDeviceBmonMonitor.cxx runBmonMonitor.cxx)
 
-set(PUBLIC_DEPENDENCIES ${PUBLIC_DEPS}) 
-set(PRIVATE_DEPENDENCIES ${PRIVATE_DEPS}) 
+set(PUBLIC_DEPENDENCIES ${PUBLIC_DEPS})
+set(PRIVATE_DEPENDENCIES ${PRIVATE_DEPS})
 set(INTERFACE_DEPENDENCIES ${INTERFACE_DEPS})
 
 generate_cbm_executable()
diff --git a/MQ/mcbm/CbmDeviceBuildDigiEvents.cxx b/MQ/mcbm/CbmDeviceBuildDigiEvents.cxx
index a6c9ce996c..94e7d29d86 100644
--- a/MQ/mcbm/CbmDeviceBuildDigiEvents.cxx
+++ b/MQ/mcbm/CbmDeviceBuildDigiEvents.cxx
@@ -336,7 +336,7 @@ try {
   /* clang-format on */
 
   /// Create input vectors
-  fvDigiT0   = new std::vector<CbmTzdDigi>(1000000);
+  fvDigiT0   = new std::vector<CbmBmonDigi>(1000000);
   fvDigiSts  = new std::vector<CbmStsDigi>(1000000);
   fvDigiMuch = new std::vector<CbmMuchDigi>(1000000);
   fvDigiTrd  = new std::vector<CbmTrdDigi>(1000000);
diff --git a/MQ/mcbm/CbmDeviceBuildDigiEvents.h b/MQ/mcbm/CbmDeviceBuildDigiEvents.h
index 38b88c46c0..d51ea1a858 100644
--- a/MQ/mcbm/CbmDeviceBuildDigiEvents.h
+++ b/MQ/mcbm/CbmDeviceBuildDigiEvents.h
@@ -14,13 +14,13 @@
 
 /// CBM headers
 #include "CbmAlgoBuildRawEvents.h"
+#include "CbmBmonDigi.h"
 #include "CbmMuchDigi.h"
 #include "CbmPsdDigi.h"
 #include "CbmRichDigi.h"
 #include "CbmStsDigi.h"
 #include "CbmTofDigi.h"
 #include "CbmTrdDigi.h"
-#include "CbmTzdDigi.h"
 
 /// FAIRROOT headers
 #include "FairMQDevice.h"
@@ -103,7 +103,7 @@ private:
   /// TS information in header
   CbmTsEventHeader* fCbmTsEventHeader = nullptr;
   /// Digis storage
-  std::vector<CbmTzdDigi>* fvDigiT0    = nullptr;
+  std::vector<CbmBmonDigi>* fvDigiT0   = nullptr;
   std::vector<CbmStsDigi>* fvDigiSts   = nullptr;
   std::vector<CbmMuchDigi>* fvDigiMuch = nullptr;
   std::vector<CbmTrdDigi>* fvDigiTrd   = nullptr;
diff --git a/MQ/mcbm/CbmDeviceBuildRawEvents.cxx b/MQ/mcbm/CbmDeviceBuildRawEvents.cxx
index 6bbb141904..881b659b1a 100644
--- a/MQ/mcbm/CbmDeviceBuildRawEvents.cxx
+++ b/MQ/mcbm/CbmDeviceBuildRawEvents.cxx
@@ -121,7 +121,7 @@ try {
                                                      : kRawEventBuilderDetUndef)))))));
   if (kRawEventBuilderDetUndef != refDet) {
     fpAlgo->SetReferenceDetector(refDet);
-  } 
+  }
   else {
     LOG(info) << "CbmDeviceBuildRawEvents::InitTask => Trying to change "
                  "reference to unsupported detector, ignored! "
@@ -142,14 +142,14 @@ try {
                                                         : kRawEventBuilderDetUndef)))))));
     if (kRawEventBuilderDetUndef != addDet) {
       fpAlgo->AddDetector(addDet);
-    } 
+    }
     else {
       LOG(info) << "CbmDeviceBuildRawEvents::InitTask => Trying to add "
                    "unsupported detector, ignored! "
                 << (*itStrAdd);
       continue;
     }
-  } 
+  }
 
      /// Extract detector to remove if any
   for (std::vector<std::string>::iterator itStrRem = fvsDelDet.begin();
@@ -165,14 +165,14 @@ try {
                                                         : kRawEventBuilderDetUndef)))))));
     if (kRawEventBuilderDetUndef != remDet) {
       fpAlgo->RemoveDetector(remDet);
-    } 
+    }
     else {
       LOG(info) << "CbmDeviceBuildRawEvents::InitTask => Trying to remove "
                    "unsupported detector, ignored! "
                 << (*itStrRem);
       continue;
-    } 
-  }  
+    }
+  }
      /// Extract Trigger window to add if any
   for (std::vector<std::string>::iterator itStrTrigWin = fvsSetTrigWin.begin();
        itStrTrigWin != fvsSetTrigWin.end();
@@ -185,7 +185,7 @@ try {
         << " (Should be ECbmModuleId,dWinBeg,dWinEnd but instead found "
         << (*itStrTrigWin) << " )";
       continue;
-    } 
+    }
 
     /// Detector Enum Tag
     std::string sSelDet = (*itStrTrigWin).substr(0, charPosDel);
@@ -203,7 +203,7 @@ try {
         << "Trying to set trigger window for unsupported detector, ignored! "
         << sSelDet;
       continue;
-    } 
+    }
 
     /// Window beginning
     charPosDel++;
@@ -216,7 +216,7 @@ try {
         << " (Should be ECbmModuleId,dWinBeg,dWinEnd but instead found "
         << (*itStrTrigWin) << " )";
       continue;
-    } 
+    }
     Double_t dWinBeg = std::stod(sNext.substr(0, charPosDel));
 
     /// Window end
@@ -224,7 +224,7 @@ try {
     Double_t dWinEnd = std::stod(sNext.substr(charPosDel));
 
     fpAlgo->SetTriggerWindow(selDet, dWinBeg, dWinEnd);
-  }  
+  }
      /// Extract MinNb for trigger if any
   for (std::vector<std::string>::iterator itStrMinNb = fvsSetTrigMinNb.begin();
        itStrMinNb != fvsSetTrigMinNb.end();
@@ -262,13 +262,13 @@ try {
     UInt_t uMinNb = std::stoul((*itStrMinNb).substr(charPosDel));
 
     fpAlgo->SetTriggerMinNumber(selDet, uMinNb);
-  } 
+  }
 
   /// FIXME: Re-enable clang formatting after formatted lines
   /* clang-format on */
 
   /// Create input vectors
-  fvDigiT0   = new std::vector<CbmTzdDigi>();
+  fvDigiT0   = new std::vector<CbmBmonDigi>();
   fvDigiSts  = new std::vector<CbmStsDigi>();
   fvDigiMuch = new std::vector<CbmMuchBeamTimeDigi>();
   fvDigiTrd  = new std::vector<CbmTrdDigi>();
diff --git a/MQ/mcbm/CbmDeviceBuildRawEvents.h b/MQ/mcbm/CbmDeviceBuildRawEvents.h
index b41022bc39..f45c81a3de 100644
--- a/MQ/mcbm/CbmDeviceBuildRawEvents.h
+++ b/MQ/mcbm/CbmDeviceBuildRawEvents.h
@@ -14,13 +14,13 @@
 
 /// CBM headers
 #include "CbmAlgoBuildRawEvents.h"
+#include "CbmBmonDigi.h"
 #include "CbmMuchBeamTimeDigi.h"
 #include "CbmPsdDigi.h"
 #include "CbmRichDigi.h"
 #include "CbmStsDigi.h"
 #include "CbmTofDigi.h"
 #include "CbmTrdDigi.h"
-#include "CbmTzdDigi.h"
 
 /// FAIRROOT headers
 #include "FairMQDevice.h"
@@ -100,7 +100,7 @@ private:
   TClonesArray* fTimeSliceMetaDataArray = nullptr;  //!
   TimesliceMetaData* fTsMetaData        = nullptr;
   /// Digis storage
-  std::vector<CbmTzdDigi>* fvDigiT0            = nullptr;
+  std::vector<CbmBmonDigi>* fvDigiT0           = nullptr;
   std::vector<CbmStsDigi>* fvDigiSts           = nullptr;
   std::vector<CbmMuchBeamTimeDigi>* fvDigiMuch = nullptr;
   std::vector<CbmTrdDigi>* fvDigiTrd           = nullptr;
diff --git a/MQ/mcbm/CbmDeviceDigiEventSink.cxx b/MQ/mcbm/CbmDeviceDigiEventSink.cxx
index d5d033f1e0..b2d6a15cab 100644
--- a/MQ/mcbm/CbmDeviceDigiEventSink.cxx
+++ b/MQ/mcbm/CbmDeviceDigiEventSink.cxx
@@ -155,7 +155,7 @@ try {
 
   /// Full TS Digis storage (optional usage, controlled by fbStoreFullTs!)
   if (fbStoreFullTs) {
-    fvDigiT0   = new std::vector<CbmTzdDigi>();
+    fvDigiT0   = new std::vector<CbmBmonDigi>();
     fvDigiSts  = new std::vector<CbmStsDigi>();
     fvDigiMuch = new std::vector<CbmMuchDigi>();
     fvDigiTrd  = new std::vector<CbmTrdDigi>();
@@ -163,7 +163,7 @@ try {
     fvDigiRich = new std::vector<CbmRichDigi>();
     fvDigiPsd  = new std::vector<CbmPsdDigi>();
 
-    fpFairRootMgr->RegisterAny(CbmTzdDigi::GetBranchName(), fvDigiT0, kTRUE);
+    fpFairRootMgr->RegisterAny(CbmBmonDigi::GetBranchName(), fvDigiT0, kTRUE);
     fpFairRootMgr->RegisterAny(CbmStsDigi::GetBranchName(), fvDigiSts, kTRUE);
     fpFairRootMgr->RegisterAny(CbmMuchDigi::GetBranchName(), fvDigiMuch, kTRUE);
     fpFairRootMgr->RegisterAny(CbmTrdDigi::GetBranchName(), fvDigiTrd, kTRUE);
diff --git a/MQ/mcbm/CbmDeviceDigiEventSink.h b/MQ/mcbm/CbmDeviceDigiEventSink.h
index 396b718009..0d617899f4 100644
--- a/MQ/mcbm/CbmDeviceDigiEventSink.h
+++ b/MQ/mcbm/CbmDeviceDigiEventSink.h
@@ -13,6 +13,7 @@
 #define CBMDEVICEDIGIEVTSINK_H_
 
 /// CBM headers
+#include "CbmBmonDigi.h"
 #include "CbmDigiEvent.h"
 #include "CbmEvent.h"
 #include "CbmMqTMessage.h"
@@ -23,7 +24,6 @@
 #include "CbmTofDigi.h"
 #include "CbmTrdDigi.h"
 #include "CbmTsEventHeader.h"
-#include "CbmTzdDigi.h"
 
 #include "TimesliceMetaData.h"
 
@@ -68,7 +68,7 @@ public:
   /// TS information in header
   CbmTsEventHeader fCbmTsEventHeader;
   /// Raw data
-  std::vector<CbmTzdDigi> fvDigiT0;
+  std::vector<CbmBmonDigi> fvDigiT0;
   std::vector<CbmStsDigi> fvDigiSts;
   std::vector<CbmMuchDigi> fvDigiMuch;
   std::vector<CbmTrdDigi> fvDigiTrd;
@@ -157,7 +157,7 @@ private:
   /// CbmEvents
   std::vector<CbmDigiEvent>* fEventsSel = nullptr;  //! output container of CbmEvents
   /// Full TS Digis storage (optional usage, controlled by fbStoreFullTs!)
-  std::vector<CbmTzdDigi>* fvDigiT0    = nullptr;
+  std::vector<CbmBmonDigi>* fvDigiT0   = nullptr;
   std::vector<CbmStsDigi>* fvDigiSts   = nullptr;
   std::vector<CbmMuchDigi>* fvDigiMuch = nullptr;
   std::vector<CbmTrdDigi>* fvDigiTrd   = nullptr;
diff --git a/MQ/mcbm/CbmDeviceUnpack.cxx b/MQ/mcbm/CbmDeviceUnpack.cxx
index 197d1d02a8..242b621f75 100644
--- a/MQ/mcbm/CbmDeviceUnpack.cxx
+++ b/MQ/mcbm/CbmDeviceUnpack.cxx
@@ -11,6 +11,7 @@
 
 #include "CbmDeviceUnpack.h"
 
+#include "CbmBmonUnpackConfig.h"
 #include "CbmFlesCanvasTools.h"
 #include "CbmMQDefs.h"
 #include "CbmMuchUnpackConfig.h"
@@ -21,7 +22,6 @@
 #include "CbmTofUnpackConfig.h"
 #include "CbmTrdUnpackConfig.h"
 #include "CbmTrdUnpackFaspConfig.h"
-#include "CbmTzdUnpackConfig.h"
 
 #include "StorableTimeslice.hpp"
 #include "TimesliceMetaData.h"
@@ -128,25 +128,25 @@ Bool_t CbmDeviceUnpack::InitContainers()
 
   /// Initialize the UnpackerConfigs objects and their "user options"
   // ---- BMON ----
-  std::shared_ptr<CbmTzdUnpackConfig> tzdconfig = nullptr;
+  std::shared_ptr<CbmBmonUnpackConfig> bmonconfig = nullptr;
   if (fbUnpBmon) {
-    tzdconfig = std::make_shared<CbmTzdUnpackConfig>("", fuRunId);
-    if (tzdconfig) {
-      // tzdconfig->SetDebugState();
-      tzdconfig->SetDoWriteOutput();
-      // tzdconfig->SetDoWriteOptOutA("CbmTzdErrors");
-      std::string parfilesbasepathTzd = Form("%s/macro/beamtime/mcbm2022/", srcDir.Data());
-      tzdconfig->SetParFilesBasePath(parfilesbasepathTzd);
-      tzdconfig->SetParFileName("mBmonCriPar.par");
-      tzdconfig->SetSystemTimeOffset(-1220);  // [ns] value to be updated
+    bmonconfig = std::make_shared<CbmBmonUnpackConfig>("", fuRunId);
+    if (bmonconfig) {
+      // bmonconfig->SetDebugState();
+      bmonconfig->SetDoWriteOutput();
+      // bmonconfig->SetDoWriteOptOutA("CbmBmonErrors");
+      std::string parfilesbasepathBmon = Form("%s/macro/beamtime/mcbm2022/", srcDir.Data());
+      bmonconfig->SetParFilesBasePath(parfilesbasepathBmon);
+      bmonconfig->SetParFileName("mBmonCriPar.par");
+      bmonconfig->SetSystemTimeOffset(-1220);  // [ns] value to be updated
       if (2160 <= fuRunId) {
-        tzdconfig->SetSystemTimeOffset(-80);  // [ns] value to be updated
+        bmonconfig->SetSystemTimeOffset(-80);  // [ns] value to be updated
       }
       if (2350 <= fuRunId) {
-        tzdconfig->SetSystemTimeOffset(0);  // [ns] value to be updated
+        bmonconfig->SetSystemTimeOffset(0);  // [ns] value to be updated
       }
       /// Enable Monitor plots
-      // tzdconfig->SetMonitor(GetTofMonitor(outfilename, true));  // FIXME: Unsupported for now
+      // bmonconfig->SetMonitor(GetTofMonitor(outfilename, true));  // FIXME: Unsupported for now
     }
   }
   // -------------
@@ -471,7 +471,7 @@ Bool_t CbmDeviceUnpack::InitContainers()
   if (trd1Dconfig) SetUnpackConfig(trd1Dconfig);
   if (trdfasp2dconfig) SetUnpackConfig(trdfasp2dconfig);
   if (tofconfig) SetUnpackConfig(tofconfig);
-  if (tzdconfig) SetUnpackConfig(tzdconfig);
+  if (bmonconfig) SetUnpackConfig(bmonconfig);
   if (richconfig) SetUnpackConfig(richconfig);
   if (psdconfig) SetUnpackConfig(psdconfig);
 
@@ -491,8 +491,8 @@ Bool_t CbmDeviceUnpack::InitContainers()
     charPosDel++;
     int32_t iOffset = std::stoi((*itStrOffs).substr(charPosDel));
 
-    if ("kT0" == sSelDet && fTzdConfig) {  //
-      fTzdConfig->SetSystemTimeOffset(iOffset);
+    if ("kT0" == sSelDet && fBmonConfig) {  //
+      fBmonConfig->SetSystemTimeOffset(iOffset);
     }                                            // else if( "kT0" == sSelDet )
     else if ("kSTS" == sSelDet && fStsConfig) {  //
       fStsConfig->SetSystemTimeOffset(iOffset);
@@ -585,15 +585,15 @@ Bool_t CbmDeviceUnpack::InitContainers()
     fTofConfig->InitAlgo();
     //    initPerformanceMaps(fkFlesTof, "TOF");
   }
-  // --- Tzd
-  if (fTzdConfig) {
-    fTzdConfig->InitOutput();
-    //    RegisterOutputs(ioman, fTzdConfig);  /// Framework bound work = kept in this Task
-    fTzdConfig->SetAlgo();
-    fTzdConfig->LoadParFileName();  /// Needed to change the Parameter file name before it is used!!!
-    initOK &= InitParameters(fTzdConfig->GetParContainerRequest());  /// Framework bound work = kept in this Device
-    fTzdConfig->InitAlgo();
-    // initPerformanceMaps(fkFlesTzd, "Tzd");
+  // --- Bmon
+  if (fBmonConfig) {
+    fBmonConfig->InitOutput();
+    //    RegisterOutputs(ioman, fBmonConfig);  /// Framework bound work = kept in this Task
+    fBmonConfig->SetAlgo();
+    fBmonConfig->LoadParFileName();  /// Needed to change the Parameter file name before it is used!!!
+    initOK &= InitParameters(fBmonConfig->GetParContainerRequest());  /// Framework bound work = kept in this Device
+    fBmonConfig->InitAlgo();
+    // initPerformanceMaps(fkFlesBmon, "Bmon");
   }
   // --- Rich
   if (fRichConfig) {
@@ -801,8 +801,8 @@ bool CbmDeviceUnpack::ConditionalRun()
   fCbmTsEventHeader->Reset();
 
   // Reset the unpackers for a new timeslice, e.g. clear the output vectors
-  // ---- Tzd ----
-  if (fTzdConfig) fTzdConfig->Reset();
+  // ---- Bmon ----
+  if (fBmonConfig) fBmonConfig->Reset();
   // ---- Sts ----
   if (fStsConfig) fStsConfig->Reset();
   // ----Much ----
@@ -850,21 +850,21 @@ bool CbmDeviceUnpack::SendUnpData()
   parts.AddPart(std::move(messTsHeader));
 
   // ---- T0 ----
-  std::stringstream ossTzd;
-  boost::archive::binary_oarchive oaTzd(ossTzd);
-  if (fTzdConfig) {  //
-    oaTzd << *(fTzdConfig->GetOutputVec());
+  std::stringstream ossBmon;
+  boost::archive::binary_oarchive oaBmon(ossBmon);
+  if (fBmonConfig) {  //
+    oaBmon << *(fBmonConfig->GetOutputVec());
   }
   else {
-    oaTzd << (std::vector<CbmTzdDigi>());
+    oaBmon << (std::vector<CbmBmonDigi>());
   }
-  std::string* strMsgTzd = new std::string(ossTzd.str());
+  std::string* strMsgBmon = new std::string(ossBmon.str());
 
   parts.AddPart(NewMessage(
-    const_cast<char*>(strMsgTzd->c_str()),  // data
-    strMsgTzd->length(),                    // size
+    const_cast<char*>(strMsgBmon->c_str()),  // data
+    strMsgBmon->length(),                    // size
     [](void*, void* object) { delete static_cast<std::string*>(object); },
-    strMsgTzd));  // object that manages the data
+    strMsgBmon));  // object that manages the data
 
   // ---- Sts ----
   std::stringstream ossSts;
@@ -1068,7 +1068,7 @@ bool CbmDeviceUnpack::SendHistograms()
 
 CbmDeviceUnpack::~CbmDeviceUnpack()
 {
-  if (fTzdConfig) fTzdConfig->GetUnpacker()->Finish();
+  if (fBmonConfig) fBmonConfig->GetUnpacker()->Finish();
   if (fStsConfig) fStsConfig->GetUnpacker()->Finish();
   if (fMuchConfig) fMuchConfig->GetUnpacker()->Finish();
   if (fTrd1DConfig) fTrd1DConfig->GetUnpacker()->Finish();
@@ -1095,10 +1095,10 @@ Bool_t CbmDeviceUnpack::DoUnpack(const fles::Timeslice& ts, size_t /*component*/
     auto systemId = static_cast<std::uint16_t>(ts.descriptor(component, 0).sys_id);
 
     switch (systemId) {
-      case fkFlesTzd: {
-        if (fTzdConfig) {
+      case fkFlesBmon: {
+        if (fBmonConfig) {
           fCbmTsEventHeader->AddNDigisBmon(
-            unpack(systemId, &ts, component, fTzdConfig, fTzdConfig->GetOptOutAVec(), fTzdConfig->GetOptOutBVec()));
+            unpack(systemId, &ts, component, fBmonConfig, fBmonConfig->GetOptOutAVec(), fBmonConfig->GetOptOutBVec()));
         }
         break;
       }
@@ -1160,7 +1160,7 @@ Bool_t CbmDeviceUnpack::DoUnpack(const fles::Timeslice& ts, size_t /*component*/
 
   if (fbOutputFullTimeSorting) {
     /// Time sort the output vectors of all unpackers present
-    if (fTzdConfig && fTzdConfig->GetOutputVec()) { timesort(fTzdConfig->GetOutputVec()); }
+    if (fBmonConfig && fBmonConfig->GetOutputVec()) { timesort(fBmonConfig->GetOutputVec()); }
     if (fStsConfig && fStsConfig->GetOutputVec()) { timesort(fStsConfig->GetOutputVec()); }
     if (fMuchConfig && fMuchConfig->GetOutputVec()) { timesort(fMuchConfig->GetOutputVec()); }
     if (fTrd1DConfig && fTrd1DConfig->GetOutputVec()) { timesort(fTrd1DConfig->GetOutputVec()); }
@@ -1170,7 +1170,7 @@ Bool_t CbmDeviceUnpack::DoUnpack(const fles::Timeslice& ts, size_t /*component*/
     if (fPsdConfig && fPsdConfig->GetOutputVec()) { timesort(fPsdConfig->GetOutputVec()); }
 
     /// Time sort the output vectors of all unpackers present
-    if (fTzdConfig && fTzdConfig->GetOptOutAVec()) { timesort(fTzdConfig->GetOptOutAVec()); }
+    if (fBmonConfig && fBmonConfig->GetOptOutAVec()) { timesort(fBmonConfig->GetOptOutAVec()); }
     if (fStsConfig && fStsConfig->GetOptOutAVec()) { timesort(fStsConfig->GetOptOutAVec()); }
     if (fMuchConfig && fMuchConfig->GetOptOutAVec()) { timesort(fMuchConfig->GetOptOutAVec()); }
     if (fTrd1DConfig && fTrd1DConfig->GetOptOutAVec()) { timesort(fTrd1DConfig->GetOptOutAVec()); }
diff --git a/MQ/mcbm/CbmDeviceUnpack.h b/MQ/mcbm/CbmDeviceUnpack.h
index bd80961026..2cd1b89810 100644
--- a/MQ/mcbm/CbmDeviceUnpack.h
+++ b/MQ/mcbm/CbmDeviceUnpack.h
@@ -28,7 +28,7 @@
 #include <vector>
 
 class TList;
-class CbmTzdUnpackConfig;
+class CbmBmonUnpackConfig;
 class CbmStsUnpackConfig;
 class CbmMuchUnpackConfig;
 class CbmTrdUnpackFaspConfig;
@@ -51,8 +51,8 @@ protected:
   bool ConditionalRun();
   bool HandleCommand(FairMQMessagePtr&, int);
 
-  /** @brief Set the Tzd Unpack Config @param config */
-  void SetUnpackConfig(std::shared_ptr<CbmTzdUnpackConfig> config) { fTzdConfig = config; }
+  /** @brief Set the Bmon Unpack Config @param config */
+  void SetUnpackConfig(std::shared_ptr<CbmBmonUnpackConfig> config) { fBmonConfig = config; }
 
   /** @brief Set the Sts Unpack Config @param config */
   void SetUnpackConfig(std::shared_ptr<CbmStsUnpackConfig> config) { fStsConfig = config; }
@@ -77,7 +77,7 @@ protected:
 
 private:
   /// Constants
-  static constexpr std::uint16_t fkFlesTzd   = static_cast<std::uint16_t>(fles::SubsystemIdentifier::T0);
+  static constexpr std::uint16_t fkFlesBmon  = static_cast<std::uint16_t>(fles::SubsystemIdentifier::T0);
   static constexpr std::uint16_t fkFlesMvd   = static_cast<std::uint16_t>(fles::SubsystemIdentifier::MVD);
   static constexpr std::uint16_t fkFlesSts   = static_cast<std::uint16_t>(fles::SubsystemIdentifier::STS);
   static constexpr std::uint16_t fkFlesMuch  = static_cast<std::uint16_t>(fles::SubsystemIdentifier::MUCH);
@@ -137,7 +137,7 @@ private:
   std::map<std::uint16_t, std::pair<double, double>> fDataSizeMap = {};  //!
 
   /// Configuration of the unpackers. Provides the configured algorithm
-  std::shared_ptr<CbmTzdUnpackConfig> fTzdConfig       = nullptr;
+  std::shared_ptr<CbmBmonUnpackConfig> fBmonConfig     = nullptr;
   std::shared_ptr<CbmStsUnpackConfig> fStsConfig       = nullptr;
   std::shared_ptr<CbmMuchUnpackConfig> fMuchConfig     = nullptr;
   std::shared_ptr<CbmTrdUnpackFaspConfig> fTrd2DConfig = nullptr;
diff --git a/algo/data/CMakeLists.txt b/algo/data/CMakeLists.txt
index 41483471e5..71edcd9f9f 100644
--- a/algo/data/CMakeLists.txt
+++ b/algo/data/CMakeLists.txt
@@ -6,9 +6,11 @@ set(SRCS
   ${CMAKE_SOURCE_DIR}/core/data/CbmDefs.cxx
   ${CMAKE_SOURCE_DIR}/core/data/CbmAddress.cxx
 
+  ${CMAKE_SOURCE_DIR}/core/data/bmon/CbmBmonDigi.cxx
+
   ${CMAKE_SOURCE_DIR}/core/data/sts/CbmStsAddress.cxx
   ${CMAKE_SOURCE_DIR}/core/data/sts/CbmStsDigi.cxx
- 
+
   ${CMAKE_SOURCE_DIR}/core/data/rich/CbmRichDigi.cxx
 
   ${CMAKE_SOURCE_DIR}/core/data/much/CbmMuchDigi.cxx
@@ -24,7 +26,6 @@ set(SRCS
   ${CMAKE_SOURCE_DIR}/core/data/psd/CbmPsdDigi.cxx
   ${CMAKE_SOURCE_DIR}/core/data/psd/CbmPsdAddress.cxx
 
-  ${CMAKE_SOURCE_DIR}/core/data/global/CbmTzdDigi.cxx
 
   ${CMAKE_SOURCE_DIR}/core/data/raw/StsXyterMessage.cxx
 )
@@ -34,6 +35,7 @@ add_library(OnlineData SHARED ${SRCS})
 target_include_directories(OnlineData
   PUBLIC ${CMAKE_SOURCE_DIR}/core/data
   PUBLIC ${CMAKE_SOURCE_DIR}/core/data/base
+  PUBLIC ${CMAKE_SOURCE_DIR}/core/data/bmon
   PUBLIC ${CMAKE_SOURCE_DIR}/core/data/sts
   PUBLIC ${CMAKE_SOURCE_DIR}/core/data/rich
   PUBLIC ${CMAKE_SOURCE_DIR}/core/data/much
diff --git a/algo/test/_GTestEventBuilder.cxx b/algo/test/_GTestEventBuilder.cxx
index e856ac9c63..934d9346aa 100644
--- a/algo/test/_GTestEventBuilder.cxx
+++ b/algo/test/_GTestEventBuilder.cxx
@@ -32,7 +32,7 @@ TEST(_GTestEventBuilder, CheckEventBuilderAlgorithmSimple)
     //tsIn.fData.fTrd.fDigis.push_back(CbmTrdDigi(0, 1.0, 1.0, i * inputSpacing));
     tsIn.fData.fRich.fDigis.push_back(CbmRichDigi(1111, i * inputSpacing, 1.0));
     tsIn.fData.fPsd.fDigis.push_back(CbmPsdDigi(1111, i * inputSpacing, 1.0));
-    tsIn.fData.fT0.fDigis.push_back(CbmTzdDigi(1111, i * inputSpacing, 1.0));
+    tsIn.fData.fT0.fDigis.push_back(CbmBmonDigi(1111, i * inputSpacing, 1.0));
   }
 
   std::vector<double> triggerIn;
diff --git a/core/base/CbmDigiManager.cxx b/core/base/CbmDigiManager.cxx
index 886338c5fe..75fe067181 100644
--- a/core/base/CbmDigiManager.cxx
+++ b/core/base/CbmDigiManager.cxx
@@ -8,6 +8,7 @@
  **/
 #include "CbmDigiManager.h"
 
+#include "CbmBmonDigi.h"          // for CbmBmonDigi
 #include "CbmDefs.h"              // for kMuch
 #include "CbmDigiBranch.h"        // for CbmDigiBranch
 #include "CbmMuchBeamTimeDigi.h"  // for CbmMuchBeamTimeDigi
@@ -18,7 +19,6 @@
 #include "CbmStsDigi.h"           // for CbmStsDigi
 #include "CbmTofDigi.h"           // for CbmTofDigi
 #include "CbmTrdDigi.h"           // for CbmTrdDigi
-#include "CbmTzdDigi.h"           // for CbmTzdDigi
 
 #include <FairTask.h>  // for kSUCCESS, InitStatus
 
@@ -91,7 +91,7 @@ InitStatus CbmDigiManager::Init()
   SetBranch<CbmTrdDigi>();
   SetBranch<CbmTofDigi>();
   SetBranch<CbmPsdDigi>();
-  SetBranch<CbmTzdDigi>();
+  SetBranch<CbmBmonDigi>();
   LOG(info) << "Present branches:";
   for (auto const& branch : fBranches) {
     LOG(info) << "   " << branch.second->ToString();
diff --git a/core/data/CMakeLists.txt b/core/data/CMakeLists.txt
index bd1d18176b..ea147c107f 100644
--- a/core/data/CMakeLists.txt
+++ b/core/data/CMakeLists.txt
@@ -7,6 +7,7 @@ set(INCLUDE_DIRECTORIES
   ${CMAKE_CURRENT_SOURCE_DIR}/base
   ${CMAKE_CURRENT_SOURCE_DIR}/raw
   ${CMAKE_CURRENT_SOURCE_DIR}/mvd
+  ${CMAKE_CURRENT_SOURCE_DIR}/bmon
   ${CMAKE_CURRENT_SOURCE_DIR}/sts
   ${CMAKE_CURRENT_SOURCE_DIR}/much
   ${CMAKE_CURRENT_SOURCE_DIR}/trd
@@ -49,6 +50,8 @@ set(SRCS
   mvd/CbmMvdPoint.cxx
   mvd/CbmMvdHitMatch.cxx
 
+  bmon/CbmBmonDigi.cxx
+
   sts/CbmStsAddress.cxx
   sts/CbmStsCluster.cxx
   sts/CbmStsDigi.cxx
@@ -99,7 +102,6 @@ set(SRCS
   psd/CbmPsdAddress.cxx
   psd/CbmPsdMCbmHit.cxx
 
-  global/CbmTzdDigi.cxx
   global/CbmGlobalTrack.cxx
   global/CbmVertex.cxx
   global/CbmTrackParam.cxx
@@ -126,8 +128,8 @@ SET_SOURCE_FILES_PROPERTIES(tof/etof/star_rhicf.c PROPERTIES COMPILE_FLAGS -Wno-
 
 
 list(APPEND HEADERS base/CbmDigiData.h global/CbmDigiEvent.h global/CbmDigiTimeslice.h
-sts/CbmStsDigiData.h much/CbmMuchDigiData.h rich/CbmRichDigiData.h trd/CbmTrdDigiData.h
-tof/CbmTofDigiData.h global/CbmTzdDigiData.h psd/CbmPsdDigiData.h)
+bmon/CbmBmonDigiData.h sts/CbmStsDigiData.h much/CbmMuchDigiData.h rich/CbmRichDigiData.h trd/CbmTrdDigiData.h
+tof/CbmTofDigiData.h psd/CbmPsdDigiData.h)
 
 set(LIBRARY_NAME CbmData)
 set(LINKDEF ${LIBRARY_NAME}LinkDef.h)
@@ -152,13 +154,13 @@ generate_cbm_library()
 Install(FILES
         CbmDefs.h
         base/CbmDigiData.h base/CbmDigiVector.h
+        bmon/CbmBmonDigiData.h
         much/CbmMuchDigiData.h
         psd/CbmPsdDigiData.h
         rich/CbmRichDigiData.h rich/CbmRichRingLight.h
         sts/CbmStsDigiData.h
         trd/CbmTrdDigiData.h
         tof/CbmTofDigiData.h
-        global/CbmTzdDigiData.h
         global/CbmDigiEvent.h global/CbmDigiTimeslice.h
         raw/bitmask_operators.hpp raw/StsXyterFinalHit.h raw/PsdGbtDataFormat-v0.00.h raw/PsdGbtDataFormat-v1.00.h
         DESTINATION include
diff --git a/core/data/CbmDataLinkDef.h b/core/data/CbmDataLinkDef.h
index be7e64e2e0..a6c2d44494 100644
--- a/core/data/CbmDataLinkDef.h
+++ b/core/data/CbmDataLinkDef.h
@@ -38,6 +38,9 @@
 #pragma link C++ class CbmMCEventList;
 #pragma link C++ class CbmMCEventInfo;
 
+#pragma link C++ class CbmBmonDigi + ;
+#pragma link C++ class CbmBmonDigiData + ;
+
 #pragma link C++ class CbmMvdCluster + ;
 #pragma link C++ class CbmMvdDetectorId + ;
 #pragma link C++ class CbmMvdDigi + ;
@@ -99,8 +102,6 @@
 
 // --- data/global
 #pragma link C++ class CbmGlobalTrack + ;
-#pragma link C++ class CbmTzdDigi + ;
-#pragma link C++ class CbmTzdDigiData + ;
 #pragma link C++ class CbmVertex + ;
 #pragma link C++ class std::vector < CbmDigiEvent>;
 
@@ -131,7 +132,7 @@
 #pragma link C++ class vector < CbmMuchBeamTimeDigi> + ;
 #pragma link C++ class vector < CbmTrdDigi> + ;
 #pragma link C++ class vector < CbmTofDigi> + ;
-#pragma link C++ class vector < CbmTzdDigi> + ;
+#pragma link C++ class vector < CbmBmonDigi> + ;
 #pragma link C++ class vector < CbmPsdDigi> + ;
 #pragma link C++ class vector < CbmPsdDsp> + ;
 #pragma link C++ class vector < CbmMatch> + ;
diff --git a/core/data/base/CbmDigiData.h b/core/data/base/CbmDigiData.h
index 5ba3ffe1d8..835fc28493 100644
--- a/core/data/base/CbmDigiData.h
+++ b/core/data/base/CbmDigiData.h
@@ -6,13 +6,13 @@
 #ifndef CBMDIGIDATA_H
 #define CBMDIGIDATA_H 1
 
+#include "CbmBmonDigiData.h"
 #include "CbmMuchDigiData.h"
 #include "CbmPsdDigiData.h"
 #include "CbmRichDigiData.h"
 #include "CbmStsDigiData.h"
 #include "CbmTofDigiData.h"
 #include "CbmTrdDigiData.h"
-#include "CbmTzdDigiData.h"
 
 #include <boost/serialization/access.hpp>
 #include <boost/serialization/base_object.hpp>
@@ -31,7 +31,7 @@
 class CbmDigiData {
 
 public:
-  CbmTzdDigiData fT0;     ///< Beam monitor data
+  CbmBmonDigiData fT0;    ///< Beam monitor data
   CbmStsDigiData fSts;    ///< STS data
   CbmMuchDigiData fMuch;  ///< MUCH data
   CbmRichDigiData fRich;  ///< RICH data
diff --git a/core/data/global/CbmTzdDigi.cxx b/core/data/bmon/CbmBmonDigi.cxx
similarity index 76%
rename from core/data/global/CbmTzdDigi.cxx
rename to core/data/bmon/CbmBmonDigi.cxx
index 10a0747310..c4355c94c4 100644
--- a/core/data/global/CbmTzdDigi.cxx
+++ b/core/data/bmon/CbmBmonDigi.cxx
@@ -2,18 +2,18 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Pierre-Alain Loizeau, Volker Friese [committer] */
 
-#include "CbmTzdDigi.h"
+#include "CbmBmonDigi.h"
 
 #include "CbmTofDigi.h"
 
-CbmTzdDigi::CbmTzdDigi(const CbmTofDigi& digi)
+CbmBmonDigi::CbmBmonDigi(const CbmTofDigi& digi)
   : fAddress(digi.GetAddress())
   , fTime(digi.GetTime())
   , fCharge(digi.GetCharge())
 {
 }
 
-CbmTzdDigi::CbmTzdDigi(const CbmTofDigi* digi)
+CbmBmonDigi::CbmBmonDigi(const CbmTofDigi* digi)
   : fAddress(digi->GetAddress())
   , fTime(digi->GetTime())
   , fCharge(digi->GetCharge())
diff --git a/core/data/global/CbmTzdDigi.h b/core/data/bmon/CbmBmonDigi.h
similarity index 82%
rename from core/data/global/CbmTzdDigi.h
rename to core/data/bmon/CbmBmonDigi.h
index e1aca61c86..8d65ee2cba 100644
--- a/core/data/global/CbmTzdDigi.h
+++ b/core/data/bmon/CbmBmonDigi.h
@@ -3,8 +3,8 @@
    Authors: Pierre-Alain Loizeau, Volker Friese [committer] */
 
 
-#ifndef CBMTZDDIGI_H
-#define CBMTZDDIGI_H 1
+#ifndef CBMBMONDIGI_H
+#define CBMBMONDIGI_H 1
 
 #include "CbmDefs.h"
 
@@ -21,53 +21,53 @@
 class CbmTofDigi;  // For declaration of the conversion constructor without starting a cyclic dependency
 #endif             // CBMTOFDIGI_H
 
-/** @class CbmTzdDigi
+/** @class CbmBmonDigi
  ** @brief Data class for a signal in the t-zero detector
  **
  ** The current implementation is a placeholder, storing just the event time. To be replaced
  ** with a real detector measurement model once available.
  **/
-class CbmTzdDigi {
+class CbmBmonDigi {
 
 public:
   /** @brief Default Constructor
    **/
-  CbmTzdDigi() = default;
+  CbmBmonDigi() = default;
 
   /** @brief Constructor
    ** @param time Measurement time [ns]
    ** @param charge Measured charge]
    ** @param address [32b CbmAddress]
    **/
-  CbmTzdDigi(int32_t addr, double time, float charge) : fAddress(addr), fTime(time), fCharge(charge) {};
+  CbmBmonDigi(int32_t addr, double time, float charge) : fAddress(addr), fTime(time), fCharge(charge) {};
 
 
   /** @brief Constructor
    ** @param reference to CbmTofDigi (equivalent content)
    **/
-  CbmTzdDigi(const CbmTofDigi& digi);
+  CbmBmonDigi(const CbmTofDigi& digi);
 
 
   /** @brief Constructor
    ** @param pointer to const CbmTofDigi object (equivalent content)
    **/
-  CbmTzdDigi(const CbmTofDigi* digi);
+  CbmBmonDigi(const CbmTofDigi* digi);
 
 
   /** @brief Destructor **/
-  virtual ~CbmTzdDigi() {};
+  virtual ~CbmBmonDigi() {};
 
 
   /** @brief Get the desired name of the branch for this objects in the cbm output tree  (static)
    ** @return "BmonDigi"
    **/
-  static const char* GetBranchName() { return "TzdDigi"; }
+  static const char* GetBranchName() { return "BmonDigi"; }
 
 
   /** @brief Class name (static)
-   ** @return CbmTzdDigi
+   ** @return CbmBmonDigi
    **/
-  static const char* GetClassName() { return "CbmTzdDigi"; }
+  static const char* GetClassName() { return "CbmBmonDigi"; }
 
 
   /** System ID (static)
@@ -114,7 +114,7 @@ public:
 
 private:
   int32_t fAddress = ToIntegralType<ECbmModuleId>(ECbmModuleId::kT0);  ///< Unique CBM address
-  double fTime     = -1.;                                              ///< Time of signal in TZD [ns]
+  double fTime     = -1.;                                              ///< Time of signal in BMON [ns]
   float fCharge    = -1.;                                              ///< Charge
 
   friend class boost::serialization::access;
@@ -128,8 +128,8 @@ private:
   }
 
 #ifndef NO_ROOT
-  ClassDefNV(CbmTzdDigi, 1);
+  ClassDefNV(CbmBmonDigi, 1);
 #endif
 };
 
-#endif /* CBMTZDDIGI_H */
+#endif /* CBMBMONDIGI_H */
diff --git a/core/data/global/CbmTzdDigiData.h b/core/data/bmon/CbmBmonDigiData.h
similarity index 72%
rename from core/data/global/CbmTzdDigiData.h
rename to core/data/bmon/CbmBmonDigiData.h
index 0129f1fcf1..ef9f4ab74d 100644
--- a/core/data/global/CbmTzdDigiData.h
+++ b/core/data/bmon/CbmBmonDigiData.h
@@ -2,11 +2,11 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Pierre-Alain Loizeau [committer] */
 
-#ifndef CBMTZDDIGIDATA_H
-#define CBMTZDDIGIDATA_H 1
+#ifndef CBMBMONDIGIDATA_H
+#define CBMBMONDIGIDATA_H 1
 
 
-#include "CbmTzdDigi.h"
+#include "CbmBmonDigi.h"
 
 #ifndef NO_ROOT
 #include <Rtypes.h>  // for ClassDef
@@ -18,19 +18,19 @@
 
 #include <vector>
 
-/** @class CbmTzdDigiData
- ** @brief Container class for CbmTzdDigi objects
+/** @class CbmBmonDigiData
+ ** @brief Container class for CbmBmonDigi objects
  ** @author Volker Friese <v.friese@gsi.de>
  ** @since 7.12.2022
  ** @version 1.0
  **
- ** Container class for transporting CbmTzdDigi objects.
+ ** Container class for transporting CbmBmonDigi objects.
  ** The current implementation is the simplest one: a std::vector.
  **/
-class CbmTzdDigiData {
+class CbmBmonDigiData {
 
 public:
-  std::vector<CbmTzdDigi> fDigis = {};  ///< Data vector
+  std::vector<CbmBmonDigi> fDigis = {};  ///< Data vector
 
   friend class boost::serialization::access;
 
@@ -46,7 +46,7 @@ public:
 
   // --- ROOT serializer
 #ifndef NO_ROOT
-  ClassDefNV(CbmTzdDigiData, 1);
+  ClassDefNV(CbmBmonDigiData, 1);
 #endif
 };
 
diff --git a/core/data/test/CMakeLists.txt b/core/data/test/CMakeLists.txt
index c82655841c..7ff3661a4c 100644
--- a/core/data/test/CMakeLists.txt
+++ b/core/data/test/CMakeLists.txt
@@ -108,7 +108,7 @@ CreateGTestExeAndAddTest(_GTestCbmErrorMessage "${INCLUDE_DIRECTORIES}" "${LINK_
 
 Set(CbmAddressSources
   _GTestCbmAddress.cxx
-)  
+)
 
 CreateGTestExeAndAddTest(_GTestCbmAddress "${INCLUDE_DIRECTORIES}" "${LINK_DIRECTORIES}"
                          "${CbmAddressSources}" "${PUB_DEPS}" "${PVT_DEPS}" "${INT_DEPS}" "_GTestCbmErrorMessage")
@@ -150,3 +150,10 @@ Set(CbmMuchBeamTimeDigiSources
 CreateGTestExeAndAddTest(_GTestCbmMuchBeamTimeDigi "${INCLUDE_DIRECTORIES}" "${LINK_DIRECTORIES}"
                          "${CbmMuchBeamTimeDigiSources}" "${PUB_DEPS}" "${PVT_DEPS}" "${INT_DEPS}" "_GTestMuchDigi")
 
+Set(CbmBmonDigiSources
+  bmon/_GTestCbmBmonDigi.cxx
+)
+
+CreateGTestExeAndAddTest(_GTestCbmBmonDigi "${INCLUDE_DIRECTORIES}" "${LINK_DIRECTORIES}"
+                         "${CbmBmonDigiSources}" "${PUB_DEPS}" "${PVT_DEPS}" "${INT_DEPS}" "_GTestCbmMuchBeamTimeDigi")
+
diff --git a/core/data/test/bmon/_GTestCbmBmonDigi.cxx b/core/data/test/bmon/_GTestCbmBmonDigi.cxx
new file mode 100644
index 0000000000..0d229a5ad2
--- /dev/null
+++ b/core/data/test/bmon/_GTestCbmBmonDigi.cxx
@@ -0,0 +1,152 @@
+/* Copyright (C) 2023 Facility for Antiproton and Ion Research in Europe, Darmstadt
+   SPDX-License-Identifier: GPL-3.0-only
+   Authors: Pierre-Alain Loizeau [committer] */
+
+#include "CbmBmonDigi.h"
+
+#include "compareBmonDigi.h"
+#include "gtest/gtest-spi.h"
+#include "gtest/gtest.h"
+
+TEST(_GTestCbmBmonDigi, CheckDefaultConstructor)
+{
+  // Create object
+  CbmBmonDigi test;
+
+  compareBmonDigiDataMembers(test, ToIntegralType<ECbmModuleId>(ECbmModuleId::kT0), ECbmModuleId::kT0, -1., -1.);
+
+  CbmBmonDigi* test1 = new CbmBmonDigi();
+
+  compareBmonDigiDataMembers(*test1, ToIntegralType<ECbmModuleId>(ECbmModuleId::kT0), ECbmModuleId::kT0, -1., -1.);
+}
+
+TEST(_GTestCbmBmonDigi, CheckStandardConstructor)
+{
+  // Create object
+  CbmBmonDigi test(111, 987654321., 23.);
+
+  compareBmonDigiDataMembers(test, 111, ECbmModuleId::kT0, 987654321., 23.);
+
+  CbmBmonDigi* test1 = new CbmBmonDigi(111, 987654321., 23.);
+
+  compareBmonDigiDataMembers(*test1, 111, ECbmModuleId::kT0, 987654321., 23.);
+}
+
+TEST(_GTestCbmBmonDigi, CheckCopyConstructor)
+{
+  // Create object
+  CbmBmonDigi test(111, 987654321., 23.);
+
+  compareBmonDigiDataMembers(test, 111, ECbmModuleId::kT0, 987654321., 23.);
+
+  // Create object by copy constructing
+  // test should be equal to test2 and
+  // test should not be changed
+  CbmBmonDigi test2 {test};
+
+  compareBmonDigiDataMembers(test2, 111, ECbmModuleId::kT0, 987654321., 23.);
+
+  // Test if the original object wasn't changed
+  compareBmonDigiDataMembers(test, 111, ECbmModuleId::kT0, 987654321., 23.);
+}
+
+TEST(_GTestCbmBmonDigi, CheckAssignmentOperator)
+{
+
+  // Create object
+  CbmBmonDigi test(111, 987654321., 23.);
+
+  compareBmonDigiDataMembers(test, 111, ECbmModuleId::kT0, 987654321., 23.);
+
+  // Create object by copy assignment
+  // test should be equal to test2 and
+  // test should not be changed
+  CbmBmonDigi test2;
+  test2 = test;
+
+  compareBmonDigiDataMembers(test2, 111, ECbmModuleId::kT0, 987654321., 23.);
+
+  // Test if the original object wasn't changed
+  compareBmonDigiDataMembers(test, 111, ECbmModuleId::kT0, 987654321., 23.);
+}
+
+TEST(_GTestCbmBmonDigi, CheckMoveConstructor)
+{
+  // Create object
+  CbmBmonDigi test(111, 987654321., 23.);
+
+  compareBmonDigiDataMembers(test, 111, ECbmModuleId::kT0, 987654321., 23.);
+
+  // Create object by move constructing
+  CbmBmonDigi test2 {std::move(test)};
+
+  compareBmonDigiDataMembers(test2, 111, ECbmModuleId::kT0, 987654321., 23.);
+
+  // For objects with simple types move fall back to copy so
+  // the original object is kept unchanged
+  compareBmonDigiDataMembers(test, 111, ECbmModuleId::kT0, 987654321., 23.);
+}
+
+TEST(_GTestCbmBmonDigi, CheckAssignmentMoveConstructor)
+{
+  // Create object
+  CbmBmonDigi test(111, 987654321., 23.);
+
+  compareBmonDigiDataMembers(test, 111, ECbmModuleId::kT0, 987654321., 23.);
+
+  // Create object by move constructing
+  CbmBmonDigi test2 {};
+  test2 = std::move(test);
+
+  compareBmonDigiDataMembers(test2, 111, ECbmModuleId::kT0, 987654321., 23.);
+
+  // For objects with simple types move fall back to copy so
+  // the original object is kept unchanged
+  compareBmonDigiDataMembers(test, 111, ECbmModuleId::kT0, 987654321., 23.);
+}
+
+TEST(_GTestCbmBmonDigi, CheckGetClassName)
+{
+  // Create object
+  CbmBmonDigi test(111, 987654321., 23.);
+
+  compareBmonDigiDataMembers(test, 111, ECbmModuleId::kT0, 987654321., 23.);
+
+  EXPECT_STREQ("CbmBmonDigi", test.GetClassName());
+}
+
+TEST(_GTestCbmBmonDigi, CheckSetTime)
+{
+  // Create object
+  CbmBmonDigi test(111, 987654321., 23.);
+
+  compareBmonDigiDataMembers(test, 111, ECbmModuleId::kT0, 987654321., 23.);
+
+  test.SetTime(12345678.);
+
+  compareBmonDigiDataMembers(test, 111, ECbmModuleId::kT0, 12345678., 23.);
+}
+
+TEST(_GTestCbmBmonDigi, CheckSetAddress)
+{
+  // Create object
+  CbmBmonDigi test(111, 987654321., 23.);
+
+  compareBmonDigiDataMembers(test, 111, ECbmModuleId::kT0, 987654321., 23.);
+
+  test.SetAddress(12341234);
+
+  compareBmonDigiDataMembers(test, 12341234, ECbmModuleId::kT0, 987654321., 23.);
+}
+
+TEST(_GTestCbmBmonDigi, CheckSetCharge)
+{
+  // Create object
+  CbmBmonDigi test(111, 987654321., 23.);
+
+  compareBmonDigiDataMembers(test, 111, ECbmModuleId::kT0, 987654321., 23.);
+
+  test.SetCharge(45.);
+
+  compareBmonDigiDataMembers(test, 111, ECbmModuleId::kT0, 987654321., 45.);
+}
diff --git a/core/data/test/bmon/compareBmonDigi.h b/core/data/test/bmon/compareBmonDigi.h
new file mode 100644
index 0000000000..ce6bc3062c
--- /dev/null
+++ b/core/data/test/bmon/compareBmonDigi.h
@@ -0,0 +1,29 @@
+/* Copyright (C) 2023 Facility for Antiproton and Ion Research in Europe, Darmstadt
+   SPDX-License-Identifier: GPL-3.0-only
+   Authors: Pierre-Alain Loizeau [committer] */
+
+#ifndef COMPAREBMONDIGI_H
+#define COMPAREBMONDIGI_H 1
+
+#include "gtest/gtest.h"
+
+void compareBmonDigiDataMembers(CbmBmonDigi& test, int32_t address, ECbmModuleId systemid, double time, double charge)
+{
+  int32_t retValInt {-222};
+  double retValDouble {-222.};
+  ECbmModuleId retVal {ECbmModuleId::kNotExist};
+
+  retValInt = test.GetAddress();
+  EXPECT_EQ(address, retValInt);
+
+  retVal = test.GetSystem();
+  EXPECT_EQ(systemid, retVal);
+
+  retValDouble = test.GetTime();
+  EXPECT_FLOAT_EQ(time, retValDouble);
+
+  retValDouble = test.GetCharge();
+  EXPECT_FLOAT_EQ(charge, retValDouble);
+}
+
+#endif  // COMPARETOFDIGI_H
diff --git a/core/data/tof/CbmTofDigi.cxx b/core/data/tof/CbmTofDigi.cxx
index 28e0875dde..b62245b466 100644
--- a/core/data/tof/CbmTofDigi.cxx
+++ b/core/data/tof/CbmTofDigi.cxx
@@ -10,7 +10,7 @@
  **/
 #include "CbmTofDigi.h"
 
-#include "CbmTzdDigi.h"
+#include "CbmBmonDigi.h"
 
 #include <iomanip>  // for hex, setw, setfill, fixed, setprecission
 #include <sstream>  // for operator<<, basic_ostream, char_trait
@@ -36,14 +36,14 @@ CbmTofDigi::CbmTofDigi(uint32_t Sm, uint32_t Rpc, uint32_t Channel, double time,
   fuAddress = CbmTofAddress::GetUniqueAddress(Sm, Rpc, Channel, Side, SmType);
 }
 
-CbmTofDigi::CbmTofDigi(const CbmTzdDigi& digi)
+CbmTofDigi::CbmTofDigi(const CbmBmonDigi& digi)
   : fdTime(digi.GetTime())
   , fdTot(digi.GetCharge())
   , fuAddress(digi.GetAddress())
 {
 }
 
-CbmTofDigi::CbmTofDigi(const CbmTzdDigi* digi)
+CbmTofDigi::CbmTofDigi(const CbmBmonDigi* digi)
   : fdTime(digi->GetTime())
   , fdTot(digi->GetCharge())
   , fuAddress(digi->GetAddress())
diff --git a/core/data/tof/CbmTofDigi.h b/core/data/tof/CbmTofDigi.h
index 08a43d7fcd..942c6edb18 100644
--- a/core/data/tof/CbmTofDigi.h
+++ b/core/data/tof/CbmTofDigi.h
@@ -40,9 +40,9 @@
 #include <string>  // for string
 
 //class CbmMatch;
-#ifndef CBMTZDDIGI_H
-class CbmTzdDigi;  // For declaration of the conversion constructor without starting a cyclic dependency
-#endif             /* CBMTZDDIGI_H */
+#ifndef CBMBMONDIGI_H
+class CbmBmonDigi;  // For declaration of the conversion constructor without starting a cyclic dependency
+#endif              /* CBMBMONDIGI_H */
 
 class CbmTofDigi {
 public:
@@ -73,14 +73,14 @@ public:
              uint32_t SmType = 0);
 
   /** @brief Constructor
-   ** @param reference to CbmTzdDigi (equivalent content)
+   ** @param reference to CbmBmonDigi (equivalent content)
    **/
-  CbmTofDigi(const CbmTzdDigi& digi);
+  CbmTofDigi(const CbmBmonDigi& digi);
 
   /** @brief Constructor
-   ** @param pointer to const CbmTzdDigi object (equivalent content)
+   ** @param pointer to const CbmBmonDigi object (equivalent content)
    **/
-  CbmTofDigi(const CbmTzdDigi* digi);
+  CbmTofDigi(const CbmBmonDigi* digi);
 
   /**
        ** @brief Copy constructor.
diff --git a/macro/run/run_unpack_online.C b/macro/run/run_unpack_online.C
index f5c1b5196a..f3d9d0a138 100644
--- a/macro/run/run_unpack_online.C
+++ b/macro/run/run_unpack_online.C
@@ -113,6 +113,10 @@ void run_unpack_online(std::vector<std::string> publisher = {"tcp://localhost:55
       }
       /// Enable Monitor plots
       bmonconfig->SetMonitor(GetTofMonitor(outfilename, true));
+      if (2337 <= runid) {
+        bmonconfig->GetMonitor()->SetSpillThreshold(250);
+        bmonconfig->GetMonitor()->SetSpillThresholdNonPulser(100);
+      }
     }
   }
   // -------------
diff --git a/macro/run/run_unpack_tsa.C b/macro/run/run_unpack_tsa.C
index d8c17b608a..295c765cd8 100644
--- a/macro/run/run_unpack_tsa.C
+++ b/macro/run/run_unpack_tsa.C
@@ -113,26 +113,30 @@ void run_unpack_tsa(std::vector<std::string> infile = {"test.tsa"}, UInt_t runid
   // -----   UnpackerConfigs   ----------------------------------------------
 
   // ---- BMON ----
-  std::shared_ptr<CbmTzdUnpackConfig> tzdconfig = nullptr;
+  std::shared_ptr<CbmBmonUnpackConfig> bmonconfig = nullptr;
 
   if (!bBmoninTof) {
-    tzdconfig = std::make_shared<CbmTzdUnpackConfig>("", runid);
-    if (tzdconfig) {
-      // tzdconfig->SetDebugState();
-      tzdconfig->SetDoWriteOutput();
-      // tzdconfig->SetDoWriteOptOutA("CbmTzdErrors");
-      std::string parfilesbasepathTzd = Form("%s/macro/beamtime/mcbm2022/", srcDir.Data());
-      tzdconfig->SetParFilesBasePath(parfilesbasepathTzd);
-      tzdconfig->SetParFileName("mBmonCriPar.par");
-      tzdconfig->SetSystemTimeOffset(-1220);  // [ns] value to be updated
+    bmonconfig = std::make_shared<CbmBmonUnpackConfig>("", runid);
+    if (bmonconfig) {
+      // bmonconfig->SetDebugState();
+      bmonconfig->SetDoWriteOutput();
+      // bmonconfig->SetDoWriteOptOutA("CbmBmonErrors");
+      std::string parfilesbasepathBmon = Form("%s/macro/beamtime/mcbm2022/", srcDir.Data());
+      bmonconfig->SetParFilesBasePath(parfilesbasepathBmon);
+      bmonconfig->SetParFileName("mBmonCriPar.par");
+      bmonconfig->SetSystemTimeOffset(-1220);  // [ns] value to be updated
       if (2160 <= runid) {
-        tzdconfig->SetSystemTimeOffset(-80);  // [ns] value to be updated
+        bmonconfig->SetSystemTimeOffset(-80);  // [ns] value to be updated
       }
       if (2350 <= runid) {
-        tzdconfig->SetSystemTimeOffset(0);  // [ns] value to be updated
+        bmonconfig->SetSystemTimeOffset(0);  // [ns] value to be updated
       }
       /// Enable Monitor plots
-      // tzdconfig->SetMonitor(GetTofMonitor(outfilename, true));
+      // bmonconfig->SetMonitor(GetTofMonitor(outfilename, true));
+      // if (2337 <= runid) {
+      //   bmonconfig->GetMonitor()->SetSpillThreshold(250);
+      //   bmonconfig->GetMonitor()->SetSpillThresholdNonPulser(100);
+      // }
     }
   }
   // -------------
@@ -475,7 +479,7 @@ void run_unpack_tsa(std::vector<std::string> infile = {"test.tsa"}, UInt_t runid
   // Enable full time sorting instead sorting per FLIM link
   unpack->SetTimeSorting(true);
 
-  if (tzdconfig) unpack->SetUnpackConfig(tzdconfig);
+  if (bmonconfig) unpack->SetUnpackConfig(bmonconfig);
   if (stsconfig) unpack->SetUnpackConfig(stsconfig);
   if (muchconfig) unpack->SetUnpackConfig(muchconfig);
   if (trd1Dconfig) unpack->SetUnpackConfig(trd1Dconfig);
@@ -531,7 +535,7 @@ void run_unpack_tsa(std::vector<std::string> infile = {"test.tsa"}, UInt_t runid
   delete run;
   delete source;
 
-  tzdconfig.reset();
+  bmonconfig.reset();
   stsconfig.reset();
   muchconfig.reset();
   trd1Dconfig.reset();
diff --git a/reco/detectors/CMakeLists.txt b/reco/detectors/CMakeLists.txt
index e8daeaa9d4..a45aa1a279 100644
--- a/reco/detectors/CMakeLists.txt
+++ b/reco/detectors/CMakeLists.txt
@@ -1,11 +1,11 @@
 # CMakeList file for directory sim/detectors
 # V. Friese, 20 April 2020
 
+add_subdirectory(bmon)
 add_subdirectory(much)
 add_subdirectory(psd)
 add_subdirectory(rich)
 add_subdirectory(sts)
 add_subdirectory(tof)
 add_subdirectory(trd)
-add_subdirectory(tzd)
 
diff --git a/reco/detectors/tzd/CMakeLists.txt b/reco/detectors/bmon/CMakeLists.txt
similarity index 87%
rename from reco/detectors/tzd/CMakeLists.txt
rename to reco/detectors/bmon/CMakeLists.txt
index edfef61a28..f6c4806a8e 100644
--- a/reco/detectors/tzd/CMakeLists.txt
+++ b/reco/detectors/bmon/CMakeLists.txt
@@ -5,12 +5,12 @@ set(INCLUDE_DIRECTORIES
 
 
 set(SRCS
-  unpack/CbmTzdUnpackAlgo.cxx
-  unpack/CbmTzdUnpackConfig.cxx
+  unpack/CbmBmonUnpackAlgo.cxx
+  unpack/CbmBmonUnpackConfig.cxx
 )
 
 
-set(LIBRARY_NAME CbmTzdReco)
+set(LIBRARY_NAME CbmBmonReco)
 set(LINKDEF ${LIBRARY_NAME}LinkDef.h)
 set(PUBLIC_DEPENDENCIES
   CbmBase
diff --git a/reco/detectors/tzd/CbmTzdRecoLinkDef.h b/reco/detectors/bmon/CbmBmonRecoLinkDef.h
similarity index 76%
rename from reco/detectors/tzd/CbmTzdRecoLinkDef.h
rename to reco/detectors/bmon/CbmBmonRecoLinkDef.h
index 8e3111176b..c0ebc34d10 100644
--- a/reco/detectors/tzd/CbmTzdRecoLinkDef.h
+++ b/reco/detectors/bmon/CbmBmonRecoLinkDef.h
@@ -8,7 +8,7 @@
 #pragma link off all classes;
 #pragma link off all functions;
 
-#pragma link C++ class CbmTzdUnpackAlgo + ;
-#pragma link C++ class CbmTzdUnpackConfig + ;
+#pragma link C++ class CbmBmonUnpackAlgo + ;
+#pragma link C++ class CbmBmonUnpackConfig + ;
 
 #endif
diff --git a/reco/detectors/bmon/unpack/CbmBmonUnpackAlgo.cxx b/reco/detectors/bmon/unpack/CbmBmonUnpackAlgo.cxx
new file mode 100644
index 0000000000..f3074cee21
--- /dev/null
+++ b/reco/detectors/bmon/unpack/CbmBmonUnpackAlgo.cxx
@@ -0,0 +1,11 @@
+/* Copyright (C) 2022 Facility for Antiproton and Ion Research in Europe, Darmstadt
+   SPDX-License-Identifier: GPL-3.0-only
+   Authors: Pierre-Alain Loizeau [committer]  */
+
+#include "CbmBmonUnpackAlgo.h"
+
+CbmBmonUnpackAlgo::CbmBmonUnpackAlgo() : CbmRecoUnpackAlgo("CbmBmonUnpackAlgo") {}
+
+CbmBmonUnpackAlgo::~CbmBmonUnpackAlgo() {}
+
+ClassImp(CbmBmonUnpackAlgo)
diff --git a/reco/detectors/tzd/unpack/CbmTzdUnpackAlgo.h b/reco/detectors/bmon/unpack/CbmBmonUnpackAlgo.h
similarity index 93%
rename from reco/detectors/tzd/unpack/CbmTzdUnpackAlgo.h
rename to reco/detectors/bmon/unpack/CbmBmonUnpackAlgo.h
index 33ee79d010..34652d9be7 100644
--- a/reco/detectors/tzd/unpack/CbmTzdUnpackAlgo.h
+++ b/reco/detectors/bmon/unpack/CbmBmonUnpackAlgo.h
@@ -2,16 +2,16 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Pierre-Alain Loizeau [committer]  */
 
-#ifndef CbmTzdUnpackAlgo_H
-#define CbmTzdUnpackAlgo_H
+#ifndef CbmBmonUnpackAlgo_H
+#define CbmBmonUnpackAlgo_H
 
+#include "CbmBmonDigi.h"
 #include "CbmErrorMessage.h"
 #include "CbmMcbm2018TofPar.h"
 #include "CbmRecoUnpackAlgo.tmpl"
 #include "CbmTofDigi.h"
 #include "CbmTofUnpackAlgo.h"
 #include "CbmTofUnpackMonitor.h"
-#include "CbmTzdDigi.h"
 
 #include "Timeslice.hpp"  // timeslice
 
@@ -25,19 +25,19 @@
 #include <memory>
 #include <utility>
 
-class CbmTzdUnpackAlgo : public CbmRecoUnpackAlgo<CbmTzdDigi, CbmErrorMessage> {
+class CbmBmonUnpackAlgo : public CbmRecoUnpackAlgo<CbmBmonDigi, CbmErrorMessage> {
 public:
   /** @brief Create the Cbm Trd Unpack AlgoBase object */
-  CbmTzdUnpackAlgo();
+  CbmBmonUnpackAlgo();
 
   /** @brief Destroy the Cbm Trd Unpack Task object */
-  virtual ~CbmTzdUnpackAlgo();
+  virtual ~CbmBmonUnpackAlgo();
 
   /** @brief Copy constructor - not implemented **/
-  CbmTzdUnpackAlgo(const CbmTzdUnpackAlgo&) = delete;
+  CbmBmonUnpackAlgo(const CbmBmonUnpackAlgo&) = delete;
 
   /** @brief Assignment operator - not implemented **/
-  CbmTzdUnpackAlgo& operator=(const CbmTzdUnpackAlgo&) = delete;
+  CbmBmonUnpackAlgo& operator=(const CbmBmonUnpackAlgo&) = delete;
 
   /**
    * @brief Initialisation at begin of run. Forwards to TOF unpacker algo instance.
@@ -61,7 +61,7 @@ public:
    *
    * @remark The content of the component can only be accessed via the timeslice. Hence, we need to pass the pointer to the full timeslice
   */
-  std::vector<CbmTzdDigi> Unpack(const fles::Timeslice* ts, std::uint16_t icomp)
+  std::vector<CbmBmonDigi> Unpack(const fles::Timeslice* ts, std::uint16_t icomp)
   {
 
     bool unpackOk = true;
@@ -145,7 +145,7 @@ public:
    *
    * @return size_t
   */
-  static size_t GetOutputObjSize() { return sizeof(CbmTzdDigi); }
+  static size_t GetOutputObjSize() { return sizeof(CbmBmonDigi); }
 
   /** @brief Get the global system time offset
    * Forwards to TOF unpacker algo instance.
@@ -263,7 +263,7 @@ protected:
   {
     fOutputVec.reserve(fTofAlgo.GetOutputVec().size());
     for (CbmTofDigi internalDigi : fTofAlgo.GetOutputVec()) {
-      fOutputVec.push_back(CbmTzdDigi(internalDigi));
+      fOutputVec.push_back(CbmBmonDigi(internalDigi));
     }
     return;
   }
@@ -286,7 +286,7 @@ private:
   /** @brief Actual unpacker algo */
   CbmTofUnpackAlgo fTofAlgo;
 
-  ClassDef(CbmTzdUnpackAlgo, 1)
+  ClassDef(CbmBmonUnpackAlgo, 1)
 };
 
-#endif  // CbmTzdUnpackAlgo_H
+#endif  // CbmBmonUnpackAlgo_H
diff --git a/reco/detectors/tzd/unpack/CbmTzdUnpackConfig.cxx b/reco/detectors/bmon/unpack/CbmBmonUnpackConfig.cxx
similarity index 71%
rename from reco/detectors/tzd/unpack/CbmTzdUnpackConfig.cxx
rename to reco/detectors/bmon/unpack/CbmBmonUnpackConfig.cxx
index aed2425070..8aa8909133 100644
--- a/reco/detectors/tzd/unpack/CbmTzdUnpackConfig.cxx
+++ b/reco/detectors/bmon/unpack/CbmBmonUnpackConfig.cxx
@@ -2,10 +2,10 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Pierre-Alain Loizeau [committer]  */
 
-#include "CbmTzdUnpackConfig.h"
+#include "CbmBmonUnpackConfig.h"
 
+#include "CbmBmonUnpackAlgo.h"
 #include "CbmTofDigi.h"
-#include "CbmTzdUnpackAlgo.h"
 
 #include <Logger.h>
 
@@ -15,16 +15,16 @@
 #include <memory>
 #include <vector>
 
-CbmTzdUnpackConfig::CbmTzdUnpackConfig(std::string detGeoSetupTag, UInt_t runid)
-  : CbmRecoUnpackConfig("CbmTzdUnpackConfig", detGeoSetupTag, runid)
+CbmBmonUnpackConfig::CbmBmonUnpackConfig(std::string detGeoSetupTag, UInt_t runid)
+  : CbmRecoUnpackConfig("CbmBmonUnpackConfig", detGeoSetupTag, runid)
 {
   SetFlagBmonParMode();
 }
 
-CbmTzdUnpackConfig::~CbmTzdUnpackConfig() {}
+CbmBmonUnpackConfig::~CbmBmonUnpackConfig() {}
 
 // ---- Init ----
-void CbmTzdUnpackConfig::InitAlgo()
+void CbmBmonUnpackConfig::InitAlgo()
 {
   fAlgo->SetFlagEpochCountHack2021(fbEpochCountHack2021);
 
@@ -35,13 +35,13 @@ void CbmTzdUnpackConfig::InitAlgo()
 }
 
 // ---- chooseAlgo ----
-std::shared_ptr<CbmTzdUnpackAlgo> CbmTzdUnpackConfig::chooseAlgo()
+std::shared_ptr<CbmBmonUnpackAlgo> CbmBmonUnpackConfig::chooseAlgo()
 {
   if (fDoLog) LOG(info) << fName << "::Init - chooseAlgo";
 
   // Default unpacker selection
   // Unpacker algo from mcbm 2021 on and hopefully default for a long time.
-  auto algo = std::make_shared<CbmTzdUnpackAlgo>();
+  auto algo = std::make_shared<CbmBmonUnpackAlgo>();
   LOG(info) << fName << "::chooseAlgo() - selected algo = " << algo->Class_Name();
   if (fbBmonParMode) {
     LOG(info) << fName << "::chooseAlgo - Setting the new algo in BMon Par mode";
@@ -55,4 +55,4 @@ std::shared_ptr<CbmTzdUnpackAlgo> CbmTzdUnpackConfig::chooseAlgo()
   return nullptr;
 }
 
-ClassImp(CbmTzdUnpackConfig)
+ClassImp(CbmBmonUnpackConfig)
diff --git a/reco/detectors/tzd/unpack/CbmTzdUnpackConfig.h b/reco/detectors/bmon/unpack/CbmBmonUnpackConfig.h
similarity index 82%
rename from reco/detectors/tzd/unpack/CbmTzdUnpackConfig.h
rename to reco/detectors/bmon/unpack/CbmBmonUnpackConfig.h
index 00d99d44e3..94b33659d4 100644
--- a/reco/detectors/tzd/unpack/CbmTzdUnpackConfig.h
+++ b/reco/detectors/bmon/unpack/CbmBmonUnpackConfig.h
@@ -2,14 +2,14 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Pierre-Alain Loizeau [committer]  */
 
-#ifndef CbmTzdUnpackConfig_H
-#define CbmTzdUnpackConfig_H
+#ifndef CbmBmonUnpackConfig_H
+#define CbmBmonUnpackConfig_H
 
+#include "CbmBmonDigi.h"
+#include "CbmBmonUnpackAlgo.h"
 #include "CbmErrorMessage.h"
 #include "CbmRecoUnpackConfig.tmpl"
 #include "CbmTofUnpackMonitor.h"
-#include "CbmTzdDigi.h"
-#include "CbmTzdUnpackAlgo.h"
 
 #include <Rtypes.h>
 #include <RtypesCore.h>
@@ -19,7 +19,7 @@
 #include <memory>
 #include <vector>
 
-class CbmTzdUnpackConfig : public CbmRecoUnpackConfig<CbmTzdUnpackAlgo, CbmTzdDigi, CbmErrorMessage> {
+class CbmBmonUnpackConfig : public CbmRecoUnpackConfig<CbmBmonUnpackAlgo, CbmBmonDigi, CbmErrorMessage> {
 
 public:
   /**
@@ -29,19 +29,19 @@ public:
    * @param runid set if unpacker is rerun on a special run with special parameters
    *@remark We use the string instead of CbmSetup here, to not having to link against sim/steer...
   */
-  CbmTzdUnpackConfig(std::string detGeoSetupTag, UInt_t runid = 0);
+  CbmBmonUnpackConfig(std::string detGeoSetupTag, UInt_t runid = 0);
 
   /**
    * @brief Destroy the Cbm Tof Unpack Task object
    *
   */
-  virtual ~CbmTzdUnpackConfig();
+  virtual ~CbmBmonUnpackConfig();
 
   /** @brief Copy constructor - not implemented **/
-  CbmTzdUnpackConfig(const CbmTzdUnpackConfig&) = delete;
+  CbmBmonUnpackConfig(const CbmBmonUnpackConfig&) = delete;
 
   /** @brief Assignment operator - not implemented **/
-  CbmTzdUnpackConfig& operator=(const CbmTzdUnpackConfig&) = delete;
+  CbmBmonUnpackConfig& operator=(const CbmBmonUnpackConfig&) = delete;
 
   // Getters
 
@@ -87,7 +87,7 @@ protected:
    *
    * @return Bool_t initOk
   */
-  virtual std::shared_ptr<CbmTzdUnpackAlgo> chooseAlgo();
+  virtual std::shared_ptr<CbmBmonUnpackAlgo> chooseAlgo();
 
 private:
   /// Control flags
@@ -99,7 +99,7 @@ private:
   /** @brief pointer to the monitor object */
   std::shared_ptr<CbmTofUnpackMonitor> fMonitor = nullptr;
 
-  ClassDef(CbmTzdUnpackConfig, 1)
+  ClassDef(CbmBmonUnpackConfig, 1)
 };
 
-#endif  // CbmTzdUnpackConfig_H
+#endif  // CbmBmonUnpackConfig_H
diff --git a/reco/detectors/tof/CMakeLists.txt b/reco/detectors/tof/CMakeLists.txt
index 8a8a19dae7..02561f15a6 100644
--- a/reco/detectors/tof/CMakeLists.txt
+++ b/reco/detectors/tof/CMakeLists.txt
@@ -21,7 +21,6 @@ set(SRCS
 
   unpack/CbmTofUnpackAlgo.cxx
   unpack/CbmTofUnpackConfig.cxx
-  unpack/CbmBmonUnpackConfig.cxx
   unpack/CbmTofUnpackMonitor.cxx
 )
 
diff --git a/reco/detectors/tof/CbmTofEventClusterizer.cxx b/reco/detectors/tof/CbmTofEventClusterizer.cxx
index 6dcf94ae2b..9d9398357c 100644
--- a/reco/detectors/tof/CbmTofEventClusterizer.cxx
+++ b/reco/detectors/tof/CbmTofEventClusterizer.cxx
@@ -15,6 +15,7 @@
 #include "CbmTofEventClusterizer.h"
 
 // TOF Classes and includes
+#include "CbmBmonDigi.h"  // in cbmdata/bmon
 #include "CbmDigiManager.h"
 #include "CbmEvent.h"
 #include "CbmMatch.h"
@@ -31,7 +32,6 @@
 #include "CbmTofGeoHandler.h"       // in tof/TofTools
 #include "CbmTofHit.h"              // in cbmdata/tof
 #include "CbmTofPoint.h"            // in cbmdata/tof
-#include "CbmTzdDigi.h"             // in cbmdata/global
 #include "CbmVertex.h"
 
 #include "TTrbHeader.h"
@@ -399,7 +399,7 @@ void CbmTofEventClusterizer::Exec(Option_t* option)
 
       for (Int_t iDigi = 0; iDigi < tEvent->GetNofData(ECbmDataType::kT0Digi); iDigi++) {
         Int_t iDigiIndex       = static_cast<Int_t>(tEvent->GetIndex(ECbmDataType::kT0Digi, iDigi));
-        CbmTofDigi tDigi(fDigiMan->Get<CbmTzdDigi>(iDigiIndex));
+        CbmTofDigi tDigi(fDigiMan->Get<CbmBmonDigi>(iDigiIndex));
         if (tDigi.GetType() != 5)
           LOG(fatal) << "Wrong T0 type " << tDigi.GetType() << ", Addr 0x" << std::hex << tDigi.GetAddress();
         if (tDigi.GetSide() == 1) {  // HACK for May22 setup
diff --git a/reco/detectors/tof/CbmTofHitMaker.cxx b/reco/detectors/tof/CbmTofHitMaker.cxx
index 57c7929388..c25016accf 100644
--- a/reco/detectors/tof/CbmTofHitMaker.cxx
+++ b/reco/detectors/tof/CbmTofHitMaker.cxx
@@ -16,6 +16,7 @@
 #include "CbmTofHitMaker.h"
 
 // TOF Classes and includes
+#include "CbmBmonDigi.h"  // in cbmdata/bmon
 #include "CbmDigiManager.h"
 #include "CbmEvent.h"
 #include "CbmMatch.h"
@@ -31,7 +32,6 @@
 #include "CbmTofGeoHandler.h"       // in tof/TofTools
 #include "CbmTofHit.h"              // in cbmdata/tof
 #include "CbmTofPoint.h"            // in cbmdata/tof
-#include "CbmTzdDigi.h"             // in cbmdata/global
 #include "CbmVertex.h"
 
 #include "TTrbHeader.h"
@@ -337,7 +337,7 @@ void CbmTofHitMaker::Exec(Option_t* option)
 
       for (Int_t iDigi = 0; iDigi < tEvent->GetNofData(ECbmDataType::kT0Digi); iDigi++) {
         Int_t iDigiIndex       = static_cast<Int_t>(tEvent->GetIndex(ECbmDataType::kT0Digi, iDigi));
-        CbmTofDigi tDigi(fDigiMan->Get<CbmTzdDigi>(iDigiIndex));
+        CbmTofDigi tDigi(fDigiMan->Get<CbmBmonDigi>(iDigiIndex));
         if (tDigi.GetType() != 5)
           LOG(fatal) << "Wrong T0 type " << tDigi.GetType() << ", Addr 0x" << std::hex << tDigi.GetAddress();
         fTofDigiVec.push_back(tDigi);
diff --git a/reco/detectors/tof/CbmTofRecoLinkDef.h b/reco/detectors/tof/CbmTofRecoLinkDef.h
index 40db96c5dc..c786ebf2c8 100644
--- a/reco/detectors/tof/CbmTofRecoLinkDef.h
+++ b/reco/detectors/tof/CbmTofRecoLinkDef.h
@@ -23,7 +23,6 @@
 
 #pragma link C++ class CbmTofUnpackAlgo + ;
 #pragma link C++ class CbmTofUnpackConfig + ;
-#pragma link C++ class CbmBmonUnpackConfig + ;
 #pragma link C++ class CbmTofUnpackMonitor + ;
 
 #endif
diff --git a/reco/detectors/tof/unpack/CbmBmonUnpackConfig.cxx b/reco/detectors/tof/unpack/CbmBmonUnpackConfig.cxx
deleted file mode 100644
index d4a0ab13c1..0000000000
--- a/reco/detectors/tof/unpack/CbmBmonUnpackConfig.cxx
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright (C) 2022 Facility for Antiproton and Ion Research in Europe, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Pierre-Alain Loizeau [committer]  */
-
-#include "CbmBmonUnpackConfig.h"
-
-#include "CbmTofUnpackAlgo.h"
-
-#include <Logger.h>
-
-#include <Rtypes.h>
-#include <RtypesCore.h>
-
-#include <memory>
-#include <vector>
-
-CbmBmonUnpackConfig::CbmBmonUnpackConfig(std::string detGeoSetupTag, UInt_t runid)
-  : CbmTofUnpackConfig(detGeoSetupTag, runid)
-{
-  SetFlagBmonParMode();
-}
-
-CbmBmonUnpackConfig::~CbmBmonUnpackConfig() {}
-
-
-/**
- * @brief Register the output vectors (if needed) to the FairRoot Manager)
- * FIXME: To be removed with the Manager include whenever the similar code in the CbmRecoUnpack task work as expected
- *
-*/
-void CbmBmonUnpackConfig::RegisterOutput(FairRootManager* ioman)
-{
-  if (fDoWriteOutput && fOutputVec) {
-    /// Instance of TOF unpacker used for Bmon unpacking
-    ioman->RegisterAny("T0Digi", fOutputVec, kTRUE);
-    LOG(info) << fName << "::registerBranchToTree(CbmBmonDigi)";
-  }
-
-  /** @todo for the optional outputs it is more complicated to check if they exist. Needs exceptions for the std::nullptr_t. Should be added at some point in time. */
-  if (fDoWriteOptOutA && fOptOutAVec) {
-    ioman->RegisterAny(fOptoutABranchName.data(), fOptOutAVec, kTRUE);
-    LOG(info) << fName << "::registerBranchToTree(" << fOptoutABranchName.data() << ")";
-  }
-
-  if (fDoWriteOptOutB && fOptOutBVec) {
-    ioman->RegisterAny(fOptoutBBranchName.data(), fOptOutBVec, kTRUE);
-    LOG(info) << fName << "::registerBranchToTree(" << fOptoutBBranchName.data() << ")";
-  }
-}
-
-ClassImp(CbmBmonUnpackConfig)
diff --git a/reco/detectors/tof/unpack/CbmBmonUnpackConfig.h b/reco/detectors/tof/unpack/CbmBmonUnpackConfig.h
deleted file mode 100644
index 4b779d122a..0000000000
--- a/reco/detectors/tof/unpack/CbmBmonUnpackConfig.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Copyright (C) 2022 Facility for Antiproton and Ion Research in Europe, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Pierre-Alain Loizeau [committer]  */
-
-/**
- * @file CbmBmonUnpackConfig.h
- * @author Pascal Raisig (praisig@ikf.uni-frankfurt.de)
- * @brief Configuration class for an unpacker algorithm
- * @version 0.1
- * @date 2021-04-21
- *
- * @copyright Copyright (c) 2021
- *
- * This is the common configuration class for unpacking algorithms
- *
-*/
-
-#ifndef CbmBmonUnpackConfig_H
-#define CbmBmonUnpackConfig_H
-
-#include "CbmErrorMessage.h"
-#include "CbmTofDigi.h"
-#include "CbmTofUnpackAlgo.h"
-#include "CbmTofUnpackConfig.h"
-
-#include <Rtypes.h>
-#include <RtypesCore.h>
-
-#include <cstddef>
-#include <cstdint>
-#include <memory>
-#include <vector>
-
-class CbmBmonUnpackConfig : public CbmTofUnpackConfig {
-
-public:
-  /**
-   * @brief Create the Cbm Tof Unpack Task object
-   *
-   * @param geoSetupTag Geometry setup tag for the given detector as used by CbmSetup objects
-   * @param runid set if unpacker is rerun on a special run with special parameters
-   *@remark We use the string instead of CbmSetup here, to not having to link against sim/steer...
-  */
-  CbmBmonUnpackConfig(std::string detGeoSetupTag, UInt_t runid = 0);
-
-  /**
-   * @brief Destroy the Cbm Tof Unpack Task object
-   *
-  */
-  virtual ~CbmBmonUnpackConfig();
-
-  /** @brief Copy constructor - not implemented **/
-  CbmBmonUnpackConfig(const CbmBmonUnpackConfig&) = delete;
-
-  /** @brief Assignment operator - not implemented **/
-  CbmBmonUnpackConfig& operator=(const CbmBmonUnpackConfig&) = delete;
-
-  // Getters
-
-  /**
-   * @brief Register the output vectors (if needed) to the FairRoot Manager)
-   * FIXME: To be removed when the T0/BMON will have its own Digi class properly exposing the right container name
-   *
-  */
-  void RegisterOutput(FairRootManager* ioman);
-
-
-  // Setters
-
-protected:
-private:
-  ClassDef(CbmBmonUnpackConfig, 1)
-};
-
-#endif  // CbmBmonUnpackConfig_H
diff --git a/reco/detectors/tof/unpack/CbmTofUnpackAlgo.h b/reco/detectors/tof/unpack/CbmTofUnpackAlgo.h
index f2f1a2d7cb..b4623683fe 100644
--- a/reco/detectors/tof/unpack/CbmTofUnpackAlgo.h
+++ b/reco/detectors/tof/unpack/CbmTofUnpackAlgo.h
@@ -90,14 +90,14 @@ public:
   void SetMonitor(std::shared_ptr<CbmTofUnpackMonitor> monitor) { fMonitor = monitor; }
 
   /**
-   * @brief Get a reference to the output vector. Used by TZD encapsulating algo to access output.
+   * @brief Get a reference to the output vector. Used by BMON encapsulating algo to access output.
    *
    * @return std::vector<CbmTofDigi>&
   */
   std::vector<CbmTofDigi>& GetOutputVec() { return fOutputVec; }
 
 public:
-  /// Raise permissions for access to these protected methods to allow access in encapsulating TZD algo
+  /// Raise permissions for access to these protected methods to allow access in encapsulating BMON algo
 
   /** @brief Finish function for this algorithm base clase */
   void finish()
diff --git a/reco/detectors/tzd/unpack/CbmTzdUnpackAlgo.cxx b/reco/detectors/tzd/unpack/CbmTzdUnpackAlgo.cxx
deleted file mode 100644
index 701c2d322f..0000000000
--- a/reco/detectors/tzd/unpack/CbmTzdUnpackAlgo.cxx
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Copyright (C) 2022 Facility for Antiproton and Ion Research in Europe, Darmstadt
-   SPDX-License-Identifier: GPL-3.0-only
-   Authors: Pierre-Alain Loizeau [committer]  */
-
-#include "CbmTzdUnpackAlgo.h"
-
-CbmTzdUnpackAlgo::CbmTzdUnpackAlgo() : CbmRecoUnpackAlgo("CbmTzdUnpackAlgo") {}
-
-CbmTzdUnpackAlgo::~CbmTzdUnpackAlgo() {}
-
-ClassImp(CbmTzdUnpackAlgo)
diff --git a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx
index 38a5eb38de..4c4270d67f 100644
--- a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx
+++ b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.cxx
@@ -5,6 +5,7 @@
 #include "CbmAlgoBuildRawEvents.h"
 
 /// CBM headers
+#include "CbmBmonDigi.h"
 #include "CbmEvent.h"
 #include "CbmMuchBeamTimeDigi.h"
 #include "CbmMuchDigi.h"
@@ -13,7 +14,6 @@
 #include "CbmStsDigi.h"
 #include "CbmTofDigi.h"
 #include "CbmTrdDigi.h"
-#include "CbmTzdDigi.h"
 
 #include "TimesliceMetaData.h"
 
@@ -131,7 +131,7 @@ void CbmAlgoBuildRawEvents::ProcessTs()
     /// TODO: store start time of current event ?
     //        fCurrentEvent->SetStartTime( fPrevTime ); // Replace Seed time with time of first digi in event?
     fCurrentEvent->SetEndTime(fdPrevEvtEndTime);
-    SetTzdEventTime(fCurrentEvent);
+    SetBmonEventTime(fCurrentEvent);
     fEventVector.push_back(fCurrentEvent);
     fuCurEv++;
 
@@ -246,7 +246,7 @@ void CbmAlgoBuildRawEvents::BuildEvents()
       break;
     }
     case ECbmModuleId::kT0: {
-      LoopOnSeeds<CbmTzdDigi>();
+      LoopOnSeeds<CbmBmonDigi>();
       break;
     }
     case ECbmModuleId::kNotExist: {  //explicit seed times
@@ -348,7 +348,7 @@ void CbmAlgoBuildRawEvents::CheckSeed(Double_t dSeedTime, UInt_t uSeedDigiIdx)
       /// TODO: store start time of current event ?
       //        fCurrentEvent->SetStartTime( fPrevTime ); // Replace Seed time with time of first digi in event?
       fCurrentEvent->SetEndTime(fdPrevEvtEndTime);
-      SetTzdEventTime(fCurrentEvent);
+      SetBmonEventTime(fCurrentEvent);
       fEventVector.push_back(fCurrentEvent);
 
       fuCurEv++;
@@ -463,7 +463,7 @@ const CbmPsdDigi* CbmAlgoBuildRawEvents::GetDigi(UInt_t uDigi)
   return &((*fPsdDigis)[uDigi]);
 }
 template<>
-const CbmTzdDigi* CbmAlgoBuildRawEvents::GetDigi(UInt_t uDigi)
+const CbmBmonDigi* CbmAlgoBuildRawEvents::GetDigi(UInt_t uDigi)
 {
   return &((*fT0Digis)[uDigi]);
 }
@@ -503,7 +503,7 @@ void CbmAlgoBuildRawEvents::SearchMatches(Double_t dSeedTime, RawEventBuilderDet
       break;
     }
     case ECbmModuleId::kT0: {
-      SearchMatches<CbmTzdDigi>(dSeedTime, detMatch);
+      SearchMatches<CbmBmonDigi>(dSeedTime, detMatch);
       break;
     }
     default: {
@@ -611,18 +611,18 @@ Bool_t CbmAlgoBuildRawEvents::HasTrigger(CbmEvent* event)
   return kTRUE;
 }
 
-void CbmAlgoBuildRawEvents::SetTzdEventTime(CbmEvent* event)
+void CbmAlgoBuildRawEvents::SetBmonEventTime(CbmEvent* event)
 {
   const int32_t iNbDigis = event->GetNofData(ECbmDataType::kT0Digi);
 
   if (0 < iNbDigis) {
     uint idx                = event->GetIndex(ECbmDataType::kT0Digi, 0);
-    const CbmTzdDigi* pDigi = GetDigi<CbmTzdDigi>(idx);
+    const CbmBmonDigi* pDigi = GetDigi<CbmBmonDigi>(idx);
     double eventTime        = pDigi->GetTime();
 
     for (int idigi = 1; idigi < iNbDigis; ++idigi) {
       idx   = event->GetIndex(ECbmDataType::kT0Digi, idigi);
-      pDigi = GetDigi<CbmTzdDigi>(idx);
+      pDigi = GetDigi<CbmBmonDigi>(idx);
       if (nullptr == pDigi) continue;
       eventTime = std::min(pDigi->GetTime(), eventTime);
     }
@@ -900,7 +900,7 @@ uint64_t CbmAlgoBuildRawEvents::GetSizeFromDigisNb(ECbmModuleId detId, uint64_t
       return ulNbDigis * sizeof(CbmPsdDigi);
     }
     case ECbmModuleId::kT0: {
-      return ulNbDigis * sizeof(CbmTzdDigi);
+      return ulNbDigis * sizeof(CbmBmonDigi);
     }
     default: {
       LOG(fatal) << "CbmAlgoBuildRawEvents::GetSizeFromDigisNb => "
@@ -1197,7 +1197,7 @@ void CbmAlgoBuildRawEvents::FillHistos()
         uint idx         = evt->GetIndex(fvDets[uDetIdx].dataType, idigi);
         switch (fvDets[uDetIdx].dataType) {
           case ECbmDataType::kT0Digi: {
-            auto pDigi = GetDigi<CbmTzdDigi>(idx);
+            auto pDigi = GetDigi<CbmBmonDigi>(idx);
             if (nullptr == pDigi) continue;
             dTimeDiff = pDigi->GetTime() - evt->GetStartTime();
             break;
@@ -1268,7 +1268,7 @@ void CbmAlgoBuildRawEvents::FillHistos()
           uint idx         = evt->GetIndex(fRefDet.dataType, idigi);
           switch (fRefDet.dataType) {
             case ECbmDataType::kT0Digi: {
-              auto pDigi = GetDigi<CbmTzdDigi>(idx);
+              auto pDigi = GetDigi<CbmBmonDigi>(idx);
               if (nullptr == pDigi) continue;
               dTimeDiff = pDigi->GetTime() - evt->GetStartTime();
               break;
diff --git a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h
index dd342dd04c..1388f5af25 100644
--- a/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h
+++ b/reco/eventbuilder/digis/CbmAlgoBuildRawEvents.h
@@ -31,7 +31,7 @@ class CbmRichDigi;
 class CbmStsDigi;
 class CbmTofDigi;
 class CbmTrdDigi;
-class CbmTzdDigi;
+class CbmBmonDigi;
 class TClonesArray;
 class TH1;
 class TH2;
@@ -194,7 +194,7 @@ public:
   std::vector<std::pair<TCanvas*, std::string>> GetCanvasVector() { return fvpAllCanvasPointers; }
 
   /// Set digi containers
-  void SetDigis(std::vector<CbmTzdDigi>* T0Digis) { fT0Digis = T0Digis; }
+  void SetDigis(std::vector<CbmBmonDigi>* T0Digis) { fT0Digis = T0Digis; }
   void SetDigis(std::vector<CbmStsDigi>* StsDigis) { fStsDigis = StsDigis; }
   void SetDigis(std::vector<CbmMuchDigi>* MuchDigis)
   {
@@ -252,7 +252,7 @@ private:
   void UpdateTimeWinBoundariesExtrema();
   void UpdateWidestTimeWinRange();
 
-  void SetTzdEventTime(CbmEvent* event);
+  void SetBmonEventTime(CbmEvent* event);
 
   TFolder* outFolder;  // oputput folder to store histograms
 
@@ -291,7 +291,7 @@ private:
   /// Data input
   TClonesArray* fTimeSliceMetaDataArray = nullptr;  //!
 
-  const std::vector<CbmTzdDigi>* fT0Digis                    = nullptr;
+  const std::vector<CbmBmonDigi>* fT0Digis                   = nullptr;
   const std::vector<CbmMuchDigi>* fMuchDigis                 = nullptr;
   const std::vector<CbmMuchBeamTimeDigi>* fMuchBeamTimeDigis = nullptr;
   const std::vector<CbmStsDigi>* fStsDigis                   = nullptr;
diff --git a/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.cxx b/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.cxx
index ed3c54917f..065039eacc 100644
--- a/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.cxx
+++ b/reco/eventbuilder/digis/CbmSeedFinderSlidingWindow.cxx
@@ -4,6 +4,7 @@
 
 #include "CbmSeedFinderSlidingWindow.h"
 
+#include "CbmBmonDigi.h"
 #include "CbmMCEventList.h"
 #include "CbmMatch.h"
 #include "CbmMuchBeamTimeDigi.h"
@@ -14,7 +15,6 @@
 #include "CbmStsDigi.h"
 #include "CbmTofDigi.h"
 #include "CbmTrdDigi.h"
-#include "CbmTzdDigi.h"
 
 #include "FairRootManager.h"
 #include <Logger.h>
@@ -127,7 +127,7 @@ void CbmSeedFinderSlidingWindow::FillSeedTimes(const std::vector<inType>* vIn, c
   //            << std::endl;
   //}
 }
-template void CbmSeedFinderSlidingWindow::FillSeedTimes(const std::vector<CbmTzdDigi>*, const std::vector<CbmMatch>*);
+template void CbmSeedFinderSlidingWindow::FillSeedTimes(const std::vector<CbmBmonDigi>*, const std::vector<CbmMatch>*);
 template void CbmSeedFinderSlidingWindow::FillSeedTimes(const std::vector<CbmMuchBeamTimeDigi>*,
                                                         const std::vector<CbmMatch>*);
 template void CbmSeedFinderSlidingWindow::FillSeedTimes(const std::vector<CbmMuchDigi>*, const std::vector<CbmMatch>*);
diff --git a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h
index 1eb520d98b..780d28043f 100644
--- a/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h
+++ b/reco/eventbuilder/digis/CbmTaskBuildRawEvents.h
@@ -7,6 +7,7 @@
 
 /// CBMROOT headers
 #include "CbmAlgoBuildRawEvents.h"
+#include "CbmBmonDigi.h"
 #include "CbmDigiEvent.h"
 #include "CbmMuchBeamTimeDigi.h"
 #include "CbmMuchDigi.h"
@@ -15,7 +16,6 @@
 #include "CbmStsDigi.h"
 #include "CbmTofDigi.h"
 #include "CbmTrdDigi.h"
-#include "CbmTzdDigi.h"
 
 /// FAIRROOT headers
 #include "FairTask.h"
@@ -159,7 +159,7 @@ private:
   std::vector<CbmTofDigi>* fTofDigis                   = nullptr;
   std::vector<CbmRichDigi>* fRichDigis                 = nullptr;
   std::vector<CbmPsdDigi>* fPsdDigis                   = nullptr;
-  std::vector<CbmTzdDigi>* fT0Digis                    = nullptr;
+  std::vector<CbmBmonDigi>* fT0Digis                   = nullptr;
   std::vector<Double_t>* fSeedTimes                    = nullptr;
 
   /** Create digi vector and pass to algo **/
diff --git a/reco/global/CbmRecoTzero.cxx b/reco/global/CbmRecoTzero.cxx
index a3af8389fe..91060ddba6 100644
--- a/reco/global/CbmRecoTzero.cxx
+++ b/reco/global/CbmRecoTzero.cxx
@@ -5,8 +5,8 @@
 
 #include "CbmRecoTzero.h"
 
+#include "CbmBmonDigi.h"
 #include "CbmEvent.h"
-#include "CbmTzdDigi.h"
 
 #include <FairRootManager.h>
 #include <Logger.h>
@@ -48,13 +48,13 @@ InitStatus CbmRecoTzero::Init()
   FairRootManager* ioman = FairRootManager::Instance();
   assert(ioman);
 
-  // --- Get TzdDigi array
-  fTzdDigis = ioman->InitObjectAs<const std::vector<CbmTzdDigi>*>("TzdDigi");
-  if (!fTzdDigis) {
-    LOG(error) << GetName() << ": No TzdDigi array!";
+  // --- Get BmonDigi array
+  fBmonDigis = ioman->InitObjectAs<const std::vector<CbmBmonDigi>*>("BmonDigi");
+  if (!fBmonDigis) {
+    LOG(error) << GetName() << ": No BmonDigi array!";
     return kERROR;
   }
-  LOG(info) << "--- Found branch TzdDigi";
+  LOG(info) << "--- Found branch BmonDigi";
 
   // --- Get CbmEvent array
   fEvents = dynamic_cast<TClonesArray*>(ioman->GetObject("Event"));
@@ -94,25 +94,25 @@ void CbmRecoTzero::Exec(Option_t*)
     double tzero = -999999.;
     switch (nDigis) {
 
-      // If there is no TZD digi, set t0 to -999999 (error code).
+      // If there is no BMON digi, set t0 to -999999 (error code).
       case 0: {
         tzero = -999999.;
-        tsMonitor.fNumEvtsTzd0++;
+        tsMonitor.fNumEvtsBmon0++;
         break;
       }
 
-      // If there is exactly one TZD digi, take the event time from there
+      // If there is exactly one BMON digi, take the event time from there
       case 1: {
         uint32_t digiIndex = event->GetIndex(ECbmDataType::kT0Digi, 0);
-        tzero              = fTzdDigis->at(digiIndex).GetTime();
-        tsMonitor.fNumEvtsTzd1++;
+        tzero              = fBmonDigis->at(digiIndex).GetTime();
+        tsMonitor.fNumEvtsBmon1++;
         break;
       }
 
-      // If there are more than one TZD digis, set t0 to -999999 (error code).
+      // If there are more than one BMON digis, set t0 to -999999 (error code).
       default: {
         tzero = -999999.;
-        tsMonitor.fNumEvtsTzdn++;
+        tsMonitor.fNumEvtsBmonn++;
         break;
       }
     }
@@ -130,9 +130,9 @@ void CbmRecoTzero::Exec(Option_t*)
   logOut << setw(20) << left << GetName() << " [";
   logOut << fixed << setw(8) << setprecision(1) << right << timer.RealTime() * 1000. << " ms] ";
   logOut << "TS " << fMonitor.fNumTs << ", events " << tsMonitor.fNumEvents;
-  logOut << " (1 TZD: " << tsMonitor.fNumEvtsTzd1;
-  logOut << " , 0 TZD: " << tsMonitor.fNumEvtsTzd0;
-  logOut << " , n TZD: " << tsMonitor.fNumEvtsTzdn << ")";
+  logOut << " (1 BMON: " << tsMonitor.fNumEvtsBmon1;
+  logOut << " , 0 BMON: " << tsMonitor.fNumEvtsBmon0;
+  logOut << " , n BMON: " << tsMonitor.fNumEvtsBmonn << ")";
   LOG(info) << logOut.str();
 
   // Run monitor
@@ -146,18 +146,18 @@ void CbmRecoTzero::Finish()
 {
   double tExec     = fMonitor.fExecTime / double(fMonitor.fNumTs);
   double evtsPerTs = double(fMonitor.fNumEvents) / double(fMonitor.fNumTs);
-  double fracTzd1  = 100. * double(fMonitor.fNumEvtsTzd1) / double(fMonitor.fNumEvents);
-  double fracTzd0  = 100. * double(fMonitor.fNumEvtsTzd0) / double(fMonitor.fNumEvents);
-  double fracTzdn  = 100. * double(fMonitor.fNumEvtsTzdn) / double(fMonitor.fNumEvents);
+  double fracBmon1 = 100. * double(fMonitor.fNumEvtsBmon1) / double(fMonitor.fNumEvents);
+  double fracBmon0 = 100. * double(fMonitor.fNumEvtsBmon0) / double(fMonitor.fNumEvents);
+  double fracBmonn = 100. * double(fMonitor.fNumEvtsBmonn) / double(fMonitor.fNumEvents);
   std::cout << std::endl;
   LOG(info) << "=====================================";
   LOG(info) << GetName() << ": Run summary";
   LOG(info) << "Time slices         : " << fMonitor.fNumTs;
   LOG(info) << "Exec time  / TS     : " << fixed << setprecision(2) << tExec << " ms";
   LOG(info) << "Events / TS         : " << fixed << setprecision(2) << evtsPerTs;
-  LOG(info) << "Fraction with 1 TZD : " << fixed << setprecision(2) << fracTzd1 << " %";
-  LOG(info) << "Fraction with 0 TZD : " << fixed << setprecision(2) << fracTzd0 << " %";
-  LOG(info) << "Fraction with n TZD : " << fixed << setprecision(2) << fracTzdn << " %";
+  LOG(info) << "Fraction with 1 BMON : " << fixed << setprecision(2) << fracBmon1 << " %";
+  LOG(info) << "Fraction with 0 BMON : " << fixed << setprecision(2) << fracBmon0 << " %";
+  LOG(info) << "Fraction with n BMON : " << fixed << setprecision(2) << fracBmonn << " %";
   LOG(info) << "=====================================";
 }
 // -------------------------------------------------------------------------
diff --git a/reco/global/CbmRecoTzero.h b/reco/global/CbmRecoTzero.h
index 3a58bca296..7de7569117 100644
--- a/reco/global/CbmRecoTzero.h
+++ b/reco/global/CbmRecoTzero.h
@@ -6,7 +6,7 @@
 #ifndef CBMRECOTZERO_H
 #define CBMRECOTZERO_H 1
 
-#include "CbmTzdDigi.h"
+#include "CbmBmonDigi.h"
 
 #include "FairTask.h"
 
@@ -23,18 +23,18 @@ class TClonesArray;
 struct CbmRecoTzeroMoniData {
   size_t fNumTs       = 0;
   size_t fNumEvents   = 0;
-  size_t fNumEvtsTzd0 = 0;
-  size_t fNumEvtsTzd1 = 0;
-  size_t fNumEvtsTzdn = 0;
+  size_t fNumEvtsBmon0 = 0;
+  size_t fNumEvtsBmon1 = 0;
+  size_t fNumEvtsBmonn = 0;
   double fExecTime    = 0.;
 
   CbmRecoTzeroMoniData& operator+=(const CbmRecoTzeroMoniData& other)
   {
     fNumTs += other.fNumTs;
     fNumEvents += other.fNumEvents;
-    fNumEvtsTzd0 += other.fNumEvtsTzd0;
-    fNumEvtsTzd1 += other.fNumEvtsTzd1;
-    fNumEvtsTzdn += other.fNumEvtsTzdn;
+    fNumEvtsBmon0 += other.fNumEvtsBmon0;
+    fNumEvtsBmon1 += other.fNumEvtsBmon1;
+    fNumEvtsBmonn += other.fNumEvtsBmonn;
     fExecTime += other.fExecTime;
     return *this;
   }
@@ -77,8 +77,8 @@ public:
 
 private:
   // --- Data
-  const std::vector<CbmTzdDigi>* fTzdDigis = nullptr;  ///< TZD digis
-  TClonesArray* fEvents                    = nullptr;  ///< CbmEvent
+  const std::vector<CbmBmonDigi>* fBmonDigis = nullptr;  ///< BMON digis
+  TClonesArray* fEvents                      = nullptr;  ///< CbmEvent
 
   // --- Monitor
   CbmRecoTzeroMoniData fMonitor = {};  ///< Monitor data
diff --git a/reco/steer/CMakeLists.txt b/reco/steer/CMakeLists.txt
index 17308d68ba..5e7f056bb6 100644
--- a/reco/steer/CMakeLists.txt
+++ b/reco/steer/CMakeLists.txt
@@ -29,7 +29,7 @@ set(PRIVATE_DEPENDENCIES
   CbmRichReco
   CbmRecoSts
   CbmTrdReco
-  CbmTzdReco
+  CbmBmonReco
   )
 
 set(INTERFACE_DEPENDENCIES
diff --git a/reco/steer/CbmRecoUnpack.cxx b/reco/steer/CbmRecoUnpack.cxx
index b62a7e6daa..deee4f22fb 100644
--- a/reco/steer/CbmRecoUnpack.cxx
+++ b/reco/steer/CbmRecoUnpack.cxx
@@ -50,7 +50,7 @@ void CbmRecoUnpack::Finish()
   if (fTofConfig) fTofConfig->GetUnpacker()->Finish();
   if (fTrd1DConfig) fTrd1DConfig->GetUnpacker()->Finish();
   if (fTrd2DConfig) fTrd2DConfig->GetUnpacker()->Finish();
-  if (fTzdConfig) fTzdConfig->GetUnpacker()->Finish();
+  if (fBmonConfig) fBmonConfig->GetUnpacker()->Finish();
 
   // Create some default performance profiling histograms and write them to a file
   if (fDoPerfProf) performanceProfiling();
@@ -156,14 +156,14 @@ Bool_t CbmRecoUnpack::Init()
   // for fasp created CbmTrdDigis PR 072021
 
   // --- Bmon
-  if (fTzdConfig) {
-    fTzdConfig->InitOutput();
-    RegisterOutputs(ioman, fTzdConfig);  /// Framework bound work = kept in this Task
-    fTzdConfig->SetAlgo();
-    fTzdConfig->LoadParFileName();  /// Needed to change the Parameter file name before it is used!!!
-    initParContainers(fTzdConfig->GetParContainerRequest());  /// Framework bound work = kept in this Task
-    fTzdConfig->InitAlgo();
-    initPerformanceMaps(fkFlesTzd, "Tzd");
+  if (fBmonConfig) {
+    fBmonConfig->InitOutput();
+    RegisterOutputs(ioman, fBmonConfig);  /// Framework bound work = kept in this Task
+    fBmonConfig->SetAlgo();
+    fBmonConfig->LoadParFileName();  /// Needed to change the Parameter file name before it is used!!!
+    initParContainers(fBmonConfig->GetParContainerRequest());  /// Framework bound work = kept in this Task
+    fBmonConfig->InitAlgo();
+    initPerformanceMaps(fkFlesBmon, "Bmon");
   }
 
   if (fDoPerfProfPerTs) {
@@ -384,8 +384,8 @@ void CbmRecoUnpack::Reset()
   if (fTrd1DConfig) fTrd1DConfig->Reset();
   // ---- Trd2D ----
   if (fTrd2DConfig) fTrd2DConfig->Reset();
-  // ---- Tzd ----
-  if (fTzdConfig) fTzdConfig->Reset();
+  // ---- Bmon ----
+  if (fBmonConfig) fBmonConfig->Reset();
 }
 
 // ----------------------------------------------------------------------------
@@ -465,10 +465,10 @@ void CbmRecoUnpack::Unpack(unique_ptr<Timeslice> ts)
         }
         break;
       }
-      case fkFlesTzd: {
-        if (fTzdConfig) {
-          fCbmTsEventHeader->AddNDigisBmon(unpack(systemId, &timeslice, component, fTzdConfig,
-                                                  fTzdConfig->GetOptOutAVec(), fTzdConfig->GetOptOutBVec()));
+      case fkFlesBmon: {
+        if (fBmonConfig) {
+          fCbmTsEventHeader->AddNDigisBmon(unpack(systemId, &timeslice, component, fBmonConfig,
+                                                  fBmonConfig->GetOptOutAVec(), fBmonConfig->GetOptOutBVec()));
         }
         break;
       }
@@ -488,7 +488,7 @@ void CbmRecoUnpack::Unpack(unique_ptr<Timeslice> ts)
     if (fTofConfig && fTofConfig->GetOutputVec()) { timesort(fTofConfig->GetOutputVec()); }
     if (fTrd1DConfig && fTrd1DConfig->GetOutputVec()) { timesort(fTrd1DConfig->GetOutputVec()); }
     if (fTrd2DConfig && fTrd2DConfig->GetOutputVec()) { timesort(fTrd2DConfig->GetOutputVec()); }
-    if (fTzdConfig && fTzdConfig->GetOutputVec()) { timesort(fTzdConfig->GetOutputVec()); }
+    if (fBmonConfig && fBmonConfig->GetOutputVec()) { timesort(fBmonConfig->GetOutputVec()); }
 
     /// Time sort the output vectors of all unpackers present
     if (fMuchConfig && fMuchConfig->GetOptOutAVec()) { timesort(fMuchConfig->GetOptOutAVec()); }
@@ -498,7 +498,7 @@ void CbmRecoUnpack::Unpack(unique_ptr<Timeslice> ts)
     if (fTofConfig && fTofConfig->GetOptOutAVec()) { timesort(fTofConfig->GetOptOutAVec()); }
     if (fTrd1DConfig && fTrd1DConfig->GetOptOutAVec()) { timesort(fTrd1DConfig->GetOptOutAVec()); }
     if (fTrd2DConfig && fTrd2DConfig->GetOptOutAVec()) { timesort(fTrd2DConfig->GetOptOutAVec()); }
-    if (fTzdConfig && fTzdConfig->GetOptOutAVec()) { timesort(fTzdConfig->GetOptOutAVec()); }
+    if (fBmonConfig && fBmonConfig->GetOptOutAVec()) { timesort(fBmonConfig->GetOptOutAVec()); }
   }
 
   if (fDoPerfProfPerTs) {
diff --git a/reco/steer/CbmRecoUnpack.h b/reco/steer/CbmRecoUnpack.h
index 1bf6850586..36880bde06 100644
--- a/reco/steer/CbmRecoUnpack.h
+++ b/reco/steer/CbmRecoUnpack.h
@@ -12,6 +12,7 @@
 #ifndef CBMRECOUNPACK_H
 #define CBMRECOUNPACK_H 1
 
+#include "CbmBmonUnpackConfig.h"
 #include "CbmMuchUnpackConfig.h"
 #include "CbmPsdUnpackConfig.h"
 #include "CbmRichUnpackConfig.h"
@@ -20,7 +21,6 @@
 #include "CbmTrdUnpackConfig.h"
 #include "CbmTrdUnpackFaspConfig.h"
 #include "CbmTsEventHeader.h"
-#include "CbmTzdUnpackConfig.h"
 
 #include <MicrosliceDescriptor.hpp>
 #include <Timeslice.hpp>
@@ -150,7 +150,7 @@ public:
   void SetUnpackConfig(std::shared_ptr<CbmTrdUnpackFaspConfig> config) { fTrd2DConfig = config; }
 
   /** @brief Set the Bmon Unpack Config @param config */
-  void SetUnpackConfig(std::shared_ptr<CbmTzdUnpackConfig> config) { fTzdConfig = config; }
+  void SetUnpackConfig(std::shared_ptr<CbmBmonUnpackConfig> config) { fBmonConfig = config; }
 
   /** @brief Trigger the unpacking procedure **/
   void Unpack(std::unique_ptr<fles::Timeslice> ts);
@@ -164,7 +164,7 @@ private:
   static constexpr std::uint16_t fkFlesTrd   = static_cast<std::uint16_t>(fles::SubsystemIdentifier::TRD);
   static constexpr std::uint16_t fkFlesTrd2D = static_cast<std::uint16_t>(fles::SubsystemIdentifier::TRD2D);
   static constexpr std::uint16_t fkFlesTof   = static_cast<std::uint16_t>(fles::SubsystemIdentifier::RPC);
-  static constexpr std::uint16_t fkFlesTzd   = static_cast<std::uint16_t>(fles::SubsystemIdentifier::T0);
+  static constexpr std::uint16_t fkFlesBmon  = static_cast<std::uint16_t>(fles::SubsystemIdentifier::T0);
 
   /** @brief Flag if extended debug output is to be printed or not*/
   bool fDoDebugPrints = false;  //!
@@ -428,8 +428,8 @@ private:
   /** @brief Configuration of the Trd unpacker. Provides the configured algorithm */
   std::shared_ptr<CbmTrdUnpackFaspConfig> fTrd2DConfig = nullptr;  //!
 
-  /** @brief Configuration of the Tzd unpacker. Provides the configured algorithm */
-  std::shared_ptr<CbmTzdUnpackConfig> fTzdConfig = nullptr;  //!
+  /** @brief Configuration of the Bmon unpacker. Provides the configured algorithm */
+  std::shared_ptr<CbmBmonUnpackConfig> fBmonConfig = nullptr;  //!
 
   /** @brief Pointer to the Timeslice start time used to write it to the output tree @remark since we hand this to the FairRootManager it also wants to delete it and we do not have to take care of deletion */
   CbmTsEventHeader* fCbmTsEventHeader = nullptr;
diff --git a/reco/tasks/CbmTaskBuildEvents.cxx b/reco/tasks/CbmTaskBuildEvents.cxx
index e752197e02..d31841c63d 100644
--- a/reco/tasks/CbmTaskBuildEvents.cxx
+++ b/reco/tasks/CbmTaskBuildEvents.cxx
@@ -83,8 +83,8 @@ CbmDigiTimeslice CbmTaskBuildEvents::FillTimeSlice()
         break;
       }
       case ECbmModuleId::kT0: {  //T0 has Tof digis
-        const vector<CbmTzdDigi>* digiVec =
-          boost::any_cast<const vector<CbmTzdDigi>*>(digiBranch->GetBranchContainer());
+        const vector<CbmBmonDigi>* digiVec =
+          boost::any_cast<const vector<CbmBmonDigi>*>(digiBranch->GetBranchContainer());
         assert(digiVec);
         ts.fData.fT0.fDigis = *digiVec;
         break;
diff --git a/reco/tasks/CbmTaskMakeRecoEvents.cxx b/reco/tasks/CbmTaskMakeRecoEvents.cxx
index dbfe50e11b..d379dd28da 100644
--- a/reco/tasks/CbmTaskMakeRecoEvents.cxx
+++ b/reco/tasks/CbmTaskMakeRecoEvents.cxx
@@ -64,7 +64,7 @@ void CbmTaskMakeRecoEvents::Exec(Option_t*)
     CbmEvent* recoEvent = new ((*fRecoEvents)[eventNr]) CbmEvent(eventNr);
 
     // --- Copy T0 digis
-    FillTree<CbmTzdDigi>(digiEvent.fData.fT0.fDigis, fT0Digis, recoEvent, ECbmDataType::kT0Digi);
+    FillTree<CbmBmonDigi>(digiEvent.fData.fT0.fDigis, fT0Digis, recoEvent, ECbmDataType::kT0Digi);
 
     // --- Copy STS digis
     FillTree<CbmStsDigi>(digiEvent.fData.fSts.fDigis, fStsDigis, recoEvent, ECbmDataType::kStsDigi);
@@ -150,8 +150,8 @@ InitStatus CbmTaskMakeRecoEvents::Init()
     }
 
     // --- T0 digis
-    fT0Digis = new std::vector<CbmTzdDigi>;
-    frm->RegisterAny("TzdDigi", fT0Digis, kFALSE);
+    fT0Digis = new std::vector<CbmBmonDigi>;
+    frm->RegisterAny("BmonDigi", fT0Digis, kFALSE);
 
     // --- STS digis
     fStsDigis = new std::vector<CbmStsDigi>;
diff --git a/reco/tasks/CbmTaskMakeRecoEvents.h b/reco/tasks/CbmTaskMakeRecoEvents.h
index 9c020891f9..db5617534f 100644
--- a/reco/tasks/CbmTaskMakeRecoEvents.h
+++ b/reco/tasks/CbmTaskMakeRecoEvents.h
@@ -92,7 +92,7 @@ private:  // methods
 private:  // members
   const std::vector<CbmDigiEvent>* fDigiEvents = nullptr;
   TClonesArray* fRecoEvents                    = nullptr;
-  std::vector<CbmTzdDigi>* fT0Digis            = nullptr;
+  std::vector<CbmBmonDigi>* fT0Digis           = nullptr;
   std::vector<CbmStsDigi>* fStsDigis           = nullptr;
   std::vector<CbmRichDigi>* fRichDigis         = nullptr;
   std::vector<CbmMuchDigi>* fMuchDigis         = nullptr;
diff --git a/sim/detectors/CMakeLists.txt b/sim/detectors/CMakeLists.txt
index 567a04c82f..f9d1edb8ba 100644
--- a/sim/detectors/CMakeLists.txt
+++ b/sim/detectors/CMakeLists.txt
@@ -1,11 +1,11 @@
 # CMakeList file for directory analysis/detectors
 # V. Friese, 22 April 2020
 
+add_subdirectory(bmon)
 add_subdirectory(much)
 add_subdirectory(psd)
 add_subdirectory(rich)
 add_subdirectory(sts)
 add_subdirectory(tof)
 add_subdirectory(trd)
-add_subdirectory(tzd)
 
diff --git a/sim/detectors/tzd/CMakeLists.txt b/sim/detectors/bmon/CMakeLists.txt
similarity index 82%
rename from sim/detectors/tzd/CMakeLists.txt
rename to sim/detectors/bmon/CMakeLists.txt
index 6edb78fbb9..bc78a25623 100644
--- a/sim/detectors/tzd/CMakeLists.txt
+++ b/sim/detectors/bmon/CMakeLists.txt
@@ -4,11 +4,11 @@ set(INCLUDE_DIRECTORIES
 
 
 set(SRCS
-  CbmTzdDigitize.cxx
+  CbmBmonDigitize.cxx
   )
 
 
-set(LIBRARY_NAME CbmTzdSim)
+set(LIBRARY_NAME CbmBmonSim)
 set(LINKDEF ${LIBRARY_NAME}LinkDef.h)
 set(PUBLIC_DEPENDENCIES
   CbmBase
diff --git a/sim/detectors/tzd/CbmTzdDigitize.cxx b/sim/detectors/bmon/CbmBmonDigitize.cxx
similarity index 81%
rename from sim/detectors/tzd/CbmTzdDigitize.cxx
rename to sim/detectors/bmon/CbmBmonDigitize.cxx
index d9130dac0c..052fbade4c 100644
--- a/sim/detectors/tzd/CbmTzdDigitize.cxx
+++ b/sim/detectors/bmon/CbmBmonDigitize.cxx
@@ -2,12 +2,12 @@
    SPDX-License-Identifier: GPL-3.0-only
    Authors: Volker Friese [committer] */
 
-/** @file CbmTzdDigitize.cxx
+/** @file CbmBmonDigitize.cxx
  ** @author Volker Friese <v.friese@gsi.de>
  ** @date 07.11.2022
  **/
 
-#include "CbmTzdDigitize.h"
+#include "CbmBmonDigitize.h"
 
 #include "CbmMatch.h"
 
@@ -25,17 +25,17 @@ using std::setw;
 
 
 // -----   Standard constructor   ------------------------------------------
-CbmTzdDigitize::CbmTzdDigitize(double sigma) : CbmDigitize<CbmTzdDigi>("TzdDigitize"), fResolution(sigma) {}
+CbmBmonDigitize::CbmBmonDigitize(double sigma) : CbmDigitize<CbmBmonDigi>("BmonDigitize"), fResolution(sigma) {}
 // -------------------------------------------------------------------------
 
 
 // -----   Destructor   ----------------------------------------------------
-CbmTzdDigitize::~CbmTzdDigitize() {}
+CbmBmonDigitize::~CbmBmonDigitize() {}
 // -------------------------------------------------------------------------
 
 
 // -----   Task execution   ------------------------------------------------
-void CbmTzdDigitize::Exec(Option_t*)
+void CbmBmonDigitize::Exec(Option_t*)
 {
 
   // --- Start timer and reset counters
@@ -46,9 +46,9 @@ void CbmTzdDigitize::Exec(Option_t*)
   GetEventInfo();
 
   // --- Create digi and send it to DAQ
-  double digiTime  = fCurrentEventTime + gRandom->Gaus(0., fResolution);
-  double charge    = 1.;  // Placeholder
-  CbmTzdDigi* digi = new CbmTzdDigi(ToIntegralType<ECbmModuleId>(ECbmModuleId::kT0), digiTime, charge);
+  double digiTime   = fCurrentEventTime + gRandom->Gaus(0., fResolution);
+  double charge     = 1.;  // Placeholder
+  CbmBmonDigi* digi = new CbmBmonDigi(ToIntegralType<ECbmModuleId>(ECbmModuleId::kT0), digiTime, charge);
   if (fCreateMatches) {
     CbmMatch* digiMatch = new CbmMatch();
     digiMatch->AddLink(1., -1, fCurrentMCEntry, fCurrentInput);
@@ -70,7 +70,7 @@ void CbmTzdDigitize::Exec(Option_t*)
 
 
 // -----   Finish run    ---------------------------------------------------
-void CbmTzdDigitize::Finish()
+void CbmBmonDigitize::Finish()
 {
   std::cout << std::endl;
   LOG(info) << "=====================================";
@@ -83,7 +83,7 @@ void CbmTzdDigitize::Finish()
 
 
 // -----   Initialisation    -----------------------------------------------
-InitStatus CbmTzdDigitize::Init()
+InitStatus CbmBmonDigitize::Init()
 {
   std::cout << std::endl;
   LOG(info) << "==========================================================";
@@ -99,8 +99,8 @@ InitStatus CbmTzdDigitize::Init()
 
 
 // -----   Private method ReInit   -----------------------------------------
-InitStatus CbmTzdDigitize::ReInit() { return kSUCCESS; }
+InitStatus CbmBmonDigitize::ReInit() { return kSUCCESS; }
 // -------------------------------------------------------------------------
 
 
-ClassImp(CbmTzdDigitize)
+ClassImp(CbmBmonDigitize)
diff --git a/sim/detectors/tzd/CbmTzdDigitize.h b/sim/detectors/bmon/CbmBmonDigitize.h
similarity index 78%
rename from sim/detectors/tzd/CbmTzdDigitize.h
rename to sim/detectors/bmon/CbmBmonDigitize.h
index b4ec862cbc..778134030b 100644
--- a/sim/detectors/tzd/CbmTzdDigitize.h
+++ b/sim/detectors/bmon/CbmBmonDigitize.h
@@ -7,34 +7,34 @@
  ** @date 07.11.2022
  **/
 
-#ifndef CBMTZDDIGITIZE_H
-#define CBMTZDDIGITIZE_H 1
+#ifndef CBMBMONDIGITIZE_H
+#define CBMBMONDIGITIZE_H 1
 
+#include "CbmBmonDigi.h"
 #include "CbmDefs.h"
 #include "CbmDigitize.h"
-#include "CbmTzdDigi.h"
 
 #include <Rtypes.h>
 
 
-/** @class CbmTzdDigitize
+/** @class CbmBmonDigitize
  ** @brief Task class for simulating the detector response of the t-zero detector
  ** @author Volker Friese <v.friese@gsi.de>
  ** @since 07.11.2022
  ** @version 1.0
  **
- ** The current implementation of the TZD simulation is a placeholder until a realistic
+ ** The current implementation of the BMON simulation is a placeholder until a realistic
  ** detector response model is available. It smears the MC event time with a Gaussian resolution.
  **/
-class CbmTzdDigitize : public CbmDigitize<CbmTzdDigi> {
+class CbmBmonDigitize : public CbmDigitize<CbmBmonDigi> {
 
 public:
   /** Constructor **/
-  CbmTzdDigitize(double resolution = 0.025);
+  CbmBmonDigitize(double resolution = 0.025);
 
 
   /** Destructor **/
-  virtual ~CbmTzdDigitize();
+  virtual ~CbmBmonDigitize();
 
 
   /** @brief Detector system ID
@@ -72,7 +72,7 @@ private:
   virtual InitStatus Init();
 
 
-  ClassDef(CbmTzdDigitize, 1);
+  ClassDef(CbmBmonDigitize, 1);
 };
 
 #endif
diff --git a/sim/detectors/tzd/CbmTzdSimLinkDef.h b/sim/detectors/bmon/CbmBmonSimLinkDef.h
similarity index 75%
rename from sim/detectors/tzd/CbmTzdSimLinkDef.h
rename to sim/detectors/bmon/CbmBmonSimLinkDef.h
index f013780b35..1241fc96ca 100644
--- a/sim/detectors/tzd/CbmTzdSimLinkDef.h
+++ b/sim/detectors/bmon/CbmBmonSimLinkDef.h
@@ -8,7 +8,7 @@
 #pragma link off all classes;
 #pragma link off all functions;
 
-#pragma link C++ class CbmDigitize < CbmTzdDigi> + ;
-#pragma link C++ class CbmTzdDigitize + ;
+#pragma link C++ class CbmDigitize < CbmBmonDigi> + ;
+#pragma link C++ class CbmBmonDigitize + ;
 
 #endif /* __CINT__ */
diff --git a/sim/response/CMakeLists.txt b/sim/response/CMakeLists.txt
index 1be37594c6..9b2b9f2482 100644
--- a/sim/response/CMakeLists.txt
+++ b/sim/response/CMakeLists.txt
@@ -29,7 +29,7 @@ set(PRIVATE_DEPENDENCIES
   CbmStsSim
   CbmTofSim
   CbmTrdSim
-  CbmTzdSim
+  CbmBmonSim
   FairRoot::Tools
   FairRoot::ParBase
   )
diff --git a/sim/response/base/CbmDigitization.cxx b/sim/response/base/CbmDigitization.cxx
index 30ab4cb3d3..5c64e630a9 100644
--- a/sim/response/base/CbmDigitization.cxx
+++ b/sim/response/base/CbmDigitization.cxx
@@ -9,6 +9,7 @@
 
 #include "CbmDigitization.h"
 
+#include "CbmBmonDigitize.h"
 #include "CbmDigitizationSource.h"
 #include "CbmMuchDigitizeGem.h"
 #include "CbmMvdDigitizer.h"
@@ -19,7 +20,6 @@
 #include "CbmStsDigitize.h"
 #include "CbmTofDigitize.h"
 #include "CbmTrdDigitizer.h"
-#include "CbmTzdDigitize.h"
 
 #include "FairFileSource.h"
 #include "FairMCEventHeader.h"
@@ -204,8 +204,8 @@ Int_t CbmDigitization::CreateDefaultDigitizers()
         nDigis++;
         break;
       case ECbmModuleId::kT0:
-        fDigitizers[system]->SetDigitizer(new CbmTzdDigitize());
-        ss << "TZD ";
+        fDigitizers[system]->SetDigitizer(new CbmBmonDigitize());
+        ss << "BMON ";
         nDigis++;
         break;
       default: LOG(fatal) << fName << ": Unknown system " << system; break;
-- 
GitLab