Skip to content

Commit 9b71738

Browse files
wiechulashahor02
authored andcommitted
allow to fill summary canvases in existing canvas
1 parent dc5317f commit 9b71738

File tree

2 files changed

+42
-18
lines changed

2 files changed

+42
-18
lines changed

Detectors/TPC/base/include/TPCBase/Painter.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ namespace painter
4949
/// \param CalDet object to draw
5050
/// \return TCanvas containing CalDet content
5151
template <class T>
52-
TCanvas* draw(const CalDet<T>& calDet, int nbins1D = 300, float xMin1D = 0, float xMax1D = 0);
52+
TCanvas* draw(const CalDet<T>& calDet, int nbins1D = 300, float xMin1D = 0, float xMax1D = 0, TCanvas* outputCanvas = nullptr);
5353

5454
/// Drawing of a CalDet object
5555
/// \param CalArray object to draw
@@ -93,9 +93,10 @@ TH2* getHistogram2D(const CalArray<T>& calArray);
9393
/// \param nbins1D number of bins used for the 1D projections
9494
/// \param xMin1D minimum value for 1D distribution (xMin = 0 and xMax = 0 for auto scaling)
9595
/// \param xMax1D maximum value for 1D distribution (xMin = 0 and xMax = 0 for auto scaling)
96+
/// \param outputCanvases if outputCanvases are given, use them instead of creating new ones, 3 are required
9697
/// \return TCanvas containing CalDet content
9798
template <class T>
98-
std::vector<TCanvas*> makeSummaryCanvases(const CalDet<T>& calDet, int nbins1D = 300, float xMin1D = 0, float xMax1D = 0, bool onlyFilled = true);
99+
std::vector<TCanvas*> makeSummaryCanvases(const CalDet<T>& calDet, int nbins1D = 300, float xMin1D = 0, float xMax1D = 0, bool onlyFilled = true, std::vector<TCanvas*>* outputCanvases = nullptr);
99100

100101
/// Create summary canvases for a CalDet object
101102
///

Detectors/TPC/base/src/Painter.cxx

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
using namespace o2::tpc;
3030

3131
template <class T>
32-
TCanvas* painter::draw(const CalDet<T>& calDet, int nbins1D, float xMin1D, float xMax1D)
32+
TCanvas* painter::draw(const CalDet<T>& calDet, int nbins1D, float xMin1D, float xMax1D, TCanvas* outputCanvas)
3333
{
3434
using DetType = CalDet<T>;
3535
using CalType = CalArray<T>;
@@ -93,7 +93,11 @@ TCanvas* painter::draw(const CalDet<T>& calDet, int nbins1D, float xMin1D, float
9393
}
9494

9595
// ===| Draw histograms |=====================================================
96-
auto c = new TCanvas(Form("c_%s", name.c_str()), title, 1000, 1000);
96+
auto c = outputCanvas;
97+
if (!c) {
98+
c = new TCanvas(Form("c_%s", name.c_str()), title, 1000, 1000);
99+
}
100+
c->Clear();
97101
c->Divide(2, 2);
98102

99103
c->cd(1);
@@ -235,7 +239,7 @@ std::enable_if_t<std::is_unsigned<T>::value, bool> hasData(const CalArray<T>& ca
235239
}
236240

237241
template <class T>
238-
std::vector<TCanvas*> painter::makeSummaryCanvases(const CalDet<T>& calDet, int nbins1D, float xMin1D, float xMax1D, bool onlyFilled)
242+
std::vector<TCanvas*> painter::makeSummaryCanvases(const CalDet<T>& calDet, int nbins1D, float xMin1D, float xMax1D, bool onlyFilled, std::vector<TCanvas*>* outputCanvases)
239243
{
240244

241245
std::vector<TCanvas*> vecCanvases;
@@ -258,14 +262,33 @@ std::vector<TCanvas*> painter::makeSummaryCanvases(const CalDet<T>& calDet, int
258262
}
259263

260264
// ===| set up canvases |===
265+
TCanvas* cSides = nullptr;
266+
TCanvas* cROCs1D = nullptr;
267+
TCanvas* cROCs2D = nullptr;
261268
const std::string_view calName = calDet.getName();
262-
auto cSides = draw(calDet, nbins1D, xMin1D, xMax1D);
263-
auto cROCs1D = new TCanvas(fmt::format("c_ROCs_{}_1D", calName).data(), fmt::format("{} values for each ROC", calName).data(), 1400, 1000);
264-
auto cROCs2D = new TCanvas(fmt::format("c_ROCs_{}_2D", calName).data(), fmt::format("{} values for each ROC", calName).data(), 1400, 1000);
269+
270+
if (outputCanvases) {
271+
if (!(outputCanvases->size() < 3)) {
272+
LOGP(error, "At least 3 canvases are needed to fill the output, only {} given", outputCanvases->size());
273+
return vecCanvases;
274+
}
275+
276+
cSides = outputCanvases->at(0);
277+
cROCs1D = outputCanvases->at(1);
278+
cROCs2D = outputCanvases->at(2);
279+
cSides->Clear();
280+
cROCs1D->Clear();
281+
cROCs2D->Clear();
282+
} else {
283+
284+
cROCs1D = new TCanvas(fmt::format("c_ROCs_{}_1D", calName).data(), fmt::format("{} values for each ROC", calName).data(), 1400, 1000);
285+
cROCs2D = new TCanvas(fmt::format("c_ROCs_{}_2D", calName).data(), fmt::format("{} values for each ROC", calName).data(), 1400, 1000);
286+
}
265287
vecCanvases.emplace_back(cSides);
266288
vecCanvases.emplace_back(cROCs1D);
267289
vecCanvases.emplace_back(cROCs2D);
268290

291+
cSides = draw(calDet, nbins1D, xMin1D, xMax1D, cSides);
269292
cROCs1D->DivideSquare(nROCs);
270293
cROCs2D->DivideSquare(nROCs);
271294

@@ -327,34 +350,34 @@ std::vector<TCanvas*> painter::makeSummaryCanvases(const std::string_view fileNa
327350
// ===| explicit instantiations |===============================================
328351
// this is required to force the compiler to create instances with the types
329352
// we usually would like to deal with
330-
template TCanvas* painter::draw<float>(const CalDet<float>& calDet, int, float, float);
331-
template std::vector<TCanvas*> painter::makeSummaryCanvases<float>(const CalDet<float>& calDet, int, float, float, bool);
353+
template TCanvas* painter::draw<float>(const CalDet<float>& calDet, int, float, float, TCanvas*);
354+
template std::vector<TCanvas*> painter::makeSummaryCanvases<float>(const CalDet<float>& calDet, int, float, float, bool, std::vector<TCanvas*>*);
332355
template TCanvas* painter::draw<float>(const CalArray<float>& calArray);
333356
template void painter::fillHistogram2D<float>(TH2& h2D, const CalDet<float>& calDet, Side side);
334357
template void painter::fillHistogram2D<float>(TH2& h2D, const CalArray<float>& calArray);
335358
template TH2* painter::getHistogram2D<float>(const CalDet<float>& calDet, Side side);
336359
template TH2* painter::getHistogram2D<float>(const CalArray<float>& calArray);
337360

338-
template TCanvas* painter::draw<double>(const CalDet<double>& calDet, int, float, float);
339-
template std::vector<TCanvas*> painter::makeSummaryCanvases<double>(const CalDet<double>& calDet, int, float, float, bool);
361+
template TCanvas* painter::draw<double>(const CalDet<double>& calDet, int, float, float, TCanvas*);
362+
template std::vector<TCanvas*> painter::makeSummaryCanvases<double>(const CalDet<double>& calDet, int, float, float, bool, std::vector<TCanvas*>*);
340363
template TCanvas* painter::draw<double>(const CalArray<double>& calArray);
341364
template TH2* painter::getHistogram2D<double>(const CalDet<double>& calDet, Side side);
342365
template TH2* painter::getHistogram2D<double>(const CalArray<double>& calArray);
343366

344-
template TCanvas* painter::draw<int>(const CalDet<int>& calDet, int, float, float);
345-
template std::vector<TCanvas*> painter::makeSummaryCanvases<int>(const CalDet<int>& calDet, int, float, float, bool);
367+
template TCanvas* painter::draw<int>(const CalDet<int>& calDet, int, float, float, TCanvas*);
368+
template std::vector<TCanvas*> painter::makeSummaryCanvases<int>(const CalDet<int>& calDet, int, float, float, bool, std::vector<TCanvas*>*);
346369
template TCanvas* painter::draw<int>(const CalArray<int>& calArray);
347370
template TH2* painter::getHistogram2D<int>(const CalDet<int>& calDet, Side side);
348371
template TH2* painter::getHistogram2D<int>(const CalArray<int>& calArray);
349372

350-
template TCanvas* painter::draw<short>(const CalDet<short>& calDet, int, float, float);
351-
template std::vector<TCanvas*> painter::makeSummaryCanvases<short>(const CalDet<short>& calDet, int, float, float, bool);
373+
template TCanvas* painter::draw<short>(const CalDet<short>& calDet, int, float, float, TCanvas*);
374+
template std::vector<TCanvas*> painter::makeSummaryCanvases<short>(const CalDet<short>& calDet, int, float, float, bool, std::vector<TCanvas*>*);
352375
template TCanvas* painter::draw<short>(const CalArray<short>& calArray);
353376
template TH2* painter::getHistogram2D<short>(const CalDet<short>& calDet, Side side);
354377
template TH2* painter::getHistogram2D<short>(const CalArray<short>& calArray);
355378

356-
template TCanvas* painter::draw<bool>(const CalDet<bool>& calDet, int, float, float);
357-
template std::vector<TCanvas*> painter::makeSummaryCanvases<bool>(const CalDet<bool>& calDet, int, float, float, bool);
379+
template TCanvas* painter::draw<bool>(const CalDet<bool>& calDet, int, float, float, TCanvas*);
380+
template std::vector<TCanvas*> painter::makeSummaryCanvases<bool>(const CalDet<bool>& calDet, int, float, float, bool, std::vector<TCanvas*>*);
358381
template TCanvas* painter::draw<bool>(const CalArray<bool>& calArray);
359382
template TH2* painter::getHistogram2D<bool>(const CalDet<bool>& calDet, Side side);
360383
template TH2* painter::getHistogram2D<bool>(const CalArray<bool>& calArray);

0 commit comments

Comments
 (0)