DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
trigger
include
trigger
Latency.hpp
Go to the documentation of this file.
1
8
9
#ifndef TRIGGER_INCLUDE_TRIGGER_LATENCY_HPP_
10
#define TRIGGER_INCLUDE_TRIGGER_LATENCY_HPP_
11
12
#include <atomic>
13
#include <chrono>
14
#include <iostream>
// Include for std::ostream
15
16
namespace
dunedaq
{
17
namespace
trigger
{
18
19
class
Latency
20
{
21
using
latency
= uint64_t;
22
23
public
:
24
// Enumeration for selecting time units
25
enum class
TimeUnit
26
{
27
Microseconds
= 1,
28
Milliseconds
= 2
29
};
30
31
// Constructor with optional time unit selection (defaults to Microseconds)
32
Latency
(
TimeUnit
time_unit =
TimeUnit::Microseconds
)
33
:
m_latency_in
(0)
34
,
m_latency_out
(0)
35
,
m_time_unit
(time_unit)
36
{
37
setup_conversion
();
38
}
39
40
~Latency
() {}
41
42
// Function to update latency_in
43
void
update_latency_in
(uint64_t
latency
) {
update_single_latency
(
latency
,
m_latency_in
); }
44
45
// Function to update latency_out
46
void
update_latency_out
(uint64_t
latency
) {
update_single_latency
(
latency
,
m_latency_out
); }
47
48
// Function to get the value of latency_in
49
latency
get_latency_in
()
const
{
return
m_latency_in
.load(); }
50
51
// Function to get the value of latency_out
52
latency
get_latency_out
()
const
{
return
m_latency_out
.load(); }
53
54
private
:
55
// Set up conversion based on the selected time unit
56
void
setup_conversion
()
57
{
58
if
(
m_time_unit
==
TimeUnit::Microseconds
) {
59
m_clock_ticks_conversion
= 16 * 1e-3;
// Conversion for microseconds
60
m_get_current_time
= []() {
61
return
std::chrono::duration_cast<std::chrono::microseconds>(
62
std::chrono::system_clock::now().time_since_epoch())
63
.count();
64
};
65
}
else
{
66
m_clock_ticks_conversion
= 16 * 1e-6;
// Conversion for milliseconds
67
m_get_current_time
= []() {
68
return
std::chrono::duration_cast<std::chrono::milliseconds>(
69
std::chrono::system_clock::now().time_since_epoch())
70
.count();
71
};
72
}
73
}
74
75
// Function to get the current system time based on the set time unit
76
uint64_t
get_current_system_time
()
const
{
return
m_get_current_time
(); }
77
78
// Single update function for both latencies
79
void
update_single_latency
(uint64_t
latency
, std::atomic<uint64_t>& latency_atomic)
80
{
81
uint64_t current_time =
get_current_system_time
();
82
uint64_t latency_time =
latency
*
m_clock_ticks_conversion
;
83
uint64_t diff = (current_time >= latency_time) ? (current_time - latency_time) : 0;
84
latency_atomic.store(diff);
85
}
86
87
std::atomic<latency>
m_latency_in
;
// Member variable to store latency_in
88
std::atomic<latency>
m_latency_out
;
// Member variable to store latency_out
89
TimeUnit
m_time_unit
;
// Member variable to store the selected time unit (ms or ns)
90
double
m_clock_ticks_conversion
;
// Conversion factor from ticks to the selected time unit
91
92
// Lambda to get the current time
93
std::function<uint64_t()>
m_get_current_time
;
94
};
95
96
}
// namespace trigger
97
}
// namespace dunedaq
98
99
#endif
// TRIGGER_INCLUDE_TRIGGER_LATENCY_HPP_
dunedaq::trigger::Latency::TimeUnit
TimeUnit
Definition
Latency.hpp:26
dunedaq::trigger::Latency::TimeUnit::Milliseconds
@ Milliseconds
Definition
Latency.hpp:28
dunedaq::trigger::Latency::TimeUnit::Microseconds
@ Microseconds
Definition
Latency.hpp:27
dunedaq::trigger::Latency::m_latency_in
std::atomic< latency > m_latency_in
Definition
Latency.hpp:87
dunedaq::trigger::Latency::m_get_current_time
std::function< uint64_t()> m_get_current_time
Definition
Latency.hpp:93
dunedaq::trigger::Latency::m_clock_ticks_conversion
double m_clock_ticks_conversion
Definition
Latency.hpp:90
dunedaq::trigger::Latency::update_latency_out
void update_latency_out(uint64_t latency)
Definition
Latency.hpp:46
dunedaq::trigger::Latency::Latency
Latency(TimeUnit time_unit=TimeUnit::Microseconds)
Definition
Latency.hpp:32
dunedaq::trigger::Latency::get_current_system_time
uint64_t get_current_system_time() const
Definition
Latency.hpp:76
dunedaq::trigger::Latency::latency
uint64_t latency
Definition
Latency.hpp:21
dunedaq::trigger::Latency::m_time_unit
TimeUnit m_time_unit
Definition
Latency.hpp:89
dunedaq::trigger::Latency::get_latency_in
latency get_latency_in() const
Definition
Latency.hpp:49
dunedaq::trigger::Latency::setup_conversion
void setup_conversion()
Definition
Latency.hpp:56
dunedaq::trigger::Latency::m_latency_out
std::atomic< latency > m_latency_out
Definition
Latency.hpp:88
dunedaq::trigger::Latency::get_latency_out
latency get_latency_out() const
Definition
Latency.hpp:52
dunedaq::trigger::Latency::~Latency
~Latency()
Definition
Latency.hpp:40
dunedaq::trigger::Latency::update_single_latency
void update_single_latency(uint64_t latency, std::atomic< uint64_t > &latency_atomic)
Definition
Latency.hpp:79
dunedaq::trigger::Latency::update_latency_in
void update_latency_in(uint64_t latency)
Definition
Latency.hpp:43
dunedaq::trigger
Definition
AlgorithmPlugins.hpp:24
dunedaq
Including Qt Headers.
Definition
module.cpp:16
Generated on
for DUNE-DAQ by
1.17.0