DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
NaiveFrugalPedestalSubtractProcessor.cpp
Go to the documentation of this file.
1
10
11namespace tpglibs {
12
13REGISTER_NAIVEPROCESSOR_CREATOR("NaiveFrugalPedestalSubtractProcessor", NaiveFrugalPedestalSubtractProcessor)
14
15void NaiveFrugalPedestalSubtractProcessor::configure(const nlohmann::json& config, const int16_t* plane_numbers) {
16 // Configure common metric collection parameters
17 // Register pointers to the ACTUAL member variables, not copies
18 // Use shared_ptr with no-op deleter to avoid double-free
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*){}));
23
24 configure_internal_state_collection(config);
25
26 m_accum_limit = config["accum_limit"];
27}
28
31 // Update sample counter and write internal states to buffer for harvesting
32 m_samples++;
35 }
36
37 naive_array_t subtracted_signal;
38 for (int i = 0; i < 16; i++) {
39 // Increment if above.
40 if (signal[i] > m_pedestal[i])
41 m_accum[i]++;
42
43 // Decrement if below.
44 if (signal[i] < m_pedestal[i])
45 m_accum[i]--;
46
47 // Increment pedestal if we've hit the top limit.
48 if (m_accum[i] > m_accum_limit) {
49 m_pedestal[i]++;
50 m_accum[i] = 0;
51 }
52
53 // Decrement pedestal if we've hit the low limit.
54 if (m_accum[i] < -1*m_accum_limit) {
55 m_pedestal[i]--;
56 m_accum[i] = 0;
57 }
58
59 subtracted_signal[i] = signal[i] - m_pedestal[i];
60 }
61
62 return NaiveProcessor::process(subtracted_signal);
63}
64
65} // namespace tpglibs
#define REGISTER_NAIVEPROCESSOR_CREATOR(processor_name, processor_class)
Factory registration macro.
ProcessorInternalStateBufferManager< std::array< int16_t, 16 > > m_internal_state_buffer_manager
Naive signal processor: Estimates the pedestal and subtracts.
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.