43 LOG(Level::WARNING,
"Timing source '{}' already initialized. Skipping re-initialization.", _name);
48 _frequency =
timing->getFrequency();
50 std::normal_distribution normal_dist{0.0, 1.0};
52 _freq_offset =
timing->getFreqOffset().value_or(0);
53 if (
const std::optional<RealType> random_freq_stdev =
timing->getRandomFreqOffsetStdev(); random_freq_stdev)
55 LOG(Level::INFO,
"Timing source '{}': applying random frequency offset with stdev {} Hz.", _name,
56 random_freq_stdev.value());
57 _freq_offset += normal_dist(_rng) * random_freq_stdev.value();
60 _phase_offset =
timing->getPhaseOffset().value_or(0);
61 if (
const std::optional<RealType> random_phase_stdev =
timing->getRandomPhaseOffsetStdev(); random_phase_stdev)
63 LOG(Level::INFO,
"Timing source '{}': applying random phase offset with stdev {} radians.", _name,
64 random_phase_stdev.value());
65 _phase_offset += normal_dist(_rng) * random_phase_stdev.value();
68 timing->copyAlphas(_alphas, _weights);
70 _model = std::make_unique<noise::ClockModelGenerator>(_rng, _alphas, _weights, _frequency, _phase_offset,
73 if (
timing->getFrequency() == 0.0)
75 LOG(Level::INFO,
"Timing source frequency not set, results could be incorrect.");
78 _sync_on_pulse =
timing->getSyncOnPulse();