Line data Source code
1 : /**
2 : * @file NaiveFrugalPedestalSubtractProcessor.cpp
3 : *
4 : * @copyright This is part of the DUNE DAQ Software Suite, copyright 2020.
5 : * Licensing/copyright details are in the COPYING file that you should have
6 : * received with this code.
7 : */
8 :
9 : #include "tpglibs/NaiveFrugalPedestalSubtractProcessor.hpp"
10 :
11 : namespace tpglibs {
12 :
13 10 : REGISTER_NAIVEPROCESSOR_CREATOR("NaiveFrugalPedestalSubtractProcessor", NaiveFrugalPedestalSubtractProcessor)
14 :
15 0 : void NaiveFrugalPedestalSubtractProcessor::configure(const nlohmann::json& config, const int16_t* plane_numbers) {
16 : #ifdef TPGLIBS_ENABLE_STATE_MONITORING
17 : m_internal_state_name_registry.register_internal_state("pedestal",
18 : std::shared_ptr<naive_array_t>(&m_pedestal, [](auto*){}));
19 : m_internal_state_name_registry.register_internal_state("accum",
20 : std::shared_ptr<naive_array_t>(&m_accum, [](auto*){}));
21 : configure_internal_state_collection(config);
22 : #endif
23 :
24 0 : m_accum_limit = config["accum_limit"];
25 0 : }
26 :
27 : NaiveFrugalPedestalSubtractProcessor::naive_array_t
28 0 : NaiveFrugalPedestalSubtractProcessor::process(const naive_array_t& signal) {
29 : #ifdef TPGLIBS_ENABLE_STATE_MONITORING
30 : m_samples++;
31 : if (m_collect_internal_state_flag && (m_samples % m_sample_period == 0)) {
32 : m_internal_state_buffer_manager.write_to_active_buffer();
33 : }
34 : #endif
35 :
36 0 : naive_array_t subtracted_signal;
37 0 : for (int i = 0; i < 16; i++) {
38 : // Increment if above.
39 0 : if (signal[i] > m_pedestal[i])
40 0 : m_accum[i]++;
41 :
42 : // Decrement if below.
43 0 : if (signal[i] < m_pedestal[i])
44 0 : m_accum[i]--;
45 :
46 : // Increment pedestal if we've hit the top limit.
47 0 : if (m_accum[i] > m_accum_limit) {
48 0 : m_pedestal[i]++;
49 0 : m_accum[i] = 0;
50 : }
51 :
52 : // Decrement pedestal if we've hit the low limit.
53 0 : if (m_accum[i] < -1*m_accum_limit) {
54 0 : m_pedestal[i]--;
55 0 : m_accum[i] = 0;
56 : }
57 :
58 0 : subtracted_signal[i] = signal[i] - m_pedestal[i];
59 : }
60 :
61 0 : return NaiveProcessor::process(subtracted_signal);
62 : }
63 :
64 : } // namespace tpglibs
|