From 45cf6444ddbab16f3285abf3687ea804c9d2efd8 Mon Sep 17 00:00:00 2001 From: Dominik Smith <d.smith@gsi.de> Date: Mon, 12 Oct 2020 11:08:45 +0200 Subject: [PATCH] CbmMuchTransportQa: Added pie charts to display particle ratios. --- macro/run/run_qa.C | 1 + sim/detectors/much/qa/CbmMuchTransportQa.cxx | 117 ++++++++++++++++++- sim/detectors/much/qa/CbmMuchTransportQa.h | 15 +++ 3 files changed, 131 insertions(+), 2 deletions(-) diff --git a/macro/run/run_qa.C b/macro/run/run_qa.C index c77ad24d82..dffdca3721 100644 --- a/macro/run/run_qa.C +++ b/macro/run/run_qa.C @@ -141,6 +141,7 @@ void run_qa(Int_t nEvents = 0, run->SetSink(sink); TString monitorFile {sinkFile}; + monitorFile.ReplaceAll("qa", "qa.monitor"); FairMonitor::GetMonitor()->EnableMonitor(kTRUE, monitorFile); // ------------------------------------------------------------------------ diff --git a/sim/detectors/much/qa/CbmMuchTransportQa.cxx b/sim/detectors/much/qa/CbmMuchTransportQa.cxx index 0892cee664..772ea6349a 100644 --- a/sim/detectors/much/qa/CbmMuchTransportQa.cxx +++ b/sim/detectors/much/qa/CbmMuchTransportQa.cxx @@ -24,7 +24,6 @@ #include "TDatabasePDG.h" #include "TParticlePDG.h" - #include "TString.h" #include "TClonesArray.h" @@ -32,6 +31,9 @@ #include "CbmQaCanvas.h" #include "TH1.h" #include "TH2.h" +#include "TLegend.h" +#include "TPie.h" +#include "TPieSlice.h" #include "TStyle.h" #include <cassert> @@ -48,7 +50,9 @@ CbmMuchTransportQa::CbmMuchTransportQa(const char* name, Int_t verbose) , fvMcPointXY() , fvMcPointPhiZ() , fvMcPointRZ() - , fvFraction() {} + , fvFraction() + , fvMcPointPRatio() + , fvMcPointPrimRatio() {} // ------------------------------------------------------------------------- @@ -88,6 +92,13 @@ void CbmMuchTransportQa::DeInit() { } fvMcPointRZ.clear(); + for (uint i = 0; i < fvMcPointPRatio.size(); i++) { + SafeDelete(fvMcPointPRatio[i]); + } + for (uint i = 0; i < fvMcPointPrimRatio.size(); i++) { + SafeDelete(fvMcPointPrimRatio[i]); + } + SafeDelete(fhNtracks); SafeDelete(fhFractionPrim); SafeDelete(fhFractionSec); @@ -100,10 +111,16 @@ void CbmMuchTransportQa::DeInit() { fvUsNtra.clear(); fvFraction.clear(); + fvMcPointPRatio.clear(); + fvMcPointPrimRatio.clear(); + SafeDelete(fCanvStationXY); SafeDelete(fCanvStationPhiZ); SafeDelete(fCanvStationRZ); + SafeDelete(fCanvStationPRatio); + SafeDelete(fCanvStationPrimRatio); + fNstations = 0; fOutFolder.Clear(); } @@ -206,6 +223,9 @@ InitStatus CbmMuchTransportQa::Init() { fvMcPointPhiZ.resize(fNstations); fvMcPointRZ.resize(fNstations); + fvMcPointPRatio.resize(fNstations); + fvMcPointPrimRatio.resize(fNstations); + for (Int_t i = 0; i < fNstations; i++) { CbmMuchStation* station = CbmMuchGeoScheme::Instance()->GetStation(i); if (!station) { @@ -246,6 +266,20 @@ InitStatus CbmMuchTransportQa::Init() { rMin - 0.1 * dR, rMax + 0.1 * dR); histFolder->Add(fvMcPointRZ[i]); + + fvMcPointPRatio[i] = + new TPie(Form("fvMcPointPRatio%i", i + 1), + Form("McPoint Particle Ratios: Station %i", i + 1), + 5); + + //histFolder->Add(fvMcPointPRatio[i]); + + fvMcPointPrimRatio[i] = + new TPie(Form("fvMcPointPrimRatio%i", i + 1), + Form("McPoint Primary/Secondary Track: Station %i", i + 1), + 2); + + //histFolder->Add(fvMcPointPrimRatio[i]); } fCanvStationXY = @@ -263,6 +297,19 @@ InitStatus CbmMuchTransportQa::Init() { fCanvStationRZ->Divide2D(fNstations); fOutFolder.Add(fCanvStationRZ); + fCanvStationPRatio = new CbmQaCanvas( + "cMcPointPRatios", "Much: MC particle ratios", 2 * 400, 2 * 400); + fCanvStationPRatio->Divide2D(fNstations); + fOutFolder.Add(fCanvStationPRatio); + + fCanvStationPrimRatio = + new CbmQaCanvas("cMcPointPrimRatios", + "Much: MC primary/secondary track ratios", + 2 * 400, + 2 * 400); + fCanvStationPrimRatio->Divide2D(fNstations); + fOutFolder.Add(fCanvStationPrimRatio); + gDirectory = oldDirectory; return kSUCCESS; @@ -421,6 +468,54 @@ TFolder& CbmMuchTransportQa::GetQa() { fvFraction[i]->Scale(100.); } + for (Int_t i = 0; i < fNstations; i++) { + Double_t PRatios[] = {fhFractionEl->GetBinContent(i + 1), + fhFractionPr->GetBinContent(i + 1), + fhFractionPi->GetBinContent(i + 1), + fhFractionMu->GetBinContent(i + 1), + fhFractionKa->GetBinContent(i + 1)}; + + Int_t PRatiosColors[] = {4, 3, 2, 5, 6}; + + fvMcPointPRatio[i]->SetEntryVal(0, PRatios[0]); + fvMcPointPRatio[i]->SetEntryVal(1, PRatios[1]); + fvMcPointPRatio[i]->SetEntryVal(2, PRatios[2]); + fvMcPointPRatio[i]->SetEntryVal(3, PRatios[3]); + fvMcPointPRatio[i]->SetEntryVal(4, PRatios[4]); + fvMcPointPRatio[i]->SetEntryFillColor(0, PRatiosColors[0]); + fvMcPointPRatio[i]->SetEntryFillColor(1, PRatiosColors[1]); + fvMcPointPRatio[i]->SetEntryFillColor(2, PRatiosColors[2]); + fvMcPointPRatio[i]->SetEntryFillColor(3, PRatiosColors[3]); + fvMcPointPRatio[i]->SetEntryFillColor(4, PRatiosColors[4]); + fvMcPointPRatio[i]->GetSlice(0)->SetTitle(Form("e: %.1f %%", PRatios[0])); + fvMcPointPRatio[i]->GetSlice(1)->SetTitle(Form("p: %.1f %%", PRatios[1])); + fvMcPointPRatio[i]->GetSlice(2)->SetTitle( + Form("#pi: %.1f %%", PRatios[2])); + fvMcPointPRatio[i]->GetSlice(3)->SetTitle( + Form("#mu: %.1f %%", PRatios[3])); + fvMcPointPRatio[i]->GetSlice(4)->SetTitle(Form("K: %.1f %%", PRatios[4])); + fvMcPointPRatio[i]->SetRadius(.33); + fvMcPointPRatio[i]->SetLabelsOffset(-.1); + fvMcPointPRatio[i]->SetLabelFormat(""); + + Double_t PrimRatios[] = {fhFractionPrim->GetBinContent(i + 1), + fhFractionSec->GetBinContent(i + 1)}; + + Int_t PrimRatiosColors[] = {6, 4}; + + fvMcPointPrimRatio[i]->SetEntryVal(0, PrimRatios[0]); + fvMcPointPrimRatio[i]->SetEntryVal(1, PrimRatios[1]); + fvMcPointPrimRatio[i]->SetEntryFillColor(0, PrimRatiosColors[0]); + fvMcPointPrimRatio[i]->SetEntryFillColor(1, PrimRatiosColors[1]); + fvMcPointPrimRatio[i]->GetSlice(0)->SetTitle( + Form("Primary: %.1f %%", PrimRatios[0])); + fvMcPointPrimRatio[i]->GetSlice(1)->SetTitle( + Form("Secondary: %.1f %%", PrimRatios[1])); + fvMcPointPrimRatio[i]->SetRadius(.33); + fvMcPointPrimRatio[i]->SetLabelsOffset(-.1); + fvMcPointPrimRatio[i]->SetLabelFormat(""); + } + for (Int_t i = 0; i < fNstations; i++) { fCanvStationXY->cd(i + 1); @@ -435,6 +530,24 @@ TFolder& CbmMuchTransportQa::GetQa() { gStyle->SetOptStat(0); fvMcPointRZ[i]->DrawCopy("colz", ""); + fCanvStationPRatio->cd(i + 1); + gStyle->SetOptStat(0); + fvMcPointPRatio[i]->DrawClone("nol <"); + + TLegend* PRatioPieLeg = fvMcPointPRatio[i]->MakeLegend(); + PRatioPieLeg->SetY1(.56); + PRatioPieLeg->SetY2(.86); + + fCanvStationPrimRatio->cd(i + 1); + gStyle->SetOptStat(0); + fvMcPointPrimRatio[i]->DrawClone("nol <"); + + TLegend* PrimRatioPieLeg = fvMcPointPrimRatio[i]->MakeLegend(); + PrimRatioPieLeg->SetY1(.71); + PrimRatioPieLeg->SetY2(.86); + PrimRatioPieLeg->SetX1(.40); + PrimRatioPieLeg->SetX2(.90); + gStyle->SetOptStat(1110); } diff --git a/sim/detectors/much/qa/CbmMuchTransportQa.h b/sim/detectors/much/qa/CbmMuchTransportQa.h index b6c113ffe9..f6232dfd20 100644 --- a/sim/detectors/much/qa/CbmMuchTransportQa.h +++ b/sim/detectors/much/qa/CbmMuchTransportQa.h @@ -17,6 +17,9 @@ class CbmMuchGeoScheme; class TClonesArray; class TH1F; class TH2F; +class TPie; +class TPieSlice; +class TLegend; class CbmQaCanvas; /// QA for the MUCH detector after a "transport" step of the simulation. @@ -94,12 +97,24 @@ private: std::vector<TH1F*> fvFraction; /// pointers to the above histos + /// output pie charts + + std::vector<TPie*> + fvMcPointPRatio; /// MC point particle ratio pie charts [N stations] + std::vector<TPie*> + fvMcPointPrimRatio; /// MC point particle ratio pie charts [N stations] + // output canvaces with histogramm collections CbmQaCanvas* fCanvStationXY = nullptr; CbmQaCanvas* fCanvStationPhiZ = nullptr; CbmQaCanvas* fCanvStationRZ = nullptr; + // output canvaces with pie chart collections + + CbmQaCanvas* fCanvStationPRatio = nullptr; + CbmQaCanvas* fCanvStationPrimRatio = nullptr; + ClassDef(CbmMuchTransportQa, 0) }; -- GitLab