1#ifndef TRGTOOLS_TAEMULATIONWORKER_CPP_
2#define TRGTOOLS_TAEMULATIONWORKER_CPP_
12 std::pair<uint64_t, uint64_t> sliceid_range,
21 std::string algo_name =
config[
"trigger_activity_plugin"][0];
22 nlohmann::json algo_config =
config[
"trigger_activity_config"][0];
26 std::vector<daqdataformats::run_number_t> run_numbers;
27 std::vector<size_t> file_indices;
28 for (
const auto& input_file : input_files) {
29 if (std::find(run_numbers.begin(),
35 if (std::find(file_indices.begin(),
38 file_indices.push_back(input_file->get_attribute<
size_t>(
"file_index"));
42 std::string application_name =
m_input_files.front()->get_attribute<std::string>(
"application_name");
45 fmt::print(
"Run Numbers: {}\nFile Indices: {}\nApp name: '{}'\n",
46 fmt::join(run_numbers,
","),
47 fmt::join(file_indices,
","),
57 fmt::print(
"Number of makers to make: {}\n", valid_sources.size());
61 std::unique_ptr<triggeralgs::TriggerActivityMaker> ta_maker =
63 ta_maker->configure(algo_config);
66 m_ta_emulators[sid] = std::make_unique<trgtools::TAEmulationUnit>();
76std::vector<daqdataformats::SourceID>
81 std::vector<daqdataformats::SourceID> ret;
82 for (
const auto& fragment : fragments) {
99 throw "Files not set yet!";
110 std::function<void()> task;
143 auto records = input_file->get_all_record_ids();
145 for (
const auto& record : records) {
148 fmt::print(
" Will not process RecordID {} because it's outside of our range!", record.first);
157 for (
const auto& fragment : fragments) {
165 size_t n_tps = fragment->get_data_size() /
SIZE_TP;
167 fmt::print(
" TP fragment size: {}\n", fragment->get_data_size());
168 fmt::print(
" Num TPs: {}\n", n_tps);
172 std::vector<trgdataformats::TriggerPrimitive> tp_buffer;
174 tp_buffer.reserve(n_tps);
179 uint64_t last_ts = 0;
180 for (
size_t tpid(0); tpid < n_tps; ++tpid) {
181 auto& tp = tp_array[tpid];
182 if (tp.time_start <= last_ts && !
m_quiet) {
183 fmt::print(
" ERROR: {} {} ", +tp.time_start, last_ts);
185 tp_buffer.push_back(tp);
192 fragment->get_element_id().id + 1000 };
196 enqueue_task([
this, sid, record, frag_hdr, tp_buffer = std::move(tp_buffer)]()
mutable {
197 this->
process_task(sid, record.first, frag_hdr, std::move(tp_buffer));
200 this->
process_task(sid, record.first, frag_hdr, std::move(tp_buffer));
211 for (
auto& [key, vec_tas] :
m_tas) {
212 total += vec_tas.size();
214 std::cout <<
"We have a total of " << total <<
" TAs!" << std::endl;
247 fmt::print(
"TAEmulationWorker_{} work completed\n",
m_id);
259 fmt::print(
"m_stop issued\n");
270 std::vector<trgdataformats::TriggerPrimitive>&& _tps)
273 std::unique_ptr<daqdataformats::Fragment> frag =
m_ta_emulators[_source_id]->emulate_vector(_tps);
281 std::vector<triggeralgs::TriggerActivity> ta_buffer =
m_ta_emulators[_source_id]->get_last_output_buffer();
284 size_t n_tas = ta_buffer.size();
290 fmt::print(
" Found {} TAs!\n", n_tas);
300 m_tas[_rec].end(), std::make_move_iterator(ta_buffer.begin()), std::make_move_iterator(ta_buffer.end()));
302 frag->set_header_fields(_header);
309std::map<uint64_t, std::vector<triggeralgs::TriggerActivity>>
312 return std::move(
m_tas);
315std::map<uint64_t, std::vector<std::unique_ptr<daqdataformats::Fragment>>>
std::map< daqdataformats::SourceID, std::vector< uint64_t > > source_id_geo_id_map_t
static std::shared_ptr< AbstractFactory< TriggerActivityMaker > > get_instance()
FELIX Initialization std::string initerror FELIX queue timed std::string queuename Unexpected chunk size
Cannot add TPSet with sourceid