From 33924ff1952ab2adc1ba7a7dab640e916fff38c2 Mon Sep 17 00:00:00 2001
From: Cornelius Feier-Riesen <cornelius.riesen@physik.uni-giessen.de>
Date: Wed, 25 Nov 2020 20:42:37 +0100
Subject: [PATCH] Update lmvm

---
 .../dielectron/lmvm/CbmAnaDielectronTask.cxx  | 68 +++++++++++++++-
 .../dielectron/lmvm/CbmAnaDielectronTask.h    |  7 ++
 .../lmvm/CbmAnaDielectronTaskDraw.cxx         | 26 ++++--
 .../lmvm/CbmAnaDielectronTaskDraw.h           |  3 +
 .../lmvm/CbmAnaDielectronTaskDrawAll.cxx      |  6 +-
 macro/analysis/dielectron/batch_job.py        | 60 ++++++++------
 macro/analysis/dielectron/batch_send.py       | 81 +++++++++++--------
 macro/analysis/dielectron/draw_all.py         | 32 ++++++++
 macro/analysis/dielectron/draw_analysis.C     | 34 +++-----
 macro/analysis/dielectron/draw_analysis_all.C | 42 ++++------
 macro/analysis/dielectron/draw_litqa.C        | 31 +++----
 macro/analysis/dielectron/draw_many.py        | 76 +++++++++++++++++
 macro/analysis/dielectron/draw_separate.py    | 17 ++++
 macro/analysis/dielectron/hadd_many.py        | 24 ++++++
 macro/analysis/dielectron/run_analysis.C      | 30 +++----
 macro/analysis/dielectron/run_digi.C          | 15 ++--
 macro/analysis/dielectron/run_litqa.C         | 60 ++++++--------
 macro/analysis/dielectron/run_reco.C          | 41 +++++-----
 macro/analysis/dielectron/run_sim.C           | 13 ++-
 .../cbm/elid/CbmLitGlobalElectronId.cxx       |  6 +-
 20 files changed, 449 insertions(+), 223 deletions(-)
 create mode 100644 macro/analysis/dielectron/draw_all.py
 create mode 100755 macro/analysis/dielectron/draw_many.py
 create mode 100644 macro/analysis/dielectron/draw_separate.py
 create mode 100755 macro/analysis/dielectron/hadd_many.py

diff --git a/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTask.cxx b/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTask.cxx
index bf16aa667a..a52b542516 100644
--- a/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTask.cxx
+++ b/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTask.cxx
@@ -294,7 +294,9 @@ CbmAnaDielectronTask::CbmAnaDielectronTask()
   , fh_piprim_plus_rapidity_mc(NULL)
   , fh_piprim_minus_rapidity_mc(NULL)
   , fh_pi0prim_rapidity_mc(NULL)
-  , fh_etaprim_rapidity_mc(NULL) {
+  , fh_etaprim_rapidity_mc(NULL)
+  , fh_mom_likelihood_El(NULL)
+  , fh_mom_likelihood_Pi(NULL) {
   // weight for rho0 = 0.001081; omega_ee = 0.0026866; omega_dalitz = 0.02242; phi = 0.00039552; pi0 = 4.38   ------ Au + Au, for 25 GeV central collision
   fWeight         = 0.0;
   fUseRich        = true;
@@ -306,8 +308,10 @@ CbmAnaDielectronTask::CbmAnaDielectronTask()
   fCuts.SetDefaultCuts();
 }
 
+
 CbmAnaDielectronTask::~CbmAnaDielectronTask() {}
 
+
 void CbmAnaDielectronTask::InitHists() {
   fHistoList.clear();
 
@@ -1016,6 +1020,29 @@ void CbmAnaDielectronTask::InitHists() {
                             -0.5,
                             2.5);
   fHistoList.push_back(fh_nof_rec_pi0);
+
+  //Occurency vs Likelihood and Momentum
+  fh_mom_likelihood_El =
+    new TH2D("fh_mom_likelihood_El",
+             "fh_mom_likelihood_El;p [GeV/c]; likelihood electron; counter",
+             100,
+             0.,
+             6.,
+             100,
+             0.,
+             1.);
+  fh_mom_likelihood_Pi =
+    new TH2D("fh_mom_likelihood_Pi",
+             "fh_mom_likelihood_Pi;p [GeV/c]; likelihood pion; counter",
+             100,
+             0.,
+             6.,
+             100,
+             0.,
+             1.);
+
+  fHistoList.push_back(fh_mom_likelihood_El);
+  fHistoList.push_back(fh_mom_likelihood_Pi);
 }
 
 InitStatus CbmAnaDielectronTask::Init() {
@@ -1193,9 +1220,46 @@ void CbmAnaDielectronTask::Exec(Option_t*) {
     SignalAndBgReco();
     FillElPiMomHist();
     FillNofChargedParticlesPerEvent();
+    FillMomLikeHist();
   }
 }  // Exec
 
+void CbmAnaDielectronTask::FillMomLikeHist() {
+  Int_t ngTracks = fGlobalTracks->GetEntriesFast();
+
+  for (int i = 0; i < ngTracks; i++) {
+
+    CbmGlobalTrack* gTrack = (CbmGlobalTrack*) fGlobalTracks->At(i);
+    if (NULL == gTrack) continue;
+
+    // getting TRD index and likelihood value
+    int trdInd = gTrack->GetTrdTrackIndex();
+    if (trdInd < 0) continue;
+    CbmTrdTrack* trdTrack = (CbmTrdTrack*) fTrdTracks->At(trdInd);
+    if (NULL == trdTrack) continue;
+    double_t likelihoodEl = trdTrack->GetPidLikeEL();
+    double_t likelihoodPi = trdTrack->GetPidLikePI();
+
+    // getting momentum via matching STS track with corresponding MC track
+    int stsInd = gTrack->GetStsTrackIndex();
+    if (stsInd < 0) continue;
+    CbmStsTrack* stsTrack = (CbmStsTrack*) fStsTracks->At(stsInd);
+    if (stsTrack == NULL) continue;
+    CbmTrackMatchNew* stsMatch =
+      (CbmTrackMatchNew*) fStsTrackMatches->At(stsInd);
+    if (stsMatch == NULL) continue;
+    if (stsMatch->GetNofLinks() == 0) continue;  // what is this for?
+    int stsMcTrackId = stsMatch->GetMatchedLink().GetIndex();
+    if (stsMcTrackId < 0) continue;
+    CbmMCTrack* mcTrack1 = (CbmMCTrack*) fMCTracks->At(stsMcTrackId);
+    if (mcTrack1 == NULL) continue;
+    double momentum = mcTrack1->GetP();  // momentum of MC track
+
+    fh_mom_likelihood_El->Fill(momentum, likelihoodEl);
+    fh_mom_likelihood_Pi->Fill(momentum, likelihoodPi);
+  }
+}
+
 void CbmAnaDielectronTask::FillRichRingNofHits() {
   fNofHitsInRingMap.clear();
   Int_t nofRichHits = fRichHits->GetEntriesFast();
@@ -1342,7 +1406,7 @@ void CbmAnaDielectronTask::FillNofChargedParticlesPerEvent() {
   for (Int_t i = 0; i < nofMcTracks; i++) {
     CbmMCTrack* mcTrack     = (CbmMCTrack*) fMCTracks->At(i);
     Bool_t isMcTrackCharged = false;
-    if (mcTrack->GetCharge() != 0) isMcTrackCharged = true;
+    //if (mcTrack->GetCharge() != 0) isMcTrackCharged = true;   // FIXME: TODO: uncomment when bug is fixed; issue https://lxcbmredmine01.gsi.de/issues/1826;
     Bool_t isMcSignalElectron = CbmLmvmUtils::IsMcSignalElectron(mcTrack);
     Bool_t isMcTrackAccepted  = false;
     if (mcTrack->GetNPoints(ECbmModuleId::kSts) >= 4) isMcTrackAccepted = true;
diff --git a/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTask.h b/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTask.h
index d9e7bbe450..5ab4f02e82 100644
--- a/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTask.h
+++ b/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTask.h
@@ -239,6 +239,9 @@ public:
 
   void MvdCutMcDistance();
 
+  // Likelihood vs Momentum
+  void FillMomLikeHist();
+
   virtual void Finish();
 
   void FillElPiMomHist();
@@ -470,6 +473,10 @@ private:
   TH1D* fh_pi0prim_rapidity_mc;
   TH1D* fh_etaprim_rapidity_mc;
 
+  // Likelihood vs Momentum
+  TH2D* fh_mom_likelihood_El;
+  TH2D* fh_mom_likelihood_Pi;
+
 public:
   void SetUseMvd(Bool_t use) { fUseMvd = use; };
   void SetUseRich(Bool_t use) { fUseRich = use; };
diff --git a/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDraw.cxx b/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDraw.cxx
index 1975acaa2f..0b341d3d50 100644
--- a/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDraw.cxx
+++ b/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDraw.cxx
@@ -62,8 +62,8 @@ void CbmAnaDielectronTaskDraw::DrawHistFromFile(const string& fileName,
   fHM         = new CbmHistManager();
   TFile* file = new TFile(fileName.c_str());
   fHM->ReadFromFile(file);
-
   fNofEvents = (Int_t) H1("fh_event_number")->GetEntries();
+  //fNofEvents = 10000;
   cout << "File name = " << fileName << endl;
   cout << "Number of events = " << fNofEvents << endl;
 
@@ -92,10 +92,21 @@ void CbmAnaDielectronTaskDraw::DrawHistFromFile(const string& fileName,
   DrawMvdAndStsHist();
   DrawElPiMomHis();
   DrawPmtXY();
-
+  DrawMomLikeHist();
   SaveCanvasToImage();
 }
 
+void CbmAnaDielectronTaskDraw::DrawMomLikeHist() {
+  TCanvas* c =
+    fHM->CreateCanvas("lmvm_mom_likelihood", "lmvm_mom_likelihood", 1000, 500);
+
+  c->Divide(2, 1);
+  c->cd(1);
+  DrawH2(H2("fh_mom_likelihood_El"));
+  c->cd(2);
+  DrawH2(H2("fh_mom_likelihood_Pi"));
+}
+
 void CbmAnaDielectronTaskDraw::RebinMinvHist() {
   int nRebin = 10;
   for (int i = 0; i < CbmLmvmHist::fNofAnaSteps; i++) {
@@ -462,11 +473,12 @@ void CbmAnaDielectronTaskDraw::Draw1DCut(const string& hName,
 }
 
 void CbmAnaDielectronTaskDraw::DrawCutDistributions() {
-  Draw1DCut("fh_richann",
-            "left",
-            CbmLitGlobalElectronId::GetInstance().GetRichAnnCut());
-  Draw1DCut(
-    "fh_trdann", "left", CbmLitGlobalElectronId::GetInstance().GetTrdAnnCut());
+  //Draw1DCut("fh_richann", "left", CbmLitGlobalElectronId::GetInstance().GetRichAnnCut());
+  //Draw1DCut("fh_trdann", "left", CbmLitGlobalElectronId::GetInstance().GetTrdAnnCut());
+
+  Draw1DCut("fh_richann", "left", -0.4);
+  Draw1DCut("fh_trdann", "left", 0.85);
+
   Draw2DCut("fh_tofm2");
 
   Draw1DCut("fh_chi2prim", "right", fCuts.fChiPrimCut);
diff --git a/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDraw.h b/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDraw.h
index 79b7281fe6..7a3efb1425 100644
--- a/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDraw.h
+++ b/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDraw.h
@@ -249,6 +249,9 @@ private:
 
   void DrawPmtXY();
 
+  // Draw Likelihood vs Momentum
+  void DrawMomLikeHist();
+
   CbmAnaDielectronTaskDraw(const CbmAnaDielectronTaskDraw&);
   CbmAnaDielectronTaskDraw& operator=(const CbmAnaDielectronTaskDraw&);
 
diff --git a/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDrawAll.cxx b/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDrawAll.cxx
index 9d7ae806d0..aad49e2288 100644
--- a/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDrawAll.cxx
+++ b/analysis/PWGDIL/dielectron/lmvm/CbmAnaDielectronTaskDrawAll.cxx
@@ -461,9 +461,8 @@ void CbmAnaDielectronTaskDrawAll::DrawMinvPt(CbmLmvmAnalysisSteps step) {
   TH2D* sPhi =
     (TH2D*) H2(kPhi, "fh_signal_minv_pt_" + CbmLmvmHist::fAnaSteps[step])
       ->Clone();
-  TH2D* sEta = fh_mean_eta_minv_pt[step];
-  TH2D* sPi0 = fh_mean_pi0_minv_pt[step];
-
+  TH2D* sEta    = fh_mean_eta_minv_pt[step];
+  TH2D* sPi0    = fh_mean_pi0_minv_pt[step];
   TH2D* coctail = (TH2D*) sInmed->Clone();
   if (fDrawQgp) coctail->Add(sQgp);
   coctail->Add(sOmega);
@@ -471,7 +470,6 @@ void CbmAnaDielectronTaskDrawAll::DrawMinvPt(CbmLmvmAnalysisSteps step) {
   coctail->Add(sOmegaDalitz);
   coctail->Add(sEta);
   coctail->Add(sPi0);
-
   DrawH2(coctail);
 }
 
diff --git a/macro/analysis/dielectron/batch_job.py b/macro/analysis/dielectron/batch_job.py
index d97491a49d..1630a920a3 100755
--- a/macro/analysis/dielectron/batch_job.py
+++ b/macro/analysis/dielectron/batch_job.py
@@ -1,20 +1,23 @@
 #!/usr/bin/env python3
 
-import os
-import sys
-import shutil
+import os      # operating system interfaces
+import sys     # provides access to some variables used or maintained by the interpreter and to functions that interact strongly with the interpreter
+import shutil  # offers a number of high-level operations on files and collections of files
 
 
 def main():
     dataDir = sys.argv[1]
     geoSetup = sys.argv[2]
     plutoParticle = sys.argv[3]
-    cbmrootConfigPath = "/lustre/nyx/cbm/users/slebedev/cbm/trunk/build/config.sh"
-    macroDir = "/lustre/nyx/cbm/users/slebedev/cbm/trunk/cbmroot/macro/analysis/dielectron/"
+    cbmrootConfigPath = "/lustre/nyx/cbm/users/criesen/build/config.sh"
+    macroDir = "/lustre/nyx/cbm/users/criesen/cbmroot/macro/analysis/dielectron/"
     nofEvents = 1000
+    
     taskId = os.environ.get('SLURM_ARRAY_TASK_ID')
-    jobId = os.environ.get('SLURM_ARRAY_JOB_ID')
 
+    jobId = os.environ.get('SLURM_ARRAY_JOB_ID')
+    colEnergy = "8gev"
+    colSystem = "auau"
     print("dataDir:" + dataDir)
 
     os.system(("source {}").format(cbmrootConfigPath))
@@ -22,12 +25,15 @@ def main():
     workDir = dataDir + "/workdir/" + jobId + "_" + taskId + "/"
     if os.path.exists(workDir):
         shutil.rmtree(workDir)
-        os.makedirs(workDir)
-        os.chdir(workDir)
+    os.makedirs(workDir)
+    os.chdir(workDir)
 
-    plutoFile = getPlutoPath("auau", "8gev", plutoParticle, taskId)
-    urqmdFile = "/lustre/nyx/cbm/prod/gen/urqmd/auau/8gev/centr/urqmd.auau.8gev.centr.00001.root"
-    plutoFile = "/lustre/nyx/cbm/prod/gen/pluto/erik/cktA/8gev/omega/epem/pluto.auau.8gev.omega.epem.0001.root"
+    plutoFile = getPlutoPath(colSystem, colEnergy, plutoParticle, taskId)
+    #plutoFile = getPlutoPath("auau", "8gev", plutoParticle, taskId)    
+    
+    urqmdFile = "/lustre/nyx/cbm/prod/gen/urqmd/auau/"+colEnergy+"/centr/urqmd.auau.8gev.centr." + str(taskId).zfill(5) + ".root"
+    #urqmdFile = "/lustre/nyx/cbm/prod/gen/urqmd/auau/8gev/centr/urqmd.auau.8gev.centr.00001.root"
+    
     mcFile = dataDir + "/mc." + taskId + ".root"
     parFile = dataDir + "/param." + taskId + ".root"
     digiFile = dataDir + "/digi." + taskId + ".root"
@@ -35,31 +41,33 @@ def main():
     litQaFile = dataDir + "/litqa." + taskId + ".root"
     analysisFile = dataDir + "/analysis." + taskId + ".root"
     geoSimFile = dataDir + "/geosim." + taskId + ".root"
-    os.system(('root -l -b -q {}/run/run_sim.C\(\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",{},{},\\"{}\\",\\"{}\\",{}\)').format(
-        macroDir, urqmdFile, mcFile, parFile, geoSimFile, nofElectrons, nofPositrons, plutoFile, geoSetup, nofEvents))
-    os.system(('root -l -b -q {}/run/run_digi.C\(\\"{}\\",\\"{}\\",\\"{}\\",{}\)').format(
+    os.system(('root -l -b -q {}/run_sim.C\(\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",{}\)').format(
+        macroDir, urqmdFile, plutoFile, mcFile, parFile, geoSimFile, geoSetup, nofEvents))
+    os.system(('root -l -b -q {}/run_digi.C\(\\"{}\\",\\"{}\\",\\"{}\\",{}\)').format(
         macroDir, mcFile, parFile, digiFile, nofEvents))
-    os.system(('root -l -b -q {}/run/run_reco.C\(\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",{}\)').format(
-        macroDir, mcFile, parFile, digiFile, recoFile, geoSetup, resultDir, nofEvents))
-    os.system(('root -l -b -q {}/run/run_qa.C\(\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",{}\)').format(
-        macroDir, mcFile, parFile, digiFile, recoFile, qaFile, geoSetup, resultDir, nofEvents))
+    os.system(('root -l -b -q {}/run_reco.C\(\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",{}\)').format(
+        macroDir, mcFile, parFile, digiFile, recoFile, geoSetup, nofEvents))
+    os.system(('root -l -b -q {}/run_litqa.C\(\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",{}\)').format(
+        macroDir, mcFile, parFile, digiFile, recoFile, litQaFile, geoSetup, nofEvents))
+    os.system(('root -l -b -q {}/run_analysis.C\(\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",{}\)').format(
+        macroDir, mcFile, parFile, digiFile, recoFile, analysisFile, plutoParticle, colSystem, colEnergy, geoSetup, nofEvents))
 
 
-def getPlutoPath(colSystem, colEnergy, plutoParticle, index):
+def getPlutoPath(colSystem, colEnergy, plutoParticle, taskId):
     if plutoParticle == "rho0":
-        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktA/${collEnergy}/rho0/epem/pluto.auau.${collEnergy}.rho0.epem.${XXXX}.root"
+       return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktA/"+colEnergy+"/rho0/epem/pluto.auau."+colEnergy+".rho0.epem." + str(taskId).zfill(4) + ".root"
     elif plutoParticle == "omegaepem":
-        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktA/${collEnergy}/omega/epem/pluto.auau.${collEnergy}.omega.epem.${XXXX}.root"
+        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktA/"+colEnergy+"/omega/epem/pluto.auau."+colEnergy+".omega.epem." + str(taskId).zfill(4) + ".root"
     elif plutoParticle == "omegadalitz":
-        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktA/${collEnergy}/omega/pi0epem/pluto.auau.${collEnergy}.omega.pi0epem.${XXXX}.root"
+        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktA/"+colEnergy+"/omega/pi0epem/pluto.auau."+colEnergy+".omega.pi0epem." + str(taskId).zfill(4) + ".root"
     elif plutoParticle == "phi":
-        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktA/${collEnergy}/phi/epem/pluto.auau.${collEnergy}.phi.epem.${XXXX}.root"
+        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktA/"+colEnergy+"/phi/epem/pluto.auau."+colEnergy+".phi.epem." + str(taskId).zfill(4) + ".root"
     elif plutoParticle == "pi0":
-        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktA/${collEnergy}/pi0/gepem/pluto.auau.${collEnergy}.pi0.gepem.${XXXX}.root"
+        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktA/"+colEnergy+"/pi0/gepem/pluto.auau."+colEnergy+".pi0.gepem." + str(taskId).zfill(4) + ".root"
     elif plutoParticle == "inmed":
-        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktRapp/${collEnergy}/rapp.inmed/epem/pluto.auau.${collEnergy}.rapp.inmed.epem.${XXXX}.root"
+        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktRapp/"+colEnergy+"/rapp.inmed/epem/pluto.auau."+colEnergy+".rapp.inmed.epem." + str(taskId).zfill(4) + ".root"
     elif plutoParticle == "qgp":
-        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktRapp/${collEnergy}/rapp.qgp/epem/pluto.auau.${collEnergy}.rapp.qgp.epem.${XXXX}.root"
+        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktRapp/"+colEnergy+"/rapp.qgp/epem/pluto.auau."+colEnergy+".rapp.qgp.epem." + str(taskId).zfill(4) + ".root"
     elif plutoParticle == "urqmd":
         return ""
 
diff --git a/macro/analysis/dielectron/batch_send.py b/macro/analysis/dielectron/batch_send.py
index 3f8f6394e8..d7686adf08 100755
--- a/macro/analysis/dielectron/batch_send.py
+++ b/macro/analysis/dielectron/batch_send.py
@@ -3,35 +3,52 @@
 import os
 import shutil
 
-nofJobs = 648
-timeLimit="08:00:00"
-mirrorRotation=15
-#All data in data dir will be removed
-removeData = False
-dataDir = "/lustre/nyx/cbm/users/slebedev/cbm/data/geoopt_m" + str(mirrorRotation) + "/"
-logFile = dataDir + "/log/log_slurm-%A_%a.out"
-errorFile = dataDir + "/error/error_slurm-%A_%a.out"
-jobName = "RICH" + str(mirrorRotation)
-
-if removeData:
-    print("All data in dataDir will be removed. Dir:" + dataDir)
-    print("Removing...")
-    if os.path.exists(dataDir):
-        shutil.rmtree(dataDir)
-    os.makedirs(dataDir)
-
-if os.path.exists(os.path.dirname(logFile)):
-    shutil.rmtree(os.path.dirname(logFile))
-os.makedirs(os.path.dirname(logFile))
-
-if os.path.exists(os.path.dirname(errorFile)):
-    shutil.rmtree(os.path.dirname(errorFile))
-os.makedirs(os.path.dirname(errorFile))
-
-#-p debug
-commandStr=('sbatch --job-name={} --time={} --output={} --error={} --array=1-{} batch_job.py {} {}').format(jobName, timeLimit, logFile, errorFile, nofJobs, dataDir, mirrorRotation)
-
-
-#print(commandStr)
-os.system(commandStr)
-
+def main():
+    nofJobs = 10
+    timeLimit="08:00:00"
+    geoSetup="sis100_electron"
+    plutoParticles = ["inmed", "omegadalitz", "phi", "omegaepem", "qgp"];
+
+    #ADDED
+    mirrorRotation=15
+    dataDir = "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/"
+    jobName = "RICH" + str(mirrorRotation)
+
+    #All data in data dir will be removed
+    removeData = False
+    #jobName = "LMVM"
+    if removeData:
+        print("All data in dataDir will be removed. Dir:" + dataDir)
+        print("Removing...")
+        if os.path.exists(dataDir):
+            shutil.rmtree(dataDir)
+    os.makedirs(dataDir,exist_ok=True)
+        
+    for plutoParticle in plutoParticles:
+        dataDirPluto = dataDir + plutoParticle
+        logFile = dataDirPluto + "/log/log_slurm-%A_%a.out"
+        errorFile = dataDirPluto + "/error/error_slurm-%A_%a.out"
+        workDir = dataDirPluto + "/workdir/"        
+        makeLogErrorDirs(logFile, errorFile, workDir)
+        
+        #-p debug
+        commandStr=('sbatch --job-name={} --time={} --output={} --error={} --array=1-{} batch_job.py {} {} {}').format(jobName, timeLimit, logFile, errorFile, nofJobs, dataDirPluto, geoSetup, plutoParticle)
+
+        os.system(commandStr)
+
+
+def makeLogErrorDirs(logFile, errorFile, workDir):
+    if os.path.exists(os.path.dirname(logFile)):
+        shutil.rmtree(os.path.dirname(logFile))
+    os.makedirs(os.path.dirname(logFile),exist_ok=True)
+
+    if os.path.exists(os.path.dirname(errorFile)):
+        shutil.rmtree(os.path.dirname(errorFile))
+    os.makedirs(os.path.dirname(errorFile),exist_ok=True)
+    
+    if os.path.exists(os.path.dirname(workDir)):
+        shutil.rmtree(os.path.dirname(workDir))
+    os.makedirs(os.path.dirname(workDir),exist_ok=True)
+
+if __name__ == '__main__':
+    main()
diff --git a/macro/analysis/dielectron/draw_all.py b/macro/analysis/dielectron/draw_all.py
new file mode 100644
index 0000000000..bc0ea164b0
--- /dev/null
+++ b/macro/analysis/dielectron/draw_all.py
@@ -0,0 +1,32 @@
+#!/usr/bin/env python3
+
+import os, shutil
+
+def main():
+    plutoParticles = ["inmed", "phi", "omegaepem", "omegadalitz", "qgp"]
+    dataDir = "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/"
+    dataDirHistos = dataDir + "histograms/"
+    macroDir = "/lustre/cbm/users/criesen/cbmroot/macro/analysis/dielectron"
+    
+    if os.path.exists(dataDirHistos):
+        shutil.rmtree(dataDirHistos)
+    os.mkdir(dataDirHistos)
+    
+    for plutoParticle in plutoParticles:
+        
+        outFile = dataDirHistos + plutoParticle
+
+        inFilesAna = dataDir + plutoParticle + "/analysis.all.root"
+        uMvd = False
+        drawSig = True
+        os.system(('root -l -b -q {}/draw_analysis.C\(\\"{}\\",\\"{}\\"\)').format(macroDir, inFilesAna, outFile, uMvd, drawSig))
+
+        inFilesLitqa = dataDir + plutoParticle + "/litqa.all.root"
+        os.system(('root -l -b -q {}/draw_litqa.C\(\\"{}\\",\\"{}\\"\)').format(macroDir, inFilesLitqa, outFile))
+    
+ 
+    print("======================================================================================= DRAW ALL ==================================================================================")
+    os.system(('root -l -b -q {}/draw_analysis_all.C').format(macroDir))    # default values of macro will be taken (see there)
+    
+if __name__ == '__main__':
+    main()
diff --git a/macro/analysis/dielectron/draw_analysis.C b/macro/analysis/dielectron/draw_analysis.C
index de016a32ed..937db6e34c 100644
--- a/macro/analysis/dielectron/draw_analysis.C
+++ b/macro/analysis/dielectron/draw_analysis.C
@@ -1,26 +1,18 @@
-/** draw_analysis.C
- * @author Elena Lebedeva <e.lebedeva@gsi.de>
- * @since 2010
- * @version 2.0
- **/
+//#include <experimental/filesystem>
 
-void draw_analysis() {
+void draw_analysis(
+  const string& histRootFile =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/analysis.all.root",
+  const string& resultDir =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/histograms/inmed/",
+  Bool_t useMvd           = false,
+  Bool_t drawSignificance = true)
 
-  Bool_t useMvd           = false;
-  Bool_t drawSignificance = true;
-  std::string dir =
-    "/Users/slebedev/Development/cbm/data/lmvm/agagtest/3.5gev/omegaepem/";
-  std::string fileName = dir + "analysis.auau.3.5gev.centr.all.root";
-
-  std::string script = std::string(TString(gSystem->Getenv("SCRIPT")).Data());
-  if (script == "yes") {
-    dir = std::string(TString(gSystem->Getenv("LMVM_MAIN_DIR")).Data());
-    fileName =
-      dir + std::string(TString(gSystem->Getenv("LMVM_ANA_FILE_NAME")).Data());
-  }
-
-  std::string outputDir = dir + "lmvm_results/";
+{
+  string outputDir = resultDir + "lmvm_results/";
+  //std::filesystem::remove(outputDir);
+  gSystem->mkdir(outputDir.c_str(), true);
 
   CbmAnaDielectronTaskDraw* draw = new CbmAnaDielectronTaskDraw();
-  draw->DrawHistFromFile(fileName, outputDir, useMvd);  //, drawSignificance);
+  draw->DrawHistFromFile(histRootFile, outputDir, useMvd, drawSignificance);
 }
diff --git a/macro/analysis/dielectron/draw_analysis_all.C b/macro/analysis/dielectron/draw_analysis_all.C
index a0bb88e541..d37d30a59a 100644
--- a/macro/analysis/dielectron/draw_analysis_all.C
+++ b/macro/analysis/dielectron/draw_analysis_all.C
@@ -1,30 +1,20 @@
-/** draw_analysis.C
- * @author Elena Lebedeva <e.lebedeva@gsi.de>
- * @since 2011
- * @version 3.0
- **/
-
-void draw_analysis_all() {
-
-  Bool_t useMvd   = false;
-  std::string dir = "/Users/slebedev/Development/cbm/data/lmvm/gregor_lmvm/";
-  std::string fileName = "analysis.agag.4.5gev.mbias.all.root";
-
-  std::string script = std::string(TString(gSystem->Getenv("SCRIPT")).Data());
-  if (script == "yes") {
-    dir = std::string(TString(gSystem->Getenv("LMVM_MAIN_DIR")).Data());
-    fileName =
-      std::string(TString(gSystem->Getenv("LMVM_ANA_FILE_NAME")).Data());
-  }
-
-  std::string outputDir = dir + "lmvm_results_all/";
-  std::string fnInmed   = dir + "inmed_" + fileName;
-  std::string fnQgp     = "";
-  std::string fnOmega   = dir + "omegaepem_" + fileName;
-  std::string fnPhi     = dir + "phi_" + fileName;
-  std::string fnOmegaD  = dir + "omegadalitz_" + fileName;
+void draw_analysis_all(
+  const string& fileInmed =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/analysis.all.root",
+  const string& fileQgp =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/qgp/analysis.all.root",
+  const string& fileOmega =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/omegaepem/analysis.all.root",
+  const string& filePhi =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/phi/analysis.all.root",
+  const string& fileOmegaD =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/omegadalitz/analysis.all.root",
+  const string& resultDir =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/histograms/results_all/",
+  Bool_t useMvd = false)
 
+{
   CbmAnaDielectronTaskDrawAll* draw = new CbmAnaDielectronTaskDrawAll();
   draw->DrawHistosFromFile(
-    fnInmed, fnQgp, fnOmega, fnPhi, fnOmegaD, outputDir, useMvd);
+    fileInmed, fileQgp, fileOmega, filePhi, fileOmegaD, resultDir, useMvd);
 }
diff --git a/macro/analysis/dielectron/draw_litqa.C b/macro/analysis/dielectron/draw_litqa.C
index 99dc20399b..08b584bf74 100644
--- a/macro/analysis/dielectron/draw_litqa.C
+++ b/macro/analysis/dielectron/draw_litqa.C
@@ -1,26 +1,21 @@
-void draw_litqa() {
-  std::string dir =
-    "/Users/slebedev/Development/cbm/data/lmvm/may18_100k/8gev/omegaepem/";
-  std::string fileName = dir + "litqa.auau.8gev.centr.all.root";
+void draw_litqa(
+  const string& histRootFile =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/litqa.all.root",
+  const string& resultDir =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/histograms/inmed/")
 
-  std::string script = std::string(TString(gSystem->Getenv("SCRIPT")).Data());
-  if (script == "yes") {
-    dir = std::string(TString(gSystem->Getenv("LMVM_MAIN_DIR")).Data());
-    fileName =
-      dir
-      + std::string(TString(gSystem->Getenv("LMVM_LITQA_FILE_NAME")).Data());
-  }
-
-  std::string outputDirTracking   = dir + "results_litqa_tracking/";
-  std::string outputDirClustering = dir + "results_litqa_clustering/";
+{
+  string outputDirTracking = resultDir + "results_litqa_tracking/";
   gSystem->mkdir(outputDirTracking.c_str(), true);
-  gSystem->mkdir(outputDirClustering.c_str(), true);
 
   CbmSimulationReport* trackingQaReport = new CbmLitTrackingQaReport();
-  trackingQaReport->Create(fileName, outputDirTracking);
+  trackingQaReport->Create(histRootFile, outputDirTracking);
+
+  //   string outputDirClustering = resultDir + "results_litqa_clustering/";
+  //   gSystem->mkdir(outputDirClustering.c_str(), true);
 
-  //  CbmSimulationReport* clusteringQaReport = new CbmLitClusteringQaReport();
-  // clusteringQaReport->Create(fileName, outputDirClustering);
+  //   CbmSimulationReport* clusteringQaReport = new CbmLitClusteringQaReport();
+  //   clusteringQaReport->Create(fileName, outputDirClustering);
 
   //   CbmSimulationReport* fitQaReport = new CbmLitFitQaReport();
   //   fitQaReport->Create(fileName, outputDir);
diff --git a/macro/analysis/dielectron/draw_many.py b/macro/analysis/dielectron/draw_many.py
new file mode 100755
index 0000000000..4fd301b546
--- /dev/null
+++ b/macro/analysis/dielectron/draw_many.py
@@ -0,0 +1,76 @@
+#!/usr/bin/env python3
+
+import os
+import sys
+import shutil
+
+
+def main():
+    
+    print ("Use 'draw_all.py' instead!")
+
+    """
+    dataDir = sys.argv[1]
+    geoSetup = sys.argv[2]
+    plutoParticle = sys.argv[3]
+    cbmrootConfigPath = "/lustre/nyx/cbm/users/slebedev/cbm/trunk/build/config.sh"
+    macroDir = "/lustre/nyx/cbm/users/slebedev/cbm/trunk/cbmroot/macro/analysis/dielectron/"
+    nofEvents = 10
+    taskId = os.environ.get('SLURM_ARRAY_TASK_ID')
+    jobId = os.environ.get('SLURM_ARRAY_JOB_ID')
+    colEnergy = "8gev"
+    colSystem = "auau"
+    print("dataDir:" + dataDir)
+
+    os.system(("source {}").format(cbmrootConfigPath))
+
+    workDir = dataDir + "/workdir/" + jobId + "_" + taskId + "/"
+    if os.path.exists(workDir):
+        shutil.rmtree(workDir)
+    os.makedirs(workDir)
+    os.chdir(workDir)
+
+    plutoFile = getPlutoPath(colSystem, colEnergy, plutoParticle, taskId)
+    urqmdFile = "/lustre/nyx/cbm/prod/gen/urqmd/auau/"+colEnergy+"/centr/urqmd.auau.8gev.centr." + str(taskId).zfill(5) + ".root"
+    mcFile = dataDir + "/mc." + taskId + ".root"
+    parFile = dataDir + "/param." + taskId + ".root"
+    digiFile = dataDir + "/digi." + taskId + ".root"
+    recoFile = dataDir + "/reco." + taskId + ".root"
+    litQaFile = dataDir + "/litqa." + taskId + ".root"
+    analysisFile = dataDir + "/analysis." + taskId + ".root"
+    geoSimFile = dataDir + "/geosim." + taskId + ".root"
+    os.system(('root -l -b -q {}/run_sim.C\(\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",{}\)').format(
+        macroDir, urqmdFile, plutoFile, mcFile, parFile, geoSimFile, geoSetup, nofEvents))
+    os.system(('root -l -b -q {}/run_digi.C\(\\"{}\\",\\"{}\\",\\"{}\\",{}\)').format(
+        macroDir, mcFile, parFile, digiFile, nofEvents))
+    os.system(('root -l -b -q {}/run_reco.C\(\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",{}\)').format(
+        macroDir, mcFile, parFile, digiFile, recoFile, geoSetup, nofEvents))
+    os.system(('root -l -b -q {}/run_litqa.C\(\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",{}\)').format(
+        macroDir, mcFile, parFile, digiFile, recoFile, litQaFile, geoSetup, nofEvents))
+    os.system(('root -l -b -q {}/run_analysis.C\(\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",\\"{}\\",{}\)').format(
+        macroDir, mcFile, parFile, digiFile, recoFile, analysisFile, plutoParticle, colSystem, colEnergy, geoSetup, nofEvents))
+
+
+def getPlutoPath(colSystem, colEnergy, plutoParticle, taskId):
+    if plutoParticle == "rho0":
+       return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktA/"+colEnergy+"/rho0/epem/pluto.auau."+colEnergy+".rho0.epem." + str(taskId).zfill(4) + ".root"
+    elif plutoParticle == "omegaepem":
+        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktA/"+colEnergy+"/omega/epem/pluto.auau."+colEnergy+".omega.epem." + str(taskId).zfill(4) + ".root"
+    elif plutoParticle == "omegadalitz":
+        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktA/"+colEnergy+"/omega/pi0epem/pluto.auau."+colEnergy+".omega.pi0epem." + str(taskId).zfill(4) + ".root"
+    elif plutoParticle == "phi":
+        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktA/"+colEnergy+"/phi/epem/pluto.auau."+colEnergy+".phi.epem." + str(taskId).zfill(4) + ".root"
+    elif plutoParticle == "pi0":
+        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktA/"+colEnergy+"/pi0/gepem/pluto.auau."+colEnergy+".pi0.gepem." + str(taskId).zfill(4) + ".root"
+    elif plutoParticle == "inmed":
+        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktRapp/"+colEnergy+"/rapp.inmed/epem/pluto.auau."+colEnergy+".rapp.inmed.epem." + str(taskId).zfill(4) + ".root"
+    elif plutoParticle == "qgp":
+        return "/lustre/nyx/cbm/prod/gen/pluto/auau/cktRapp/"+colEnergy+"/rapp.qgp/epem/pluto.auau."+colEnergy+".rapp.qgp.epem." + str(taskId).zfill(4) + ".root"
+    elif plutoParticle == "urqmd":
+        return ""
+"""
+
+if __name__ == '__main__':
+    main()
+    
+
diff --git a/macro/analysis/dielectron/draw_separate.py b/macro/analysis/dielectron/draw_separate.py
new file mode 100644
index 0000000000..44212da019
--- /dev/null
+++ b/macro/analysis/dielectron/draw_separate.py
@@ -0,0 +1,17 @@
+import os
+import sys
+import shutil
+
+def main()
+   particle = sys.argv[1]
+   histDir =  "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm"
+   histDirPart = histDir + "/sepHists/" + particle
+   os.makedirs(histDirPart)
+   os.chdir(histDirPart)
+   os.system(('root -l -b -q {}/draw_sep_ana.C\(\\"{}\\}').format(histDirPart, particle))
+   os.system(('root -l -b -q {}/draw_sep_litqa.C\(\\"{}\\}').format(histDirPart, particle))
+
+
+
+if __name__ == '__main__':
+    main()
diff --git a/macro/analysis/dielectron/hadd_many.py b/macro/analysis/dielectron/hadd_many.py
new file mode 100755
index 0000000000..f22dc82402
--- /dev/null
+++ b/macro/analysis/dielectron/hadd_many.py
@@ -0,0 +1,24 @@
+import os
+import shutil
+
+def main():
+    plutoParticles = ["inmed", "phi", "omegaepem", "omegadalitz", "qgp"];
+    dataDir = "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm"
+    
+    for plutoParticle in plutoParticles:
+        dataDirPluto = dataDir + "/" + plutoParticle
+
+        inFilesLitQa = dataDirPluto + "/litqa.*.root"
+        outFileLitQa = dataDirPluto + "/litqa.all.root"
+        if os.path.exists(outFileLitQa):
+            os.remove(outFileLitQa)
+        os.system(('hadd -j -T -f {} {}').format(outFileLitQa, inFilesLitQa))
+
+        inFilesAna = dataDirPluto + "/analysis.*.root"
+        outFileAna = dataDirPluto + "/analysis.all.root"
+        if os.path.exists(outFileAna):
+            os.remove(outFileAna)
+        os.system(('hadd -j -T -f {} {}').format(outFileAna, inFilesAna))
+
+if __name__ == '__main__':
+    main()
diff --git a/macro/analysis/dielectron/run_analysis.C b/macro/analysis/dielectron/run_analysis.C
index 37c9a1c886..50acca68b3 100644
--- a/macro/analysis/dielectron/run_analysis.C
+++ b/macro/analysis/dielectron/run_analysis.C
@@ -1,16 +1,17 @@
 void run_analysis(
   const string& mcFile =
-    "/lustre/nyx/cbm/users/slebedev/cbm/data/mc.00000.root",
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/mc.1.root",
   const string& parFile =
-    "/lustre/nyx/cbm/users/slebedev/cbm/data/param.00000.root",
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/param.1.root",
   const string& digiFile =
-    "/lustre/nyx/cbm/users/slebedev/cbm/data/digi.00000.root",
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/digi.1.root",
   const string& recoFile =
-    "/lustre/nyx/cbm/users/slebedev/cbm/data/reco.00000.root",
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/reco.1.root",
   const string& analysisFile =
-    "/lustre/nyx/cbm/users/slebedev/cbm/data/analysis.00000.root",
-  const string& plutoParticle = "omegaepem",
-  const string& energy        = "8gev",
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/analysis.1.root",
+  const string& plutoParticle = "inmed",
+  const string& colSystem     = "auau",
+  const string& colEnergy     = "8gev",
   const string& geoSetup      = "sis100_electron",
   int nEvents                 = 100) {
 
@@ -21,10 +22,7 @@ void run_analysis(
 
   remove(analysisFile.c_str());
 
-  TString setupFile  = srcDir + "/geometry/setup/setup_" + geoSetup + ".C";
-  TString setupFunct = "setup_" + geoSetup + "()";
-  gROOT->LoadMacro(setupFile);
-  gROOT->ProcessLine(setupFunct);
+  CbmSetup::Instance()->LoadSetup(geoSetup.c_str());
 
   std::cout << std::endl
             << "-I- " << myName << ": Defining parameter files " << std::endl;
@@ -40,7 +38,7 @@ void run_analysis(
   inputSource->AddFriend(recoFile.c_str());
   run->SetSource(inputSource);
   run->SetOutputFile(analysisFile.c_str());
-  run->SetGenerateRunInfo(kTRUE);
+  run->SetGenerateRunInfo(kFALSE);
 
   FairLogger::GetLogger()->SetLogScreenLevel("INFO");
   FairLogger::GetLogger()->SetLogVerbosityLevel("LOW");
@@ -55,7 +53,7 @@ void run_analysis(
   run->AddTask(l1);
 
   CbmAnaDielectronTask* task = new CbmAnaDielectronTask();
-  task->SetEnergyAndPlutoParticle(energy, plutoParticle);
+  task->SetEnergyAndPlutoParticle(colEnergy, plutoParticle);
   task->SetUseMvd(false);
   task->SetUseRich(true);
   task->SetUseTrd(true);
@@ -64,7 +62,6 @@ void run_analysis(
   // task->SetTrdAnnCut(0.85);
   // task->SetRichAnnCut(-0.4);
   run->AddTask(task);
-
   std::cout << std::endl
             << std::endl
             << "-I- " << myName << ": Set runtime DB" << std::endl;
@@ -77,7 +74,6 @@ void run_analysis(
     parIo2->open(parFileList, "in");
     rtdb->setSecondInput(parIo2);
   }
-
   std::cout << std::endl << "-I- " << myName << ": Initialise run" << std::endl;
   run->Init();
 
@@ -91,9 +87,9 @@ void run_analysis(
   timer.Stop();
   std::cout << std::endl << std::endl;
   std::cout << "Macro finished succesfully." << std::endl;
-  std::cout << "Output file is " << recoFile << std::endl;
+  std::cout << "Analysis file is " << analysisFile << std::endl;
   std::cout << "Parameter file is " << parFile << std::endl;
   std::cout << "Real time " << timer.RealTime() << " s, CPU time "
             << timer.CpuTime() << " s" << std::endl;
   std::cout << std::endl << "Test passed" << std::endl << "All ok" << std::endl;
-}
\ No newline at end of file
+}
diff --git a/macro/analysis/dielectron/run_digi.C b/macro/analysis/dielectron/run_digi.C
index 5c5f4e9e3e..517ec96695 100644
--- a/macro/analysis/dielectron/run_digi.C
+++ b/macro/analysis/dielectron/run_digi.C
@@ -1,10 +1,11 @@
-void run_digi(const string& mcFile =
-                "/lustre/nyx/cbm/users/slebedev/cbm/data/mc.00000.root",
-              const string& parFile =
-                "/lustre/nyx/cbm/users/slebedev/cbm/data/param.00000.root",
-              const string& digiFile =
-                "/lustre/nyx/cbm/users/slebedev/cbm/data/digi.00000.root",
-              int nEvents = 100) {
+void run_digi(
+  const string& mcFile =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/mc.2.root",
+  const string& parFile =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/param.2.root",
+  const string& digiFile =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/digi.2.root",
+  int nEvents = 1000) {
   TTree::SetMaxTreeSize(90000000000);
   FairLogger::GetLogger()->SetLogScreenLevel("INFO");
   FairLogger::GetLogger()->SetLogVerbosityLevel("LOW");
diff --git a/macro/analysis/dielectron/run_litqa.C b/macro/analysis/dielectron/run_litqa.C
index 7c9afe6987..cf39ea1da2 100644
--- a/macro/analysis/dielectron/run_litqa.C
+++ b/macro/analysis/dielectron/run_litqa.C
@@ -1,16 +1,16 @@
-void run_litqa(const string& mcFile =
-                 "/lustre/nyx/cbm/users/slebedev/cbm/data/mc.00000.root",
-               const string& parFile =
-                 "/lustre/nyx/cbm/users/slebedev/cbm/data/param.00000.root",
-               const string& digiFile =
-                 "/lustre/nyx/cbm/users/slebedev/cbm/data/digi.00000.root",
-               const string& recoFile =
-                 "/lustre/nyx/cbm/users/slebedev/cbm/data/reco.00000.root",
-               const string& qaFile =
-                 "/lustre/nyx/cbm/users/slebedev/cbm/data/litqa.00000.root",
-               const string& geoSetup = "sis100_electron",
-               //const string& resultDir = "results_litqa/",
-               int nEvents = 100) {
+void run_litqa(
+  const string& mcFile =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/mc.2.root",
+  const string& parFile =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/param.2.root",
+  const string& digiFile =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/digi.2.root",
+  const string& recoFile =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/reco.2.root",
+  const string& qaFile =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/litqa.2.root",
+  const string& geoSetup = "sis100_electron",
+  int nEvents            = 1000) {
   TTree::SetMaxTreeSize(90000000000);
 
   TString myName = "run_litqa";
@@ -18,19 +18,14 @@ void run_litqa(const string& mcFile =
 
   remove(qaFile.c_str());
 
-  TString setupFile  = srcDir + "/geometry/setup/setup_" + geoSetup + ".C";
-  TString setupFunct = "setup_" + geoSetup + "()";
-  gROOT->LoadMacro(setupFile);
-  gROOT->ProcessLine(setupFunct);
-
+  CbmSetup::Instance()->LoadSetup(geoSetup.c_str());
 
   std::cout << std::endl
             << "-I- " << myName << ": Defining parameter files " << std::endl;
   TList* parFileList = new TList();
   TString geoTag;
-
   // - TRD digitisation parameters
-  if (CbmSetup::Instance()->GetGeoTag(kTrd, geoTag)) {
+  if (CbmSetup::Instance()->GetGeoTag(ECbmModuleId::kTrd, geoTag)) {
     const Char_t* npar[4] = {"asic", "digi", "gas", "gain"};
     TObjString* trdParFile(NULL);
     for (Int_t i(0); i < 4; i++) {
@@ -43,7 +38,7 @@ void run_litqa(const string& mcFile =
   }
 
   // - TOF digitisation parameters
-  if (CbmSetup::Instance()->GetGeoTag(kTof, geoTag)) {
+  if (CbmSetup::Instance()->GetGeoTag(ECbmModuleId::kTof, geoTag)) {
     TObjString* tofFile =
       new TObjString(srcDir + "/parameters/tof/tof_" + geoTag + ".digi.par");
     parFileList->Add(tofFile);
@@ -55,19 +50,17 @@ void run_litqa(const string& mcFile =
     std::cout << "-I- " << myName << ": Using parameter file "
               << tofBdfFile->GetString() << std::endl;
   }
-
   TStopwatch timer;
   timer.Start();
   gDebug = 0;
 
-
   FairRunAna* run             = new FairRunAna();
   FairFileSource* inputSource = new FairFileSource(digiFile.c_str());
   inputSource->AddFriend(mcFile.c_str());
   inputSource->AddFriend(recoFile.c_str());
   run->SetSource(inputSource);
   run->SetOutputFile(qaFile.c_str());
-  run->SetGenerateRunInfo(kTRUE);
+  run->SetGenerateRunInfo(kFALSE);
 
 
   FairLogger::GetLogger()->SetLogScreenLevel("INFO");
@@ -80,8 +73,8 @@ void run_litqa(const string& mcFile =
 
   // RICH reco QA
   CbmRichRecoQa* richRecoQa = new CbmRichRecoQa();
-  richRecoQa->SetOutputDir(resultDir);
-  run->AddTask(richRecoQa);
+  richRecoQa->SetOutputDir("");
+  // run->AddTask(richRecoQa);
 
   // Reconstruction Qa
   CbmLitTrackingQa* trackingQa = new CbmLitTrackingQa();
@@ -96,9 +89,9 @@ void run_litqa(const string& mcFile =
   trackingQa->SetVerbose(0);
   trackingQa->SetMinNofHitsRich(7);
   trackingQa->SetQuotaRich(0.6);
-  trackingQa->SetOutputDir(resultDir);
+  trackingQa->SetOutputDir("");
   trackingQa->SetPRange(12, 0., 6.);
-  // trackingQa->SetTrdAnnCut(trdAnnCut);
+  //trackingQa->SetTrdAnnCut(trdAnnCut);  // removed comment
   std::vector<std::string> trackCat, richCat;
   trackCat.push_back("All");
   trackCat.push_back("Electron");
@@ -106,22 +99,22 @@ void run_litqa(const string& mcFile =
   richCat.push_back("ElectronReference");
   trackingQa->SetTrackCategories(trackCat);
   trackingQa->SetRingCategories(richCat);
-  // run->AddTask(trackingQa);
+  run->AddTask(trackingQa);
 
   CbmLitFitQa* fitQa = new CbmLitFitQa();
   fitQa->SetMvdMinNofHits(0);
   fitQa->SetStsMinNofHits(6);
   fitQa->SetMuchMinNofHits(10);
   fitQa->SetTrdMinNofHits(2);
-  fitQa->SetOutputDir(resultDir);
+  fitQa->SetOutputDir("");
   // run->AddTask(fitQa);
 
   CbmLitClusteringQa* clusteringQa = new CbmLitClusteringQa();
-  clusteringQa->SetOutputDir(resultDir);
+  clusteringQa->SetOutputDir("");
   // run->AddTask(clusteringQa);
 
   CbmLitTofQa* tofQa = new CbmLitTofQa();
-  tofQa->SetOutputDir(std::string(resultDir));
+  tofQa->SetOutputDir(std::string(""));
   // run->AddTask(tofQa);
 
   std::cout << std::endl
@@ -136,7 +129,6 @@ void run_litqa(const string& mcFile =
     parIo2->open(parFileList, "in");
     rtdb->setSecondInput(parIo2);
   }
-
   std::cout << std::endl << "-I- " << myName << ": Initialise run" << std::endl;
   run->Init();
 
@@ -150,7 +142,7 @@ void run_litqa(const string& mcFile =
   timer.Stop();
   std::cout << std::endl << std::endl;
   std::cout << "Macro finished succesfully." << std::endl;
-  std::cout << "Output file is " << recoFile << std::endl;
+  std::cout << "Qa file is " << qaFile << std::endl;
   std::cout << "Parameter file is " << parFile << std::endl;
   std::cout << "Real time " << timer.RealTime() << " s, CPU time "
             << timer.CpuTime() << " s" << std::endl;
diff --git a/macro/analysis/dielectron/run_reco.C b/macro/analysis/dielectron/run_reco.C
index 357378bd33..6b4ed3a8e6 100644
--- a/macro/analysis/dielectron/run_reco.C
+++ b/macro/analysis/dielectron/run_reco.C
@@ -1,13 +1,14 @@
-void run_reco(const string& mcFile =
-                "/lustre/nyx/cbm/users/slebedev/cbm/data/mc.00000.root",
-              const string& parFile =
-                "/lustre/nyx/cbm/users/slebedev/cbm/data/param.00000.root",
-              const string& digiFile =
-                "/lustre/nyx/cbm/users/slebedev/cbm/data/digi.00000.root",
-              const string& recoFile =
-                "/lustre/nyx/cbm/users/slebedev/cbm/data/reco.00000.root",
-              const string& geoSetup = "sis100_electron",
-              int nEvents            = 100) {
+void run_reco(
+  const string& mcFile =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/mc.1.root",
+  const string& parFile =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/param.1.root",
+  const string& digiFile =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/digi.1.root",
+  const string& recoFile =
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/reco.1.root",
+  const string& geoSetup = "sis100_electron",
+  int nEvents            = 1000) {
   TTree::SetMaxTreeSize(90000000000);
 
   TString myName = "run_reco";
@@ -15,11 +16,7 @@ void run_reco(const string& mcFile =
 
   remove(recoFile.c_str());
 
-  TString setupFile  = srcDir + "/geometry/setup/setup_" + geoSetup + ".C";
-  TString setupFunct = "setup_" + geoSetup + "()";
-  gROOT->LoadMacro(setupFile);
-  gROOT->ProcessLine(setupFunct);
-
+  CbmSetup::Instance()->LoadSetup(geoSetup.c_str());
 
   std::cout << std::endl
             << "-I- " << myName << ": Defining parameter files " << std::endl;
@@ -27,7 +24,7 @@ void run_reco(const string& mcFile =
   TString geoTag;
 
   // - TRD digitisation parameters
-  if (CbmSetup::Instance()->GetGeoTag(kTrd, geoTag)) {
+  if (CbmSetup::Instance()->GetGeoTag(ECbmModuleId::kTrd, geoTag)) {
     const Char_t* npar[4] = {"asic", "digi", "gas", "gain"};
     TObjString* trdParFile(NULL);
     for (Int_t i(0); i < 4; i++) {
@@ -40,7 +37,7 @@ void run_reco(const string& mcFile =
   }
 
   // - TOF digitisation parameters
-  if (CbmSetup::Instance()->GetGeoTag(kTof, geoTag)) {
+  if (CbmSetup::Instance()->GetGeoTag(ECbmModuleId::kTof, geoTag)) {
     TObjString* tofFile =
       new TObjString(srcDir + "/parameters/tof/tof_" + geoTag + ".digi.par");
     parFileList->Add(tofFile);
@@ -62,7 +59,7 @@ void run_reco(const string& mcFile =
   inputSource->AddFriend(mcFile.c_str());
   run->SetSource(inputSource);
   run->SetOutputFile(recoFile.c_str());
-  run->SetGenerateRunInfo(kTRUE);
+  run->SetGenerateRunInfo(kFALSE);
 
   FairLogger::GetLogger()->SetLogScreenLevel("INFO");
   FairLogger::GetLogger()->SetLogVerbosityLevel("LOW");
@@ -84,6 +81,12 @@ void run_reco(const string& mcFile =
   std::cout << "-I-" << myName << ": " << macroName << " excuted successfully"
             << std::endl;
 
+  CbmTrdSetTracksPidLike* trdLI =
+    new CbmTrdSetTracksPidLike("TRDLikelihood", "TRDLikelihood");
+  trdLI->SetUseMCInfo(kTRUE);
+  trdLI->SetUseMomDependence(kTRUE);
+  run->AddTask(trdLI);
+
   CbmMatchRecoToMC* matchRecoToMc = new CbmMatchRecoToMC();
   run->AddTask(matchRecoToMc);
 
@@ -113,7 +116,7 @@ void run_reco(const string& mcFile =
   timer.Stop();
   std::cout << std::endl << std::endl;
   std::cout << "Macro finished succesfully." << std::endl;
-  std::cout << "Output file is " << recoFile << std::endl;
+  std::cout << "Reco file is " << recoFile << std::endl;
   std::cout << "Parameter file is " << parFile << std::endl;
   std::cout << "Real time " << timer.RealTime() << " s, CPU time "
             << timer.CpuTime() << " s" << std::endl;
diff --git a/macro/analysis/dielectron/run_sim.C b/macro/analysis/dielectron/run_sim.C
index 07137263f7..29d3f103ef 100644
--- a/macro/analysis/dielectron/run_sim.C
+++ b/macro/analysis/dielectron/run_sim.C
@@ -1,18 +1,18 @@
 void run_sim(
   const string& urqmdFile =
     "/lustre/nyx/cbm/prod/gen/urqmd/auau/8gev/centr/"
-    "urqmd.auau.8gev.centr.00000.root",  // if "", no urqmd
+    "urqmd.auau.8gev.centr.00001.root",  // if "", no urqmd
   const string& plutoFile =
     "/lustre/nyx/cbm/prod/gen/pluto/auau/cktA/8gev/omega/epem/"
-    "pluto.auau.8gev.omega.epem.0000.root",  // if "", no pluto particles are embedded into event
+    "pluto.auau.8gev.omega.epem.0001.root",  // if "", no pluto particles are embedded into event
   const string& mcFile =
-    "/lustre/nyx/cbm/users/slebedev/cbm/data/mc.00000.root",
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/mc.2.root",
   const string& parFile =
-    "/lustre/nyx/cbm/users/slebedev/cbm/data/param.00000.root",
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/param.2.root",
   const string& geoFile =
-    "/lustre/nyx/cbm/users/slebedev/cbm/data/geosim.00000.root",
+    "/lustre/nyx/cbm/users/criesen/cbm/data/lmvm/inmed/geosim.2.root",
   const string& geoSetup = "sis100_electron",
-  int nEvents            = 10) {
+  int nEvents            = 1000) {
   TTree::SetMaxTreeSize(90000000000);
   FairLogger::GetLogger()->SetLogScreenLevel("INFO");
   FairLogger::GetLogger()->SetLogVerbosityLevel("LOW");
@@ -38,7 +38,6 @@ void run_sim(
   run.SetBeamPosition(0., 0., 0.1, 0.1);
   run.Run(nEvents);
 
-
   timer.Stop();
   std::cout << std::endl << std::endl;
   std::cout << "Macro finished successfully." << std::endl;
diff --git a/reco/littrack/cbm/elid/CbmLitGlobalElectronId.cxx b/reco/littrack/cbm/elid/CbmLitGlobalElectronId.cxx
index df5f5ac40f..aba14f5433 100644
--- a/reco/littrack/cbm/elid/CbmLitGlobalElectronId.cxx
+++ b/reco/littrack/cbm/elid/CbmLitGlobalElectronId.cxx
@@ -21,7 +21,7 @@
 #include <cmath>
 
 CbmLitGlobalElectronId::CbmLitGlobalElectronId()
-  : fTrdAnnCut(0.85)
+  : fTrdAnnCut(0.6)
   , fRichAnnCut(-0.4)
   , fRichUseAnn(true)
   , fRichMeanA(-1.)
@@ -89,7 +89,7 @@ Bool_t CbmLitGlobalElectronId::IsTrdElectron(Int_t globalTrackIndex,
   CbmTrdTrack* trdTrack = static_cast<CbmTrdTrack*>(fTrdTracks->At(trdId));
   if (NULL == trdTrack) return false;
 
-  Double_t ann = trdTrack->GetPidANN();
+  Double_t ann = trdTrack->GetPidLikeEL();
   if (ann > fTrdAnnCut)
     return true;
   else
@@ -138,7 +138,7 @@ Double_t CbmLitGlobalElectronId::GetTrdAnn(Int_t globalTrackIndex,
   CbmTrdTrack* trdTrack = static_cast<CbmTrdTrack*>(fTrdTracks->At(trdId));
   if (NULL == trdTrack) return -1.;
 
-  return trdTrack->GetPidANN();
+  return trdTrack->GetPidLikeEL();
 }
 
 ClassImp(CbmLitGlobalElectronId);
-- 
GitLab