From 04a5f6bd17ba9ae812970437fa6d64f121b683c9 Mon Sep 17 00:00:00 2001
From: sgorbuno <se.gorbunov@gsi.de>
Date: Sat, 7 Nov 2020 14:21:42 +0000
Subject: [PATCH] Clean up Much transport QA; replace TPie with CbmQaPie

---
 sim/detectors/much/qa/CbmMuchTransportQa.cxx | 116 +++++++------------
 sim/detectors/much/qa/CbmMuchTransportQa.h   |   8 +-
 2 files changed, 47 insertions(+), 77 deletions(-)

diff --git a/sim/detectors/much/qa/CbmMuchTransportQa.cxx b/sim/detectors/much/qa/CbmMuchTransportQa.cxx
index 867c33e271..5556f27e3a 100644
--- a/sim/detectors/much/qa/CbmMuchTransportQa.cxx
+++ b/sim/detectors/much/qa/CbmMuchTransportQa.cxx
@@ -14,30 +14,24 @@
 #include "CbmMuchPoint.h"
 #include "CbmMuchStation.h"
 #include "CbmQaCanvas.h"
+#include "CbmQaPie.h"
 #include "TClonesArray.h"
 #include "TDatabasePDG.h"
 #include "TH1.h"
 #include "TH2.h"
 #include "TLegend.h"
-#include "TPie.h"
-#include "TPieSlice.h"
 #include "TStyle.h"
 #include <FairRootManager.h>
 #include <FairSink.h>
 #include <FairTask.h>
 #include <Logger.h>
-#include <ROOT/RConfig.h>
 #include <TAxis.h>
 #include <TDirectory.h>
-#include <TGenericClassInfo.h>
 #include <TMath.h>
 #include <TParameter.h>
 #include <TString.h>
 #include <TVector3.h>
-#include <stdlib.h>
-#include <sys/types.h>
 #include <vector>
-class TParticlePDG;
 
 #define BINS_STA fNstations, 0, fNstations
 
@@ -55,11 +49,9 @@ CbmMuchTransportQa::CbmMuchTransportQa(const char* name, Int_t verbose)
   , fvFraction()
   , fvMcPointPRatio()
   , fvMcPointPrimRatio() {}
-// -------------------------------------------------------------------------
 
 // -------------------------------------------------------------------------
 CbmMuchTransportQa::~CbmMuchTransportQa() { DeInit(); }
-// -------------------------------------------------------------------------
 
 // -------------------------------------------------------------------------
 void CbmMuchTransportQa::DeInit() {
@@ -114,15 +106,13 @@ void CbmMuchTransportQa::DeInit() {
   SafeDelete(fCanvStationXY);
   SafeDelete(fCanvStationPhiZ);
   SafeDelete(fCanvStationRZ);
-  SafeDelete(fCanvUsNtra);
+  SafeDelete(fCanvNtra);
   SafeDelete(fCanvStationPRatio);
   SafeDelete(fCanvStationPrimRatio);
 
   fNstations = 0;
   fOutFolder.Clear();
 }
-// -------------------------------------------------------------------------
-
 
 // -------------------------------------------------------------------------
 InitStatus CbmMuchTransportQa::Init() {
@@ -173,8 +163,8 @@ InitStatus CbmMuchTransportQa::Init() {
   gDirectory = oldDirectory;
   return kSUCCESS;
 }
-// -------------------------------------------------------------------------
 
+// -------------------------------------------------------------------------
 void CbmMuchTransportQa::InitCountingHistos() {
 
   fvUsNtra.clear();
@@ -197,6 +187,7 @@ void CbmMuchTransportQa::InitCountingHistos() {
   }
 }
 
+// -------------------------------------------------------------------------
 void CbmMuchTransportQa::InitFractionHistos() {
 
   fvFraction.clear();
@@ -230,11 +221,13 @@ void CbmMuchTransportQa::InitFractionHistos() {
   }
 }
 
+// -------------------------------------------------------------------------
 void CbmMuchTransportQa::Init2dSpatialDistributionHistos() {
 
   fvMcPointXY.resize(fNstations);
   fvMcPointPhiZ.resize(fNstations);
   fvMcPointRZ.resize(fNstations);
+  gStyle->SetOptStat(0);
 
   for (Int_t i = 0; i < fNstations; i++) {
     CbmMuchStation* station = CbmMuchGeoScheme::Instance()->GetStation(i);
@@ -274,26 +267,28 @@ void CbmMuchTransportQa::Init2dSpatialDistributionHistos() {
   }
 }
 
+// -------------------------------------------------------------------------
 void CbmMuchTransportQa::InitRatioPieCharts() {
 
   fvMcPointPRatio.resize(fNstations);
   fvMcPointPrimRatio.resize(fNstations);
   for (Int_t i = 0; i < fNstations; i++) {
     fvMcPointPRatio[i] =
-      new TPie(Form("fvMcPointPRatio%i", i + 1),
-               Form("McPoint Particle Ratios: Station %i", i + 1),
-               5);
+      new CbmQaPie(Form("fvMcPointPRatio%i", i + 1),
+                   Form("McPoint Particle Ratios: Station %i", i + 1),
+                   5);
 
     fvMcPointPrimRatio[i] =
-      new TPie(Form("fvMcPointPrimRatio%i", i + 1),
-               Form("McPoint Primary/Secondary Track: Station %i", i + 1),
-               2);
+      new CbmQaPie(Form("fvMcPointPrimRatio%i", i + 1),
+                   Form("McPoint Primary/Secondary Track: Station %i", i + 1),
+                   2);
 
     histFolder->Add(fvMcPointPRatio[i]);
     histFolder->Add(fvMcPointPrimRatio[i]);
   }
 }
 
+// -------------------------------------------------------------------------
 void CbmMuchTransportQa::InitCanvases() {
 
   fCanvStationXY =
@@ -308,9 +303,9 @@ void CbmMuchTransportQa::InitCanvases() {
     new CbmQaCanvas("cMcPointRZ", "Much: MC point R vs Z", 2 * 800, 2 * 400);
   fCanvStationRZ->Divide2D(fNstations);
 
-  fCanvUsNtra =
-    new CbmQaCanvas("cUsNtra", "Much: MC unscaled counts", 3 * 400, 3 * 400);
-  fCanvUsNtra->Divide2D(9);
+  fCanvNtra = new CbmQaCanvas(
+    "cNparticles", "Much: Particle counts per event", 2 * 800, 2 * 400);
+  fCanvNtra->Divide2D(8);
 
   fCanvStationPRatio = new CbmQaCanvas(
     "cMcPointPRatios", "Much: MC particle ratios", 2 * 400, 2 * 400);
@@ -326,7 +321,7 @@ void CbmMuchTransportQa::InitCanvases() {
   fOutFolder.Add(fCanvStationXY);
   fOutFolder.Add(fCanvStationPhiZ);
   fOutFolder.Add(fCanvStationRZ);
-  fOutFolder.Add(fCanvUsNtra);
+  fOutFolder.Add(fCanvNtra);
   fOutFolder.Add(fCanvStationPRatio);
   fOutFolder.Add(fCanvStationPrimRatio);
 }
@@ -336,7 +331,6 @@ InitStatus CbmMuchTransportQa::ReInit() {
   DeInit();
   return Init();
 }
-// -------------------------------------------------------------------------
 
 // -------------------------------------------------------------------------
 void CbmMuchTransportQa::SetParContainers() {
@@ -357,7 +351,6 @@ void CbmMuchTransportQa::SetParContainers() {
   // bool mcbmFlag = geoTag.Contains("mcbm", TString::kIgnoreCase);
   // CbmMuchGeoScheme::Instance()->Init(stations, mcbmFlag);
 }
-// -------------------------------------------------------------------------
 
 // -------------------------------------------------------------------------
 void CbmMuchTransportQa::Exec(Option_t*) {
@@ -392,18 +385,10 @@ void CbmMuchTransportQa::Exec(Option_t*) {
 
     Int_t motherId = mcTrack->GetMotherId();
     Int_t pdgCode  = mcTrack->GetPdgCode();
-    //if (pdgCode == 0) continue;
-    TParticlePDG* particle = TDatabasePDG::Instance()->GetParticle(pdgCode);
-    if (!particle) {
-      LOG(warning) << "Particle with pdg code " << pdgCode << " doesn't exist";
-      //continue;
-    }
-    if (pdgCode == 0 || pdgCode == 22 ||  // photons
-        pdgCode == 2112)                  // neutrons
+    if (pdgCode == 22 ||  // photons
+        pdgCode == 2112)  // neutrons
     {
-      LOG(warning) << "Particle with pdg code " << pdgCode
-                   << " left an mc point";
-      //continue;
+      continue;
     }
 
     if (!(trackStaCross[trackId] & stMask)) {
@@ -414,6 +399,7 @@ void CbmMuchTransportQa::Exec(Option_t*) {
   }
 }
 
+// -------------------------------------------------------------------------
 void CbmMuchTransportQa::FillCountingHistos(Int_t stId,
                                             Int_t motherId,
                                             Int_t pdgCode) {
@@ -441,8 +427,8 @@ void CbmMuchTransportQa::FillCountingHistos(Int_t stId,
       break;
   }
 }
-// -------------------------------------------------------------------------
 
+// -------------------------------------------------------------------------
 void CbmMuchTransportQa::Fill2dSpatialDistributionHistos(CbmMuchPoint* point,
                                                          Int_t stId) {
 
@@ -480,25 +466,21 @@ TFolder& CbmMuchTransportQa::GetQa() {
   gDirectory = oldDirectory;
   return fOutFolder;
 }
-// -------------------------------------------------------------------------
 
+// -------------------------------------------------------------------------
 void CbmMuchTransportQa::DrawCanvases() {
 
   for (Int_t i = 0; i < fNstations; i++) {
     fCanvStationXY->cd(i + 1);
-    gStyle->SetOptStat(0);
     fvMcPointXY[i]->DrawCopy("colz", "");
 
     fCanvStationPhiZ->cd(i + 1);
-    gStyle->SetOptStat(0);
     fvMcPointPhiZ[i]->DrawCopy("colz", "");
 
     fCanvStationRZ->cd(i + 1);
-    gStyle->SetOptStat(0);
     fvMcPointRZ[i]->DrawCopy("colz", "");
 
     fCanvStationPRatio->cd(i + 1);
-    gStyle->SetOptStat(0);
     fvMcPointPRatio[i]->DrawClone("nol <");
 
     TLegend* PRatioPieLeg = fvMcPointPRatio[i]->MakeLegend();
@@ -506,7 +488,6 @@ void CbmMuchTransportQa::DrawCanvases() {
     PRatioPieLeg->SetY2(.86);
 
     fCanvStationPrimRatio->cd(i + 1);
-    gStyle->SetOptStat(0);
     fvMcPointPrimRatio[i]->DrawClone("nol <");
 
     TLegend* PrimRatioPieLeg = fvMcPointPrimRatio[i]->MakeLegend();
@@ -514,47 +495,37 @@ void CbmMuchTransportQa::DrawCanvases() {
     PrimRatioPieLeg->SetY2(.86);
     PrimRatioPieLeg->SetX1(.40);
     PrimRatioPieLeg->SetX2(.90);
-
-    gStyle->SetOptStat(1110);
   }
 
-  fCanvUsNtra->cd(1);
-  gStyle->SetOptStat(0);
-  fhUsNtraAll->DrawCopy("colz", "");
+  double scale = (fhNevents.GetVal() > 0) ? 1. / fhNevents.GetVal() : 0;
+  int i        = 1;
 
-  fCanvUsNtra->cd(2);
-  gStyle->SetOptStat(0);
+  fCanvNtra->cd(i++);
   fhNtracks->DrawCopy("colz", "");
 
-  fCanvUsNtra->cd(3);
-  gStyle->SetOptStat(0);
-  fhUsNtraPrim->DrawCopy("colz", "");
+  fCanvNtra->cd(i++);
+  fhUsNtraPrim->DrawCopy("colz", "")->Scale(scale);
 
-  fCanvUsNtra->cd(4);
-  gStyle->SetOptStat(0);
-  fhUsNtraSec->DrawCopy("colz", "");
+  fCanvNtra->cd(i++);
+  fhUsNtraSec->DrawCopy("colz", "")->Scale(scale);
 
-  fCanvUsNtra->cd(5);
-  gStyle->SetOptStat(0);
-  fhUsNtraPr->DrawCopy("colz", "");
+  fCanvNtra->cd(i++);
+  fhUsNtraPr->DrawCopy("colz", "")->Scale(scale);
 
-  fCanvUsNtra->cd(6);
-  gStyle->SetOptStat(0);
-  fhUsNtraPi->DrawCopy("colz", "");
+  fCanvNtra->cd(i++);
+  fhUsNtraPi->DrawCopy("colz", "")->Scale(scale);
 
-  fCanvUsNtra->cd(7);
-  gStyle->SetOptStat(0);
-  fhUsNtraEl->DrawCopy("colz", "");
+  fCanvNtra->cd(i++);
+  fhUsNtraEl->DrawCopy("colz", "")->Scale(scale);
 
-  fCanvUsNtra->cd(8);
-  gStyle->SetOptStat(0);
-  fhUsNtraMu->DrawCopy("colz", "");
+  fCanvNtra->cd(i++);
+  fhUsNtraMu->DrawCopy("colz", "")->Scale(scale);
 
-  fCanvUsNtra->cd(9);
-  gStyle->SetOptStat(0);
-  fhUsNtraKa->DrawCopy("colz", "");
+  fCanvNtra->cd(i++);
+  fhUsNtraKa->DrawCopy("colz", "")->Scale(scale);
 }
 
+// -------------------------------------------------------------------------
 void CbmMuchTransportQa::MakePRatioPieCharts() {
 
   for (Int_t i = 0; i < fNstations; i++) {
@@ -618,5 +589,4 @@ void CbmMuchTransportQa::Finish() {
   }
   FairSink* sink = FairRootManager::Instance()->GetSink();
   sink->WriteObject(&GetQa(), nullptr);
-}
-// -------------------------------------------------------------------------
+}
\ No newline at end of file
diff --git a/sim/detectors/much/qa/CbmMuchTransportQa.h b/sim/detectors/much/qa/CbmMuchTransportQa.h
index c508367830..bf1f6e78b5 100644
--- a/sim/detectors/much/qa/CbmMuchTransportQa.h
+++ b/sim/detectors/much/qa/CbmMuchTransportQa.h
@@ -24,7 +24,7 @@ class TClonesArray;
 class TH1F;
 class TH2F;
 class TMemberInspector;
-class TPie;
+class CbmQaPie;
 
 /// QA for the MUCH detector after a "transport" step of the simulation.
 /// The class reimplements corresponding QA checks from old CbmMuchHitFinderQa class
@@ -109,16 +109,16 @@ private:
   std::vector<TH1F*> fvFraction;   /// pointers to the above histos
 
   /// output pie charts
-  std::vector<TPie*>
+  std::vector<CbmQaPie*>
     fvMcPointPRatio;  /// MC point particle ratio pie charts [N stations]
-  std::vector<TPie*>
+  std::vector<CbmQaPie*>
     fvMcPointPrimRatio;  /// MC point particle ratio pie charts [N stations]
 
   // output canvaces with histogramm collections
   CbmQaCanvas* fCanvStationXY   = nullptr;
   CbmQaCanvas* fCanvStationPhiZ = nullptr;
   CbmQaCanvas* fCanvStationRZ   = nullptr;
-  CbmQaCanvas* fCanvUsNtra      = nullptr;
+  CbmQaCanvas* fCanvNtra        = nullptr;
 
   // output canvaces with pie chart collections
   CbmQaCanvas* fCanvStationPRatio    = nullptr;
-- 
GitLab