24#include <range/v3/numeric/accumulate.hpp>
25#include <range/v3/view/map.hpp>
27namespace rng = ranges;
47 constexpr auto start_graph_data_size = 100;
49 los_count_rate_ = canvas.add<1, TGraph>(
"los_count_rate", start_graph_data_size);
54 map_count_rate_ = canvas.add<2, TGraph>(
"map_count_rate", start_graph_data_size);
59 cal_count_rate_ = canvas.add<3, TGraph>(
"cal_count_rate", start_graph_data_size);
64 hit_count_rate_ = canvas.add<4, TGraph>(
"hit_count_rate", start_graph_data_size);
88 const auto time_start = event_header->GetTStart();
89 if (not std::isnan(time_start))
100 [](
auto init,
const auto& plane_signals) ->
int
102 return init + rng::accumulate(plane_signals | rng::views::values,
104 [](auto init_bar, const auto& bar_signals) -> int {
106 static_cast<int>(std::min(bar_signals.left.size(),
107 bar_signals.right.size()));
118 [](
auto init,
const auto& bar_signals)
119 { return init + static_cast<int>(std::min(bar_signals.left.size(), bar_signals.right.size())); });
126 online_spectra->GetEventHeader()->GetTpat(),
127 online_spectra->GetBasePar()->get_offspill_tpat_pos());
128 const auto time_start = online_spectra->GetEventHeader()->GetTStart();
129 if (is_on_spill and not std::isnan(time_start))
137 auto time_now = std::chrono::steady_clock::now();
138 auto time_duration = std::chrono::duration_cast<std::chrono::seconds>(time_now -
timer_);
141 constexpr auto minute_to_seconds = 60.;
142 auto time_passed_seconds = std::chrono::duration_cast<std::chrono::seconds>(time_now -
start_time_);
143 auto time_passed_minutes =
static_cast<double>(time_passed_seconds.count()) / minute_to_seconds;
144 auto duration_minutes =
static_cast<double>(time_duration.count()) / minute_to_seconds;
159 const auto last_x = graph->GetPointX(graph->GetN() - 1);
160 auto* x_axis = graph->GetXaxis();
161 const auto range_min = x_axis->GetBinCenter(x_axis->GetFirst());
162 const auto range_max = x_axis->GetBinCenter(x_axis->GetLast());
163 auto range_begin = range_min;
166 if (last_x > width / 2.)
168 range_begin = last_x - width / 2.;
178 if (range_max < range_begin + width)
180 x_axis->SetLimits(0., range_begin + width);
182 x_axis->SetRangeUser(range_begin, range_begin + width);
185 graph.
pad()->RedrawAxis();
186 graph.
pad()->Update();
192 constexpr auto range_width_minutes = 120.;
202 constexpr auto range_width_minutes = 240.;
211 auto* axis = graph->GetXaxis();
213 axis->SetCanExtend(
true);
214 graph.
pad()->RedrawAxis();
246 timer_ = std::chrono::steady_clock::now();
constexpr auto BEGIN_VIEW_RATIO
constexpr auto END_VIEW_RATIO
std::chrono::seconds counting_duration_
InputVectorConnector< BarCalData > cal_data_
CanvasElement< TGraph > hit_count_rate_
std::chrono::time_point< std::chrono::steady_clock > timer_
RangeViewMode last_view_mode_
void CanvasFinish() override
void CanvasFill(DataMonitor &histograms) override
CanvasElement< TGraph > cal_count_rate_
CanvasElement< TGraph > map_count_rate_
InputVectorConnector< R3BNeulandHit > hit_data_
void set_four_hour_view()
InputVectorConnector< PaddleTamexMappedData > mapped_data_
CanvasElement< TGraph > los_count_rate_
void do_each_graph(UnaryOp optn)
void set_view(double width)
void calculate_count_rate()
void CanvasInit(DataMonitor &histograms) override
std::chrono::time_point< std::chrono::steady_clock > start_time_
auto CreateNewCanvas(DataMonitor &histograms) -> DataMonitorCanvas &
auto GetOnlineSpectra() const -> OnlineSpectra *
Simulation of NeuLAND Bar/Paddle.
auto CheckTriggerWithTpat(CalTrigger trigger, int tpat, int off_spill_bit) -> bool
std::unordered_map< int, R3B::MapBarSignal > bars
number of bar 1..n