DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
triggeralgs
src
TCMakerPlaneCoincidenceAlgorithm.cpp
Go to the documentation of this file.
1
8
9
#include "
triggeralgs/PlaneCoincidence/TCMakerPlaneCoincidenceAlgorithm.hpp
"
10
11
#include "TRACE/trace.h"
12
#define TRACE_NAME "TCMakerPlaneCoincidenceAlgorithm"
13
14
#include <vector>
15
16
using namespace
triggeralgs
;
17
18
using
Logging::TLVL_DEBUG_HIGH
;
19
using
Logging::TLVL_DEBUG_MEDIUM
;
20
using
Logging::TLVL_DEBUG_LOW
;
21
using
Logging::TLVL_DEBUG_INFO
;
22
using
Logging::TLVL_VERY_IMPORTANT
;
23
24
void
25
TCMakerPlaneCoincidenceAlgorithm::process
(
const
TriggerActivity
& activity,
26
std::vector<TriggerCandidate>& output_tc)
27
{
28
29
std::vector<TriggerActivity::TriggerActivityData> ta_list = {
static_cast<
TriggerActivity::TriggerActivityData
>
(
30
activity) };
31
32
// The first time process is called, reset window object.
33
if
(
m_current_window
.is_empty()) {
34
m_current_window
.reset(activity);
35
m_activity_count
++;
36
// Trivial TC Logic:
37
// If the request has been made to not trigger on number of channels or
38
// total adc, simply construct a trigger candidate from any single activity.
39
if
((!
m_trigger_on_adc
) && (!
m_trigger_on_n_channels
)) {
40
41
// add_window_to_record(m_current_window);
42
// dump_window_record();
43
TLOG_DEBUG
(
TLVL_DEBUG_LOW
) <<
"[TCM:PC] Constructing TC."
;
44
TLOG_DEBUG
(
TLVL_DEBUG_HIGH
) <<
"[TCM:PC] Activity count: "
<<
m_activity_count
;
45
TriggerCandidate
tc =
construct_tc
();
46
output_tc.push_back(tc);
47
48
// Clear the current window (only has a single TA in it)
49
m_current_window
.clear();
50
}
51
return
;
52
}
53
54
// FIX ME: Only want to call this if running in debug mode.
55
// add_window_to_record(m_current_window);
56
57
// If the difference between the current TA's start time and the start of the window
58
// is less than the specified window size, add the TA to the window.
59
if
((activity.
time_start
-
m_current_window
.time_start) <
m_window_length
) {
60
m_current_window
.add(activity);
61
}
62
// If the addition of the current TA to the window would make it longer
63
// than the specified window length, don't add it but check whether the sum of all adc in
64
// the existing window is above the specified threshold. If it is, and we are triggering on ADC,
65
// make a TA and start a fresh window with the current TP.
66
else
if
(
m_current_window
.adc_integral >
m_adc_threshold
&&
m_trigger_on_adc
) {
67
TLOG_DEBUG
(
TLVL_DEBUG_MEDIUM
) <<
"[TCM:PC] ADC integral in window is greater than specified threshold."
;
68
TriggerCandidate
tc =
construct_tc
();
69
70
output_tc.push_back(tc);
71
TLOG_DEBUG
(
TLVL_DEBUG_HIGH
) <<
"[TCM:PC] Resetting window with activity."
;
72
m_current_window
.reset(activity);
73
}
74
// If the addition of the current TA to the window would make it longer
75
// than the specified window length, don't add it but check whether the number of hit channels in
76
// the existing window is above the specified threshold. If it is, and we are triggering on channels,
77
// make a TC and start a fresh window with the current TA.
78
else
if
(
m_current_window
.n_channels_hit() >
m_n_channels_threshold
&&
m_trigger_on_n_channels
) {
79
// TODO 04-2024: This case appears unsupported. Throwing error for now, but should this be removed?
80
tc_number
++;
81
// output_tc.push_back(construct_tc());
82
m_current_window
.reset(activity);
83
TLOG_DEBUG
(
TLVL_DEBUG_INFO
) <<
"[TCM:PC] Should not see this!"
;
84
}
85
// If it is not, move the window along.
86
else
{
87
TLOG_DEBUG
(
TLVL_DEBUG_HIGH
) <<
"[TCM:PC] TAWindow is at required length but specified threshold not met, shifting window along."
;
88
m_current_window
.move(activity,
m_window_length
);
89
}
90
91
m_activity_count
++;
92
93
return
;
94
}
95
96
void
97
TCMakerPlaneCoincidenceAlgorithm::configure
(
const
nlohmann::json& config)
98
{
99
TriggerCandidateMaker::configure
(config);
100
if
(config.is_object()) {
101
if
(config.contains(
"trigger_on_adc"
))
102
m_trigger_on_adc
= config[
"trigger_on_adc"
];
103
if
(config.contains(
"trigger_on_n_channels"
))
104
m_trigger_on_n_channels
= config[
"trigger_on_n_channels"
];
105
if
(config.contains(
"adc_threshold"
))
106
m_adc_threshold
= config[
"adc_threshold"
];
107
if
(config.contains(
"n_channels_threshold"
))
108
m_n_channels_threshold
= config[
"n_channels_threshold"
];
109
if
(config.contains(
"window_length"
))
110
m_window_length
= config[
"window_length"
];
111
}
112
if
(
m_trigger_on_n_channels
) {
113
TLOG_DEBUG
(
TLVL_VERY_IMPORTANT
) <<
"[TCM:PC] Using trigger_on_n_channels is not supported."
;
114
throw
BadConfiguration(
ERS_HERE
,
TRACE_NAME
);
115
}
116
if
(!
m_trigger_on_adc
&& !
m_trigger_on_n_channels
) {
117
TLOG_DEBUG
(
TLVL_DEBUG_LOW
) <<
"[TCM:PC] Both trigger flags are false. Passing TAs through 1:1."
;
118
}
119
120
return
;
121
}
122
123
TriggerCandidate
124
TCMakerPlaneCoincidenceAlgorithm::construct_tc
()
const
125
{
126
TriggerActivity
latest_ta_in_window =
m_current_window
.inputs.back();
127
128
TriggerCandidate
tc;
129
tc.
time_start
=
m_current_window
.time_start;
130
tc.
time_end
= latest_ta_in_window.
time_end
;
131
tc.
time_candidate
=
m_current_window
.time_start;
132
tc.
detid
= latest_ta_in_window.
detid
;
133
tc.
type
=
m_tc_type_out
;
134
tc.
algorithm
=
TriggerCandidate::Algorithm::kPlaneCoincidence
;
135
136
// Take the list of triggeralgs::TriggerActivity in the current
137
// window and convert them (implicitly) to detdataformats'
138
// TriggerActivityData, which is the base class of TriggerActivity
139
for
(
auto
& ta :
m_current_window
.inputs) {
140
tc.
inputs
.push_back(ta);
141
}
142
143
return
tc;
144
}
145
146
bool
147
TCMakerPlaneCoincidenceAlgorithm::check_adjacency
()
const
148
{
149
// FIX ME: An adjacency check on the channels which have hits.
150
return
true
;
151
}
152
153
// Functions below this line are for debugging purposes.
154
void
155
TCMakerPlaneCoincidenceAlgorithm::add_window_to_record
(
TAWindow
window)
156
{
157
m_window_record
.push_back(window);
158
return
;
159
}
160
161
void
162
TCMakerPlaneCoincidenceAlgorithm::dump_window_record
()
163
{
164
// FIX ME: Need to index this outfile in the name by detid or something similar.
165
std::ofstream outfile;
166
outfile.open(
"window_record_tcm.csv"
, std::ios_base::app);
167
168
for
(
auto
window :
m_window_record
) {
169
outfile << window.time_start <<
","
;
170
outfile << window.inputs.back().time_start <<
","
;
171
outfile << window.inputs.back().time_start - window.time_start <<
","
;
172
outfile << window.adc_integral <<
","
;
173
outfile << window.n_channels_hit() <<
","
;
174
outfile << window.inputs.size() << std::endl;
175
}
176
177
outfile.close();
178
179
m_window_record
.clear();
180
181
return
;
182
}
183
184
REGISTER_TRIGGER_CANDIDATE_MAKER
(
TRACE_NAME
,
TCMakerPlaneCoincidenceAlgorithm
)
ERS_HERE
#define ERS_HERE
Definition
LocalContext.hpp:141
TRACE_NAME
#define TRACE_NAME
Definition
TimestampEstimatorTimeSync.cpp:17
REGISTER_TRIGGER_CANDIDATE_MAKER
#define REGISTER_TRIGGER_CANDIDATE_MAKER(tcm_name, tcm_class)
Definition
TriggerCandidateFactory.hpp:14
triggeralgs::TAWindow
Definition
TAWindow.hpp:20
triggeralgs::TCMakerPlaneCoincidenceAlgorithm
Definition
TCMakerPlaneCoincidenceAlgorithm.hpp:19
triggeralgs::TCMakerPlaneCoincidenceAlgorithm::m_current_window
TAWindow m_current_window
Definition
TCMakerPlaneCoincidenceAlgorithm.hpp:31
triggeralgs::TCMakerPlaneCoincidenceAlgorithm::dump_window_record
void dump_window_record()
Definition
TCMakerPlaneCoincidenceAlgorithm.cpp:162
triggeralgs::TCMakerPlaneCoincidenceAlgorithm::m_window_record
std::vector< TAWindow > m_window_record
Definition
TCMakerPlaneCoincidenceAlgorithm.hpp:45
triggeralgs::TCMakerPlaneCoincidenceAlgorithm::construct_tc
TriggerCandidate construct_tc() const
Definition
TCMakerPlaneCoincidenceAlgorithm.cpp:124
triggeralgs::TCMakerPlaneCoincidenceAlgorithm::m_activity_count
uint64_t m_activity_count
Definition
TCMakerPlaneCoincidenceAlgorithm.hpp:32
triggeralgs::TCMakerPlaneCoincidenceAlgorithm::m_adc_threshold
uint32_t m_adc_threshold
Definition
TCMakerPlaneCoincidenceAlgorithm.hpp:37
triggeralgs::TCMakerPlaneCoincidenceAlgorithm::m_window_length
timestamp_t m_window_length
Definition
TCMakerPlaneCoincidenceAlgorithm.hpp:39
triggeralgs::TCMakerPlaneCoincidenceAlgorithm::configure
void configure(const nlohmann::json &config)
Definition
TCMakerPlaneCoincidenceAlgorithm.cpp:97
triggeralgs::TCMakerPlaneCoincidenceAlgorithm::check_adjacency
bool check_adjacency() const
Definition
TCMakerPlaneCoincidenceAlgorithm.cpp:147
triggeralgs::TCMakerPlaneCoincidenceAlgorithm::add_window_to_record
void add_window_to_record(TAWindow window)
Definition
TCMakerPlaneCoincidenceAlgorithm.cpp:155
triggeralgs::TCMakerPlaneCoincidenceAlgorithm::m_trigger_on_n_channels
bool m_trigger_on_n_channels
Definition
TCMakerPlaneCoincidenceAlgorithm.hpp:36
triggeralgs::TCMakerPlaneCoincidenceAlgorithm::tc_number
int tc_number
Definition
TCMakerPlaneCoincidenceAlgorithm.hpp:40
triggeralgs::TCMakerPlaneCoincidenceAlgorithm::process
void process(const TriggerActivity &, std::vector< TriggerCandidate > &)
TA processing function that creates & fills TCs.
Definition
TCMakerPlaneCoincidenceAlgorithm.cpp:25
triggeralgs::TCMakerPlaneCoincidenceAlgorithm::m_n_channels_threshold
uint16_t m_n_channels_threshold
Definition
TCMakerPlaneCoincidenceAlgorithm.hpp:38
triggeralgs::TCMakerPlaneCoincidenceAlgorithm::m_trigger_on_adc
bool m_trigger_on_adc
Definition
TCMakerPlaneCoincidenceAlgorithm.hpp:35
triggeralgs::TriggerCandidateMaker::m_tc_type_out
TriggerCandidate::Type m_tc_type_out
Configurable TC type output.
Definition
TriggerCandidateMaker.hpp:138
triggeralgs::TriggerCandidateMaker::configure
virtual void configure(const nlohmann::json &config)
Definition
TriggerCandidateMaker.hpp:101
TLOG_DEBUG
#define TLOG_DEBUG(lvl,...)
Definition
Logging.hpp:112
triggeralgs
Definition
AbstractFactory.hpp:18
triggeralgs::TLVL_DEBUG_MEDIUM
@ TLVL_DEBUG_MEDIUM
Definition
Logging.hpp:23
triggeralgs::TLVL_VERY_IMPORTANT
@ TLVL_VERY_IMPORTANT
Definition
Logging.hpp:18
triggeralgs::TLVL_DEBUG_INFO
@ TLVL_DEBUG_INFO
Definition
Logging.hpp:21
triggeralgs::TLVL_DEBUG_LOW
@ TLVL_DEBUG_LOW
Definition
Logging.hpp:22
triggeralgs::TLVL_DEBUG_HIGH
@ TLVL_DEBUG_HIGH
Definition
Logging.hpp:24
TCMakerPlaneCoincidenceAlgorithm.hpp
dunedaq::trgdataformats::TriggerActivityData::time_end
timestamp_t time_end
Definition
TriggerActivityData.hpp:47
dunedaq::trgdataformats::TriggerActivityData::time_start
timestamp_t time_start
Definition
TriggerActivityData.hpp:46
dunedaq::trgdataformats::TriggerActivityData::detid
detid_t detid
Definition
TriggerActivityData.hpp:55
dunedaq::trgdataformats::TriggerCandidateData::type
Type type
Definition
TriggerCandidateData.hpp:94
dunedaq::trgdataformats::TriggerCandidateData::time_candidate
timestamp_t time_candidate
Definition
TriggerCandidateData.hpp:88
dunedaq::trgdataformats::TriggerCandidateData::time_end
timestamp_t time_end
Definition
TriggerCandidateData.hpp:87
dunedaq::trgdataformats::TriggerCandidateData::time_start
timestamp_t time_start
Definition
TriggerCandidateData.hpp:86
dunedaq::trgdataformats::TriggerCandidateData::Algorithm::kPlaneCoincidence
@ kPlaneCoincidence
Definition
TriggerCandidateData.hpp:74
dunedaq::trgdataformats::TriggerCandidateData::algorithm
Algorithm algorithm
Definition
TriggerCandidateData.hpp:95
dunedaq::trgdataformats::TriggerCandidateData::detid
detid_t detid
Definition
TriggerCandidateData.hpp:93
triggeralgs::TriggerActivity
Definition
TriggerActivity.hpp:20
triggeralgs::TriggerCandidate
Definition
TriggerCandidate.hpp:20
triggeralgs::TriggerCandidate::inputs
std::vector< dunedaq::trgdataformats::TriggerActivityData > inputs
Definition
TriggerCandidate.hpp:33
Generated on
for DUNE-DAQ by
1.17.0