// Called when the metadata object is about to be written // FIll the fields on the metadata virtual void compute_info(const MessageBuffer& buffer) { ProcessingStep& p = *_processing_step; p.set_name("root2a4"); p.set_walltime((chrono::steady_clock::now() - _start_wallclock).count()); p.set_cputime((chrono::thread_clock::now() - _start_cpuclock).count()); p.set_input_events(_input_events); p.set_input_bytes_read(_input_bytes_read); _metadata.set_event_count(buffer.size()); if (buffer.size() >= 1) { if (_field_run) { auto run_number = _refl->GetUInt32(*buffer[0], _field_run); _metadata.add_run(run_number); auto* full_period = get_period(run_number); std::string period = full_period; if (period != "UNK") { period = period[0]; } _metadata.add_period(period); _metadata.add_subperiod(full_period); } if (_field_mc_channel && _refl->HasField(*buffer[0], _field_mc_channel)) _metadata.add_mc_channel(_refl->GetUInt32(*buffer[0], _field_mc_channel)); } }
void write_metadata(shared<a4::io::OutputStream> stream, const MessageBuffer& buffer) { compute_info(buffer); // Only write metadata if there is at least one message to be written // (A4 doesn't deal well with the case of metadata for 0 events yet) if (buffer.size() >= 1) { stream->metadata(_metadata); } reset_counters(); }