DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
tpglibs
src
AVXFrugalPedestalSubtractProcessor.cpp
Go to the documentation of this file.
1
8
9
#include "
tpglibs/AVXFrugalPedestalSubtractProcessor.hpp
"
10
11
namespace
tpglibs
{
12
13
REGISTER_AVXPROCESSOR_CREATOR
(
"AVXFrugalPedestalSubtractProcessor"
,
AVXFrugalPedestalSubtractProcessor
)
14
15
void
16
AVXFrugalPedestalSubtractProcessor::configure
(
const
nlohmann::json& config,
const
int16_t*
/* plane_numbers */
)
17
{
18
#ifdef TPGLIBS_ENABLE_STATE_MONITORING
19
m_internal_state_name_registry.register_internal_state(
"pedestal"
,
20
std::shared_ptr<__m256i>(&
m_pedestal
, [](
auto
*) {}));
21
m_internal_state_name_registry.register_internal_state(
"accum"
, std::shared_ptr<__m256i>(&
m_accum
, [](
auto
*) {}));
22
configure_internal_state_collection
(config);
23
#endif
24
25
m_accum_limit
= config[
"accum_limit"
];
26
}
27
28
__m256i
29
AVXFrugalPedestalSubtractProcessor::process
(
const
__m256i& signal)
30
{
31
#ifdef TPGLIBS_ENABLE_STATE_MONITORING
32
m_samples++;
33
if
(m_collect_internal_state_flag && (m_samples % m_sample_period == 0)) {
34
m_internal_state_buffer_manager.write_to_active_buffer();
35
}
36
#endif
37
38
// Find the channels that are above or below the pedestal.
39
__m256i is_gt = _mm256_cmpgt_epi16(signal,
m_pedestal
);
40
__m256i is_lt = _mm256_cmpgt_epi16(
m_pedestal
, signal);
41
42
// Update m_accum.
43
__m256i to_add = _mm256_setzero_si256();
// Assumes equal to pedestal.
44
to_add = _mm256_blendv_epi8(to_add, _mm256_set1_epi16(1), is_gt);
// Set the above pedestal case.
45
to_add = _mm256_blendv_epi8(to_add, _mm256_set1_epi16(-1), is_lt);
// Set the below pedestal case.
46
47
m_accum
= _mm256_add_epi16(
m_accum
, to_add);
48
49
// Check the accum limit condition.
50
is_gt = _mm256_cmpgt_epi16(
m_accum
, _mm256_set1_epi16(
m_accum_limit
));
// m_accum > +limit.
51
is_lt = _mm256_cmpgt_epi16(_mm256_set1_epi16(-1 *
m_accum_limit
),
m_accum
);
// m_accum < -limit = -limit > m_accum.
52
53
to_add = _mm256_setzero_si256();
54
to_add = _mm256_blendv_epi8(to_add, _mm256_set1_epi16(1), is_gt);
55
to_add = _mm256_blendv_epi8(to_add, _mm256_set1_epi16(-1), is_lt);
56
57
// Update pedestal.
58
m_pedestal
= _mm256_adds_epi16(
m_pedestal
, to_add);
59
60
// Reset too high/low m_accum channels.
61
__m256i need_reset = _mm256_or_si256(is_lt, is_gt);
62
m_accum
= _mm256_blendv_epi8(
m_accum
, _mm256_setzero_si256(), need_reset);
63
64
return
AVXProcessor::process
(_mm256_sub_epi16(signal,
m_pedestal
));
65
}
66
67
}
// namespace tpglibs
REGISTER_AVXPROCESSOR_CREATOR
#define REGISTER_AVXPROCESSOR_CREATOR(processor_name, processor_class)
Factory registration macro.
Definition
AVXFactory.hpp:18
tpglibs::AVXFrugalPedestalSubtractProcessor
AVX signal processor: Estimates the pedestal and subtracts.
Definition
AVXFrugalPedestalSubtractProcessor.hpp:24
tpglibs::AVXFrugalPedestalSubtractProcessor::configure
void configure(const nlohmann::json &config, const int16_t *plane_numbers) override
Configure the accumulation limit according to plane number.
Definition
AVXFrugalPedestalSubtractProcessor.cpp:16
tpglibs::AVXFrugalPedestalSubtractProcessor::process
__m256i process(const __m256i &signal) override
Estimate the pedestal using the given signal and subtract.
Definition
AVXFrugalPedestalSubtractProcessor.cpp:29
tpglibs::AVXFrugalPedestalSubtractProcessor::m_pedestal
__m256i m_pedestal
Vector of estimated pedestals for each channel.
Definition
AVXFrugalPedestalSubtractProcessor.hpp:27
tpglibs::AVXFrugalPedestalSubtractProcessor::m_accum_limit
int16_t m_accum_limit
Count limit before committing to a pedestal shift.
Definition
AVXFrugalPedestalSubtractProcessor.hpp:33
tpglibs::AVXFrugalPedestalSubtractProcessor::m_accum
__m256i m_accum
Vector of counts that a channel's signal was above or below m_pedestal.
Definition
AVXFrugalPedestalSubtractProcessor.hpp:30
tpglibs::AVXProcessor::process
virtual __m256i process(const __m256i &signal) override
Simple signal pass-through on __m256i type.
Definition
AVXProcessor.hpp:27
tpglibs::AbstractProcessor< __m256i >::configure_internal_state_collection
virtual void configure_internal_state_collection(const nlohmann::json &)
Definition
AbstractProcessor.hpp:89
tpglibs
Definition
AbstractFactory.hpp:20
AVXFrugalPedestalSubtractProcessor.hpp
Generated on
for DUNE-DAQ by
1.18.0