Esempio n. 1
0
 // 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));
     }
 }
Esempio n. 2
0
 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();
 }