diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b6965b0101e0a62b6adf94c82ad7d7609f45ace6..621842481637366c5ef834afa8914da43d13731a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -184,6 +184,40 @@ CbmRoot_Merge_macosx:
     - cat Dart.cfg
     - $PWD/Dart.sh MergeRequest Dart.cfg
 
+CbmRoot_Merge_realData:
+  stage: build
+  tags:
+    - CbmRoot_realData
+  only:
+    refs:
+      - merge_requests
+    variables:
+      - $CI_MERGE_REQUEST_PROJECT_PATH == "computing/cbmroot" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"
+  script:
+    - echo $CI_MERGE_REQUEST_SOURCE_PROJECT_PATH
+    - echo $CI_MERGE_REQUEST_PROJECT_PATH
+    - if [ "$CI_MERGE_REQUEST_PROJECT_PATH" != "computing/cbmroot" ]; then
+    -   echo "Should not come here"
+    -   exit 1
+    - fi
+    - echo $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
+    - echo $CI_MERGE_REQUEST_ID
+    - echo $CI_MERGE_REQUEST_IID
+    - echo "export LINUX_FLAVOUR=Debian10" >> Dart.cfg
+    - echo "export FAIRSOFT_VERSION=jun19p2" >> Dart.cfg
+    - echo "export FAIRROOT_VERSION=v18.2.1" >> Dart.cfg
+    - echo "export SIMPATH=/opt/cbmsoft/fairsoft_\${FAIRSOFT_VERSION}_root6/installation" >> Dart.cfg
+    - echo "export FAIRROOTPATH=/opt/cbmsoft/fairroot_\${FAIRROOT_VERSION}-fairsoft_\${FAIRSOFT_VERSION}_root6" >> Dart.cfg
+    - echo "export RAW_DATA_PATH=/opt/cbmsoft/beamtime-test-data/mcbm2020/" >> Dart.cfg
+    - echo "export BUILDDIR=$PWD/build" >> Dart.cfg
+    - echo "export SOURCEDIR=$PWD" >> Dart.cfg
+    - echo "export NCPU=16" >> Dart.cfg
+    - echo "export PATH=\$SIMPATH/bin:$PATH" >> Dart.cfg
+    - ls
+    - pwd
+    - cat Dart.cfg
+    - $PWD/Dart.sh MergeRequest Dart.cfg
+
 pages:
   stage: documentation
   image: alpine
diff --git a/macro/beamtime/CMakeLists.txt b/macro/beamtime/CMakeLists.txt
index 1b1766c8cf9b4db8654ca40bf96dbcc92e3fb793..d31987f2cbe904cac70c84d9263b977f776890ea 100644
--- a/macro/beamtime/CMakeLists.txt
+++ b/macro/beamtime/CMakeLists.txt
@@ -1,3 +1,6 @@
+
+##### Old beamtime tests
+##### TODO: check if still running and cleanup if needed
 # Put the .rootrc file into the directory from which root is executed.
 # Otherwise the rootalias file is not loaded
 File(COPY ${CBMROOT_SOURCE_DIR}/macro/include/.rootrc DESTINATION ${CBMROOT_BINARY_DIR}/macro/beamtime/tests)
@@ -20,264 +23,14 @@ If(EXISTS ${CBMROOT_SOURCE_DIR}/input/hodoTop_source_1000ts_20160422.tsa)
   SET_TESTS_PROPERTIES(StsLabSetup PROPERTIES TIMEOUT "60")
   SET_TESTS_PROPERTIES(StsLabSetup PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
 EndIf()
+#####################
 
 ##### mCBM 2019 tests
-
-## Generate scripts
-GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/convert_tsa_mcbm.C ) # CbmMcbm2018RawConverterXXX
-GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/unpack_tsa_mcbm.C )  # Unpackers
-# CbmCheckDigisNbCorr.h => missing script?
-GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/check_timing.C )     # CbmCheckTiming.h
-GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/check_much_digis.C ) # CbmMcbm2019CheckDigisMuch.h
-GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/check_sts_digis.C )  # CbmMcbm2019CheckDigisSts.h
-GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/check_pulser.C )     # CbmMcbm2019CheckPulser.h
-GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/build_events.C )     # CbmMcbm2018EventBuilder.h
-GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/check_events.C )     # CbmCheckEvents.h
-GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/MonitorT0.C )        # CbmMcbm2018MonitorTaskT0 + CbmMcbm2018MonitorAlgoT
-GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/MonitorSts.C )       # CbmMcbm2018MonitorSts.h
-GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/MonitorMuch.C )      # CbmMcbm2018MonitorMuchLite.h
-GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/MonitorTof.C )       # CbmMcbm2018MonitorTaskTof + CbmMcbm2018MonitorAlgoTof
-GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/MonitorRich.C )      # CbmMcbm2018UnpackerTaskRich.h in monitor mode
-GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/MonitorPsd.C )       # CbmMcbm2018MonitorTaskPsd + CbmMcbm2018MonitorAlgoPsd
-
-## Define tests + dependencies
-Set(testname mcbm_convert_2019)
-Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/convert_tsa_mcbm.sh \"${CBMROOT_SOURCE_DIR}/input/mcbm_run399_first20Ts.tsa\" )
-Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "60")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-
-Set(testname mcbm_unpack_2019)
-Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/unpack_tsa_mcbm.sh \"${CBMROOT_SOURCE_DIR}/input/mcbm_run399_first20Ts.tsa\" 399 )
-Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "60")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-Set(fixture_unpacked fixture_done_${testname})
-set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP ${fixture_unpacked})
-set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_convert_2019)
-
-Set(testname mcbm_check_timing_2019)
-Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/check_timing.sh \"data/unp_mcbm_399.root\" 399 )
-Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of T0 digis: 18")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Sts digis: 1061912")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Much digis: 319732")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Tof digis: 246711")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Rich digis: 5359")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Psd digis: 0")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked})
-
-Set(testname mcbm_check_stsdigis_2019)
-Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/check_sts_digis.sh 399 1 200.0 )
-Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked})
-set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_timing_2019)
-
-Set(testname mcbm_check_muchdigis_2019)
-Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/check_much_digis.sh 399 1 200.0 )
-Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked})
-set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_stsdigis_2019)
-
-Set(testname mcbm_check_pulser_2019)
-Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/check_pulser.sh 399 )
-Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked})
-set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_muchdigis_2019)
-
-Set(testname mcbm_build_event_2019)
-Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/build_events.sh \"data/unp_mcbm_399.root\" 399 )
-Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked})
-set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_pulser_2019)
-Set(fixture_built_evt fixture_done_${testname})
-set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP ${fixture_built_evt})
-
-Set(testname mcbm_check_event_2019)
-Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/check_events.sh 99999 399 )
-Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_built_evt})
-set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_build_event_2019)
-
-Set(testname mcbm_monit0_2019)
-Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/MonitorT0.sh \"${CBMROOT_SOURCE_DIR}/input/mcbm_run399_first20Ts.tsa\" )
-Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_event_2019)
-
-Set(testname mcbm_monists_2019)
-Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/MonitorSts.sh \"${CBMROOT_SOURCE_DIR}/input/mcbm_run399_first20Ts.tsa\" )
-Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monit0_2019)
-
-Set(testname mcbm_monimuch_2019)
-Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/MonitorMuch.sh \"${CBMROOT_SOURCE_DIR}/input/mcbm_run399_first20Ts.tsa\" )
-Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monists_2019)
-
-Set(testname mcbm_monitof_2019)
-Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/MonitorTof.sh \"${CBMROOT_SOURCE_DIR}/input/mcbm_run399_first20Ts.tsa\" )
-Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monimuch_2019)
-
-Set(testname mcbm_monirich_2019)
-Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/MonitorRich.sh \"${CBMROOT_SOURCE_DIR}/input/mcbm_run399_first20Ts.tsa\" )
-Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monitof_2019)
-
-Set(testname mcbm_monipsd_2019)
-Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/MonitorPsd.sh \"${CBMROOT_SOURCE_DIR}/input/mcbm_run399_first20Ts.tsa\" )
-Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
-Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monirich_2019)
-
+add_subdirectory(mcbm2019)
 #####################
 
 ##### mCBM 2020 tests: only if test TSA files for "typical runs" present
-If(DEFINED ENV{RAW_DATA_PATH} )
-  SET( RAW_DATA_PATH $ENV{RAW_DATA_PATH} )
-
-  Message( STATUS "Raw data path provided => Performing mCBM 2020 tests using tsa files in ${RAW_DATA_PATH}" )
-
-  ## Generate scripts
-  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/unpack_tsa_mcbm.C )  # Unpackers
-  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/check_timing.C )     # CbmCheckTiming.h
-  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/check_pulser.C )     # CbmMcbm2019CheckPulser.h
-  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/build_events.C )     # CbmMcbm2018EventBuilder.h
-  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/check_events.C )     # CbmCheckEvents.h
-  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/build_event_win.C )  # CbmMcbm2019TimeWinEventBuilderTask.h + CbmMcbm2019TimeWinEventBuilderAlgo.h
-  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/mcbm_reco.C )        # Cluster Finding + Hit reconstruction, time based (no events)
-  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorT0.C )        # CbmMcbm2018MonitorTaskT0 + CbmMcbm2018MonitorAlgoT0
-  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorSts.C )       # CbmMcbm2018MonitorSts.h
-  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorMuch.C )      # CbmMcbm2018MonitorMuchLite.h
-  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorTrd.C )       # CbmMcbm2018UnpackerTaskTrd.h in monitor mode
-  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorTof.C )       # CbmMcbm2018MonitorTaskTof + CbmMcbm2018MonitorAlgoTof
-  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorRich.C )      # CbmMcbm2018UnpackerTaskRich.h in monitor mode
-  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorPsd.C )       # CbmMcbm2018MonitorTaskPsd + CbmMcbm2018MonitorAlgoPsd
-
-  ## Run only if raw data files present
-  ForEach(RUN 759 760 761 762 811 812 819 824 831 856 )
-    Message( STATUS "Checking if raw data file exists: ${RAW_DATA_PATH}/${RUN}_first20Ts.tsa" )
-    If(EXISTS ${RAW_DATA_PATH}/${RUN}_first20Ts.tsa)
-      Message( STATUS "Raw data file found, tests will be performed for mCBM run ${RUN}" )
-
-      ## Define tests + dependencies
-      ### Raw data analysis tests
-      Set(testname mcbm_unpack_2020_${RUN})
-      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/unpack_tsa_mcbm.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" ${RUN} )
-      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
-      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-      Set(fixture_unpacked_${RUN} fixture_done_${testname})
-      set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP ${fixture_unpacked_${RUN}})
-
-      Set(testname mcbm_check_timing_2020_${RUN})
-      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/check_timing.sh \"data/unp_mcbm_${RUN}.root\" ${RUN} )
-      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
-  #    Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of T0 digis: 18")
-  #    Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Sts digis: 1061912")
-  #    Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Much digis: 319732")
-  #    Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Tof digis: 246711")
-  #    Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Rich digis: 5359")
-  #    Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Psd digis: 0")
-      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-      set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked_${RUN}})
-      #### Make this test run alone to try to avoid memory errors on test machines
-      set_tests_properties(${testname} PROPERTIES RUN_SERIAL true )
-
-      Set(testname mcbm_check_pulser_2020_${RUN})
-      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/check_pulser.sh ${RUN} )
-      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300")
-      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-      set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked_${RUN}})
-      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_timing_2020_${RUN})
-
-      Set(testname mcbm_build_event_2020_${RUN})
-      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/build_events.sh \"data/unp_mcbm_${RUN}.root\" ${RUN} )
-      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
-      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-      set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked_${RUN}})
-      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_pulser_2020_${RUN})
-      Set(fixture_built_evt_${RUN} fixture_done_${testname})
-      set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP ${fixture_built_evt_${RUN}})
-
-      Set(testname mcbm_check_event_2020_${RUN})
-      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/check_events.sh 99999 ${RUN} )
-      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
-      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-      set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_built_evt_${RUN}})
-      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_build_event_2020_${RUN})
-
-      Set(testname mcbm_build_event_win_2020_${RUN})
-      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/build_event_win.sh ${RUN} )
-      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
-      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-      set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked_${RUN}})
-      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_event_2020_${RUN})
-      Set(fixture_built_evt_win_${RUN} fixture_done_${testname})
-      set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP ${fixture_built_evt_win_${RUN}})
-
-      Set(testname mcbm_reco_2020_${RUN})
-      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/mcbm_reco.sh ${RUN} )
-      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
-      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-      set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked_${RUN}})
-      set_tests_properties(${testname} PROPERTIES DEPENDS fixture_built_evt_win_${RUN})
-      Set(fixture_mcbm_reco_${RUN} fixture_done_${testname})
-      set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP ${fixture_mcbm_reco_${RUN}})
-
-      ### Monitors tests
-      Set(testname mcbm_monit0_2020_${RUN})
-      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorT0.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" )
-      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300")
-      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-      set_tests_properties(${testname} PROPERTIES DEPENDS fixture_mcbm_reco_${RUN})
-
-      Set(testname mcbm_monists_2020_${RUN})
-      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorSts.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" \"\" ${RUN} )
-      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300")
-      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monit0_2020_${RUN})
-
-      Set(testname mcbm_monimuch_2020_${RUN})
-      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorMuch.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" \"\" ${RUN} )
-      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300")
-      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monists_2020_${RUN})
-
-      Set(testname mcbm_monitrd_2020_${RUN})
-      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorTrd.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" )
-      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300")
-      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monimuch_2020_${RUN})
-
-      Set(testname mcbm_monitof_2020_${RUN})
-      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorTof.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" )
-      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300")
-      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monitrd_2020_${RUN})
-
-      Set(testname mcbm_monirich_2020_${RUN})
-      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorRich.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" )
-      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300")
-      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monitof_2020_${RUN})
-
-      Set(testname mcbm_monipsd_2020_${RUN})
-      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorPsd.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" )
-      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300")
-      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
-      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monirich_2020_${RUN})
-    EndIf() # If(EXISTS ${RAW_DATA_PATH}/${RUN}_first20Ts.tsa))
-  EndForEach() # ForEach(RUN 759 760 761 762 811 812 819 824 856 )
-EndIf() # If(DEFINED ENV{RAW_DATA_PATH} )
+add_subdirectory(mcbm2020)
 #####################
 
 ### Copy beamtime folder to allow execution of tasks on batch farm after installation
diff --git a/macro/beamtime/mcbm2019/CMakeLists.txt b/macro/beamtime/mcbm2019/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..493b893f29a76ecb25d780ae6f07a231f04b2b94
--- /dev/null
+++ b/macro/beamtime/mcbm2019/CMakeLists.txt
@@ -0,0 +1,131 @@
+
+### Cleanup of old root files
+add_test(run_cleanup_mcbm2019
+	${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/scripts/cleanmacrodir.cmake)
+set_tests_properties(run_cleanup_mcbm2019 PROPERTIES
+	TIMEOUT 30
+	FIXTURES_SETUP cleanup_mcbm2019
+)
+#####################
+
+##### mCBM 2019 tests
+
+## Generate scripts
+GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/convert_tsa_mcbm.C ) # CbmMcbm2018RawConverterXXX
+GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/unpack_tsa_mcbm.C )  # Unpackers
+# CbmCheckDigisNbCorr.h => missing script?
+GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/check_timing.C )     # CbmCheckTiming.h
+GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/check_much_digis.C ) # CbmMcbm2019CheckDigisMuch.h
+GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/check_sts_digis.C )  # CbmMcbm2019CheckDigisSts.h
+GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/check_pulser.C )     # CbmMcbm2019CheckPulser.h
+GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/build_events.C )     # CbmMcbm2018EventBuilder.h
+GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/check_events.C )     # CbmCheckEvents.h
+GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/MonitorT0.C )        # CbmMcbm2018MonitorTaskT0 + CbmMcbm2018MonitorAlgoT
+GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/MonitorSts.C )       # CbmMcbm2018MonitorSts.h
+GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/MonitorMuch.C )      # CbmMcbm2018MonitorMuchLite.h
+GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/MonitorTof.C )       # CbmMcbm2018MonitorTaskTof + CbmMcbm2018MonitorAlgoTof
+GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/MonitorRich.C )      # CbmMcbm2018UnpackerTaskRich.h in monitor mode
+GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2019/MonitorPsd.C )       # CbmMcbm2018MonitorTaskPsd + CbmMcbm2018MonitorAlgoPsd
+
+## Define tests + dependencies
+Set(testname mcbm_convert_2019)
+Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/convert_tsa_mcbm.sh \"${CBMROOT_SOURCE_DIR}/input/mcbm_run399_first20Ts.tsa\" )
+Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "60")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+Set_tests_properties(${testname} PROPERTIES DEPENDS run_cleanup_mcbm2019)
+Set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED run_cleanup_mcbm2019)
+
+Set(testname mcbm_unpack_2019)
+Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/unpack_tsa_mcbm.sh \"${CBMROOT_SOURCE_DIR}/input/mcbm_run399_first20Ts.tsa\" 399 )
+Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "60")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+Set(fixture_unpacked fixture_done_${testname})
+set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP ${fixture_unpacked})
+set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_convert_2019)
+
+Set(testname mcbm_check_timing_2019)
+Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/check_timing.sh \"data/unp_mcbm_399.root\" 399 )
+Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of T0 digis: 18")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Sts digis: 1061912")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Much digis: 319732")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Tof digis: 246711")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Rich digis: 5359")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Psd digis: 0")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked})
+
+Set(testname mcbm_check_stsdigis_2019)
+Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/check_sts_digis.sh 399 1 200.0 )
+Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked})
+set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_timing_2019)
+
+Set(testname mcbm_check_muchdigis_2019)
+Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/check_much_digis.sh 399 1 200.0 )
+Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked})
+set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_stsdigis_2019)
+
+Set(testname mcbm_check_pulser_2019)
+Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/check_pulser.sh 399 )
+Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked})
+set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_muchdigis_2019)
+
+Set(testname mcbm_build_event_2019)
+Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/build_events.sh \"data/unp_mcbm_399.root\" 399 )
+Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked})
+set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_pulser_2019)
+Set(fixture_built_evt fixture_done_${testname})
+set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP ${fixture_built_evt})
+
+Set(testname mcbm_check_event_2019)
+Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/check_events.sh 99999 399 )
+Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_built_evt})
+set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_build_event_2019)
+
+Set(testname mcbm_monit0_2019)
+Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/MonitorT0.sh \"${CBMROOT_SOURCE_DIR}/input/mcbm_run399_first20Ts.tsa\" )
+Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_event_2019)
+
+Set(testname mcbm_monists_2019)
+Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/MonitorSts.sh \"${CBMROOT_SOURCE_DIR}/input/mcbm_run399_first20Ts.tsa\" )
+Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monit0_2019)
+
+Set(testname mcbm_monimuch_2019)
+Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/MonitorMuch.sh \"${CBMROOT_SOURCE_DIR}/input/mcbm_run399_first20Ts.tsa\" )
+Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monists_2019)
+
+Set(testname mcbm_monitof_2019)
+Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/MonitorTof.sh \"${CBMROOT_SOURCE_DIR}/input/mcbm_run399_first20Ts.tsa\" )
+Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monimuch_2019)
+
+Set(testname mcbm_monirich_2019)
+Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/MonitorRich.sh \"${CBMROOT_SOURCE_DIR}/input/mcbm_run399_first20Ts.tsa\" )
+Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monitof_2019)
+
+Set(testname mcbm_monipsd_2019)
+Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2019/MonitorPsd.sh \"${CBMROOT_SOURCE_DIR}/input/mcbm_run399_first20Ts.tsa\" )
+Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monirich_2019)
+
+#####################
diff --git a/macro/beamtime/mcbm2020/CMakeLists.txt b/macro/beamtime/mcbm2020/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..122cf6cc37033aec6b409b6f2a314696c26ee175
--- /dev/null
+++ b/macro/beamtime/mcbm2020/CMakeLists.txt
@@ -0,0 +1,170 @@
+
+### Cleanup of old root files
+add_test(run_cleanup_mcbm2020
+	${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/scripts/cleanmacrodir.cmake)
+set_tests_properties(run_cleanup_mcbm2020 PROPERTIES
+	TIMEOUT 30
+	FIXTURES_SETUP cleanup_mcbm2020
+)
+#####################
+
+##### mCBM 2020 tests: only if test TSA files for "typical runs" present
+If(DEFINED ENV{RAW_DATA_PATH} )
+  SET( RAW_DATA_PATH $ENV{RAW_DATA_PATH} )
+
+  Message( STATUS "Raw data path provided => Performing mCBM 2020 tests using tsa files in ${RAW_DATA_PATH}" )
+
+  ## Generate scripts
+  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/unpack_tsa_mcbm.C )  # Unpackers
+  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/check_timing.C )     # CbmCheckTiming.h
+  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/check_pulser.C )     # CbmMcbm2019CheckPulser.h
+  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/build_events.C )     # CbmMcbm2018EventBuilder.h
+  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/check_events.C )     # CbmCheckEvents.h
+  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/build_event_win.C )  # CbmMcbm2019TimeWinEventBuilderTask.h + CbmMcbm2019TimeWinEventBuilderAlgo.h
+  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/mcbm_reco.C )        # Cluster Finding + Hit reconstruction, time based (no events)
+  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/mcbm_build_and_reco.C ) # TW event building + Cluster Finding + Hit reconstruction, Event based
+  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/mcbm_event_reco.C )  # Digi dt event building + Cluster Finding + Hit reconstruction, Event based
+  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorT0.C )        # CbmMcbm2018MonitorTaskT0 + CbmMcbm2018MonitorAlgoT0
+  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorSts.C )       # CbmMcbm2018MonitorSts.h
+  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorMuch.C )      # CbmMcbm2018MonitorMuchLite.h
+  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorTrd.C )       # CbmMcbm2018UnpackerTaskTrd.h in monitor mode
+  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorTof.C )       # CbmMcbm2018MonitorTaskTof + CbmMcbm2018MonitorAlgoTof
+  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorRich.C )      # CbmMcbm2018UnpackerTaskRich.h in monitor mode
+  GENERATE_ROOT_TEST_SCRIPT(${CBMROOT_SOURCE_DIR}/macro/beamtime/mcbm2020/MonitorPsd.C )       # CbmMcbm2018MonitorTaskPsd + CbmMcbm2018MonitorAlgoPsd
+
+  ## Run only if raw data files present
+  ForEach(RUN 759 760 761 762 811 812 819 824 831 856 )
+    Message( STATUS "Checking if raw data file exists: ${RAW_DATA_PATH}/${RUN}_first20Ts.tsa" )
+    If(EXISTS ${RAW_DATA_PATH}/${RUN}_first20Ts.tsa)
+      Message( STATUS "Raw data file found, tests will be performed for mCBM run ${RUN}" )
+
+      ## Define tests + dependencies
+      ### Raw data analysis tests
+      Set(testname mcbm_unpack_2020_${RUN})
+      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/unpack_tsa_mcbm.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" ${RUN} )
+      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+      set_tests_properties(${testname} PROPERTIES DEPENDS run_cleanup_mcbm2020)
+      set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED run_cleanup_mcbm2020)
+      Set(fixture_unpacked_${RUN} fixture_done_${testname})
+      set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP ${fixture_unpacked_${RUN}})
+
+      Set(testname mcbm_check_timing_2020_${RUN})
+      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/check_timing.sh \"data/unp_mcbm_${RUN}.root\" ${RUN} )
+      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+  #    Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of T0 digis: 18")
+  #    Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Sts digis: 1061912")
+  #    Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Much digis: 319732")
+  #    Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Tof digis: 246711")
+  #    Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Rich digis: 5359")
+  #    Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Total number of Psd digis: 0")
+      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+      set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked_${RUN}})
+      #### Make this test run alone to try to avoid memory errors on test machines
+      set_tests_properties(${testname} PROPERTIES RUN_SERIAL true )
+
+      Set(testname mcbm_check_pulser_2020_${RUN})
+      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/check_pulser.sh ${RUN} )
+      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300")
+      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+      set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked_${RUN}})
+      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_timing_2020_${RUN})
+
+      Set(testname mcbm_build_event_2020_${RUN})
+      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/build_events.sh \"data/unp_mcbm_${RUN}.root\" ${RUN} )
+      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+      set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked_${RUN}})
+      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_pulser_2020_${RUN})
+      Set(fixture_built_evt_${RUN} fixture_done_${testname})
+      set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP ${fixture_built_evt_${RUN}})
+
+      Set(testname mcbm_check_event_2020_${RUN})
+      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/check_events.sh 99999 ${RUN} )
+      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+      set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_built_evt_${RUN}})
+      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_build_event_2020_${RUN})
+
+      Set(testname mcbm_build_event_win_2020_${RUN})
+      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/build_event_win.sh ${RUN} )
+      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+      set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked_${RUN}})
+      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_check_event_2020_${RUN})
+      Set(fixture_built_evt_win_${RUN} fixture_done_${testname})
+      set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP ${fixture_built_evt_win_${RUN}})
+
+      Set(testname mcbm_reco_2020_${RUN})
+      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/mcbm_reco.sh ${RUN} )
+      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+      set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked_${RUN}})
+      set_tests_properties(${testname} PROPERTIES DEPENDS fixture_built_evt_win_${RUN})
+      Set(fixture_mcbm_reco_${RUN} fixture_done_${testname})
+      set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP ${fixture_mcbm_reco_${RUN}})
+
+      Set(testname mcbm_build_reco_2020_${RUN})
+      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/mcbm_build_and_reco.sh ${RUN} )
+      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+      set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked_${RUN}})
+      set_tests_properties(${testname} PROPERTIES DEPENDS fixture_mcbm_reco_${RUN})
+      Set(fixture_mcbm_build_reco_${RUN} fixture_done_${testname})
+      set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP ${fixture_mcbm_build_reco_${RUN}})
+
+      Set(testname mcbm_event_reco_2020_${RUN})
+      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/mcbm_event_reco.sh ${RUN} )
+      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "600")
+      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+      set_tests_properties(${testname} PROPERTIES FIXTURES_REQUIRED ${fixture_unpacked_${RUN}})
+      set_tests_properties(${testname} PROPERTIES DEPENDS fixture_mcbm_build_reco_${RUN})
+      Set(fixture_mcbm_event_reco_${RUN} fixture_done_${testname})
+      set_tests_properties(${testname} PROPERTIES FIXTURES_SETUP ${fixture_mcbm_event_reco_${RUN}})
+
+      ### Monitors tests => Should run 1 by 1 after unpacker test to avoid concurrent access to tsa file
+      Set(testname mcbm_monit0_2020_${RUN})
+      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorT0.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" )
+      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300")
+      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_unpack_2020_${RUN})
+
+      Set(testname mcbm_monists_2020_${RUN})
+      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorSts.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" \"\" ${RUN} )
+      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300")
+      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monit0_2020_${RUN})
+
+      Set(testname mcbm_monimuch_2020_${RUN})
+      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorMuch.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" \"\" ${RUN} )
+      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300")
+      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monists_2020_${RUN})
+
+      Set(testname mcbm_monitrd_2020_${RUN})
+      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorTrd.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" )
+      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300")
+      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monimuch_2020_${RUN})
+
+      Set(testname mcbm_monitof_2020_${RUN})
+      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorTof.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" )
+      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300")
+      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monitrd_2020_${RUN})
+
+      Set(testname mcbm_monirich_2020_${RUN})
+      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorRich.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" )
+      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300")
+      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monitof_2020_${RUN})
+
+      Set(testname mcbm_monipsd_2020_${RUN})
+      Add_Test(${testname} ${CBMROOT_BINARY_DIR}/macro/beamtime/mcbm2020/MonitorPsd.sh \"${RAW_DATA_PATH}/${RUN}_first20Ts.tsa\" )
+      Set_Tests_Properties(${testname} PROPERTIES TIMEOUT "300")
+      Set_Tests_Properties(${testname} PROPERTIES PASS_REGULAR_EXPRESSION "Test Passed;All ok")
+      set_tests_properties(${testname} PROPERTIES DEPENDS mcbm_monirich_2020_${RUN})
+    EndIf() # If(EXISTS ${RAW_DATA_PATH}/${RUN}_first20Ts.tsa))
+  EndForEach() # ForEach(RUN 759 760 761 762 811 812 819 824 856 )
+EndIf() # If(DEFINED ENV{RAW_DATA_PATH} )
+#####################
diff --git a/macro/beamtime/mcbm2020/mcbm_build_and_reco.C b/macro/beamtime/mcbm2020/mcbm_build_and_reco.C
new file mode 100644
index 0000000000000000000000000000000000000000..f9850fa97dfc17016fb8db5f91d69e019ef61520
--- /dev/null
+++ b/macro/beamtime/mcbm2020/mcbm_build_and_reco.C
@@ -0,0 +1,299 @@
+// --------------------------------------------------------------------------
+//
+// Macro for reconstruction of mcbm data (2020)
+// Combined event based reconstruction (Event building + cluster + hit finder)
+// for different subsystems.
+//
+// --------------------------------------------------------------------------
+
+
+void mcbm_build_and_reco(UInt_t uRunId     = 28,
+                         Int_t nTimeslices = 300,
+                         TString outDir    = "data/") {
+  // ========================================================================
+  //          Adjust this part according to your requirements
+
+  // --- Logger settings ----------------------------------------------------
+  TString logLevel     = "INFO";
+  TString logVerbosity = "LOW";
+  // ------------------------------------------------------------------------
+
+
+  // -----   Environment   --------------------------------------------------
+  TString myName   = "mcbm_reco";  // this macro's name for screen output
+  TString srcDir   = gSystem->Getenv("VMCWORKDIR");  // top source directory
+  TString paramDir = srcDir + "/macro/beamtime/mcbm2020/";
+  //    ------------------------------------------------------------------------
+
+
+  // -----   In- and output file names   ------------------------------------
+  TString inFile    = Form("./data/unp_mcbm_%i.root", uRunId);
+  TString parFileIn = Form("./data/unp_mcbm_params_%i.root", uRunId);
+  TString geoFile = paramDir + "mcbm2020_reco.geo.root";  // Created in sim. run
+  TString parFileOut = Form("./data/reco_mcbm_evt_win_params_%u.root", uRunId);
+  TString outFile    = Form("./data/reco_mcbm_evt_win_%u.root", uRunId);
+  // ------------------------------------------------------------------------
+
+
+  // -----   Timer   --------------------------------------------------------
+  TStopwatch timer;
+  timer.Start();
+  // ------------------------------------------------------------------------
+
+
+  // -----   FairRunAna   ---------------------------------------------------
+  FairRunAna* run = new FairRunAna();
+  run->SetEventHeaderPersistence(kFALSE);
+
+  FairFileSource* inputSource = new FairFileSource(inFile);
+  run->SetSource(inputSource);
+
+  FairRootFileSink* outputSink = new FairRootFileSink(outFile);
+  run->SetSink(outputSink);
+  run->SetGeomFile(geoFile);
+
+  // Define output file for FairMonitor histograms
+  TString monitorFile {outFile};
+  monitorFile.ReplaceAll("rec", "rec.monitor");
+  FairMonitor::GetMonitor()->EnableMonitor(kTRUE, monitorFile);
+  // ------------------------------------------------------------------------
+
+
+  // -----   Logger settings   ----------------------------------------------
+  FairLogger::GetLogger()->SetLogScreenLevel(logLevel.Data());
+  FairLogger::GetLogger()->SetLogVerbosityLevel(logVerbosity.Data());
+  // ------------------------------------------------------------------------
+
+  //-------- Event builder --------------------------------------------------
+  //  CbmMcbm2019TimeWinEventBuilder* eventBuilder = new CbmMcbm2019TimeWinEventBuilder();
+  CbmMcbm2019TimeWinEventBuilderTask* eventBuilder =
+    new CbmMcbm2019TimeWinEventBuilderTask();
+
+  eventBuilder->SetFillHistos(kTRUE);
+
+  eventBuilder->SetEventOverlapMode(EOverlapMode::NoOverlap);
+  //  eventBuilder->SetEventOverlapMode(EOverlapMode::MergeOverlap);
+  //  eventBuilder->SetEventOverlapMode(EOverlapMode::AllowOverlap);
+
+  /*
+ * Available Pre-defined detectors:
+ * kEventBuilderDetSts
+ * kEventBuilderDetMuch
+ * kEventBuilderDetTrd
+ * kEventBuilderDetTof
+ * kEventBuilderDetRich
+ * kEventBuilderDetPsd
+ * kEventBuilderDetT0
+ */
+
+  /// Change the selection window limits for T0 as ref
+  eventBuilder->SetTriggerWindow(ECbmModuleId::kSts, -50, 100);
+  eventBuilder->SetTriggerWindow(ECbmModuleId::kMuch, -150, 50);
+  eventBuilder->SetTriggerWindow(ECbmModuleId::kTrd, -250, 100);
+  eventBuilder->SetTriggerWindow(ECbmModuleId::kTof, -150, 10);
+  eventBuilder->SetTriggerWindow(ECbmModuleId::kRich, -50, 50);
+  eventBuilder->SetTriggerWindow(ECbmModuleId::kPsd, -50, 50);
+  /// To get T0 Digis (seed + close digis) in the event
+  eventBuilder->SetTriggerWindow(ECbmModuleId::kT0, -1, 10);
+
+  /*
+  /// Use TOF as reference
+  eventBuilder->SetReferenceDetector( kEventBuilderDetTof );
+  eventBuilder->AddDetector( kEventBuilderDetT0 );
+
+  /// Change the selection window limits for TOF as ref
+  /// => Should always be after changes of detector lists!
+  eventBuilder->SetTriggerWindow(ECbmModuleId::kT0, -150, 0);
+  eventBuilder->SetTriggerWindow(ECbmModuleId::kSts, -50, 100);
+  eventBuilder->SetTriggerWindow(ECbmModuleId::kMuch, -50, 200);
+  eventBuilder->SetTriggerWindow(ECbmModuleId::kTrd, -50, 300);
+  eventBuilder->SetTriggerWindow(ECbmModuleId::kTof, 0, 60);
+  eventBuilder->SetTriggerWindow(ECbmModuleId::kRich, -100, 150);
+  eventBuilder->SetTriggerWindow(ECbmModuleId::kPsd, -200, 50);
+*/
+
+  /// Change the trigger requirements
+  /// => Should always be after changes of detector lists!
+  /// --- Minimum
+  eventBuilder->SetTriggerMinNumber(ECbmModuleId::kT0, 1);
+  eventBuilder->SetTriggerMinNumber(ECbmModuleId::kSts, 0);
+  eventBuilder->SetTriggerMinNumber(ECbmModuleId::kMuch, 0);
+  eventBuilder->SetTriggerMinNumber(ECbmModuleId::kTrd, 0);
+  eventBuilder->SetTriggerMinNumber(ECbmModuleId::kTof, 10);
+  eventBuilder->SetTriggerMinNumber(ECbmModuleId::kRich, 0);
+  eventBuilder->SetTriggerMinNumber(ECbmModuleId::kPsd, 0);
+  /// --- Maximum  (-1 to disable cut)
+  eventBuilder->SetTriggerMaxNumber(ECbmModuleId::kT0, -1);
+  eventBuilder->SetTriggerMaxNumber(ECbmModuleId::kSts, -1);
+  eventBuilder->SetTriggerMaxNumber(ECbmModuleId::kMuch, -1);
+  eventBuilder->SetTriggerMaxNumber(ECbmModuleId::kTrd, -1);
+  eventBuilder->SetTriggerMaxNumber(ECbmModuleId::kTof, -1);
+  eventBuilder->SetTriggerMaxNumber(ECbmModuleId::kRich, -1);
+  eventBuilder->SetTriggerMaxNumber(ECbmModuleId::kPsd, -1);
+
+
+  if (0 < uRunId)
+    eventBuilder->SetOutFilename(
+      Form("%sHistosEvtWin_%03u.root", outDir.Data(), uRunId));
+
+  run->AddTask(eventBuilder);
+  // ------------------------------------------------------------------------
+
+
+  // -----   Reconstruction tasks   -----------------------------------------
+
+  // -----   Local reconstruction in STS   ----------------------------------
+  CbmRecoSts* recoSts = new CbmRecoSts();
+  recoSts->SetMode(kCbmRecoEvent);
+
+  //recoSts->SetTimeCutDigisAbs( 20 );// cluster finder: time cut in ns
+  //recoSts->SetTimeCutClustersAbs(20.); // hit finder: time cut in ns
+
+  // ASIC params: #ADC channels, dyn. range, threshold, time resol., dead time,
+  // noise RMS, zero-threshold crossing rate
+  auto parAsic =
+    new CbmStsParAsic(32, 75000., 3000., 5., 800., 1000., 3.9789e-3);
+
+  // Module params: number of channels, number of channels per ASIC
+  auto parMod = new CbmStsParModule(2048, 128);
+  parMod->SetAllAsics(*parAsic);
+  recoSts->UseModulePar(parMod);
+
+  // Sensor params
+  auto sensorPar = new CbmStsParSensor(CbmStsSensorClass::kDssdStereo);
+  sensorPar->SetPar(0, 6.2092);  // Extension in x
+  sensorPar->SetPar(1, 6.2);     // Extension in y
+  sensorPar->SetPar(2, 0.03);    // Extension in z
+  sensorPar->SetPar(3, 5.9692);  // Active size in y
+  sensorPar->SetPar(4, 1024.);   // Number of strips front side
+  sensorPar->SetPar(5, 1024.);   // Number of strips back side
+  sensorPar->SetPar(6, 0.0058);  // Strip pitch front side
+  sensorPar->SetPar(7, 0.0058);  // Strip pitch back side
+  sensorPar->SetPar(8, 7.5);     // Stereo angle front side
+  sensorPar->SetPar(9, 0.0);     // Stereo angle back side
+  recoSts->UseSensorPar(sensorPar);
+
+  // Sensor conditions: full depletion voltage, bias voltage, temperature,
+  // coupling capacitance, inter-strip capacitance
+  auto sensorCond = new CbmStsParSensorCond(70., 140., 268., 17.5, 1.);
+  recoSts->UseSensorCond(sensorCond);
+
+  run->AddTask(recoSts);
+  std::cout << "-I- : Added task " << recoSts->GetName() << std::endl;
+  // ------------------------------------------------------------------------
+
+
+  // -----   Local reconstruction in MUCH   ---------------------------------
+  Int_t flag = 1;
+  TString parDir =
+    TString(gSystem->Getenv("VMCWORKDIR")) + TString("/parameters");
+  TString muchDigiFile(
+    parDir + "/much/much_v19c_mcbm_digi_sector.root");  // MUCH digi file
+  CbmMuchFindHitsGem* muchFindHits =
+    new CbmMuchFindHitsGem(muchDigiFile.Data(), flag);
+  muchFindHits->SetBeamTimeDigi(kTRUE);
+  run->AddTask(muchFindHits);
+  std::cout << "-I- : Added task " << muchFindHits->GetName() << std::endl;
+  // ------------------------------------------------------------------------
+
+
+  // -----   Local reconstruction in TRD   ----------------------------------
+  // ------------------------------------------------------------------------
+
+
+  // -----   Local reconstruction in TOF   ----------------------------------
+  // ------------------------------------------------------------------------
+
+
+  // -----   Local reconstruction of RICH Hits ------------------------------
+  CbmRichMCbmHitProducer* hitProdRich = new CbmRichMCbmHitProducer();
+  hitProdRich->setToTLimits(23.7, 30.0);
+  hitProdRich->applyToTCut();
+  TString sRichMapFile =
+    srcDir + "/macro/rich/mcbm/beamtime/mRICH_Mapping_vert_20190318_elView.geo";
+  hitProdRich->SetMappingFile(sRichMapFile.Data());
+  run->AddTask(hitProdRich);
+  // ------------------------------------------------------------------------
+
+  // -----   Local reconstruction in RICh -> Finding of Rings ---------------
+  CbmRichReconstruction* richReco = new CbmRichReconstruction();
+  richReco->UseMCbmSetup();
+  run->AddTask(richReco);
+  // ------------------------------------------------------------------------
+
+
+  // -----  Psd hit producer   ----------------------------------------------
+  CbmPsdMCbmHitProducer* hitProdPsd = new CbmPsdMCbmHitProducer();
+  run->AddTask(hitProdPsd);
+  // ------------------------------------------------------------------------
+
+
+  // -----  Parameter database   --------------------------------------------
+  std::cout << std::endl << std::endl;
+  std::cout << "-I- " << myName << ": Set runtime DB" << std::endl;
+  FairRuntimeDb* rtdb        = run->GetRuntimeDb();
+  FairParRootFileIo* parIo1  = new FairParRootFileIo();
+  FairParAsciiFileIo* parIo2 = new FairParAsciiFileIo();
+  FairParRootFileIo* parIo3  = new FairParRootFileIo();
+  parIo1->open(parFileIn.Data(), "READ");
+  parIo3->open(parFileOut.Data(), "RECREATE");
+  rtdb->setFirstInput(parIo1);
+  // ------------------------------------------------------------------------
+
+
+  // -----   Run initialisation   -------------------------------------------
+  std::cout << std::endl;
+  std::cout << "-I- " << myName << ": Initialise run" << std::endl;
+  run->Init();
+  rtdb->setOutput(parIo3);
+  rtdb->saveOutput();
+  rtdb->print();
+  // ------------------------------------------------------------------------
+
+
+  // -----   Start run   ----------------------------------------------------
+  std::cout << std::endl << std::endl;
+  std::cout << "-I- " << myName << ": Starting run" << std::endl;
+  run->Run(0, nTimeslices);
+  // ------------------------------------------------------------------------
+
+
+  // -----   Finish   -------------------------------------------------------
+  timer.Stop();
+  FairMonitor::GetMonitor()->Print();
+  Double_t rtime = timer.RealTime();
+  Double_t ctime = timer.CpuTime();
+  std::cout << std::endl << std::endl;
+  std::cout << "Macro finished successfully." << std::endl;
+  std::cout << "Output file is " << outFile << std::endl;
+  std::cout << "Parameter file is " << parFileOut << std::endl;
+  std::cout << "Real time " << rtime << " s, CPU time " << ctime << " s"
+            << std::endl;
+  std::cout << std::endl;
+  // ------------------------------------------------------------------------
+
+
+  // -----   Resource monitoring   ------------------------------------------
+  // Extract the maximal used memory an add is as Dart measurement
+  // This line is filtered by CTest and the value send to CDash
+  FairSystemInfo sysInfo;
+  Float_t maxMemory = sysInfo.GetMaxMemory();
+  std::cout << "<DartMeasurement name=\"MaxMemory\" type=\"numeric/double\">";
+  std::cout << maxMemory;
+  std::cout << "</DartMeasurement>" << std::endl;
+
+  Float_t cpuUsage = ctime / rtime;
+  std::cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">";
+  std::cout << cpuUsage;
+  std::cout << "</DartMeasurement>" << std::endl;
+  // ------------------------------------------------------------------------
+
+
+  // -----   Function needed for CTest runtime dependency   -----------------
+  //  RemoveGeoManager();
+  // ------------------------------------------------------------------------
+
+  /// --- Screen output for automatic tests
+  std::cout << " Test passed" << std::endl;
+  std::cout << " All ok " << std::endl;
+}
diff --git a/macro/beamtime/mcbm2020/mcbm_event_reco.C b/macro/beamtime/mcbm2020/mcbm_event_reco.C
index 00553c221caeb4830fdb8c666d7eeefa0fada438..e27b8f175b7cf3bf710eade720e83386e099e48d 100644
--- a/macro/beamtime/mcbm2020/mcbm_event_reco.C
+++ b/macro/beamtime/mcbm2020/mcbm_event_reco.C
@@ -194,7 +194,7 @@ void mcbm_event_reco(Int_t runId = 831, Int_t nTimeslices = 300) {
   std::cout << std::endl << std::endl;
   std::cout << "Macro finished successfully." << std::endl;
   std::cout << "Output file is " << outFile << std::endl;
-  std::cout << "Parameter file is " << parFileOut << std::endl;
+  std::cout << "Parameter file is " << parFile << std::endl;
   std::cout << "Real time " << rtime << " s, CPU time " << ctime << " s"
             << std::endl;
   std::cout << std::endl;
diff --git a/macro/beamtime/mcbm2020/mcbm_event_reco_kronos.C b/macro/beamtime/mcbm2020/mcbm_event_reco_kronos.C
new file mode 100644
index 0000000000000000000000000000000000000000..fd73801f79caa3a989caf0ba7a0e6dcf158ce192
--- /dev/null
+++ b/macro/beamtime/mcbm2020/mcbm_event_reco_kronos.C
@@ -0,0 +1,235 @@
+// --------------------------------------------------------------------------
+//
+// Macro for reconstruction of mcbm data (2020)
+// Combined Event based local reconstruction (Event Building (Florian one) +
+// cluster + hit finder) for different subsystems.
+//
+// --------------------------------------------------------------------------
+
+void mcbm_event_reco(Int_t runId = 831, Int_t nTimeslices = 300) {
+
+  // --- Logger settings ----------------------------------------------------
+  TString logLevel     = "INFO";
+  TString logVerbosity = "LOW";
+  // ------------------------------------------------------------------------
+
+
+  // -----   Environment   --------------------------------------------------
+  TString myName   = "mcbm_reco";  // this macro's name for screen output
+  TString srcDir   = gSystem->Getenv("VMCWORKDIR");  // top source directory
+  TString paramDir = srcDir + "/macro/beamtime/mcbm2020/";
+  // ------------------------------------------------------------------------
+
+
+  // -----   In- and output file names   ------------------------------------
+  TString inFile = Form("/lustre/cbm/users/ploizeau/mcbm2020/"
+                        "unp_evt_data_7f229b3f_20201103/unp_mcbm_%i.root",
+                        runId);
+  TString parFileIn =
+    Form("/lustre/cbm/users/ploizeau/mcbm2020/unp_evt_data_7f229b3f_20201103/"
+         "unp_mcbm_params_%i.root",
+         runId);
+  TString geoFile = paramDir + "mcbm2020_reco.geo.root";  // Created in sim. run
+  TString parFileOut = Form("./data/reco_mcbm_params_%i.root", runId);
+  TString outFile    = Form("./data/reco_mcbm_%i.root", runId);
+  // ------------------------------------------------------------------------
+
+
+  // -----   Timer   --------------------------------------------------------
+  TStopwatch timer;
+  timer.Start();
+  // ------------------------------------------------------------------------
+
+
+  // -----   FairRunAna   ---------------------------------------------------
+  FairRunAna* run             = new FairRunAna();
+  FairFileSource* inputSource = new FairFileSource(inFile);
+  run->SetSource(inputSource);
+
+  FairRootFileSink* outputSink = new FairRootFileSink(outFile);
+  run->SetSink(outputSink);
+  run->SetGeomFile(geoFile);
+
+  // Define output file for FairMonitor histograms
+  TString monitorFile {outFile};
+  monitorFile.ReplaceAll("rec", "rec.monitor");
+  FairMonitor::GetMonitor()->EnableMonitor(kTRUE, monitorFile);
+  // ------------------------------------------------------------------------
+
+
+  // -----   Logger settings   ----------------------------------------------
+  FairLogger::GetLogger()->SetLogScreenLevel(logLevel.Data());
+  FairLogger::GetLogger()->SetLogVerbosityLevel(logVerbosity.Data());
+  // ------------------------------------------------------------------------
+
+  //--------------------event builder-------------------//
+  CbmMcbm2018EventBuilder* eventBuilder = new CbmMcbm2018EventBuilder();
+  // eventBuilder->SetEventBuilderAlgo(EventBuilderAlgo::MaximumTimeGap);
+  //eventBuilder->SetMaximumTimeGap(50.);
+  eventBuilder->SetEventBuilderAlgo(EventBuilderAlgo::FixedTimeWindow);
+  eventBuilder->SetFixedTimeWindow(200.);
+  eventBuilder->SetTriggerMinNumberT0(1);
+  //eventBuilder->SetTriggerMinNumberSts(0);
+  eventBuilder->SetTriggerMinNumberMuch(1);
+  eventBuilder->SetTriggerMinNumberTof(10);
+  run->AddTask(eventBuilder);
+  // ------------------------------------------------------------------------
+
+
+  // -----   Reconstruction tasks   -----------------------------------------
+
+  // -----   Local reconstruction in MUCH   ---------------------------------
+  Int_t flag = 1;
+  TString parDir =
+    TString(gSystem->Getenv("VMCWORKDIR")) + TString("/parameters");
+  TString muchDigiFile(
+    parDir + "/much/much_v19c_mcbm_digi_sector.root");  // MUCH digi file
+  CbmMuchFindHitsGem* muchFindHits =
+    new CbmMuchFindHitsGem(muchDigiFile.Data(), flag);
+  muchFindHits->SetBeamTimeDigi(kTRUE);
+  run->AddTask(muchFindHits);
+  std::cout << "-I- : Added task " << muchFindHits->GetName() << std::endl;
+  //-------------------------------------------------------------------------------
+
+
+  // -----   Local reconstruction in STS   ----------------------------------
+  CbmRecoSts* recoSts = new CbmRecoSts();
+  recoSts->SetMode(kCbmRecoEvent);
+
+  //recoSts->SetTimeCutDigisAbs( 20 );// cluster finder: time cut in ns
+  //recoSts->SetTimeCutClustersAbs(20.); // hit finder: time cut in ns
+
+  // ASIC params: #ADC channels, dyn. range, threshold, time resol., dead time,
+  // noise RMS, zero-threshold crossing rate
+  auto parAsic =
+    new CbmStsParAsic(32, 75000., 3000., 5., 800., 1000., 3.9789e-3);
+
+  // Module params: number of channels, number of channels per ASIC
+  auto parMod = new CbmStsParModule(2048, 128);
+  parMod->SetAllAsics(*parAsic);
+  recoSts->UseModulePar(parMod);
+
+  // Sensor params
+  auto sensorPar = new CbmStsParSensor(CbmStsSensorClass::kDssdStereo);
+  sensorPar->SetPar(0, 6.2092);  // Extension in x
+  sensorPar->SetPar(1, 6.2);     // Extension in y
+  sensorPar->SetPar(2, 0.03);    // Extension in z
+  sensorPar->SetPar(3, 5.9692);  // Active size in y
+  sensorPar->SetPar(4, 1024.);   // Number of strips front side
+  sensorPar->SetPar(5, 1024.);   // Number of strips back side
+  sensorPar->SetPar(6, 0.0058);  // Strip pitch front side
+  sensorPar->SetPar(7, 0.0058);  // Strip pitch back side
+  sensorPar->SetPar(8, 7.5);     // Stereo angle front side
+  sensorPar->SetPar(9, 0.0);     // Stereo angle back side
+  recoSts->UseSensorPar(sensorPar);
+
+  // Sensor conditions: full depletion voltage, bias voltage, temperature,
+  // coupling capacitance, inter-strip capacitance
+  auto sensorCond = new CbmStsParSensorCond(70., 140., 268., 17.5, 1.);
+  recoSts->UseSensorCond(sensorCond);
+
+  run->AddTask(recoSts);
+  std::cout << "-I- : Added task " << recoSts->GetName() << std::endl;
+  // ------------------------------------------------------------------------
+
+
+  // -----   Local reconstruction in TRD   ----------------------------------
+  // ------------------------------------------------------------------------
+
+
+  // -----   Local reconstruction in TOF   ----------------------------------
+  // ------------------------------------------------------------------------
+
+
+  // -----   Local reconstruction of RICH Hits ------------------------------
+  CbmRichMCbmHitProducer* hitProdRich = new CbmRichMCbmHitProducer();
+  hitProdRich->setToTLimits(23.7, 30.0);
+  hitProdRich->applyToTCut();
+  TString sRichMapFile =
+    srcDir + "/macro/rich/mcbm/beamtime/mRICH_Mapping_vert_20190318_elView.geo";
+  hitProdRich->SetMappingFile(sRichMapFile.Data());
+  run->AddTask(hitProdRich);
+  // ------------------------------------------------------------------------
+
+  // -----   Local reconstruction in RICh -> Finding of Rings ---------------
+  CbmRichReconstruction* richReco = new CbmRichReconstruction();
+  richReco->UseMCbmSetup();
+  run->AddTask(richReco);
+  // ------------------------------------------------------------------------
+
+
+  // -----  Psd hit producer   ----------------------------------------------
+  CbmPsdMCbmHitProducer* hitProdPsd = new CbmPsdMCbmHitProducer();
+  run->AddTask(hitProdPsd);
+  // ------------------------------------------------------------------------
+
+
+  // -----  Parameter database   --------------------------------------------
+  std::cout << std::endl << std::endl;
+  std::cout << "-I- " << myName << ": Set runtime DB" << std::endl;
+  FairRuntimeDb* rtdb        = run->GetRuntimeDb();
+  FairParRootFileIo* parIo1  = new FairParRootFileIo();
+  FairParAsciiFileIo* parIo2 = new FairParAsciiFileIo();
+  FairParRootFileIo* parIo3  = new FairParRootFileIo();
+  parIo1->open(parFileIn.Data(), "READ");
+  parIo3->open(parFileOut.Data(), "RECREATE");
+  rtdb->setFirstInput(parIo1);
+  // ------------------------------------------------------------------------
+
+
+  // -----   Run initialisation   -------------------------------------------
+  std::cout << std::endl;
+  std::cout << "-I- " << myName << ": Initialise run" << std::endl;
+  run->Init();
+  rtdb->setOutput(parIo3);
+  rtdb->saveOutput();
+  rtdb->print();
+  // ------------------------------------------------------------------------
+
+
+  // -----   Start run   ----------------------------------------------------
+  std::cout << std::endl << std::endl;
+  std::cout << "-I- " << myName << ": Starting run" << std::endl;
+  run->Run(0, nTimeslices);
+  // ------------------------------------------------------------------------
+
+
+  // -----   Finish   -------------------------------------------------------
+  timer.Stop();
+  FairMonitor::GetMonitor()->Print();
+  Double_t rtime = timer.RealTime();
+  Double_t ctime = timer.CpuTime();
+  std::cout << std::endl << std::endl;
+  std::cout << "Macro finished successfully." << std::endl;
+  std::cout << "Output file is " << outFile << std::endl;
+  std::cout << "Parameter file is " << parFileOut << std::endl;
+  std::cout << "Real time " << rtime << " s, CPU time " << ctime << " s"
+            << std::endl;
+  std::cout << std::endl;
+  // ------------------------------------------------------------------------
+
+
+  // -----   Resource monitoring   ------------------------------------------
+  // Extract the maximal used memory an add is as Dart measurement
+  // This line is filtered by CTest and the value send to CDash
+  FairSystemInfo sysInfo;
+  Float_t maxMemory = sysInfo.GetMaxMemory();
+  std::cout << "<DartMeasurement name=\"MaxMemory\" type=\"numeric/double\">";
+  std::cout << maxMemory;
+  std::cout << "</DartMeasurement>" << std::endl;
+
+  Float_t cpuUsage = ctime / rtime;
+  std::cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">";
+  std::cout << cpuUsage;
+  std::cout << "</DartMeasurement>" << std::endl;
+  // ------------------------------------------------------------------------
+
+
+  // -----   Function needed for CTest runtime dependency   -----------------
+  //  RemoveGeoManager();
+  // ------------------------------------------------------------------------
+
+  /// --- Screen output for automatic tests
+  std::cout << " Test passed" << std::endl;
+  std::cout << " All ok " << std::endl;
+}