21#include <TDirectory.h>
42 template <
typename... Args>
43 auto create_canvas(std::string_view canvas_name, std::string_view canvas_title, Args&&... args)
49 template <
typename Hist,
typename... Args>
50 auto add_hist(std::string_view histName, std::string_view histTitle, Args&&... args) -> Hist*;
52 template <
typename GraphType>
53 auto add_graph(std::string_view graph_name, std::unique_ptr<GraphType> graph) -> GraphType*
55 graph->SetName(graph_name.data());
59 template <
typename... Args>
60 auto add_graph(std::string_view graph_name, Args&&... args) -> TGraph*
62 return add_graph(graph_name, std::make_unique<TGraph>(std::forward<Args>(args)...));
65 auto get(
const std::string& histName) -> TH1*;
70 void save_to_sink(std::string_view folderName =
"", FairSink* sinkFile = FairRun::Instance()->GetSink());
82 std::map<std::string, std::unique_ptr<TGraph>>
graphs_;
84 static auto get_hist_dir(FairSink* sinkFile) -> TDirectory*;
87 template <
typename ElementType,
typename ContainerType>
88 static auto add_to_map(std::unique_ptr<ElementType> element, ContainerType& container) -> ElementType*;
89 template <
typename ElementType,
typename ContainerType>
90 static auto add_to_vector(std::unique_ptr<ElementType> element, ContainerType& container) -> ElementType*
92 auto* ptr = element.get();
93 container.emplace_back(std::move(element));
98 template <
typename ElementType,
typename ContainerType>
101 const auto* element_name = element->GetName();
102 auto* element_ptr = element.get();
103 const auto [it, is_success] = container.emplace(std::string{ element_name }, std::move(element));
107 "Element with the name {} has been already added. Please use a different name!", element_name));
112 template <
typename Hist,
typename... Args>
115 auto hist =
R3B::make_hist<Hist>(histName.data(), histTitle.data(), std::forward<Args>(args)...);
116 return static_cast<Hist*
>(
add_hist(std::move(hist)));
119 template <
typename... Args>
126 "A canvas with the name {} has been already added. Please use different name!", canvas_name));
128 const auto [it, is_success] =
canvases_.insert(
129 { std::string{ canvas_name },
130 DataMonitorCanvas(
this, canvas_name.data(), canvas_title.data(), std::forward<Args>(args)...) });
134 template <
typename... Args>
137 ,
canvas_(std::make_unique<TCanvas>(std::forward<Args>(args)...))
141 template <
int div_num,
typename ElementType,
typename... Args>
144 static_assert(div_num > 0,
"Division number of the histogram must be larger than 0!");
148 template <
typename ElementType,
typename... Args>
151 ElementType* figure =
nullptr;
152 if constexpr (std::is_same_v<TGraph, ElementType>)
154 figure =
monitor_->add_graph<ElementType>(std::forward<Args>(args)...);
158 figure =
monitor_->add_hist<ElementType>(std::forward<Args>(args)...);
163 figures_[div_num].emplace_back(figure);
167 figures_.emplace(div_num, std::vector<DrawableElementPtr>{ figure });
169 if constexpr (std::is_base_of_v<TH2, ElementType>)
171 const auto* option = figure->GetOption();
172 figure->SetOption(fmt::format(
"{} COLZ", option).c_str());
174 auto* pad =
canvas_->GetPad(div_num);
DataMonitorCanvas(DataMonitor *monitor)
constexpr auto add(Args &&... args) -> CanvasElement< ElementType >
std::map< int, std::vector< DrawableElementPtr > > figures_
std::unique_ptr< TCanvas > canvas_
void write_all(TDirectory *dir)
std::map< std::string, std::unique_ptr< TH1 > > histograms_
std::string save_filename_
auto add_hist(std::unique_ptr< TH1 > hist) -> TH1 *
void save_to_sink(std::string_view folderName="", FairSink *sinkFile=FairRun::Instance() ->GetSink())
void register_canvases(FairRun *run)
static auto add_to_vector(std::unique_ptr< ElementType > element, ContainerType &container) -> ElementType *
auto add_graph(std::string_view graph_name, Args &&... args) -> TGraph *
auto add_graph(std::string_view graph_name, std::unique_ptr< GraphType > graph) -> GraphType *
std::map< std::string, DataMonitorCanvas > canvases_
static auto add_to_map(std::unique_ptr< ElementType > element, ContainerType &container) -> ElementType *
std::map< std::string, std::unique_ptr< TGraph > > graphs_
auto create_canvas(std::string_view canvas_name, std::string_view canvas_title, Args &&... args) -> DataMonitorCanvas &
static auto get_hist_dir(FairSink *sinkFile) -> TDirectory *
void save_to_file(std::string_view filename="")
auto get_canvas(const std::string &histName) -> DataMonitorCanvas &
auto get(const std::string &histName) -> TH1 *
auto make_hist(Args &&... args)
constexpr auto DEFAULT_HIST_MONITOR_DIR