From 6516ec1ea483a91e6bb381285df81f98a54e8038 Mon Sep 17 00:00:00 2001
From: alberica toia <a.toia@gsi.de>
Date: Tue, 10 Nov 2020 14:44:08 +0100
Subject: [PATCH] build_event_win_kronos.C does ONLY event builder,
 mcbm_build_and_reco_kronos.C does event builder + reco

---
 .../mcbm2020/build_event_win_kronos.C         |  56 -----
 .../mcbm2020/mcbm_build_and_reco_kronos.C     | 209 ++++++++++++++++++
 2 files changed, 209 insertions(+), 56 deletions(-)
 create mode 100644 macro/beamtime/mcbm2020/mcbm_build_and_reco_kronos.C

diff --git a/macro/beamtime/mcbm2020/build_event_win_kronos.C b/macro/beamtime/mcbm2020/build_event_win_kronos.C
index 831c9c92e6..375df7179f 100644
--- a/macro/beamtime/mcbm2020/build_event_win_kronos.C
+++ b/macro/beamtime/mcbm2020/build_event_win_kronos.C
@@ -106,62 +106,6 @@ void build_event_win_kronos(UInt_t uRunIdx = 0,
 
   fRun->AddTask(eventBuilder);
 
-  // -----  Parameter database   --------------------------------------------
-  TString parFile =
-    Form("/lustre/cbm/users/ploizeau/mcbm2020/unp_evt_data_7f229b3f_20201103/"
-         "unp_mcbm_params_%i.root",
-         uRunId);
-  FairRuntimeDb* rtdb       = fRun->GetRuntimeDb();
-  FairParRootFileIo* parIo1 = new FairParRootFileIo();
-  parIo1->open(parFile.Data(), "UPDATE");
-  rtdb->setFirstInput(parIo1);
-  // ------------------------------------------------------------------------
-
-  TString geoFileSts =
-    "/lustre/cbm/users/alberica/cbmroot/macro/beamtime/mcbm2020/data/"
-    "test.geo.root";  // to be created by a simulation run
-  fRun->SetGeomFile(geoFileSts);
-
-  // -----   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);
-
-  fRun->AddTask(recoSts);
-  std::cout << "-I- : Added task " << recoSts->GetName() << std::endl;
-  // ------------------------------------------------------------------------
-
   // -----   Intialise and run   --------------------------------------------
   fRun->Init();
 
diff --git a/macro/beamtime/mcbm2020/mcbm_build_and_reco_kronos.C b/macro/beamtime/mcbm2020/mcbm_build_and_reco_kronos.C
new file mode 100644
index 0000000000..f9160d511a
--- /dev/null
+++ b/macro/beamtime/mcbm2020/mcbm_build_and_reco_kronos.C
@@ -0,0 +1,209 @@
+void mcbm_build_and_reco_kronos(UInt_t uRunIdx = 0,
+                                Int_t nEvents  = 0,
+                                TString outDir = "data/") {
+  UInt_t uRunId    = 0;
+  TString fileName = "data/unp_mcbm_0.root";
+  if (99999 != uRunIdx) {
+    std::vector<UInt_t> vuListRunId = {
+      692, 698, 702, 704, 705, 706, 707,            //  7 =>  0 -  6
+      744, 750, 759, 760, 761, 762, 799,            //  7 =>  7 - 13
+      811, 812, 816, 817, 819,                      //  5 => 14 - 18
+      820, 821, 822, 824, 826, 827, 828, 829,       //  8 => 19 - 26
+      830, 831, 836,                                //  3 => 27 - 29
+      841, 846, 849,                                //  3 => 30 - 32
+      850, 851, 852, 854, 855, 856, 857, 858, 859,  //  9 => 33 - 41
+      860, 861, 862, 863, 864, 865, 866             //  7 => 42 - 48
+                                                    /*
+ /// With runs < 1 min due to missmatch!
+             811, 812, 816, 817, 818, 819,                     //  6 => 14 - 19
+             820, 821, 822, 824, 826, 827, 828, 829,           //  8 => 20 - 27
+             830, 831, 836, 839,                               //  4 => 28 - 31
+             840, 841, 842, 844, 845, 846, 848, 849,           //  8 => 32 - 39
+             850, 851, 852, 854, 855, 856, 857, 858, 859,      //  9 => 40 - 48
+             860, 861, 862, 863, 864, 865, 866                 //  7 => 49 - 55
+*/
+    };
+    if (vuListRunId.size() <= uRunIdx) return kFALSE;
+    uRunId = vuListRunId[uRunIdx];
+    //fileName = Form("data/unp_mcbm_%03u.root", uRunId);
+    fileName = Form("/lustre/cbm/users/ploizeau/mcbm2020/"
+                    "unp_evt_data_7f229b3f_20201103/unp_mcbm_%i.root",
+                    uRunId);
+  }  // if( 99999 != uRunIdx )
+
+  if (uRunId < 692 && 0 != uRunId) return kFALSE;
+
+
+  // ========================================================================
+  //          Adjust this part according to your requirements
+
+  // Verbosity level (0=quiet, 1=event level, 2=track level, 3=debug)
+  //  Int_t iVerbose = 1;
+
+  // --- Set log output levels
+  FairLogger::GetLogger();
+  gLogger->SetLogScreenLevel("INFO");
+  //  gLogger->SetLogScreenLevel("DEBUG");
+  gLogger->SetLogVerbosityLevel("MEDIUM");
+
+  // MC file
+
+  TString srcDir = gSystem->Getenv("VMCWORKDIR");
+
+  // -----   Timer   --------------------------------------------------------
+  TStopwatch timer;
+  timer.Start();
+  // ------------------------------------------------------------------------
+
+  // -----  Analysis run   --------------------------------------------------
+  //  FairRunOnline *fRun= new FairRunOnline();
+  FairRunAna* fRun = new FairRunAna();
+  fRun->SetEventHeaderPersistence(kFALSE);
+
+  FairFileSource* inputSource = new FairFileSource(fileName);
+  fRun->SetSource(inputSource);
+
+  TString runId                = TString::Format("%03u", uRunId);
+  TString outFile              = outDir + "/events_win_" + runId + ".root";
+  FairRootFileSink* outputSink = new FairRootFileSink(outFile);
+  fRun->SetSink(outputSink);
+
+  // Define output file for FairMonitor histograms
+  //  TString monitorFile{outFile};
+  //  monitorFile.ReplaceAll("qa","qa.monitor");
+  FairMonitor::GetMonitor()->EnableMonitor(kTRUE);
+  //  FairMonitor::GetMonitor()->EnableMonitor(kFALSE);
+  // ------------------------------------------------------------------------
+
+  //  CbmMcbm2019TimeWinEventBuilder* eventBuilder = new CbmMcbm2019TimeWinEventBuilder();
+  CbmMcbm2019TimeWinEventBuilderTask* eventBuilder =
+    new CbmMcbm2019TimeWinEventBuilderTask();
+
+  eventBuilder->SetFillHistos(kTRUE);
+
+  eventBuilder->SetEventOverlapMode(EOverlapMode::NoOverlap);
+
+  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);
+  //  eventBuilder->SetT0PulserTotLimits(   185, 191 );
+  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);
+  if (0 < uRunId)
+    eventBuilder->SetOutFilename(
+      Form("%sHistosEvtWin_%03u.root", outDir.Data(), uRunId));
+
+  // To get T0 Digis (seed + close digis) in the event
+  eventBuilder->SetTriggerWindow(ECbmModuleId::kT0, -1, 10);
+
+  fRun->AddTask(eventBuilder);
+
+  // -----  Parameter database   --------------------------------------------
+  TString parFile =
+    Form("/lustre/cbm/users/ploizeau/mcbm2020/unp_evt_data_7f229b3f_20201103/"
+         "unp_mcbm_params_%i.root",
+         uRunId);
+  FairRuntimeDb* rtdb       = fRun->GetRuntimeDb();
+  FairParRootFileIo* parIo1 = new FairParRootFileIo();
+  parIo1->open(parFile.Data(), "UPDATE");
+  rtdb->setFirstInput(parIo1);
+  // ------------------------------------------------------------------------
+
+  TString geoFileSts =
+    "/lustre/cbm/users/alberica/cbmroot/macro/beamtime/mcbm2020/data/"
+    "test.geo.root";  // to be created by a simulation run
+  fRun->SetGeomFile(geoFileSts);
+
+  // -----   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);
+
+  fRun->AddTask(recoSts);
+  std::cout << "-I- : Added task " << recoSts->GetName() << std::endl;
+  // ------------------------------------------------------------------------
+
+  // -----   Intialise and run   --------------------------------------------
+  fRun->Init();
+
+  //  rtdb->setOutput(parIo1);
+  //  rtdb->saveOutput();
+  //  rtdb->print();
+
+  cout << "Starting run" << endl;
+  if (0 == nEvents) {
+    fRun->Run(0, 0);  // run until end of input file
+  } else {
+    fRun->Run(0, nEvents);  // process  N Events
+  }
+  // ------------------------------------------------------------------------
+
+
+  // -----   Finish   -------------------------------------------------------
+  timer.Stop();
+  Double_t rtime = timer.RealTime();
+  Double_t ctime = timer.CpuTime();
+  cout << endl << endl;
+  cout << "Macro finished succesfully." << endl;
+  cout << "Real time " << rtime << " s, CPU time " << ctime << " s" << endl;
+  cout << endl;
+  // ------------------------------------------------------------------------
+
+  // 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();
+  cout << "<DartMeasurement name=\"MaxMemory\" type=\"numeric/double\">";
+  cout << maxMemory;
+  cout << "</DartMeasurement>" << endl;
+
+  Float_t cpuUsage = ctime / rtime;
+  cout << "<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">";
+  cout << cpuUsage;
+  cout << "</DartMeasurement>" << endl;
+
+  FairMonitor* tempMon = FairMonitor::GetMonitor();
+  tempMon->Print();
+
+  cout << " Test passed" << endl;
+  cout << " All ok " << endl;
+}
-- 
GitLab