2929using namespace o2 ::tpc;
3030
3131template <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
237241template <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*>* );
332355template TCanvas* painter::draw<float >(const CalArray<float >& calArray);
333356template void painter::fillHistogram2D<float >(TH2& h2D, const CalDet<float >& calDet, Side side);
334357template void painter::fillHistogram2D<float >(TH2& h2D, const CalArray<float >& calArray);
335358template TH2* painter::getHistogram2D<float >(const CalDet<float >& calDet, Side side);
336359template 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*>* );
340363template TCanvas* painter::draw<double >(const CalArray<double >& calArray);
341364template TH2* painter::getHistogram2D<double >(const CalDet<double >& calDet, Side side);
342365template 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*>* );
346369template TCanvas* painter::draw<int >(const CalArray<int >& calArray);
347370template TH2* painter::getHistogram2D<int >(const CalDet<int >& calDet, Side side);
348371template 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*>* );
352375template TCanvas* painter::draw<short >(const CalArray<short >& calArray);
353376template TH2* painter::getHistogram2D<short >(const CalDet<short >& calDet, Side side);
354377template 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*>* );
358381template TCanvas* painter::draw<bool >(const CalArray<bool >& calArray);
359382template TH2* painter::getHistogram2D<bool >(const CalDet<bool >& calDet, Side side);
360383template TH2* painter::getHistogram2D<bool >(const CalArray<bool >& calArray);
0 commit comments