diff --git a/macro/mcbm/mcbm_hadron_analysis_nh.C b/macro/mcbm/mcbm_hadron_analysis_nh.C
new file mode 100644
index 0000000000000000000000000000000000000000..d4a8f756125648d83dd7dee96987e91c390a867a
--- /dev/null
+++ b/macro/mcbm/mcbm_hadron_analysis_nh.C
@@ -0,0 +1,224 @@
+void mcbm_hadron_analysis(
+  Int_t nEvents            = 10,
+  TString RunId            = "test",
+  TString InDir            = "./data/",
+  TString OutDir           = "./data/",
+  TString setup            = "mcbm_beam_2021_03",
+  bool timebased           = kTRUE,
+  Double_t eventRate       = 1.E7,
+  Double_t timeSliceLength = 1.e4,  // Length of time-slice [ns]
+  Double_t Tint            = 100.,
+  Double_t ReqTofMul       = 2,
+  Int_t parSet             = 0  // cut parameter
+) {
+  //TString TraDir ="../../../../../../uhlig/mcbm_proposal/data";
+  TString TraDir    = InDir;
+  TString InputFile = TraDir + "/" + RunId + ".tra.root";
+
+  TString dataset  = InDir + "/" + RunId;
+  TString ParFile  = dataset + ".par.root";
+  TString DigiFile = dataset + ".event.raw.root";
+  TString RecoFile = dataset + ".rec.root";
+  TString OutFile = OutDir + "/" + RunId + Form(".par%d", parSet) + ".ana.root";
+  if (timebased) {
+    DigiFile = dataset + Form(".%2.1e", eventRate) + ".raw.root";
+    RecoFile =
+      dataset + Form(".%2.1e.%d.%d", eventRate, (Int_t) Tint, (Int_t) ReqTofMul)
+      + ".rec.root";
+    OutFile = OutDir + "/" + RunId
+              + Form(".%2.1e.%d.%d", eventRate, (Int_t) Tint, (Int_t) ReqTofMul)
+              + Form(".par%d", parSet) + ".ana.root";
+  }
+
+  FairLogger::GetLogger()->SetLogScreenLevel("INFO");
+  FairLogger::GetLogger()->SetLogVerbosityLevel("VERYHIGH");
+
+  // -----   Timer   --------------------------------------------------------
+  TStopwatch timer;
+  timer.Start();
+  // ------------------------------------------------------------------------
+
+  // -----   Reconstruction run   -------------------------------------------
+  FairFileSource* inputFiles = new FairFileSource(RecoFile.Data());
+  inputFiles->AddFriend(DigiFile.Data());
+  //  inputFiles->AddFriend(InputFile.Data());
+
+  FairRootFileSink* sink = new FairRootFileSink(OutFile.Data());
+
+  FairRunAna* fRun = new FairRunAna();
+  fRun->SetSource(inputFiles);
+  fRun->SetSink(sink);
+
+  // -----  Parameter database   --------------------------------------------
+  FairRuntimeDb* rtdb          = fRun->GetRuntimeDb();
+  FairParRootFileIo* parInput1 = new FairParRootFileIo();
+  parInput1->open(ParFile.Data());
+  rtdb->setFirstInput(parInput1);
+
+  /*
+  CbmMCDataManager* mcManager = new CbmMCDataManager("MCDataManager", 1);
+  mcManager->AddFile(InputFile);
+  fRun->AddTask(mcManager);
+
+  CbmMatchRecoToMC* match = new CbmMatchRecoToMC();
+  fRun->AddTask(match);
+*/
+  // TFile *fHist = fRun->GetOutputFile();
+
+  CbmHadronAnalysis* HadronAna = new CbmHadronAnalysis();  // in hadron
+  HadronAna->SetBeamMomentum(2.73);                        // beam momentum
+  HadronAna->SetDY(0.5);        // flow analysis exclusion window
+  HadronAna->SetRecSec(kTRUE);  // enable lambda reconstruction
+  switch (parSet) {
+    case 0:  // with background
+      HadronAna->SetDistPrimLim(
+        1.2);  // Max Tof-Sts trans distance for primaries
+      HadronAna->SetDistPrimLim2(
+        0.3);  // Max Sts-Sts trans distance for primaries
+      HadronAna->SetDistSecLim2(
+        0.3);  // Max Sts-Sts trans distance from TOF direction for secondaries
+      HadronAna->SetD0ProtLim(
+        0.5);                       // Min impact parameter for secondary proton
+      HadronAna->SetOpAngMin(0.1);  // Min opening angle for accepting pair
+      HadronAna->SetDCALim(0.1);    // Max DCA for accepting pair
+      HadronAna->SetVLenMin(
+        5.);  // Min Lambda flight path length for accepting pair
+      HadronAna->SetVLenMax(
+        25.);  // Max Lambda flight path length for accepting pair
+      HadronAna->SetDistTRD(
+        10.);  // max accepted distance of Trd Hit from STS-TOF line
+      HadronAna->SetTRDHmulMin(
+        0.);  // min associated Trd Hits to Track candidates
+      HadronAna->SetNMixedEvents(10);  // Number of events to be mixed with
+      break;
+    case 1:  // for signal with background Ni+Ni
+      HadronAna->SetDistPrimLim(
+        1.);  // Max Tof-Sts trans distance for primaries
+      HadronAna->SetDistPrimLim2(
+        0.3);  // Max Sts-Sts trans distance for primaries
+      HadronAna->SetDistSecLim2(
+        0.3);  // Max Sts-Sts trans distance from TOF direction for secondaries
+      HadronAna->SetD0ProtLim(
+        0.4);                       // Min impact parameter for secondary proton
+      HadronAna->SetOpAngMin(0.1);  // Min opening angle for accepting pair
+      HadronAna->SetDCALim(0.1);    // Max DCA for accepting pair
+      HadronAna->SetVLenMin(
+        5.);  // Min Lambda flight path length for accepting pair
+      HadronAna->SetVLenMax(
+        25.);  // Max Lambda flight path length for accepting pair
+      HadronAna->SetDistTRD(
+        10.);  // max accepted distance of Trd Hit from STS-TOF line
+      HadronAna->SetTRDHmulMin(
+        0.);  // min associated Trd Hits to Track candidates
+      HadronAna->SetNMixedEvents(10);  // Number of events to be mixed with
+      break;
+
+    case 2:  // for signal with background Au+Au
+      HadronAna->SetDistPrimLim(
+        1.);  // Max Tof-Sts trans distance for primaries
+      HadronAna->SetDistPrimLim2(
+        0.3);  // Max Sts-Sts trans distance for primaries
+      HadronAna->SetDistSecLim2(
+        0.3);  // Max Sts-Sts trans distance from TOF direction for secondaries
+      HadronAna->SetD0ProtLim(
+        0.4);                       // Min impact parameter for secondary proton
+      HadronAna->SetOpAngMin(0.1);  // Min opening angle for accepting pair
+      HadronAna->SetDCALim(0.1);    // Max DCA for accepting pair
+      HadronAna->SetVLenMin(
+        8.);  // Min Lambda flight path length for accepting pair
+      HadronAna->SetVLenMax(
+        25.);  // Max Lambda flight path length for accepting pair
+      HadronAna->SetDistTRD(
+        10.);  // max accepted distance of Trd Hit from STS-TOF line
+      HadronAna->SetTRDHmulMin(
+        0.);  // min associated Trd Hits to Track candidates
+      HadronAna->SetNMixedEvents(10);  // Number of events to be mixed with
+      break;
+
+    case 3:  // syst study  around case 1
+      HadronAna->SetDistPrimLim(
+        0.8);  // Max Tof-Sts trans distance for primaries
+      HadronAna->SetDistPrimLim2(
+        0.3);  // Max Sts-Sts trans distance for primaries
+      HadronAna->SetDistSecLim2(
+        0.3);  // Max Sts-Sts trans distance from TOF direction for secondaries
+      HadronAna->SetD0ProtLim(
+        0.4);                       // Min impact parameter for secondary proton
+      HadronAna->SetOpAngMin(0.1);  // Min opening angle for accepting pair
+      HadronAna->SetDCALim(0.1);    // Max DCA for accepting pair
+      HadronAna->SetVLenMin(
+        5.);  // Min Lambda flight path length for accepting pair
+      HadronAna->SetVLenMax(
+        25.);  // Max Lambda flight path length for accepting pair
+      HadronAna->SetDistTRD(
+        10.);  // max accepted distance of Trd Hit from STS-TOF line
+      HadronAna->SetTRDHmulMin(
+        0.);  // min associated Trd Hits to Track candidates
+      HadronAna->SetNMixedEvents(10);  // Number of events to be mixed with
+      break;
+
+    case 4:  // syst study  around case 1
+      HadronAna->SetDistPrimLim(
+        0.9);  // Max Tof-Sts trans distance for primaries
+      HadronAna->SetDistPrimLim2(
+        0.3);  // Max Sts-Sts trans distance for primaries
+      HadronAna->SetDistSecLim2(
+        0.3);  // Max Sts-Sts trans distance from TOF direction for secondaries
+      HadronAna->SetD0ProtLim(
+        0.4);                       // Min impact parameter for secondary proton
+      HadronAna->SetOpAngMin(0.1);  // Min opening angle for accepting pair
+      HadronAna->SetDCALim(0.1);    // Max DCA for accepting pair
+      HadronAna->SetVLenMin(
+        5.);  // Min Lambda flight path length for accepting pair
+      HadronAna->SetVLenMax(
+        25.);  // Max Lambda flight path length for accepting pair
+      HadronAna->SetDistTRD(
+        10.);  // max accepted distance of Trd Hit from STS-TOF line
+      HadronAna->SetTRDHmulMin(
+        0.);  // min associated Trd Hits to Track candidates
+      HadronAna->SetNMixedEvents(10);  // Number of events to be mixed with
+      break;
+  }
+  fRun->AddTask(HadronAna);
+
+  // -----   Intialise and run   --------------------------------------------
+  fRun->Init();
+  cout << "Starting run" << endl;
+  fRun->Run(0, nEvents);
+  // ------------------------------------------------------------------------
+
+  // save histos to file
+  // fHist->Write();
+
+  // -----   Finish   -------------------------------------------------------
+  timer.Stop();
+  Double_t rtime = timer.RealTime();
+  Double_t ctime = timer.CpuTime();
+  std::cout << std::endl << std::endl;
+  std::cout << "Macro finished successfully." << std::endl;
+  std::cout << "Output file is " << OutFile << std::endl;
+  std::cout << "Parameter file is " << ParFile << std::endl;
+  std::cout << "Real time " << rtime << " s, CPU time " << ctime << "s"
+            << std::endl
+            << std::endl;
+  // ------------------------------------------------------------------------
+
+  // -----   Resource monitoring   ------------------------------------------
+  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;
+
+
+  std::cout << " Test passed" << std::endl;
+  std::cout << " All ok " << std::endl;
+  // ------------------------------------------------------------------------
+
+  //RemoveGeoManager();
+}