98 return a->event() < b->event();
101 std::unique_ptr<TCanvas> summaryCan{};
102 const std::string summaryPdfName = std::format(
"{:}/All{}.pdf",
103 m_outDir.value(), token.preFixName);
104 if (token.saveSummaryPlot) {
105 ATH_MSG_DEBUG(
"Open "<<summaryPdfName<<
" to dump all canvases in a common file");
108 summaryCan->SaveAs(std::format(
"{:}[", summaryPdfName).c_str());
110 if (token.fileFormats.count(
"root") && !
m_outFile) {
111 std::string outFile = std::format(
"{:}/{:}",
m_outDir.value(),
114 m_outFile.reset(TFile::Open(outFile.c_str(),
"RECREATE"));
118 ATH_MSG_DEBUG(
"Open "<<outFile<<
" to save the plots in root format");
120 std::size_t currEvt{toDraw.back()->event()}, plotCount{0};
123 while (!drawMe.unique()) {
124 using namespace std::chrono_literals;
125 ATH_MSG_DEBUG(
"Wait until "<<drawMe->name()<<
" is finished.");
126 std::this_thread::sleep_for(10ms);
129 if (currEvt != drawMe->event()) {
130 currEvt = drawMe->event();
133 std::string plotName = std::format(
"{:}/{:}/{:}_{:}_{:}_{:}",
m_outDir.value(),
134 token.subDirectory, token.preFixName,
135 drawMe->event(), ++plotCount,
141 using enum ICanvasObject::AxisRanges;
142 ATH_MSG_VERBOSE(
"Crate new canvas: "<<plotName<<
" ["<<drawMe->corner(xLow)<<
";"<<drawMe->corner(xHigh)
143 <<
"], ["<<drawMe->corner(yLow)<<
";"<<drawMe->corner(yHigh)<<
"].");
144 auto frameH = std::make_unique<TH2F>(
"frameH",
145 std::format(
"frame;{:};{:};{:}", drawMe->xTitle(), drawMe->yTitle(), drawMe->zTitle()).c_str(),
146 1, drawMe->corner(xLow), drawMe->corner(xHigh),
147 1, drawMe->corner(yLow), drawMe->corner(yHigh));
148 frameH->Draw(
"AXIS");
150 if (token.drawAtlas) {
151 drawMe->add(
drawAtlasLabel(token.atlasLabelPos[0], token.atlasLabelPos[1], token.atlasLabel));
153 if (token.drawSqrtS) {
154 drawMe->add(
drawLumiSqrtS(token.atlasLabelPos[0], token.atlasLabelPos[1] - 0.05,
155 token.sqrtSLabel, token.lumiLabel));
158 for (
auto& [primitive, opt] : drawMe->primitives()) {
159 primitive->Draw(opt.c_str());
162 if (token.saveSinglePlots) {
163 for (
const std::string& fileExt : token.fileFormats) {
164 if (fileExt !=
"root") {
166 singleCan->SaveAs(std::format(
"{:}.{:}", plotName, fileExt).c_str());
170 if (token.fileFormats.count(
"root")) {
172 if (!token.subDirectory.empty()) {
173 writeTo =
m_outFile->GetDirectory(token.subDirectory.c_str());
175 writeTo =
m_outFile->mkdir(token.subDirectory.c_str());
178 writeTo->WriteObject(singleCan.get(),
179 std::format(
"{:}_{:}_{:}_{:}",token.preFixName,
180 drawMe->event(), plotCount,
184 singleCan->SaveAs(summaryPdfName.c_str());
188 summaryCan->SaveAs(std::format(
"{:}]", summaryPdfName).c_str());