DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
TimeSliceProcessor Class Reference

Public Member Functions

 TimeSliceProcessor (std::string input_path, std::string output_path)
 ~TimeSliceProcessor ()
void set_processor (std::function< void(daqdataformats::TimeSlice &)> processor)
void loop (uint64_t num_records=0, uint64_t offset=0, bool quiet=false)

Private Member Functions

void open_files (std::string input_path, std::string output_path)
void close_files ()
void process (daqdataformats::TimeSlice &tls)

Private Attributes

std::unique_ptr< hdf5libs::HDF5RawDataFile > m_input_file
std::unique_ptr< hdf5libs::HDF5RawDataFile > m_output_file
std::function< void(daqdataformats::TimeSlice &)> m_processor

Detailed Description

Definition at line 22 of file process_tpstream.cxx.

Constructor & Destructor Documentation

◆ TimeSliceProcessor()

TimeSliceProcessor::TimeSliceProcessor ( std::string input_path,
std::string output_path )

Definition at line 46 of file process_tpstream.cxx.

47{
48 this->open_files(input_path, output_path);
49}
void open_files(std::string input_path, std::string output_path)

◆ ~TimeSliceProcessor()

TimeSliceProcessor::~TimeSliceProcessor ( )

Definition at line 52 of file process_tpstream.cxx.

53{
54 this->close_files();
55}

Member Function Documentation

◆ close_files()

void TimeSliceProcessor::close_files ( )
private

Definition at line 89 of file process_tpstream.cxx.

90{
91 // Do something?
92}

◆ loop()

void TimeSliceProcessor::loop ( uint64_t num_records = 0,
uint64_t offset = 0,
bool quiet = false )

Definition at line 111 of file process_tpstream.cxx.

112{
113
114 // Replace with a record selection?
115 auto records = m_input_file->get_all_record_ids();
116
117 if (!num_records) {
118 num_records = (records.size() - offset);
119 }
120
121 uint64_t first_rec = offset, last_rec = offset + num_records;
122
123 uint64_t i_rec(0);
124 for (const auto& rid : records) {
125
126 if (i_rec < first_rec || i_rec >= last_rec) {
127 ++i_rec;
128 continue;
129 }
130
131 if (!quiet)
132 fmt::print("\n-- Processing TSL {}:{}\n\n", rid.first, rid.second);
133 auto tsl = m_input_file->get_timeslice(rid);
134 // Or filter on a selection here using a lambda?
135
136 // if (!quiet)
137 // fmt::print("TSL number {}\n", tsl.get_header().timeslice_number);
138
139 // Add a process method
140 this->process(tsl);
141
142 if (m_output_file)
143 m_output_file->write(tsl);
144
145 ++i_rec;
146 if (!quiet)
147 fmt::print("\n-- Finished TSL {}:{}\n\n", rid.first, rid.second);
148 }
149}
void process(daqdataformats::TimeSlice &tls)
std::unique_ptr< hdf5libs::HDF5RawDataFile > m_input_file
std::unique_ptr< hdf5libs::HDF5RawDataFile > m_output_file
double offset

◆ open_files()

void TimeSliceProcessor::open_files ( std::string input_path,
std::string output_path )
private

Definition at line 59 of file process_tpstream.cxx.

60{
61 // Open input file
62 m_input_file = std::make_unique<hdf5libs::HDF5RawDataFile>(input_path);
63
64 if (!m_input_file->is_timeslice_type()) {
65 fmt::print("ERROR: input file '{}' not of type 'TimeSlice'\n", input_path);
66 throw std::runtime_error(fmt::format("ERROR: input file '{}' not of type 'TimeSlice'", input_path));
67 }
68
69 auto run_number = m_input_file->get_attribute<daqdataformats::run_number_t>("run_number");
70 auto file_index = m_input_file->get_attribute<size_t>("file_index");
71 auto application_name = m_input_file->get_attribute<std::string>("application_name");
72
73 fmt::print("Run Number: {}\nFile Index: {}\nApp name: '{}'\n", run_number, file_index, application_name);
74
75 if (!output_path.empty()) {
76 // Open output file
77 m_output_file = std::make_unique<hdf5libs::HDF5RawDataFile>(
78 output_path,
79 m_input_file->get_attribute<daqdataformats::run_number_t>("run_number"),
80 m_input_file->get_attribute<size_t>("file_index"),
81 m_input_file->get_attribute<std::string>("application_name"),
82 m_input_file->get_file_layout().get_file_layout_params(),
83 m_input_file->get_srcid_geoid_map());
84 }
85}

◆ process()

void TimeSliceProcessor::process ( daqdataformats::TimeSlice & tls)
private

Definition at line 103 of file process_tpstream.cxx.

104{
105 if (m_processor)
106 m_processor(tls);
107}
std::function< void(daqdataformats::TimeSlice &)> m_processor

◆ set_processor()

void TimeSliceProcessor::set_processor ( std::function< void(daqdataformats::TimeSlice &)> processor)

Definition at line 96 of file process_tpstream.cxx.

97{
98 m_processor = processor;
99}

Member Data Documentation

◆ m_input_file

std::unique_ptr<hdf5libs::HDF5RawDataFile> TimeSliceProcessor::m_input_file
private

Definition at line 26 of file process_tpstream.cxx.

◆ m_output_file

std::unique_ptr<hdf5libs::HDF5RawDataFile> TimeSliceProcessor::m_output_file
private

Definition at line 27 of file process_tpstream.cxx.

◆ m_processor

std::function<void(daqdataformats::TimeSlice&)> TimeSliceProcessor::m_processor
private

Definition at line 35 of file process_tpstream.cxx.


The documentation for this class was generated from the following file: