12#ifndef O2_FRAMEWORK_DEVICEMETRICSHELPERS_H_
13#define O2_FRAMEWORK_DEVICEMETRICSHELPERS_H_
31concept DeviceMetricValue = std::same_as<int, T> || std::same_as<float, T> || std::same_as<uint64_t, T> || std::same_as<int8_t, T>;
61 template <std::same_as<
int> T>
67 template <std::same_as<
float> T>
73 template <std::same_as<u
int64_t> T>
79 template <std::same_as<
int8_t> T>
85 template <std::same_as<
int> T>
91 template <std::same_as<
float> T>
97 template <std::same_as<u
int64_t> T>
100 return metrics.uint64Timestamps;
103 template <std::same_as<
int8_t> T>
109 template <std::same_as<
int> T>
115 template <std::same_as<
float> T>
121 template <std::same_as<u
int64_t> T>
127 template <std::same_as<
int8_t> T>
135 metrics.minDomain[metricIndex] = std::min(
metrics.minDomain[metricIndex], timestamp);
136 metrics.maxDomain[metricIndex] = std::max(
metrics.maxDomain[metricIndex], timestamp);
139 metrics.changed.at(metricIndex) =
true;
142 template <DeviceMetricNumericValue T>
149 auto& store = getMetricsStore<T>(
metrics);
150 auto& timestamps = getTimestampsStore<T>(
metrics);
161 template <DeviceMetricNumericValue T>
168 auto& metricInfo =
metrics.metrics[metricIndex];
169 if (newMetricsCallback !=
nullptr) {
170 newMetricsCallback(
name, metricInfo, 0, metricIndex);
176 template <DeviceMetricNumericValue T>
182 size_t metricIndex = bookNumericMetric<T>(
metrics,
name, newMetricsCallback);
183 return getNumericMetricCursor<T>(metricIndex);
Timeframe settings Average distance in cm of events merged into Randomize distance around average distance of merged events Simulate correct bunch interactions instead of placing only the average number of events A value[n] sets TFlen for[n] collisions in Number of bunches per trainsort Number of bunch trains Instantaneous interaction rate Do not simulate border Total number of collisions to be placed in the interior of all time Do not select random but walk over array of events in stride steps h Event generator settings h configStandalone Use CPU for GPU Force usage of the specified GPU device no CPU fallback Continue processing after an error s
GLuint const GLchar * name
GLsizei GLenum const void GLuint GLsizei GLfloat * metrics
GLsizei const GLfloat * value
GLint GLint GLsizei GLint GLenum GLenum type
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
Defining ITS Vertex explicitly as messageable.
static auto & getMetricsStore(DeviceMetricsInfo &metrics)
static bool parseMetric(std::string_view const s, ParsedMetricMatch &results)
Helper function to parse a metric string.
static auto updateNumericInfo(DeviceMetricsInfo &metrics, size_t metricIndex, float value, size_t timestamp)
static auto & getTimestampsStore(DeviceMetricsInfo &metrics)
static bool processMetric(ParsedMetricMatch &results, DeviceMetricsInfo &info, NewMetricCallback newMetricCallback=nullptr)
static size_t bookMetricInfo(DeviceMetricsInfo &metrics, char const *name, MetricType type)
static size_t metricIdxByName(std::string_view const name, const DeviceMetricsInfo &info)
static auto getMetricType() -> MetricType
static size_t bookNumericMetric(DeviceMetricsInfo &metrics, char const *name, NewMetricCallback newMetricsCallback=nullptr)
static std::function< void(DeviceMetricsInfo &, T value, size_t timestamp)> createNumericMetric(DeviceMetricsInfo &metrics, char const *name, NewMetricCallback newMetricsCallback=nullptr)
std::function< void(std::string const &, MetricInfo const &, int value, size_t metricIndex)> NewMetricCallback
static auto getNumericMetricCursor(size_t metricIndex)
Temporary struct to hold a metric after it has been parsed.