From 72fb0c6c0caa7199ff49ce09af74e048908a9af8 Mon Sep 17 00:00:00 2001 From: "P.-A. Loizeau" <p.-a.loizeau@gsi.de> Date: Mon, 13 May 2024 08:36:29 +0200 Subject: [PATCH] Add Multiplicity plots in online DigiEvents Checker --- analysis/mcbm/CbmMcbm2024CheckEventsDt.cxx | 309 ++++++++++++--------- analysis/mcbm/CbmMcbm2024CheckEventsDt.h | 29 +- 2 files changed, 186 insertions(+), 152 deletions(-) diff --git a/analysis/mcbm/CbmMcbm2024CheckEventsDt.cxx b/analysis/mcbm/CbmMcbm2024CheckEventsDt.cxx index 3a877667ab..c5278ded56 100644 --- a/analysis/mcbm/CbmMcbm2024CheckEventsDt.cxx +++ b/analysis/mcbm/CbmMcbm2024CheckEventsDt.cxx @@ -46,187 +46,226 @@ void CbmMcbm2024CheckEventsDt::Exec(Option_t*) TDirectory* oldDir = gDirectory; TFile* oldFile = gFile; gROOT->cd(); - fHistDtBmon = new TH1I("histDtBmon", "Time difference to event seed, BMON; dt [ns]", 1000, -500., 500.); - fHistDtSts = new TH1I("histDtSts", "Time difference to event seed, STS; dt [ns]", 1000, -500., 500.); - fHistDtMuch = new TH1I("histDtMuch", "Time difference to event seed, MUCH; dt [ns]", 1000, -500., 500.); - fHistDtTrd1d = new TH1I("histDtTrd1d", "Time difference to event seed, TRD1D; dt [ns]", 1000, -500., 500.); - fHistDtTrd2d = new TH1I("histDtTrd2d", "Time difference to event seed, TRD2D; dt [ns]", 1000, -500., 500.); - fHistDtTof = new TH1I("histDtTof", "Time difference to event seed, TOF; dt [ns]", 1000, -500., 500.); - fHistDtRich = new TH1I("histDtRich", "Time difference to event seed, RICH; dt [ns]", 1000, -500., 500.); - fHistDtFsd = new TH1I("histDtFsd", "Time difference to event seed, FSD; dt [ns]", 1000, -500., 500.); - - fHistDtEvoBmon = new TH2I("histDtEvoBmon", "Time difference to event seed vs TS, BMON; TS []; dt [ns]", // - 100, 0., 1000., 1000, -500., 500.); - fHistDtEvoSts = new TH2I("histDtEvoSts", "Time difference to event seed vs TS, STS; TS []; dt [ns]", // - 100, 0., 1000., 1000, -500., 500.); - fHistDtEvoMuch = new TH2I("histDtEvoMuch", "Time difference to event seed vs TS, MUCH; TS []; dt [ns", // - 100, 0., 1000., 1000, -500., 500.); - fHistDtEvoTrd1d = new TH2I("histDtEvoTrd1d", "Time difference to event seed vs TS, TRD1D; TS []; dt [ns]", // - 100, 0., 1000., 1000, -500., 500.); - fHistDtEvoTrd2d = new TH2I("histDtEvoTrd2d", "Time difference to event seed vs TS, TRD2D; TS []; dt [ns]", // - 100, 0., 1000., 1000, -500., 500.); - fHistDtEvoTof = new TH2I("histDtEvoTof", "Time difference to event seed vs TS, TOF; TS []; dt [ns]", // - 100, 0., 1000., 1000, -500., 500.); - fHistDtEvoRich = new TH2I("histDtEvoRich", "Time difference to event seed vs TS, RICH; TS []; dt [ns]", // - 100, 0., 1000., 1000, -500., 500.); - fHistDtEvoFsd = new TH2I("histDtEvoFsd", "Time difference to event seedvs TS, FSD; TS []; dt [ns]", // - 100, 0., 1000., 1000, -500., 500.); + + for (std::string sDet : fvDets) { + fHistDt[sDet] = new TH1I(Form("histDt%s", sDet.data()), + Form("Time difference to event seed, %s; dt [ns]", sDet.data()), 1000, -500., 500.); + fHistDtEvo[sDet] = new TH2I(Form("histDtEvo%s", sDet.data()), + Form("Time difference to event seed vs TS, %s; TS []; dt [ns]", sDet.data()), // + 100, 0., 1000., 1000, -500., 500.); + + fHistDtToBmon[sDet] = + new TH1I(Form("histDtToBmon%s", sDet.data()), + Form("Time difference to first/single BMon, %s; dt [ns]", sDet.data()), 1000, -500., 500.); + fHistDtToBmonEvo[sDet] = + new TH2I(Form("histDtToBmonEvo%s", sDet.data()), + Form("Time difference to first/single BMon vs TS, %s; TS []; dt [ns]", sDet.data()), // + 100, 0., 1000., 1000, -500., 500.); + + fHistMul[sDet] = + new TH1I(Form("histMul%s", sDet.data()), Form("Nb %s digis per event; N []", sDet.data()), 100, -0.5, 99.5); + fHistDtMul[sDet] = + new TH2I(Form("histDtMul%s", sDet.data()), Form("Dt Bmon vs Nb %s digis per event; dt [ns]; N []", sDet.data()), + 1000, -500., 500., 100, -0.5, 99.5); + } + fCanvDt = new TCanvas("canvDt", "Time differences to event seed"); fCanvDt->Divide(3, 3); - fCanvDt->cd(1); - gPad->SetLogy(); - gPad->SetGridx(); - gPad->SetGridy(); - fHistDtBmon->Draw("hist"); - - fCanvDt->cd(2); - gPad->SetLogy(); - gPad->SetGridx(); - gPad->SetGridy(); - fHistDtSts->Draw("hist"); - - fCanvDt->cd(3); - gPad->SetLogy(); - gPad->SetGridx(); - gPad->SetGridy(); - fHistDtMuch->Draw("hist"); - - fCanvDt->cd(4); - gPad->SetLogy(); - gPad->SetGridx(); - gPad->SetGridy(); - fHistDtTrd1d->Draw("hist"); - - fCanvDt->cd(5); - gPad->SetLogy(); - gPad->SetGridx(); - gPad->SetGridy(); - fHistDtTrd2d->Draw("hist"); - - fCanvDt->cd(6); - gPad->SetLogy(); - gPad->SetGridx(); - gPad->SetGridy(); - fHistDtTof->Draw("hist"); - - fCanvDt->cd(7); - gPad->SetLogy(); - gPad->SetGridx(); - gPad->SetGridy(); - fHistDtRich->Draw("hist"); - - fCanvDt->cd(8); - gPad->SetLogy(); - gPad->SetGridx(); - gPad->SetGridy(); - fHistDtFsd->Draw("hist"); + uint32_t uPadIdx = 1; + for (std::string sDet : fvDets) { + fCanvDt->cd(uPadIdx); + gPad->SetLogy(); + gPad->SetGridx(); + gPad->SetGridy(); + fHistDt[sDet]->Draw("hist"); + uPadIdx++; + } fCanvDtEvo = new TCanvas("canvDtEvo", "Time differences to event seed vs TS"); fCanvDtEvo->Divide(3, 3); - fCanvDtEvo->cd(1); - gPad->SetLogz(); - gPad->SetGridx(); - gPad->SetGridy(); - fHistDtEvoBmon->Draw("colz"); - - fCanvDtEvo->cd(2); - gPad->SetLogz(); - gPad->SetGridx(); - gPad->SetGridy(); - fHistDtEvoSts->Draw("colz"); - - fCanvDtEvo->cd(3); - gPad->SetLogz(); - gPad->SetGridx(); - gPad->SetGridy(); - fHistDtEvoMuch->Draw("colz"); - - fCanvDtEvo->cd(4); - gPad->SetLogz(); - gPad->SetGridx(); - gPad->SetGridy(); - fHistDtEvoTrd1d->Draw("colz"); - - fCanvDtEvo->cd(5); - gPad->SetLogz(); - gPad->SetGridx(); - gPad->SetGridy(); - fHistDtEvoTrd2d->Draw("colz"); - - fCanvDtEvo->cd(6); - gPad->SetLogz(); - gPad->SetGridx(); - gPad->SetGridy(); - fHistDtEvoTof->Draw("colz"); - - fCanvDtEvo->cd(7); - gPad->SetLogz(); - gPad->SetGridx(); - gPad->SetGridy(); - fHistDtEvoRich->Draw("colz"); - - fCanvDtEvo->cd(8); - gPad->SetLogz(); - gPad->SetGridx(); - gPad->SetGridy(); - fHistDtEvoFsd->Draw("colz"); + uPadIdx = 1; + for (std::string sDet : fvDets) { + fCanvDtEvo->cd(uPadIdx); + gPad->SetLogz(); + gPad->SetGridx(); + gPad->SetGridy(); + fHistDtEvo[sDet]->Draw("colz"); + uPadIdx++; + } + + + fCanvDtToBmon = new TCanvas("canvDtToBmon", "Time differences to event seed"); + fCanvDtToBmon->Divide(3, 3); + + uPadIdx = 1; + for (std::string sDet : fvDets) { + fCanvDtToBmon->cd(uPadIdx); + gPad->SetLogy(); + gPad->SetGridx(); + gPad->SetGridy(); + fHistDtToBmon[sDet]->Draw("hist"); + uPadIdx++; + } + + fCanvDtToBmonEvo = new TCanvas("canvDtToBmonEvo", "Time differences to event seed vs TS"); + fCanvDtToBmonEvo->Divide(3, 3); + + uPadIdx = 1; + for (std::string sDet : fvDets) { + fCanvDtToBmonEvo->cd(uPadIdx); + gPad->SetLogz(); + gPad->SetGridx(); + gPad->SetGridy(); + fHistDtToBmonEvo[sDet]->Draw("colz"); + uPadIdx++; + } + + for (std::string sDet : fvDets) { + fCanvMul[sDet] = new TCanvas(Form("canvMul%s", sDet.data()), Form("Multiplicity %s", sDet.data())); + fCanvMul[sDet]->Divide(2); + + fCanvMul[sDet]->cd(1); + gPad->SetLogy(); + gPad->SetGridx(); + gPad->SetGridy(); + fHistMul[sDet]->Draw("hist"); + + fCanvMul[sDet]->cd(2); + gPad->SetLogz(); + gPad->SetGridx(); + gPad->SetGridy(); + fHistDtMul[sDet]->Draw("colz"); + } gFile = oldFile; gDirectory = oldDir; } size_t numEventsInTs = 0; + std::string sDet = "Bmon"; for (auto& event : *fEvents) { + bool bSingleBmon = false; + double_t dSingleBmonTime = 0.; + if (0 < event.fData.fBmon.Size()) { + if (1 == event.fData.fBmon.Size()) { + bSingleBmon = true; + } + dSingleBmonTime = event.fData.fBmon.fDigis[0].GetTime(); + } + sDet = "Bmon"; + fHistMul[sDet]->Fill(event.fData.fBmon.Size()); for (auto& digi : event.fData.fBmon.fDigis) { double_t dDt = digi.GetTime() - event.fTime; - fHistDtBmon->Fill(dDt); - fHistDtEvoBmon->Fill(fNumTs, dDt); + fHistDt[sDet]->Fill(dDt); + fHistDtEvo[sDet]->Fill(fNumTs, dDt); + fHistDtMul[sDet]->Fill(dDt, event.fData.fBmon.Size()); + + // Special case: make internal Dt to first BMon instead of Dt to single Bmon + dDt = digi.GetTime() - dSingleBmonTime; + fHistDtToBmon[sDet]->Fill(dDt); + fHistDtToBmonEvo[sDet]->Fill(fNumTs, dDt); } + sDet = "Sts"; + fHistMul[sDet]->Fill(event.fData.fSts.Size()); for (auto& digi : event.fData.fSts.fDigis) { double_t dDt = digi.GetTime() - event.fTime; - fHistDtSts->Fill(dDt); - fHistDtEvoSts->Fill(fNumTs, dDt); + fHistDt[sDet]->Fill(dDt); + fHistDtEvo[sDet]->Fill(fNumTs, dDt); + fHistDtMul[sDet]->Fill(dDt, event.fData.fSts.Size()); + if (bSingleBmon) { + dDt = digi.GetTime() - dSingleBmonTime; + fHistDtToBmon[sDet]->Fill(dDt); + fHistDtToBmonEvo[sDet]->Fill(fNumTs, dDt); + } } + sDet = "Much"; + fHistMul[sDet]->Fill(event.fData.fMuch.Size()); for (auto& digi : event.fData.fMuch.fDigis) { double_t dDt = digi.GetTime() - event.fTime; - fHistDtMuch->Fill(dDt); - fHistDtEvoMuch->Fill(fNumTs, dDt); + fHistDt[sDet]->Fill(dDt); + fHistDtEvo[sDet]->Fill(fNumTs, dDt); + fHistDtMul[sDet]->Fill(dDt, event.fData.fMuch.Size()); + if (bSingleBmon) { + dDt = digi.GetTime() - dSingleBmonTime; + fHistDtToBmon[sDet]->Fill(dDt); + fHistDtToBmonEvo[sDet]->Fill(fNumTs, dDt); + } } + sDet = "Trd1d"; + fHistMul[sDet]->Fill(event.fData.fTrd.Size()); for (auto& digi : event.fData.fTrd.fDigis) { double_t dDt = digi.GetTime() - event.fTime; - fHistDtTrd1d->Fill(dDt); - fHistDtEvoTrd1d->Fill(fNumTs, dDt); + fHistDt[sDet]->Fill(dDt); + fHistDtEvo[sDet]->Fill(fNumTs, dDt); + fHistDtMul[sDet]->Fill(dDt, event.fData.fTrd.Size()); + if (bSingleBmon) { + dDt = digi.GetTime() - dSingleBmonTime; + fHistDtToBmon[sDet]->Fill(dDt); + fHistDtToBmonEvo[sDet]->Fill(fNumTs, dDt); + } } + sDet = "Trd2d"; + fHistMul[sDet]->Fill(event.fData.fTrd2d.Size()); for (auto& digi : event.fData.fTrd2d.fDigis) { double_t dDt = digi.GetTime() - event.fTime; - fHistDtTrd2d->Fill(dDt); - fHistDtEvoTrd2d->Fill(fNumTs, dDt); + fHistDt[sDet]->Fill(dDt); + fHistDtEvo[sDet]->Fill(fNumTs, dDt); + fHistDtMul[sDet]->Fill(dDt, event.fData.fTrd2d.Size()); + if (bSingleBmon) { + dDt = digi.GetTime() - dSingleBmonTime; + fHistDtToBmon[sDet]->Fill(dDt); + fHistDtToBmonEvo[sDet]->Fill(fNumTs, dDt); + } } + sDet = "Tof"; + fHistMul[sDet]->Fill(event.fData.fTof.Size()); for (auto& digi : event.fData.fTof.fDigis) { double_t dDt = digi.GetTime() - event.fTime; - fHistDtTof->Fill(dDt); - fHistDtEvoTof->Fill(fNumTs, dDt); + fHistDt[sDet]->Fill(dDt); + fHistDtEvo[sDet]->Fill(fNumTs, dDt); + fHistDtMul[sDet]->Fill(dDt, event.fData.fTof.Size()); + if (bSingleBmon) { + dDt = digi.GetTime() - dSingleBmonTime; + fHistDtToBmon[sDet]->Fill(dDt); + fHistDtToBmonEvo[sDet]->Fill(fNumTs, dDt); + } } + sDet = "Rich"; + fHistMul[sDet]->Fill(event.fData.fRich.Size()); for (auto& digi : event.fData.fRich.fDigis) { double_t dDt = digi.GetTime() - event.fTime; - fHistDtRich->Fill(dDt); - fHistDtEvoRich->Fill(fNumTs, dDt); + fHistDt[sDet]->Fill(dDt); + fHistDtEvo[sDet]->Fill(fNumTs, dDt); + fHistDtMul[sDet]->Fill(dDt, event.fData.fRich.Size()); + if (bSingleBmon) { + dDt = digi.GetTime() - dSingleBmonTime; + fHistDtToBmon[sDet]->Fill(dDt); + fHistDtToBmonEvo[sDet]->Fill(fNumTs, dDt); + } } + sDet = "Fsd"; + fHistMul[sDet]->Fill(event.fData.fFsd.Size()); for (auto& digi : event.fData.fFsd.fDigis) { double_t dDt = digi.GetTime() - event.fTime; - fHistDtFsd->Fill(dDt); - fHistDtEvoFsd->Fill(fNumTs, dDt); + fHistDt[sDet]->Fill(dDt); + fHistDtEvo[sDet]->Fill(fNumTs, dDt); + fHistDtMul[sDet]->Fill(dDt, event.fData.fFsd.Size()); + if (bSingleBmon) { + dDt = digi.GetTime() - dSingleBmonTime; + fHistDtToBmon[sDet]->Fill(dDt); + fHistDtToBmonEvo[sDet]->Fill(fNumTs, dDt); + } } numEventsInTs++; } diff --git a/analysis/mcbm/CbmMcbm2024CheckEventsDt.h b/analysis/mcbm/CbmMcbm2024CheckEventsDt.h index ac4fdbea5f..7b3cfb4236 100644 --- a/analysis/mcbm/CbmMcbm2024CheckEventsDt.h +++ b/analysis/mcbm/CbmMcbm2024CheckEventsDt.h @@ -64,27 +64,22 @@ class CbmMcbm2024CheckEventsDt : public FairTask { size_t fNumTs = 0; ///< Number of processed timeslices size_t fNumEvents = 0; ///< Number of events - TH1* fHistDtBmon = nullptr; - TH1* fHistDtSts = nullptr; - TH1* fHistDtMuch = nullptr; - TH1* fHistDtTrd1d = nullptr; - TH1* fHistDtTrd2d = nullptr; - TH1* fHistDtTof = nullptr; - TH1* fHistDtRich = nullptr; - TH1* fHistDtFsd = nullptr; - - TH2* fHistDtEvoBmon = nullptr; - TH2* fHistDtEvoSts = nullptr; - TH2* fHistDtEvoMuch = nullptr; - TH2* fHistDtEvoTrd1d = nullptr; - TH2* fHistDtEvoTrd2d = nullptr; - TH2* fHistDtEvoTof = nullptr; - TH2* fHistDtEvoRich = nullptr; - TH2* fHistDtEvoFsd = nullptr; + std::vector<std::string> fvDets = {"Bmon", "Sts", "Much", "Trd1d", "Trd2d", "Tof", "Rich", "Fsd"}; + std::map<std::string, TH1*> fHistDt = {}; + std::map<std::string, TH2*> fHistDtEvo = {}; + std::map<std::string, TH1*> fHistDtToBmon = {}; + std::map<std::string, TH2*> fHistDtToBmonEvo = {}; + std::map<std::string, TH1*> fHistMul = {}; + std::map<std::string, TH2*> fHistDtMul = {}; TCanvas* fCanvDt = nullptr; TCanvas* fCanvDtEvo = nullptr; + TCanvas* fCanvDtToBmon = nullptr; + TCanvas* fCanvDtToBmonEvo = nullptr; + + std::map<std::string, TCanvas*> fCanvMul = {}; + ClassDef(CbmMcbm2024CheckEventsDt, 1); }; -- GitLab