DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
TCMakerPlaneCoincidenceAlgorithm.cpp
Go to the documentation of this file.
1
10
11#include "TRACE/trace.h"
12#define TRACE_NAME "TCMakerPlaneCoincidenceAlgorithm"
13
14#include <vector>
15
16using namespace triggeralgs;
17
18using Logging::TLVL_DEBUG_HIGH;
19using Logging::TLVL_DEBUG_MEDIUM;
20using Logging::TLVL_DEBUG_LOW;
21using Logging::TLVL_DEBUG_INFO;
22using Logging::TLVL_VERY_IMPORTANT;
23
24void
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.
34 m_current_window.reset(activity);
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.
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;
46 output_tc.push_back(tc);
47
48 // Clear the current window (only has a single TA in it)
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.
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.
67 TLOG_DEBUG(TLVL_DEBUG_MEDIUM) << "[TCM:PC] ADC integral in window is greater than specified threshold.";
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.
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.";
89 }
90
92
93 return;
94}
95
96void
98{
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 }
113 TLOG_DEBUG(TLVL_VERY_IMPORTANT) << "[TCM:PC] Using trigger_on_n_channels is not supported.";
114 throw BadConfiguration(ERS_HERE, TRACE_NAME);
115 }
117 TLOG_DEBUG(TLVL_DEBUG_LOW) << "[TCM:PC] Both trigger flags are false. Passing TAs through 1:1.";
118 }
119
120 return;
121}
122
125{
126 TriggerActivity latest_ta_in_window = m_current_window.inputs.back();
127
130 tc.time_end = latest_ta_in_window.time_end;
132 tc.detid = latest_ta_in_window.detid;
133 tc.type = m_tc_type_out;
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
146bool
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.
154void
156{
157 m_window_record.push_back(window);
158 return;
159}
160
161void
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
#define ERS_HERE
#define REGISTER_TRIGGER_CANDIDATE_MAKER(tcm_name, tcm_class)
timestamp_t time_start
Definition TAWindow.hpp:52
void clear()
Clear all inputs.
Definition TAWindow.cpp:35
void add(const TriggerActivity &input_ta)
Add the input TA's contribution to the total ADC, increase the hit count of all of the channels which...
Definition TAWindow.cpp:16
std::vector< TriggerActivity > inputs
Definition TAWindow.hpp:55
bool is_empty() const
Definition TAWindow.hpp:22
void reset(TriggerActivity const &input_ta)
Reset window content on the input.
Definition TAWindow.cpp:79
uint16_t n_channels_hit()
Definition TAWindow.hpp:34
void move(TriggerActivity const &input_ta, timestamp_t const &window_length)
Find all of the TAs in the window that need to be removed if the input_ta is to be added and the size...
Definition TAWindow.cpp:45
void process(const TriggerActivity &, std::vector< TriggerCandidate > &)
TA processing function that creates & fills TCs.
TriggerCandidate::Type m_tc_type_out
Configurable TC type output.
virtual void configure(const nlohmann::json &config)
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:112
#define TRACE_NAME
std::vector< dunedaq::trgdataformats::TriggerActivityData > inputs