diff --git a/macro/mcbm/mcbm_reco_event_tb_nh.C b/macro/mcbm/mcbm_reco_event_tb_nh.C
index 5ad03f417ea56868fde349bdf72cb1ffa79386ca..4d91ca9afa722ff6e40acceeb9446c9568572162 100644
--- a/macro/mcbm/mcbm_reco_event_tb_nh.C
+++ b/macro/mcbm/mcbm_reco_event_tb_nh.C
@@ -13,7 +13,7 @@
 // Binned tracker for track reconstruction
 //
 // V. Friese   11.06.2018
-//
+// S. Roy     11.01.2022 - added the Real event building and modified STS parAsic parameter
 // --------------------------------------------------------------------------
 
 void mcbm_reco_event_tb_nh(Int_t nEvents = 10, TString RunId = "test", TString InDir = "./data/",
@@ -72,6 +72,20 @@ void mcbm_reco_event_tb_nh(Int_t nEvents = 10, TString RunId = "test", TString I
   //  setup->RemoveModule(ECbmModuleId::kSts);
   // ------------------------------------------------------------------------
 
+  TString sEvBuildRaw = "Real";
+
+
+  // -----   Some global switches   -----------------------------------------
+  // Bool_t eventBased = !sEvBuildRaw.IsNull();
+  Bool_t useMvd  = setup->IsActive(ECbmModuleId::kMvd);
+  Bool_t useSts  = setup->IsActive(ECbmModuleId::kSts);
+  Bool_t useRich = setup->IsActive(ECbmModuleId::kRich);
+  Bool_t useMuch = setup->IsActive(ECbmModuleId::kMuch);
+  Bool_t useTrd  = setup->IsActive(ECbmModuleId::kTrd);
+  Bool_t useTof  = setup->IsActive(ECbmModuleId::kTof);
+  Bool_t usePsd  = setup->IsActive(ECbmModuleId::kPsd);
+  // ------------------------------------------------------------------------
+
 
   // -----   Parameter files as input to the runtime database   -------------
   std::cout << std::endl;
@@ -136,7 +150,7 @@ void mcbm_reco_event_tb_nh(Int_t nEvents = 10, TString RunId = "test", TString I
   //mcManager->AddFile(rawFile);
   //run->AddTask(mcManager);
   // ------------------------------------------------------------------------
-
+  /*
   CbmMcbm2018EventBuilder* eventBuilder = new CbmMcbm2018EventBuilder();
   //  eventBuilder->SetEventBuilderAlgo(EventBuilderAlgo::MaximumTimeGap);
   //  eventBuilder->SetMaximumTimeGap(100.);
@@ -147,8 +161,60 @@ void mcbm_reco_event_tb_nh(Int_t nEvents = 10, TString RunId = "test", TString I
   eventBuilder->SetTriggerMinNumberMuch(0);
   eventBuilder->SetTriggerMinNumberTof(1);
   eventBuilder->SetTriggerMinNumberRich(0);
-  eventBuilder->SetFillHistos(kTRUE);
-  if (timebased) run->AddTask(eventBuilder);
+  eventBuilder->SetFillHistos(kTRUE);*/
+
+
+  // -----   Raw event building from digis (the "Real" event builder)  --------------------------------
+  if (sEvBuildRaw.EqualTo("Real", TString::ECaseCompare::kIgnoreCase)) {
+    CbmTaskBuildRawEvents* evBuildRaw = new CbmTaskBuildRawEvents();
+
+    //Choose between NoOverlap, MergeOverlap, AllowOverlap
+    evBuildRaw->SetEventOverlapMode(EOverlapModeRaw::AllowOverlap);
+
+    // Remove detectors where digis not found
+    if (!useMvd) evBuildRaw->RemoveDetector(kRawEventBuilderDetMvd);
+    if (!useRich) evBuildRaw->RemoveDetector(kRawEventBuilderDetRich);
+    if (!useMuch) evBuildRaw->RemoveDetector(kRawEventBuilderDetMuch);
+    if (!useTrd) evBuildRaw->RemoveDetector(kRawEventBuilderDetTrd);
+    if (!usePsd) evBuildRaw->RemoveDetector(kRawEventBuilderDetPsd);
+    if (!useTof) evBuildRaw->RemoveDetector(kRawEventBuilderDetTof);
+
+    if (!useSts) {
+      std::cerr << "-E- " << myName << ": Sts must be present for raw event "
+                << "building using ``Real2019'' option. Terminating macro." << std::endl;
+      return;
+    }  // Set STS or Tof as reference detector
+    if (!useTof) evBuildRaw->SetReferenceDetector(kRawEventBuilderDetSts);
+    else
+      evBuildRaw->SetReferenceDetector(kRawEventBuilderDetTof);
+
+    // Use sliding window seed builder with STS
+    // evBuildRaw->SetReferenceDetector(kRawEventBuilderDetUndef);
+    // evBuildRaw->AddSeedTimeFillerToList(kRawEventBuilderDetSts);
+    // evBuildRaw->SetSlidingWindowSeedFinder(10, 40, 100);
+    //  evBuildRaw->SetSeedFinderQa(true);  // optional QA information for seed finder
+    evBuildRaw->SetTsParameters(0.0, 1.e7, 0.0);  // Use CbmMuchDigi instead of CbmMuchBeamtimeDigi
+    evBuildRaw->ChangeMuchBeamtimeDigiFlag(kFALSE);
+
+    //Set event building parameters
+    if (!useTof) {
+      evBuildRaw->SetTriggerMinNumber(ECbmModuleId::kSts, 1);
+      evBuildRaw->SetTriggerMaxNumber(ECbmModuleId::kSts, -1);
+      evBuildRaw->SetTriggerWindow(ECbmModuleId::kSts, -10, 40);
+    }
+    else {
+      evBuildRaw->SetTriggerMinNumber(ECbmModuleId::kTof, 1);
+      evBuildRaw->SetTriggerWindow(ECbmModuleId::kTof, -10, 40);
+    }  //evBuildRaw->SetWriteHistosToFairSink(kFALSE);
+    //evBuildRaw->SetOutFilename("HistosEvtAllowOverlap_simulated.root");
+
+    run->AddTask(evBuildRaw);
+    std::cout << "-I- " << myName << ": Added task " << evBuildRaw->GetName() << std::endl;
+
+  }  //? Real raw event building
+
+
+  // if (timebased) run->AddTask(eventBuilder);
 
   // -----   Local reconstruction in MVD   ----------------------------------
   if (setup->IsActive(ECbmModuleId::kMvd)) {
@@ -178,7 +244,7 @@ void mcbm_reco_event_tb_nh(Int_t nEvents = 10, TString RunId = "test", TString I
     if (kFALSE && timebased) {
       // 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);
+      auto parAsic = new CbmStsParAsic(128, 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);