9#ifndef TPGLIBS_TPGPIPELINE_HPP_
10#define TPGLIBS_TPGPIPELINE_HPP_
17#include <nlohmann/json.hpp>
27template <
typename T,
typename U>
43 virtual void configure(
const std::vector<std::pair<std::string, nlohmann::json>> configs,
const std::vector<std::pair<dunedaq::trgdataformats::channel_t, int16_t>> channel_plane_numbers) {
44 std::shared_ptr<processor_t> prev_processor =
nullptr;
46 for (
int i = 0; i < 16; i++) {
47 m_channels[i] = channel_plane_numbers[i].first;
51 for (
const auto& name_config : configs) {
53 std::shared_ptr<processor_t> processor =
m_factory->create_processor(name_config.first);
59 if (!prev_processor) {
61 prev_processor = processor;
66 prev_processor->set_next_processor(processor);
67 prev_processor = processor;
74 virtual std::vector<dunedaq::trgdataformats::TriggerPrimitive>
process(
const signal_t& signal) {
77 std::vector<dunedaq::trgdataformats::TriggerPrimitive> tps;
96 for (
auto sot_minimum : sot_minima) {
static std::shared_ptr< AbstractFactory< T > > get_instance()
Singleton get instance function.
Abstract class for the TPG pipeline.
virtual ~TPGPipeline()=default
int16_t m_plane_numbers[16]
Detector plane numbers for the 16 channels that are being processed.
std::shared_ptr< processor_t > m_processor_head
Processor head to start from.
signal_t m_adc_integral_hi
signal_t m_adc_peak
The ADC peak for channels that are considered active.
std::shared_ptr< AbstractFactory< processor_t > > m_factory
Processor factory singleton.
signal_t m_adc_integral_lo
The on-going ADC integral for channels that are considered active.
virtual void set_sot_minima(const std::vector< uint16_t > &sot_minima)
Set the samples over threshold minimum values.
signal_t m_samples_over_threshold
The samples over threshold for channels that are considered active.
dunedaq::trgdataformats::channel_t m_channels[16]
Detector channel numbers for the 16 channels that are being processed.
T processor_t
Processor type to use. Generally AVX.
uint16_t m_sot_minima[3]
The samples over threshold minimum that a TP from plane i must have.
virtual bool check_for_tps(const signal_t &tp_mask)=0
Pure virtual function that will check if any TPs can be generated.
virtual void configure(const std::vector< std::pair< std::string, nlohmann::json > > configs, const std::vector< std::pair< dunedaq::trgdataformats::channel_t, int16_t > > channel_plane_numbers)
Configure the pieces to the pipeline.
U signal_t
Signal type to use. Generally __m256i.
virtual std::vector< dunedaq::trgdataformats::TriggerPrimitive > process(const signal_t &signal)
Process a signal through the pipeline.
signal_t m_samples_to_peak
The number of samples from time_start to the ADC peak.
virtual std::vector< dunedaq::trgdataformats::TriggerPrimitive > generate_tps(const signal_t &tp_mask)=0
Pure virtual function that will generate TPs given a mask to draw from.
virtual signal_t save_state(const signal_t &processed_signal)=0
Pure virtual function that will save the state of the generation.