DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
triggeralgs
src
ProtoDUNEBSMWindow
ProtoDUNEBSMWindow.cpp
Go to the documentation of this file.
1
#include "
triggeralgs/ProtoDUNEBSMWindow/ProtoDUNEBSMWindow.hpp
"
2
3
#include <ostream>
4
#include <vector>
5
#include <numeric>
6
7
namespace
triggeralgs
{
8
9
bool
ProtoDUNEBSMWindow::is_empty
()
const
{
10
return
tp_list
.empty();
11
};
12
13
void
ProtoDUNEBSMWindow::add
(
TriggerPrimitive
const
&input_tp){
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
20
void
ProtoDUNEBSMWindow::clear
(){
21
tp_list
.clear();
22
};
23
24
void
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
48
void
ProtoDUNEBSMWindow::reset
(
TriggerPrimitive
const
&input_tp){
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
60
void
ProtoDUNEBSMWindow::bin_window
(
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
89
void
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
95
std::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
}
ProtoDUNEBSMWindow.hpp
triggeralgs::ProtoDUNEBSMWindow
Definition
ProtoDUNEBSMWindow.hpp:20
triggeralgs::ProtoDUNEBSMWindow::time_start
timestamp_t time_start
Definition
ProtoDUNEBSMWindow.hpp:40
triggeralgs::ProtoDUNEBSMWindow::tp_list
std::vector< TriggerPrimitive > tp_list
Definition
ProtoDUNEBSMWindow.hpp:42
triggeralgs::ProtoDUNEBSMWindow::bin_window
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)
Definition
ProtoDUNEBSMWindow.cpp:60
triggeralgs::ProtoDUNEBSMWindow::clear
void clear()
Definition
ProtoDUNEBSMWindow.cpp:20
triggeralgs::ProtoDUNEBSMWindow::add
void add(TriggerPrimitive const &input_tp)
Definition
ProtoDUNEBSMWindow.cpp:13
triggeralgs::ProtoDUNEBSMWindow::reset
void reset(TriggerPrimitive const &input_tp)
Definition
ProtoDUNEBSMWindow.cpp:48
triggeralgs::ProtoDUNEBSMWindow::is_empty
bool is_empty() const
Definition
ProtoDUNEBSMWindow.cpp:9
triggeralgs::ProtoDUNEBSMWindow::adc_integral
uint32_t adc_integral
Definition
ProtoDUNEBSMWindow.hpp:41
triggeralgs::ProtoDUNEBSMWindow::move
void move(TriggerPrimitive const &input_tp, timestamp_t const &window_length)
Definition
ProtoDUNEBSMWindow.cpp:24
triggeralgs::ProtoDUNEBSMWindow::fill_entry_window
void fill_entry_window(std::vector< Entry > &entry_input, std::vector< float > &input)
Definition
ProtoDUNEBSMWindow.cpp:89
triggeralgs
Definition
AbstractFactory.hpp:18
triggeralgs::timestamp_t
dunedaq::trgdataformats::timestamp_t timestamp_t
Definition
Types.hpp:16
triggeralgs::TriggerPrimitive
dunedaq::trgdataformats::TriggerPrimitive TriggerPrimitive
Definition
TriggerPrimitive.hpp:22
triggeralgs::operator<<
std::ostream & operator<<(std::ostream &os, const ProtoDUNEBSMWindow &window)
Definition
ProtoDUNEBSMWindow.cpp:95
triggeralgs::channel_t
dunedaq::trgdataformats::channel_t channel_t
Definition
Types.hpp:20
dunedaq::trgdataformats::TriggerPrimitive::time_start
uint64_t time_start
Definition
TriggerPrimitive.hpp:39
dunedaq::trgdataformats::TriggerPrimitive::adc_integral
uint64_t adc_integral
Definition
TriggerPrimitive.hpp:42
Generated on
for DUNE-DAQ by
1.17.0