34 template <
typename... Args>
36 std::string_view canvas_title,
40 auto add_hist(std::unique_ptr<TH1> hist) -> TH1* {
return add_to_map(std::move(hist), histograms_); }
42 template <
typename Hist,
typename... Args>
43 auto add_hist(std::string_view histName, std::string_view histTitle, Args&&... args) -> Hist*;
45 template <
typename GraphType>
46 auto add_graph(std::string_view graph_name, std::unique_ptr<GraphType> graph) -> GraphType*
48 graph->SetName(graph_name.data());
49 return add_to_map(std::move(graph), graphs_);
52 template <
typename... Args>
53 auto add_graph(std::string_view graph_name, Args&&... args) -> TGraph*
55 return add_graph(graph_name, std::make_unique<TGraph>(std::forward<Args>(args)...));
58 auto get(
const std::string& histName) -> TH1*;
63 void save_to_sink(std::string_view folderName =
"", FairSink* sinkFile = FairRun::Instance()->GetSink());
73 std::string save_filename_{
"histograms_save" };
74 std::map<std::string, std::unique_ptr<TH1>> histograms_;
75 std::map<std::string, std::unique_ptr<TGraph>> graphs_;
76 std::map<std::string, DataMonitorCanvas> canvases_;
77 static auto get_hist_dir(FairSink* sinkFile) -> TDirectory*;
78 void write_all(TDirectory* dir);
80 template <
typename ElementType,
typename ContainerType>
81 static auto add_to_map(std::unique_ptr<ElementType> element, ContainerType& container) -> ElementType*;
82 template <
typename ElementType,
typename ContainerType>
83 static auto add_to_vector(std::unique_ptr<ElementType> element, ContainerType& container) -> ElementType*
85 auto* ptr = element.get();
86 container.emplace_back(std::move(element));
114 std::string_view canvas_title,
117 if (canvases_.find(std::string{ canvas_name }) != canvases_.end())
120 "A canvas with the name {} has been already added. Please use different name!", canvas_name));
122 const auto [it, is_success] = canvases_.insert(
123 { std::string{ canvas_name },
DataMonitorCanvas(
this, canvas_name.data(), canvas_title.data(), args...) });
144 ElementType* figure =
nullptr;
145 if constexpr (std::is_same_v<TGraph, ElementType>)
147 figure = monitor_->add_graph<ElementType>(std::forward<Args>(args)...);
151 figure = monitor_->add_hist<ElementType>(std::forward<Args>(args)...);
154 if (figures_.find(div_num) != figures_.end())
156 figures_[div_num].emplace_back(figure);
160 figures_.emplace(div_num, std::vector<DrawableElementPtr>{ figure });
162 if constexpr (std::is_base_of_v<TH2, ElementType>)
164 const auto* option = figure->GetOption();
165 figure->SetOption(fmt::format(
"{} COLZ", option).c_str());
167 auto* pad = canvas_->GetPad(div_num);