DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
triggeralgs
src
TAMakerProtoDUNEBSMWindowAlgorithm.cpp
Go to the documentation of this file.
1
8
9
#include "
triggeralgs/ProtoDUNEBSMWindow/TAMakerProtoDUNEBSMWindowAlgorithm.hpp
"
10
11
#include "TRACE/trace.h"
12
#define TRACE_NAME "TAMakerProtoDUNEBSMWindowAlgorithm"
13
14
#include <vector>
15
#include <chrono>
16
17
using namespace
triggeralgs
;
18
using
Logging::TLVL_DEBUG_ALL
;
19
using
Logging::TLVL_DEBUG_HIGH
;
20
using
Logging::TLVL_DEBUG_LOW
;
21
using
Logging::TLVL_IMPORTANT
;
22
23
void
24
TAMakerProtoDUNEBSMWindowAlgorithm::process
(
const
TriggerPrimitive
& input_tp, std::vector<TriggerActivity>& output_ta)
25
{
26
27
if
(
m_current_window
.is_empty()){
28
// Reset window with new TP
29
m_current_window
.reset(input_tp);
30
// Initialise last time an XGBoost prediction was made
31
m_last_pred_time
= input_tp.
time_start
;
32
// Iterate number of TPs in the window
33
m_primitive_count
++;
34
// First time operator is called set ROP first and last channel
35
unsigned
int
detelement =
channelMap
->get_element_id_from_offline_channel(input_tp.
channel
);
36
unsigned
int
plane =
channelMap
->get_plane_from_offline_channel(input_tp.
channel
);
37
38
// Are we on the collection plane? Use XGBoost model for collection plane TPs
39
// evaluate the sum of the TP charge if on induction planes
40
// Induction plane IDs = 0, 1
41
// Collection plane ID = 2
42
if
(plane > 1)
m_collection_plane
=
true
;
43
44
// Use PlaneInfo object to get the first and last channels on plane
45
PlaneInfo
plane_info =
m_det_plane_map
.get_plane_info(
m_channel_map_name
, detelement, plane);
46
m_first_channel
=
static_cast<
channel_t
>
(plane_info.
min_channel
);
47
m_n_channels_on_plane
=
static_cast<
channel_t
>
(plane_info.
n_channels
);
48
49
// If we are in PD-VD use 'effective' channel mapping for CRPs
50
// (but only for collection plane)
51
if
(
m_pdvd_map
&&
m_collection_plane
) {
52
m_pdvd_eff_channel_mapper
= std::make_unique<PDVDEffectiveChannelMap>(plane_info.
min_channel
, plane_info.
n_channels
);
53
// Get the first effective channel and number of effective channels on the plane
54
m_first_channel
=
m_pdvd_eff_channel_mapper
->remapCollectionPlaneChannel(
m_first_channel
);
55
m_n_channels_on_plane
=
m_pdvd_eff_channel_mapper
->getNEffectiveChannels();
56
}
57
58
TLOG_DEBUG
(
TLVL_DEBUG_ALL
) <<
"[TAM:BSMW] 1st Chan = "
<<
m_first_channel
<<
", N channels on plane = "
<<
m_n_channels_on_plane
<< std::endl
59
<<
"Number of channel bins = "
<<
m_num_chanbins
;
60
return
;
61
}
62
63
// If the difference between the current TP's start time and the start of the window
64
// is less than the specified window size, add the TP to the window.
65
if
((input_tp.
time_start
-
m_current_window
.time_start) <
m_window_length
){
66
TLOG_DEBUG
(
TLVL_DEBUG_HIGH
) <<
"[TAM:BSMW] Window not yet complete, adding the input_tp to the window."
;
67
m_current_window
.add(input_tp);
68
}
69
70
// If the addition of the current TP to the window would make it longer
71
// than the specified window length, don't add it
72
// First, if these are not collection plane TPs, just evaluate the total charge
73
// If the total charge on the induction plane crosses a threshold, create a TA
74
else
if
(!
m_collection_plane
&&
m_current_window
.adc_integral >
m_adc_threshold_induction
){
75
TLOG_DEBUG
(
TLVL_DEBUG_LOW
) <<
"[TAM:BSMW] ADC integral in window is greater than specified threshold."
;
76
output_ta.push_back(
construct_ta
());
77
TLOG_DEBUG
(
TLVL_DEBUG_HIGH
) <<
"[TAM:BSMW] Resetting window with input_tp."
;
78
m_current_window
.reset(input_tp);
79
}
80
81
// If the addition of the current TP to the window would make it longer
82
// than the specified window length, don't add it
83
// Check the TPs are on the collection plane - if they are we can use XGBoost
84
// Instead check whether it has been long enough since the last XGBoost prediction
85
// then run the model to determine whether to create a TA
86
else
if
(
m_collection_plane
&&
87
(
m_current_window
.time_start -
m_last_pred_time
) >
m_bin_length
&&
// check enough time has passed since last window
88
m_current_window
.adc_integral >
m_adc_threshold_collection
&&
// set a low minimum threshold for the ADC integral sum
89
compute_treelite_classification
()
// XGBoost classifier
90
)
91
{
92
TLOG_DEBUG
(
TLVL_DEBUG_LOW
) <<
"[TAM:BSMW] XGBoost neutrino prob. is greater than specified threshold."
;
93
output_ta.push_back(
construct_ta
());
94
TLOG_DEBUG
(
TLVL_DEBUG_HIGH
) <<
"[TAM:BSMW] Resetting window with input_tp."
;
95
m_current_window
.reset(input_tp);
96
}
97
// If it is not, move the window along.
98
else
{
99
TLOG_DEBUG
(
TLVL_DEBUG_ALL
) <<
"[TAM:BSMW] Window is at required length but adc/bdt threshold not met, shifting window along."
;
100
m_current_window
.move(input_tp,
m_window_length
);
101
}
102
103
TLOG_DEBUG
(
TLVL_DEBUG_ALL
) <<
"[TAM:BSMW] "
<<
m_current_window
;
104
105
m_primitive_count
++;
106
107
return
;
108
109
}
110
111
void
112
TAMakerProtoDUNEBSMWindowAlgorithm::configure
(
const
nlohmann::json &config)
113
{
114
if
(config.is_object()){
115
if
(config.contains(
"channel_map_name"
))
m_channel_map_name
= config[
"channel_map_name"
];
116
if
(config.contains(
"adc_threshold_induction"
))
m_adc_threshold_induction
= config[
"adc_threshold_induction"
];
117
if
(config.contains(
"bdt_threshold"
))
m_bdt_threshold
= config[
"bdt_threshold"
];
118
}
119
else
{
120
TLOG_DEBUG
(
TLVL_IMPORTANT
) <<
"[TAM:BSMW] Use DEFAULT values of channel_map_name, adc_threshold_induction and bdt_threshold."
;
121
}
122
123
TLOG_DEBUG
(
TLVL_DEBUG_ALL
) <<
"[TAM:BSMW] Channel map name is "
<<
m_channel_map_name
<<
124
". ADC threshold for the induction planes set to "
<<
m_adc_threshold_induction
<<
125
". BDT threshold for collection plane set to "
<<
m_bdt_threshold
;
126
127
channelMap
= dunedaq::detchannelmaps::make_tpc_map(
m_channel_map_name
);
128
129
// If we are in PD-VD, set boolean to true to enable effective channel mapping
130
if
(
m_channel_map_name
==
"PD2VDTPCChannelMap"
||
m_channel_map_name
==
"PD2VDBottomTPCChannelMap"
||
131
m_channel_map_name
==
"PD2VDTopTPCChannelMap"
) {
132
m_pdvd_map
=
true
;
133
}
else
{
// else we are in PD-HD and we use true channel mapping
134
m_pdvd_map
=
false
;
135
}
136
137
m_bin_length
=
static_cast<
timestamp_t
>
(
m_window_length
/
m_num_timebins
);
138
139
m_compiled_model_interface
= std::make_unique<CompiledModelInterface>(
nbatch
,
m_pdvd_map
);
140
141
const
size_t
num_feature =
m_compiled_model_interface
->GetNumFeatures();
142
143
flat_batched_inputs
.resize(num_feature);
144
145
flat_batched_Entries
.clear();
146
for
(
size_t
i = 0; i < num_feature; ++i) {
147
union
Entry
zero;
148
zero.
fvalue
= 0.0;
149
flat_batched_Entries
.emplace_back(zero);
150
}
151
}
152
153
TriggerActivity
154
TAMakerProtoDUNEBSMWindowAlgorithm::construct_ta
()
const
155
{
156
TLOG_DEBUG
(
TLVL_DEBUG_LOW
) <<
"[TAM:BSMW] I am constructing a trigger activity!"
;
157
158
TriggerPrimitive
latest_tp_in_window =
m_current_window
.tp_list.back();
159
// The time_peak, time_activity, channel_* and adc_peak fields of this TA are irrelevent
160
// for the purpose of this trigger alg.
161
TriggerActivity
ta;
162
ta.
time_start
=
m_current_window
.time_start;
163
ta.
time_end
= latest_tp_in_window.
time_start
+ latest_tp_in_window.
samples_over_threshold
* 32;
164
ta.
time_peak
= latest_tp_in_window.
samples_to_peak
* 32 + latest_tp_in_window.
time_start
;
165
ta.
time_activity
= ta.
time_peak
;
166
ta.
channel_start
= latest_tp_in_window.
channel
;
167
ta.
channel_end
= latest_tp_in_window.
channel
;
168
ta.
channel_peak
= latest_tp_in_window.
channel
;
169
ta.
adc_integral
=
m_current_window
.adc_integral;
170
ta.
adc_peak
= latest_tp_in_window.
adc_peak
;
171
ta.
detid
= latest_tp_in_window.
detid
;
172
ta.
type
=
TriggerActivity::Type::kTPC
;
173
ta.
algorithm
=
TriggerActivity::Algorithm::kProtoDUNEBSMWindow
;
174
ta.
inputs
=
m_current_window
.tp_list;
175
return
ta;
176
}
177
178
bool
TAMakerProtoDUNEBSMWindowAlgorithm::compute_treelite_classification
() {
179
180
m_last_pred_time
=
m_current_window
.time_start;
181
182
m_current_window
.bin_window(
183
flat_batched_inputs
,
184
m_num_timebins
,
m_bin_length
,
185
m_num_chanbins
,
m_n_channels_on_plane
,
m_first_channel
,
186
m_pdvd_eff_channel_mapper
,
m_pdvd_map
187
);
188
189
m_current_window
.fill_entry_window(
flat_batched_Entries
,
flat_batched_inputs
);
190
191
std::vector<float> result(
nbatch
, 0.0f);
192
193
m_compiled_model_interface
->Predict(
flat_batched_Entries
.data(), result.data());
194
195
return
m_compiled_model_interface
->Classify(result.data(),
m_bdt_threshold
);
196
197
}
198
199
// Register algo in TA Factory
200
REGISTER_TRIGGER_ACTIVITY_MAKER
(
TRACE_NAME
,
TAMakerProtoDUNEBSMWindowAlgorithm
)
REGISTER_TRIGGER_ACTIVITY_MAKER
#define REGISTER_TRIGGER_ACTIVITY_MAKER(tam_name, tam_class)
Definition
TriggerActivityFactory.hpp:14
TRACE_NAME
#define TRACE_NAME
Name used by TRACE TLOG calls from this source file.
Definition
TriggerInhibitAgent.cpp:21
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:25
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::m_primitive_count
uint64_t m_primitive_count
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:44
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::m_collection_plane
bool m_collection_plane
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:87
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::m_current_window
ProtoDUNEBSMWindow m_current_window
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:41
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::m_adc_threshold_induction
uint32_t m_adc_threshold_induction
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:55
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::m_adc_threshold_collection
const uint32_t m_adc_threshold_collection
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:63
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::flat_batched_inputs
std::vector< float > flat_batched_inputs
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:50
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::m_bin_length
timestamp_t m_bin_length
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:68
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::flat_batched_Entries
std::vector< Entry > flat_batched_Entries
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:52
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::m_last_pred_time
timestamp_t m_last_pred_time
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:43
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::m_pdvd_map
bool m_pdvd_map
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:85
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::nbatch
const int nbatch
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:48
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::m_bdt_threshold
float m_bdt_threshold
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:56
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::m_channel_map_name
std::string m_channel_map_name
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:57
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::m_n_channels_on_plane
channel_t m_n_channels_on_plane
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:91
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::configure
void configure(const nlohmann::json &config)
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.cpp:112
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::m_num_timebins
const int m_num_timebins
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:70
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::m_first_channel
channel_t m_first_channel
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:89
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::construct_ta
TriggerActivity construct_ta() const
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.cpp:154
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::compute_treelite_classification
bool compute_treelite_classification()
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.cpp:178
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::m_pdvd_eff_channel_mapper
std::unique_ptr< PDVDEffectiveChannelMap > m_pdvd_eff_channel_mapper
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:83
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::m_num_chanbins
const int m_num_chanbins
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:72
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::process
void process(const TriggerPrimitive &input_tp, std::vector< TriggerActivity > &output_ta)
TP processing function that creates & fills TAs.
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.cpp:24
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::m_det_plane_map
DetectorPlaneMap m_det_plane_map
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:79
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::channelMap
std::shared_ptr< dunedaq::detchannelmaps::TPCChannelMap > channelMap
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:75
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::m_window_length
const timestamp_t m_window_length
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:64
triggeralgs::TAMakerProtoDUNEBSMWindowAlgorithm::m_compiled_model_interface
std::unique_ptr< CompiledModelInterface > m_compiled_model_interface
Definition
TAMakerProtoDUNEBSMWindowAlgorithm.hpp:94
TLOG_DEBUG
#define TLOG_DEBUG(lvl,...)
Definition
Logging.hpp:112
triggeralgs
Definition
AbstractFactory.hpp:18
triggeralgs::TLVL_IMPORTANT
@ TLVL_IMPORTANT
Definition
Logging.hpp:19
triggeralgs::TLVL_DEBUG_ALL
@ TLVL_DEBUG_ALL
Definition
Logging.hpp:25
triggeralgs::TLVL_DEBUG_LOW
@ TLVL_DEBUG_LOW
Definition
Logging.hpp:22
triggeralgs::TLVL_DEBUG_HIGH
@ TLVL_DEBUG_HIGH
Definition
Logging.hpp:24
triggeralgs::timestamp_t
dunedaq::trgdataformats::timestamp_t timestamp_t
Definition
Types.hpp:16
triggeralgs::TriggerPrimitive
dunedaq::trgdataformats::TriggerPrimitive TriggerPrimitive
Definition
TriggerPrimitive.hpp:22
triggeralgs::channel_t
dunedaq::trgdataformats::channel_t channel_t
Definition
Types.hpp:20
TAMakerProtoDUNEBSMWindowAlgorithm.hpp
dunedaq::trgdataformats::TriggerActivityData::algorithm
Algorithm algorithm
Definition
TriggerActivityData.hpp:58
dunedaq::trgdataformats::TriggerActivityData::channel_peak
channel_t channel_peak
Definition
TriggerActivityData.hpp:53
dunedaq::trgdataformats::TriggerActivityData::time_activity
timestamp_t time_activity
Definition
TriggerActivityData.hpp:50
dunedaq::trgdataformats::TriggerActivityData::adc_integral
uint64_t adc_integral
Definition
TriggerActivityData.hpp:54
dunedaq::trgdataformats::TriggerActivityData::Type::kTPC
@ kTPC
Definition
TriggerActivityData.hpp:22
dunedaq::trgdataformats::TriggerActivityData::type
Type type
Definition
TriggerActivityData.hpp:57
dunedaq::trgdataformats::TriggerActivityData::time_peak
timestamp_t time_peak
Definition
TriggerActivityData.hpp:49
dunedaq::trgdataformats::TriggerActivityData::Algorithm::kProtoDUNEBSMWindow
@ kProtoDUNEBSMWindow
Definition
TriggerActivityData.hpp:40
dunedaq::trgdataformats::TriggerActivityData::adc_peak
uint16_t adc_peak
Definition
TriggerActivityData.hpp:55
dunedaq::trgdataformats::TriggerActivityData::channel_end
channel_t channel_end
Definition
TriggerActivityData.hpp:52
dunedaq::trgdataformats::TriggerActivityData::time_end
timestamp_t time_end
Definition
TriggerActivityData.hpp:48
dunedaq::trgdataformats::TriggerActivityData::channel_start
channel_t channel_start
Definition
TriggerActivityData.hpp:51
dunedaq::trgdataformats::TriggerActivityData::time_start
timestamp_t time_start
Definition
TriggerActivityData.hpp:47
dunedaq::trgdataformats::TriggerActivityData::detid
detid_t detid
Definition
TriggerActivityData.hpp:56
dunedaq::trgdataformats::TriggerPrimitive::detid
uint64_t detid
Definition
TriggerPrimitive.hpp:33
dunedaq::trgdataformats::TriggerPrimitive::channel
uint64_t channel
Definition
TriggerPrimitive.hpp:36
dunedaq::trgdataformats::TriggerPrimitive::samples_over_threshold
uint64_t samples_over_threshold
Definition
TriggerPrimitive.hpp:38
dunedaq::trgdataformats::TriggerPrimitive::adc_peak
uint64_t adc_peak
Definition
TriggerPrimitive.hpp:43
dunedaq::trgdataformats::TriggerPrimitive::time_start
uint64_t time_start
Definition
TriggerPrimitive.hpp:39
dunedaq::trgdataformats::TriggerPrimitive::samples_to_peak
uint64_t samples_to_peak
Definition
TriggerPrimitive.hpp:40
triggeralgs::PlaneInfo
Definition
DetectorPlaneMap.hpp:11
triggeralgs::PlaneInfo::min_channel
int min_channel
Definition
DetectorPlaneMap.hpp:12
triggeralgs::PlaneInfo::n_channels
int n_channels
Definition
DetectorPlaneMap.hpp:13
triggeralgs::TriggerActivity
Definition
TriggerActivity.hpp:20
triggeralgs::TriggerActivity::inputs
std::vector< TriggerPrimitive > inputs
Definition
TriggerActivity.hpp:33
triggeralgs::Entry
Definition
treelitemodel.hpp:20
triggeralgs::Entry::fvalue
float fvalue
Definition
treelitemodel.hpp:22
Generated on
for DUNE-DAQ by
1.17.0