diff --git a/reco/eventbuilder/CMakeLists.txt b/reco/eventbuilder/CMakeLists.txt index 569bcdc94defbb00b730f1e06e56cf933879437a..1ad77dc8cf94e1dff3724e460a5a10b94f56681e 100644 --- a/reco/eventbuilder/CMakeLists.txt +++ b/reco/eventbuilder/CMakeLists.txt @@ -42,7 +42,7 @@ ${CBMROOT_SOURCE_DIR}/tof/TofMC ${CBMROOT_SOURCE_DIR}/psd ${CBMROOT_SOURCE_DIR}/field ${CBMROOT_SOURCE_DIR}/core/data/raw - +${CBMROOT_SOURCE_DIR}/core/qa ) Include_Directories( ${INCLUDE_DIRECTORIES}) @@ -97,7 +97,7 @@ ENDIF (SSE_FOUND) set(LINKDEF CbmEventBuilderLinkDef.h) Set(LIBRARY_NAME CbmEventBuilder) Set(DEPENDENCIES - CbmData CbmBase CbmField CbmStsBase CbmMvd Base KF + CbmData CbmBase CbmField CbmStsBase CbmMvd Base KF CbmQaBase ) GENERATE_LIBRARY() diff --git a/reco/eventbuilder/digis/CbmBuildEventsQa.cxx b/reco/eventbuilder/digis/CbmBuildEventsQa.cxx index 1c540086152e797c75cb00a3a35418661f81d8a6..d180f934bfe9880180d68227647e462f8464c160 100644 --- a/reco/eventbuilder/digis/CbmBuildEventsQa.cxx +++ b/reco/eventbuilder/digis/CbmBuildEventsQa.cxx @@ -14,6 +14,7 @@ #include "CbmLink.h" #include "CbmMatch.h" #include "CbmModuleList.h" +#include "CbmQaCanvas.h" #include "CbmStsDigi.h" #include "FairRootManager.h" @@ -97,66 +98,78 @@ InitStatus CbmBuildEventsQa::Init() return kFATAL; } + InitHistograms(); + + return kSUCCESS; +} +// =========================================================================== + + +// ==================== Init histograms ====================================== +void CbmBuildEventsQa::InitHistograms() +{ + // --- Init histogram folder + histFolder = fOutFolder.AddFolder("hist", "Histogramms"); + // --- Init histograms - histFolder = fOutFolder.AddFolder("hist", "Histogramms"); fhCorrectDigiRatioAll = new TH1F("fhCorrectDigiRatioAll", "Correct digis per event [pct]", 402, -0.25, 100.25); fhCorrectDigiRatioAllNoNoise = new TH1F("fhCorrectDigiRatioAllNoNoise", "Correct digis per event [pct], disregarding noise", 402, -0.25, 100.25); fhNoiseDigiRatioAll = new TH1F("fhNoiseDigiRatioAll", "Noise digis per event [pct]", 402, -0.25, 100.25); fhFoundDigiRatioAll = new TH1F("fhFoundDigiRatioAll", "Found digis per event [pct]", 402, -0.25, 100.25); + fhCorrectVsFoundAll = new TH2I("fhCorrectVsFoundAll", "Correct digis [pct] vs. Found digis [pct]; Correct; Found ", + 102, -1., 101., 102, -1., 101.); + fhCorrectVsFoundAllNoNoise = + new TH2I("fhCorrectVsFoundAllNoNoise", "Correct digis [pct] vs. Found digis [pct], no noise; Correct; Found ", 102, + -1., 101., 102, -1., 101.); + histFolder->Add(fhCorrectDigiRatioAll); histFolder->Add(fhCorrectDigiRatioAllNoNoise); histFolder->Add(fhNoiseDigiRatioAll); histFolder->Add(fhFoundDigiRatioAll); - - fhCorrectVsFoundAll = new TH2F("fhCorrectVsFoundAll", "Correct digis [pct] vs. Found digis [pct] ", 402, -0.25, - 100.25, 402, -0.25, 100.25); - fhCorrectVsFoundAllNoNoise = - new TH2F("fhCorrectVsFoundAllNoNoise", "Correct digis [pct] vs. Found digis [pct], no noise for match ", 402, - -0.25, 100.25, 402, -0.25, 100.25); histFolder->Add(fhCorrectVsFoundAll); histFolder->Add(fhCorrectVsFoundAllNoNoise); + fCanvAllSystems = new CbmQaCanvas("cAllSystems", "", 3 * 400, 2 * 400); + fCanvAllSystems->Divide2D(6); + fOutFolder.Add(fCanvAllSystems); + for (ECbmModuleId& system : fSystems) { - TString h1name = "fhCorrectDigiRatio" + CbmModuleList::GetModuleNameCaps(system); - TString h2name = "fhCorrectDigiRatioNoNoise" + CbmModuleList::GetModuleNameCaps(system); - TString h3name = "fhNoiseDigiRatio" + CbmModuleList::GetModuleNameCaps(system); - TString h4name = "fhFoundDigiRatio" + CbmModuleList::GetModuleNameCaps(system); - TString h5name = "fhCorrectVsFound" + CbmModuleList::GetModuleNameCaps(system); - TString h6name = "fhCorrectVsFoundNoNoise" + CbmModuleList::GetModuleNameCaps(system); + TString moduleName = CbmModuleList::GetModuleNameCaps(system); + TString h1name = "fhCorrectDigiRatio" + moduleName; + TString h2name = "fhCorrectDigiRatioNoNoise" + moduleName; + TString h3name = "fhNoiseDigiRatio" + moduleName; + TString h4name = "fhFoundDigiRatio" + moduleName; + TString h5name = "fhCorrectVsFound" + moduleName; + TString h6name = "fhCorrectVsFoundNoNoise" + moduleName; fhMapSystemsCorrectDigi[system] = - new TH1F(h1name, Form("Correct digis per event, %s [pct]", (CbmModuleList::GetModuleNameCaps(system)).Data()), - 402, -0.25, 100.25); + new TH1F(h1name, Form("Correct digis per event, %s [pct]", moduleName.Data()), 402, -0.25, 100.25); fhMapSystemsCorrectDigiNoNoise[system] = new TH1F( - h2name, - Form("Correct digis per event, %s [pct], disregarding noise", (CbmModuleList::GetModuleNameCaps(system)).Data()), - 402, -0.25, 100.25); + h2name, Form("Correct digis per event, %s [pct], disregarding noise", moduleName.Data()), 402, -0.25, 100.25); fhMapSystemsNoiseDigi[system] = - new TH1F(h3name, Form("Noise digis per event, %s [pct]", (CbmModuleList::GetModuleNameCaps(system)).Data()), 402, - -0.25, 100.25); + new TH1F(h3name, Form("Noise digis per event, %s [pct]", moduleName.Data()), 402, -0.25, 100.25); fhMapSystemsFoundDigi[system] = - new TH1F(h4name, Form("Found digis per event, %s [pct]", (CbmModuleList::GetModuleNameCaps(system)).Data()), 402, - -0.25, 100.25); + new TH1F(h4name, Form("Found digis per event, %s [pct]", moduleName.Data()), 402, -0.25, 100.25); + fhMapSystemsCorrectVsFound[system] = + new TH2I(h5name, Form("Correct digis [pct] vs. Found digis [pct], %s; Correct; Found", moduleName.Data()), 102, + -1., 101., 102, -1., 101.); + fhMapSystemsCorrectVsFoundNoNoise[system] = new TH2I( + h6name, Form("Correct digis [pct] vs. Found digis [pct], %s, no noise; Correct; Found", moduleName.Data()), 102, + -1., 101., 102, -1., 101.); histFolder->Add(fhMapSystemsCorrectDigi[system]); histFolder->Add(fhMapSystemsCorrectDigiNoNoise[system]); histFolder->Add(fhMapSystemsNoiseDigi[system]); histFolder->Add(fhMapSystemsFoundDigi[system]); - - fhMapSystemsCorrectVsFound[system] = new TH2F( - h5name, Form("Correct digis [pct] vs. Found digis [pct], %s", (CbmModuleList::GetModuleNameCaps(system)).Data()), - 402, -0.25, 100.25, 402, -0.25, 100.25); - fhMapSystemsCorrectVsFoundNoNoise[system] = - new TH2F(h6name, - Form("Correct digis [pct] vs. Found digis [pct], %s, no noise for match", - (CbmModuleList::GetModuleNameCaps(system)).Data()), - 402, -0.25, 100.25, 402, -0.25, 100.25); - histFolder->Add(fhMapSystemsCorrectVsFound[system]); histFolder->Add(fhMapSystemsCorrectVsFoundNoNoise[system]); + + fCanvMapSystems[system] = + new CbmQaCanvas(Form("c%s", moduleName.Data()), Form("%s", moduleName.Data()), 3 * 400, 2 * 400); + fCanvMapSystems[system]->Divide2D(6); + fOutFolder.Add(fCanvMapSystems[system]); } - return kSUCCESS; } // =========================================================================== @@ -396,6 +409,45 @@ void CbmBuildEventsQa::Finish() LOG(error) << "No sink found"; return; } + + fCanvAllSystems->cd(1); + fhCorrectDigiRatioAll->DrawCopy("colz", ""); + + fCanvAllSystems->cd(2); + fhCorrectDigiRatioAllNoNoise->DrawCopy("colz", ""); + + fCanvAllSystems->cd(3); + fhNoiseDigiRatioAll->DrawCopy("colz", ""); + + fCanvAllSystems->cd(4); + fhFoundDigiRatioAll->DrawCopy("colz", ""); + + fCanvAllSystems->cd(5); + fhCorrectVsFoundAll->DrawCopy("colz", ""); + + fCanvAllSystems->cd(6); + fhCorrectVsFoundAllNoNoise->DrawCopy("colz", ""); + + for (ECbmModuleId& system : fSystems) { + fCanvMapSystems[system]->cd(1); + fhMapSystemsCorrectDigi[system]->DrawCopy("colz", ""); + + fCanvMapSystems[system]->cd(2); + fhMapSystemsCorrectDigiNoNoise[system]->DrawCopy("colz", ""); + + fCanvMapSystems[system]->cd(3); + fhMapSystemsNoiseDigi[system]->DrawCopy("colz", ""); + + fCanvMapSystems[system]->cd(4); + fhMapSystemsFoundDigi[system]->DrawCopy("colz", ""); + + fCanvMapSystems[system]->cd(5); + fhMapSystemsCorrectVsFound[system]->DrawCopy("colz", ""); + + fCanvMapSystems[system]->cd(6); + fhMapSystemsCorrectVsFoundNoNoise[system]->DrawCopy("colz", ""); + } + FairSink* sink = FairRootManager::Instance()->GetSink(); sink->WriteObject(&fOutFolder, nullptr); } diff --git a/reco/eventbuilder/digis/CbmBuildEventsQa.h b/reco/eventbuilder/digis/CbmBuildEventsQa.h index c1898960d039fd77707bbba3809e5795517a1466..95da9e55d6524fee7c2142db838df05dbd23875c 100644 --- a/reco/eventbuilder/digis/CbmBuildEventsQa.h +++ b/reco/eventbuilder/digis/CbmBuildEventsQa.h @@ -17,11 +17,12 @@ class TClonesArray; class TH1F; -class TH2F; +class TH2I; class CbmDigiManager; class CbmEvent; +class CbmQaCanvas; -/** @class CbmStsBuildEventsQA +/** @class CbmBuildEventsQA ** @brief Simple QA task for associating digis to events ** @author Volker Friese <v.friese@gsi.de> ** @since 20.09.2016 @@ -65,16 +66,23 @@ private: TH1F* fhCorrectDigiRatioAllNoNoise = nullptr; /// correct digis per event for all detectors, disregarding noise TH1F* fhNoiseDigiRatioAll = nullptr; /// noise digis per event for all detectors TH1F* fhFoundDigiRatioAll = nullptr; /// digis found per event for all detectors - TH2F* fhCorrectVsFoundAll = nullptr; /// correct digis per event vs found digis per event, all detectors - TH2F* fhCorrectVsFoundAllNoNoise = + TH2I* fhCorrectVsFoundAll = nullptr; /// correct digis per event vs found digis per event, all detectors + TH2I* fhCorrectVsFoundAllNoNoise = nullptr; /// correct digis per event vs found digis per event, all detectors, disregarding noise + CbmQaCanvas* fCanvAllSystems; ///summary canvas + std::map<ECbmModuleId, TH1F*> fhMapSystemsCorrectDigi; // histograms for subsystems std::map<ECbmModuleId, TH1F*> fhMapSystemsCorrectDigiNoNoise; // histograms for subsystems std::map<ECbmModuleId, TH1F*> fhMapSystemsNoiseDigi; // histograms for subsystems std::map<ECbmModuleId, TH1F*> fhMapSystemsFoundDigi; // histograms for subsystems - std::map<ECbmModuleId, TH2F*> fhMapSystemsCorrectVsFound; // histograms for subsystems - std::map<ECbmModuleId, TH2F*> fhMapSystemsCorrectVsFoundNoNoise; // histograms for subsystems + std::map<ECbmModuleId, TH2I*> fhMapSystemsCorrectVsFound; // histograms for subsystems + std::map<ECbmModuleId, TH2I*> fhMapSystemsCorrectVsFoundNoNoise; // histograms for subsystems + + std::map<ECbmModuleId, CbmQaCanvas*> fCanvMapSystems; //summary canvas per system + + /** Initialize histograms and output folder+ **/ + void InitHistograms(); /** Match a reconstructed event to MC events+ ** @param event Pointer to reconstructed event