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::HDF5RawDataFilem_input_file
 
std::unique_ptr< hdf5libs::HDF5RawDataFilem_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 48 of file process_tpstream.cxx.

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

◆ ~TimeSliceProcessor()

TimeSliceProcessor::~TimeSliceProcessor ( )

Definition at line 54 of file process_tpstream.cxx.

55{
56 this->close_files();
57}

Member Function Documentation

◆ close_files()

void TimeSliceProcessor::close_files ( )
private

Definition at line 91 of file process_tpstream.cxx.

91 {
92 // Do something?
93}

◆ loop()

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

Definition at line 110 of file process_tpstream.cxx.

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

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

◆ process()

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

Definition at line 103 of file process_tpstream.cxx.

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

◆ set_processor()

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

Definition at line 97 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: