DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
tpglibs::NaiveFrugalPedestalSubtractProcessor Class Reference

Naive signal processor: Estimates the pedestal and subtracts. More...

#include <NaiveFrugalPedestalSubtractProcessor.hpp>

Inheritance diagram for tpglibs::NaiveFrugalPedestalSubtractProcessor:
[legend]
Collaboration diagram for tpglibs::NaiveFrugalPedestalSubtractProcessor:
[legend]

Public Member Functions

naive_array_t process (const naive_array_t &signal) override
 Estimate the pedestal using the given signal and subtract.
void configure (const nlohmann::json &config, const int16_t *plane_numbers) override
 Configure the accumulation limit according to plane number.
Public Member Functions inherited from tpglibs::AbstractProcessor< std::array< int16_t, 16 > >
virtual ~AbstractProcessor ()=default
virtual void configure_internal_state_collection (const nlohmann::json &)
 No-op: state monitoring disabled at build time.
void set_next_processor (std::shared_ptr< AbstractProcessor< std::array< int16_t, 16 > > > next_processor)
 Setter for next processor.
std::shared_ptr< AbstractProcessor< std::array< int16_t, 16 > > > get_next_processor ()
 Getter for next processor.
virtual std::vector< std::string > get_requested_internal_state_names () const
 Get the names of requested internal states (delegates to registry).
virtual ProcessorMetricArray< std::array< int16_t, 16 > > read_internal_states_as_integer_array ()

Private Attributes

naive_array_t m_pedestal {}
 Vector of estimated pedestals for each channel.
naive_array_t m_accum {}
 Vector of counts that a channel's signal was above or below m_pedestal.
int16_t m_accum_limit { 10 }
 Count limit before committing to a pedestal shift.

Additional Inherited Members

Public Types inherited from tpglibs::NaiveProcessor
using naive_array_t = std::array<int16_t, 16>
 The naive version uses a standard array instead of __m256i.
Public Types inherited from tpglibs::AbstractProcessor< std::array< int16_t, 16 > >
using signal_type_t
 Signal type to process on. General __m256i.

Detailed Description

Naive signal processor: Estimates the pedestal and subtracts.

Given a history of signals, this estimates the pedestal by shifting the current estimate when it is wrong in the same direction m_accum_limit times. For example, if the input signal is greater (less) than the estimated pedestal 10 (configurable) times in a row, then increment (decrement) the pedestal.

Definition at line 22 of file NaiveFrugalPedestalSubtractProcessor.hpp.

Member Function Documentation

◆ configure()

void tpglibs::NaiveFrugalPedestalSubtractProcessor::configure ( const nlohmann::json & config,
const int16_t * plane_numbers )
overridevirtual

Configure the accumulation limit according to plane number.

Parameters
configJSON config for the accumulation limits per plane.
plane_numbersArray of plane numbers. Gives the channels to apply the accumulation limit.

Implements tpglibs::AbstractProcessor< std::array< int16_t, 16 > >.

Definition at line 16 of file NaiveFrugalPedestalSubtractProcessor.cpp.

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}
virtual void configure_internal_state_collection(const nlohmann::json &)
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.

◆ process()

NaiveFrugalPedestalSubtractProcessor::naive_array_t tpglibs::NaiveFrugalPedestalSubtractProcessor::process ( const naive_array_t & signal)
overridevirtual

Estimate the pedestal using the given signal and subtract.

Parameters
signalA vector of channel signals.
Returns
The input signal minus the estimated pedestal.

Reimplemented from tpglibs::NaiveProcessor.

Definition at line 30 of file NaiveFrugalPedestalSubtractProcessor.cpp.

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}
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.

Member Data Documentation

◆ m_accum

naive_array_t tpglibs::NaiveFrugalPedestalSubtractProcessor::m_accum {}
private

Vector of counts that a channel's signal was above or below m_pedestal.

Definition at line 28 of file NaiveFrugalPedestalSubtractProcessor.hpp.

◆ m_accum_limit

int16_t tpglibs::NaiveFrugalPedestalSubtractProcessor::m_accum_limit { 10 }
private

Count limit before committing to a pedestal shift.

Definition at line 31 of file NaiveFrugalPedestalSubtractProcessor.hpp.

◆ m_pedestal

naive_array_t tpglibs::NaiveFrugalPedestalSubtractProcessor::m_pedestal {}
private

Vector of estimated pedestals for each channel.

Definition at line 25 of file NaiveFrugalPedestalSubtractProcessor.hpp.


The documentation for this class was generated from the following files: