diff --git a/sf-writer/sf_h5_writer.cpp b/sf-writer/sf_h5_writer.cpp index 72ae19d..7c49d8d 100644 --- a/sf-writer/sf_h5_writer.cpp +++ b/sf-writer/sf_h5_writer.cpp @@ -33,89 +33,87 @@ int main (int argc, char *argv[]) uint64_t start_pulse_id = (uint64_t) atoll(argv[2]); uint64_t stop_pulse_id = (uint64_t) atoll(argv[3]); - H5Writer writer(output_file); - writer.create_file(); +// H5Writer writer(output_file); +// writer.create_file(); + + size_t n_modules = 32; + + auto metadata_buffer = make_unique(); + auto image_buffer = make_unique(n_modules*512*1024); + + uint32_t all_modules_ready = 0; + for (size_t i=0; i<32; i++) { + all_modules_ready |= 1 << i; + } + + atomic_uint32_t modules_ready = all_modules_ready; auto ctx = zmq_ctx_new(); zmq_ctx_set (ctx, ZMQ_IO_THREADS, 16); - size_t n_modules = 32; - void* sockets[n_modules]; + auto read_thread = [&](int module_id) { + auto socket = zmq_socket(ctx, ZMQ_PULL); - for (size_t i=0; i(); - auto image_buffer = make_unique(32*512*1024); + }; int i_write = 0; size_t total_ms = 0; size_t max_ms = 0; + auto start_time = chrono::steady_clock::now(); + while (true) { - uint64_t pulse_id = 0; - auto start_time = chrono::steady_clock::now(); - - for (size_t i=0; ipulse_id; - } - - if (pulse_id != metadata_buffer->pulse_id) { - cout << "Module " << i << " pulse " << metadata_buffer->pulse_id; - cout << " instead of " << pulse_id << endl; - } - - auto n_bytes_image = zmq_recv( - sockets[i], - (image_buffer.get() + (512*1024*i)), - 512 * 1024 * 2, - 0); - - if (n_bytes_image != 512 * 1024 * 2) { - cout << "n_bytes_image " << n_bytes_image << endl; - throw runtime_error("Unexpected number of bytes in image."); - } + if (modules_ready != 0) { + continue; } -// writer.write_data("image", i_write, (char*) (image_buffer.get()), -// {32*512, 1024}, 32*512*1024*2, "uint16", "little"); i_write++; auto end_time = chrono::steady_clock::now(); - // TODO: Some poor statistics. - auto ms_duration = chrono::duration_cast(end_time-start_time).count(); total_ms += ms_duration; if (ms_duration > max_ms) { @@ -129,15 +127,8 @@ int main (int argc, char *argv[]) total_ms = 0; max_ms = 0; } + auto start_time = chrono::steady_clock::now(); } - writer.close_file(); - - for (size_t i=0; i