From e3c61ebc5d477cbb6e75af59ebf41f2da3468e46 Mon Sep 17 00:00:00 2001
From: David Emschermann <d.emschermann@gsi.de>
Date: Fri, 20 Aug 2021 10:56:53 +0200
Subject: [PATCH] Fix event display for mCBM and do not use SetOutputFile any
 longer, refs #2215

---
 macro/mcbm/eventDisplay.C | 150 +++++---------------------------------
 macro/run/eventDisplay.C  |   3 +-
 2 files changed, 22 insertions(+), 131 deletions(-)

diff --git a/macro/mcbm/eventDisplay.C b/macro/mcbm/eventDisplay.C
index 3cae5c30b4..580a0c800f 100644
--- a/macro/mcbm/eventDisplay.C
+++ b/macro/mcbm/eventDisplay.C
@@ -1,162 +1,52 @@
-/* Copyright (C) 2019-2020 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
+/* Copyright (C) 2008-2019 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
    SPDX-License-Identifier: GPL-3.0-only
-   Authors: David Emschermann [committer], Florian Uhlig */
+   Authors: Andrey Lebedev, David Emschermann, Volker Friese, Mohammad Al-Turany [committer], Florian Uhlig */
 
-void eventDisplay(TString cSys = "lam", TString cEbeam = "2.5gev", TString cCentr = "-", Int_t iRun = 0,
-                  const char* setup = "sis18_mcbm")
+void eventDisplay(TString dataset = "data/test")
 {
-
-  TString dataDir = "data/";
-
-  TString InputFile =
-    dataDir + setup + "_" + cSys + "." + cEbeam + "." + cCentr + ".mc." + Form("%05d", iRun) + ".root";
-  TString RecoFile =
-    dataDir + setup + "_" + cSys + "." + cEbeam + "." + cCentr + ".eds." + Form("%05d", iRun) + ".root";
-  TString ParFile =
-    dataDir + setup + "_" + cSys + "." + cEbeam + "." + cCentr + ".params." + Form("%05d", iRun) + ".root";
+  TString inFile  = dataset + ".tra.root";
+  TString parFile = dataset + ".par.root";
+  TString outFile = dataset + ".display.root";
 
   // -----   Reconstruction run   -------------------------------------------
   FairRunAna* fRun = new FairRunAna();
 
-  fRun->SetInputFile(InputFile.Data());
-  fRun->AddFriend(RecoFile.Data());
-
-  fRun->SetOutputFile(dataDir + setup + "_test.root");
-
-  //FairLogger::GetLogger()->SetLogScreenLevel("INFO");
-  FairLogger::GetLogger()->SetLogScreenLevel("DEBUG1");
-  FairLogger::GetLogger()->SetLogVerbosityLevel("MEDIUM");
-
-  CbmHadronAnalysis* HadronAna = new CbmHadronAnalysis();  // interpret event
-  HadronAna->SetRecSec(kTRUE);                             // enable lambda reconstruction
-  Int_t parSet = 0;
-  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:                             // 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:                             // 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 10:                            // "0" with TRD Mul 1
-      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(1.);     // min associated Trd Hits to Track candidates
-      HadronAna->SetNMixedEvents(10);   // Number of events to be mixed with
-      break;
-    case 20:                            // "0" with TRD Mul 2
-      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(2.);     // min associated Trd Hits to Track candidates
-      HadronAna->SetNMixedEvents(10);   // Number of events to be mixed with
-      break;
-    default: cout << "Cut value set " << parSet << " not existing, stop macro " << endl; return;
-  }
-
-  fRun->AddTask(HadronAna);
+  FairFileSource* inputSource = new FairFileSource(inFile.Data());
+  fRun->SetSource(inputSource);
+  FairRootFileSink* outputSink = new FairRootFileSink(outFile);
+  fRun->SetSink(outputSink);
 
   FairRuntimeDb* rtdb          = fRun->GetRuntimeDb();
   FairParRootFileIo* parInput1 = new FairParRootFileIo();
-  parInput1->open(ParFile.Data());
+  parInput1->open(parFile.Data());
   rtdb->setFirstInput(parInput1);
 
   FairEventManager* fMan = new FairEventManager();
   FairMCTracks* Track    = new FairMCTracks("Monte-Carlo Tracks");
 
   FairMCPointDraw* MvdPoint      = new FairMCPointDraw("MvdPoint", kBlack, kFullSquare);
-  FairMCPointDraw* StsPoint      = new FairMCPointDraw("StsPoint", kGreen, kFullSquare);
-  FairMCPointDraw* MuchPoint     = new FairMCPointDraw("MuchPoint", kOrange, kFullSquare);
-  FairMCPointDraw* RichPoint     = new FairMCPointDraw("RichPoint", kGreen, kFullSquare);
-  FairMCPointDraw* TrdPoint      = new FairMCPointDraw("TrdPoint", kBlue, kFullSquare);
+  FairMCPointDraw* StsPoint      = new FairMCPointDraw("StsPoint", kBlue, kFullSquare);
+  FairMCPointDraw* RichPoint     = new FairMCPointDraw("RichPoint", kOrange, kFullSquare);
+  FairMCPointDraw* RefPlanePoint = new FairMCPointDraw("RefPlanePoint", kPink, kFullSquare);
+  FairMCPointDraw* TrdPoint      = new FairMCPointDraw("MuchPoint", kYellow, kFullSquare);
+  FairMCPointDraw* MuchPoint     = new FairMCPointDraw("TrdPoint", kCyan, kFullSquare);
   FairMCPointDraw* TofPoint      = new FairMCPointDraw("TofPoint", kRed, kFullSquare);
   FairMCPointDraw* EcalPoint     = new FairMCPointDraw("EcalPoint", kYellow, kFullSquare);
-  FairMCPointDraw* RefPlanePoint = new FairMCPointDraw("RefPlanePoint", kPink, kFullSquare);
 
   fMan->AddTask(Track);
 
   fMan->AddTask(MvdPoint);
   fMan->AddTask(StsPoint);
-  fMan->AddTask(MuchPoint);
   fMan->AddTask(RichPoint);
+  fMan->AddTask(RefPlanePoint);
+  fMan->AddTask(MuchPoint);
   fMan->AddTask(TrdPoint);
   fMan->AddTask(TofPoint);
   fMan->AddTask(EcalPoint);
-  fMan->AddTask(RefPlanePoint);
 
-  CbmPixelHitSetDraw* StsHits = new CbmPixelHitSetDraw("StsHit", kRed, kOpenCircle);  // kFullSquare);
-  fMan->AddTask(StsHits);
-  CbmPixelHitSetDraw* TrdHits = new CbmPixelHitSetDraw("TrdHit", kRed, kOpenCircle);  // kFullSquare);
-  fMan->AddTask(TrdHits);
-  CbmPixelHitSetDraw* TofHits = new CbmPixelHitSetDraw("TofHit", kRed, kOpenCircle);  // kFullSquare);
-  fMan->AddTask(TofHits);
-  CbmPixelHitSetDraw* TofUHits = new CbmPixelHitSetDraw("TofUHit", kRed, kOpenCross);
-  fMan->AddTask(TofUHits);
-  CbmEvDisTracks* Tracks = new CbmEvDisTracks("Tof Tracks", 1);
-  Tracks->SetVerbose(4);
-  fMan->AddTask(Tracks);
 
   //  fMan->Init(1,4,10000);
-  //  fMan->Init(1,5,10000);  // make STS visible by default
+  fMan->Init(1, 5, 10000);  // make STS visible by default
   //  fMan->Init(1,6,10000);  // make MVD visible by default
-  fMan->Init(1, 7, 10000);  // make MVD visible by default
-
-  cout << "gEve " << gEve << endl;
-  gEve->GetDefaultGLViewer()->SetClearColor(kYellow - 10);
-  {  // from readCurrentCamera(const char* fname)
-    TGLCamera& c      = gEve->GetDefaultGLViewer()->CurrentCamera();
-    const char* fname = "Cam.sav";
-    TFile* f          = TFile::Open(fname, "READ");
-    if (!f) return;
-    if (f->GetKey(c.ClassName())) {
-      f->GetKey(c.ClassName())->Read(&c);
-      c.IncTimeStamp();
-      gEve->GetDefaultGLViewer()->RequestDraw();
-    }
-  }
+  //  fMan->Init(1,7,10000);  // make MVD visible by default
 }
diff --git a/macro/run/eventDisplay.C b/macro/run/eventDisplay.C
index 5d44cc7468..2ce2953777 100644
--- a/macro/run/eventDisplay.C
+++ b/macro/run/eventDisplay.C
@@ -13,7 +13,8 @@ void eventDisplay(TString dataset = "test")
 
   FairFileSource* inputSource = new FairFileSource(inFile.Data());
   fRun->SetSource(inputSource);
-  fRun->SetOutputFile(outFile);
+  FairRootFileSink* outputSink = new FairRootFileSink(outFile);
+  fRun->SetSink(outputSink);
 
   FairRuntimeDb* rtdb          = fRun->GetRuntimeDb();
   FairParRootFileIo* parInput1 = new FairParRootFileIo();
-- 
GitLab