DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
TimestampEstimatorSystem.cpp
Go to the documentation of this file.
1
10
11#include "logging/Logging.hpp"
12
13#include <chrono>
14
15namespace dunedaq::utilities {
16
17TimestampEstimatorSystem::TimestampEstimatorSystem(uint64_t clock_frequency_hz) // NOLINT(build/unsigned)
18 : m_clock_frequency_hz(clock_frequency_hz)
19{
20 TLOG_DEBUG(0) << "Clock frequency is " << m_clock_frequency_hz
21 << " clock_frequency_hz/1000000.=" << (static_cast<double>(m_clock_frequency_hz) / 1000000.);
22}
23
24uint64_t // NOLINT(build/unsigned)
26{
27 auto now = std::chrono::system_clock::now().time_since_epoch();
28 auto now_us = std::chrono::duration_cast<std::chrono::microseconds>(now);
29 return static_cast<uint64_t>((static_cast<double>(m_clock_frequency_hz) / 1000000.) * // NOLINT
30 static_cast<double>(now_us.count()));
31}
32
33std::chrono::microseconds
34TimestampEstimatorSystem::get_wait_estimate(uint64_t ts) const // NOLINT(build/unsigned)
35{
36 auto now = std::chrono::system_clock::now().time_since_epoch();
37 auto now_us = std::chrono::duration_cast<std::chrono::microseconds>(now);
38 auto then = static_cast<std::chrono::microseconds::rep>(static_cast<double>(ts) * 1000000. /
39 static_cast<double>(m_clock_frequency_hz));
40 auto then_us = std::chrono::microseconds(then);
41 if (then_us < now_us)
42 return std::chrono::microseconds(0);
43 return then_us - now_us;
44}
45
46} // namespace dunedaq::utilities
std::chrono::microseconds get_wait_estimate(uint64_t ts) const override
static int64_t now()
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:112
PDS Frame with unphysical timestamp detected with ts