LCOV - code coverage report
Current view: top level - tpglibs/src - NaiveFrugalPedestalSubtractProcessor.cpp (source / functions) Coverage Total Hit
Test: code.result Lines: 88.5 % 26 23
Test Date: 2025-12-21 13:07:08 Functions: 75.0 % 4 3

            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           15 : REGISTER_NAIVEPROCESSOR_CREATOR("NaiveFrugalPedestalSubtractProcessor", NaiveFrugalPedestalSubtractProcessor)
      14              : 
      15            7 : void 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            7 :   m_internal_state_name_registry.register_internal_state("pedestal", 
      20           14 :     std::shared_ptr<naive_array_t>(&m_pedestal, [](auto*){}));
      21            7 :   m_internal_state_name_registry.register_internal_state("accum", 
      22           14 :     std::shared_ptr<naive_array_t>(&m_accum, [](auto*){}));
      23              :     
      24            7 :   configure_internal_state_collection(config);
      25              :   
      26            7 :   m_accum_limit = config["accum_limit"];
      27            7 : }
      28              : 
      29              : NaiveFrugalPedestalSubtractProcessor::naive_array_t
      30           10 : NaiveFrugalPedestalSubtractProcessor::process(const naive_array_t& signal) {
      31              :   // Update sample counter and write internal states to buffer for harvesting
      32           10 :   m_samples++;
      33           10 :   if (m_collect_internal_state_flag && (m_samples % m_sample_period == 0)) {
      34           10 :     m_internal_state_buffer_manager.write_to_active_buffer();
      35              :   }
      36              : 
      37              :   naive_array_t subtracted_signal;
      38          170 :   for (int i = 0; i < 16; i++) {
      39              :     // Increment if above.
      40          160 :     if (signal[i] > m_pedestal[i])
      41          160 :       m_accum[i]++;
      42              : 
      43              :     // Decrement if below.
      44          160 :     if (signal[i] < m_pedestal[i])
      45            0 :       m_accum[i]--;
      46              : 
      47              :     // Increment pedestal if we've hit the top limit.
      48          160 :     if (m_accum[i] > m_accum_limit) {
      49           32 :       m_pedestal[i]++;
      50           32 :       m_accum[i] = 0;
      51              :     }
      52              : 
      53              :     // Decrement pedestal if we've hit the low limit.
      54          160 :     if (m_accum[i] < -1*m_accum_limit) {
      55            0 :       m_pedestal[i]--;
      56            0 :       m_accum[i] = 0;
      57              :     }
      58              : 
      59          160 :     subtracted_signal[i] = signal[i] - m_pedestal[i];
      60              :   }
      61              : 
      62           10 :   return NaiveProcessor::process(subtracted_signal);
      63              : }
      64              : 
      65              : } // namespace tpglibs
        

Generated by: LCOV version 2.0-1