1 #include "artdaq/DAQrate/StatisticsHelper.hh"
10 , primary_stat_ptr_(0)
11 , previous_reporting_index_(0)
12 , previous_stats_calc_time_(0.0) {}
17 monitored_quantity_name_list_.push_back(statKey);
23 artdaq::MonitoredQuantityPtr mqPtr =
24 artdaq::StatisticsCollection::getInstance().getMonitoredQuantity(statKey);
25 if (mqPtr.get() != 0) { mqPtr->addSample(value); }
30 double defaultReportIntervalSeconds,
double defaultMonitorWindow,
31 std::string
const& primaryStatKeyName)
33 reporting_interval_fragments_ =
34 pset.get<
int>(
"reporting_interval_fragments", defaultReportIntervalFragments);
35 reporting_interval_seconds_ =
36 pset.get<
double>(
"reporting_interval_seconds", defaultReportIntervalSeconds);
38 double monitorWindow = pset.get<
double>(
"monitor_window", defaultMonitorWindow);
39 double monitorBinSize =
40 pset.get<
double>(
"monitor_binsize",
41 1.0 +
static_cast<int>((monitorWindow - 1) / 100.0));
43 if (monitorBinSize < 1.0) { monitorBinSize = 1.0; }
44 if (monitorWindow >= 1.0)
46 for (
size_t idx = 0; idx < monitored_quantity_name_list_.size(); ++idx)
48 artdaq::MonitoredQuantityPtr
49 mqPtr(
new artdaq::MonitoredQuantity(monitorBinSize,
51 artdaq::StatisticsCollection::getInstance().
52 addMonitoredQuantity(monitored_quantity_name_list_[idx], mqPtr);
56 primary_stat_ptr_ = artdaq::StatisticsCollection::getInstance().
57 getMonitoredQuantity(primaryStatKeyName);
58 return (primary_stat_ptr_.get() != 0);
63 previous_reporting_index_ = 0;
64 previous_stats_calc_time_ = 0.0;
65 for (
size_t idx = 0; idx < monitored_quantity_name_list_.size(); ++idx)
67 artdaq::MonitoredQuantityPtr mqPtr = artdaq::StatisticsCollection::getInstance().
68 getMonitoredQuantity(monitored_quantity_name_list_[idx]);
69 if (mqPtr.get() !=
nullptr) { mqPtr->reset(); }
76 if (primary_stat_ptr_.get() != 0 &&
77 (currentCount % reporting_interval_fragments_) == 0)
79 double fullDuration = primary_stat_ptr_->getFullDuration();
80 size_t reportIndex = (size_t)(fullDuration / reporting_interval_seconds_);
81 if (reportIndex > previous_reporting_index_)
83 previous_reporting_index_ = reportIndex;
93 if (primary_stat_ptr_.get() != 0)
95 auto lastCalcTime = primary_stat_ptr_->getLastCalculationTime();
96 if (lastCalcTime > previous_stats_calc_time_)
98 auto now = MonitoredQuantity::getCurrentTime();
99 previous_stats_calc_time_ = std::min(lastCalcTime, now);
void addMonitoredQuantityName(std::string const &statKey)
Add a MonitoredQuantity name to the list.
bool statsRollingWindowHasMoved()
Determine if the MonitoredQuantity "recent" window has changed since the last time this function was ...
bool readyToReport(size_t currentCount)
Determine if the reporting interval conditions have been met.
void addSample(std::string const &statKey, double value) const
Add a sample to the MonitoredQuantity with the given name.
bool createCollectors(fhicl::ParameterSet const &pset, int defaultReportIntervalFragments, double defaultReportIntervalSeconds, double defaultMonitorWindow, std::string const &primaryStatKeyName)
Create MonitoredQuantity objects for all names registered with the StatisticsHelper.
StatisticsHelper()
StatisticsHelper default constructor.
void resetStatistics()
Reset all MonitoredQuantity instances.