DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
ProtoDUNEBSMWindow.cpp
Go to the documentation of this file.
2
3#include <ostream>
4#include <vector>
5#include <numeric>
6
7namespace triggeralgs {
8
10 return tp_list.empty();
11};
12
14 // Add the input TP's contribution to the total
15 // ADC and add it to the TP list.
16 adc_integral += input_tp.adc_integral;
17 tp_list.push_back(input_tp);
18};
19
21 tp_list.clear();
22};
23
24void ProtoDUNEBSMWindow::move(TriggerPrimitive const &input_tp, timestamp_t const &window_length){
25 // Find all of the TPs in the window that need to be removed
26 // if the input_tp is to be added and the size of the window
27 // is to be conserved.
28 // Substract those TPs' contribution from the total window ADC.
29 uint32_t n_tps_to_erase = 0;
30 for(auto tp : tp_list){
31 if(!(input_tp.time_start-tp.time_start < window_length)){
32 n_tps_to_erase++;
33 adc_integral -= tp.adc_integral;
34 }
35 else break;
36 }
37 // Erase the TPs from the window.
38 tp_list.erase(tp_list.begin(), tp_list.begin()+n_tps_to_erase);
39 // Make the window start time the start time of what is now the
40 // first TP.
41 if(!tp_list.empty()){
42 time_start = tp_list.front().time_start;
43 add(input_tp);
44 }
45 else reset(input_tp);
46};
47
49 // Empty the TP list.
50 tp_list.clear();
51 // Set the start time of the window to be the start time of the
52 // input_tp.
53 time_start = input_tp.time_start;
54 // Start the total ADC integral.
55 adc_integral = input_tp.adc_integral;
56 // Add the input TP to the TP list.
57 tp_list.push_back(input_tp);
58};
59
61 std::vector<float> &input,
62 int num_time_bins, timestamp_t time_bin_width,
63 int num_chan_bins, channel_t n_channels_on_plane, channel_t first_channel,
64 std::unique_ptr<PDVDEffectiveChannelMap> const &effective_channel_mapper,
65 bool use_pdvd_map) {
66
67 std::fill(input.begin(), input.end(), 0.0f);
68
69 const float inv_time_bin_width = 1.0f / time_bin_width;
70
71 for (const TriggerPrimitive& tp : tp_list) {
72 channel_t temp_tp_channel = tp.channel;
73 // If in PD-VD convert to effective channel here
74 if (effective_channel_mapper && use_pdvd_map) {
75 temp_tp_channel = effective_channel_mapper->remapCollectionPlaneChannel(temp_tp_channel);
76 }
77 size_t time_bin = static_cast<size_t>((tp.time_start - time_start) * inv_time_bin_width);
78 // Channel bin calculation matches model training - remainder channels are appended to 10th channel bin
79 size_t channel_bin = static_cast<size_t>(((temp_tp_channel - first_channel) * num_chan_bins) / n_channels_on_plane);
80
81 if (time_bin < num_time_bins && channel_bin < num_chan_bins) {
82 size_t index = channel_bin * num_time_bins + time_bin;
83 input[index] += tp.adc_integral;
84 }
85 }
86 input[num_time_bins * num_chan_bins] = adc_integral;
87};
88
89void ProtoDUNEBSMWindow::fill_entry_window(std::vector<Entry> &entry_input, std::vector<float> &input) {
90 for (size_t i = 0; i < input.size(); i++) {
91 entry_input[i].fvalue = input[i];
92 }
93}
94
95std::ostream& operator<<(std::ostream& os, const ProtoDUNEBSMWindow& window){
96 if(window.is_empty()) os << "Window is empty!\n";
97 else{
98 os << "Window start: " << window.time_start << ", end: " << window.tp_list.back().time_start;
99 os << ". Total of: " << window.adc_integral << " ADC counts with " << window.tp_list.size() << " TPs.\n";
100 }
101 return os;
102};
103
104}
std::vector< TriggerPrimitive > tp_list
void bin_window(std::vector< float > &input, int num_time_bins, timestamp_t time_bin_width, int num_chan_bins, channel_t n_channels_on_plane, channel_t first_channel, std::unique_ptr< PDVDEffectiveChannelMap > const &effective_channel_mapper, bool use_pdvd_map)
void add(TriggerPrimitive const &input_tp)
void reset(TriggerPrimitive const &input_tp)
void move(TriggerPrimitive const &input_tp, timestamp_t const &window_length)
void fill_entry_window(std::vector< Entry > &entry_input, std::vector< float > &input)
dunedaq::trgdataformats::timestamp_t timestamp_t
Definition Types.hpp:16
dunedaq::trgdataformats::TriggerPrimitive TriggerPrimitive
std::ostream & operator<<(std::ostream &os, const ProtoDUNEBSMWindow &window)
dunedaq::trgdataformats::channel_t channel_t
Definition Types.hpp:20