DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
NaiveFrugalPedestalSubtractProcessor.cpp
Go to the documentation of this file.
1
8
10
11namespace tpglibs {
12
13REGISTER_NAIVEPROCESSOR_CREATOR("NaiveFrugalPedestalSubtractProcessor", NaiveFrugalPedestalSubtractProcessor)
14
15void
16NaiveFrugalPedestalSubtractProcessor::configure(const nlohmann::json& config, const int16_t* plane_numbers)
17{
18#ifdef TPGLIBS_ENABLE_STATE_MONITORING
19 m_internal_state_name_registry.register_internal_state("pedestal",
20 std::shared_ptr<naive_array_t>(&m_pedestal, [](auto*) {}));
21 m_internal_state_name_registry.register_internal_state("accum",
22 std::shared_ptr<naive_array_t>(&m_accum, [](auto*) {}));
24#endif
25
26 m_accum_limit = config["accum_limit"];
27}
28
31{
32#ifdef TPGLIBS_ENABLE_STATE_MONITORING
33 m_samples++;
34 if (m_collect_internal_state_flag && (m_samples % m_sample_period == 0)) {
35 m_internal_state_buffer_manager.write_to_active_buffer();
36 }
37#endif
38
39 naive_array_t subtracted_signal;
40 for (int i = 0; i < 16; i++) {
41 // Increment if above.
42 if (signal[i] > m_pedestal[i])
43 m_accum[i]++;
44
45 // Decrement if below.
46 if (signal[i] < m_pedestal[i])
47 m_accum[i]--;
48
49 // Increment pedestal if we've hit the top limit.
50 if (m_accum[i] > m_accum_limit) {
51 m_pedestal[i]++;
52 m_accum[i] = 0;
53 }
54
55 // Decrement pedestal if we've hit the low limit.
56 if (m_accum[i] < -1 * m_accum_limit) {
57 m_pedestal[i]--;
58 m_accum[i] = 0;
59 }
60
61 subtracted_signal[i] = signal[i] - m_pedestal[i];
62 }
63
64 return NaiveProcessor::process(subtracted_signal);
65}
66
67} // namespace tpglibs
#define REGISTER_NAIVEPROCESSOR_CREATOR(processor_name, processor_class)
Factory registration macro.
virtual void configure_internal_state_collection(const nlohmann::json &)
Naive signal processor: Estimates the pedestal and subtracts.
void configure(const nlohmann::json &config, const int16_t *plane_numbers) override
Configure the accumulation limit according to plane number.
naive_array_t process(const naive_array_t &signal) override
Estimate the pedestal using the given signal and subtract.
naive_array_t m_pedestal
Vector of estimated pedestals for each channel.
int16_t m_accum_limit
Count limit before committing to a pedestal shift.
naive_array_t m_accum
Vector of counts that a channel's signal was above or below m_pedestal.
virtual naive_array_t process(const naive_array_t &signal) override
Simple signal pass-through on naive type.
std::array< int16_t, 16 > naive_array_t
The naive version uses a standard array instead of __m256i.