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

AVX signal processor: Calculates the running sum of the signal. More...

#include <AVXRunSumProcessor.hpp>

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

Public Member Functions

__m256i process (const __m256i &signal) override
 Calculate and store the running sum.
 
void configure (const nlohmann::json &config, const int16_t *plane_numbers) override
 Configures the R factor and S factor according to plane.
 
- Public Member Functions inherited from tpglibs::AVXProcessor
- Public Member Functions inherited from tpglibs::AbstractProcessor< __m256i >
virtual ~AbstractProcessor ()=default
 
void set_next_processor (std::shared_ptr< AbstractProcessor< __m256i > > next_processor)
 Setter for next processor.
 

Private Attributes

__m256i m_memory_factor
 The R factor in the model equation.
 
__m256i m_scale_factor
 The S factor in the model equation.
 
__m256i m_running_sum
 The RS in the model equation.
 

Additional Inherited Members

- Public Types inherited from tpglibs::AbstractProcessor< __m256i >
using signal_type_t
 Signal type to process on. General __m256i.
 

Detailed Description

AVX signal processor: Calculates the running sum of the signal.

Calculates the running sum of the signal with some factors. This tries to model the following equation: RS = R * RS + S * signal, where

  • RS is the on-going running sum,
  • R is the memory factor of the on-going running sum,
  • S is the scale factor for the incoming signal to avoid overflowing,
  • signal is the incoming signal.

Definition at line 26 of file AVXRunSumProcessor.hpp.

Member Function Documentation

◆ configure()

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

Configures the R factor and S factor according to plane.

Parameters
configJSON of the R and S factors to use per plane.
plane_numbersArray of plane numbers. Gives the channels to apply the R and S factors.

Implements tpglibs::AbstractProcessor< __m256i >.

Definition at line 15 of file AVXRunSumProcessor.cpp.

15 {
16 int16_t memory_factors[16];
17 int16_t config_memory[3] = {config["memory_factor_plane0"],
18 config["memory_factor_plane1"],
19 config["memory_factor_plane2"]};
20 int16_t scale_factors[16];
21 int16_t config_scale[3] = {config["scale_factor_plane0"],
22 config["scale_factor_plane1"],
23 config["scale_factor_plane2"]};
24
25 for (int i = 0; i < 16; i++) {
26 memory_factors[i] = config_memory[plane_numbers[i]];
27 scale_factors[i] = config_scale[plane_numbers[i]];
28 }
29
30 m_memory_factor = _mm256_lddqu_si256(reinterpret_cast<__m256i*>(memory_factors));
31 m_scale_factor = _mm256_lddqu_si256(reinterpret_cast<__m256i*>(scale_factors));
32}
__m256i m_memory_factor
The R factor in the model equation.
__m256i m_scale_factor
The S factor in the model equation.

◆ process()

__m256i tpglibs::AVXRunSumProcessor::process ( const __m256i & signal)
overridevirtual

Calculate and store the running sum.

Parameters
signalThe input signal to process on.
Returns
The calculated running sum.

Reimplemented from tpglibs::AVXProcessor.

Definition at line 34 of file AVXRunSumProcessor.cpp.

34 {
35 __m256i scaled_rs = _mm256_div_epi16(m_running_sum, 10);
36 scaled_rs = _mm256_mullo_epi16(scaled_rs, m_memory_factor);
37
38 __m256i scaled_signal = _mm256_div_epi16(signal, 10);
39 scaled_signal = _mm256_mullo_epi16(scaled_signal, m_scale_factor);
40
41 m_running_sum = _mm256_adds_epi16(scaled_rs, scaled_signal);
43}
virtual __m256i process(const __m256i &signal) override
Simple signal pass-through on __m256i type.
__m256i m_running_sum
The RS in the model equation.
__m256i _mm256_div_epi16(const __m256i &va, const int16_t &b)
Hack-ish AVX division function.
Definition AVXUtils.hpp:29

Member Data Documentation

◆ m_memory_factor

__m256i tpglibs::AVXRunSumProcessor::m_memory_factor
private

The R factor in the model equation.

Definition at line 28 of file AVXRunSumProcessor.hpp.

◆ m_running_sum

__m256i tpglibs::AVXRunSumProcessor::m_running_sum
private

The RS in the model equation.

Definition at line 34 of file AVXRunSumProcessor.hpp.

◆ m_scale_factor

__m256i tpglibs::AVXRunSumProcessor::m_scale_factor
private

The S factor in the model equation.

Definition at line 31 of file AVXRunSumProcessor.hpp.


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