diff --git a/CMakeLists.txt b/CMakeLists.txt index 19194fc..7d4662c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,5 +38,5 @@ add_subdirectory("std-udp-sync") add_subdirectory("jf-assembler") #add_subdirectory("sf-stream") #add_subdirectory("sf-writer") -add_subdirectory("jf-live-writer") +add_subdirectory("std-det-writer") diff --git a/jf-live-writer/CMakeLists.txt b/jf-live-writer/CMakeLists.txt deleted file mode 100644 index f338d37..0000000 --- a/jf-live-writer/CMakeLists.txt +++ /dev/null @@ -1,38 +0,0 @@ -find_package(MPI REQUIRED) -# Because of openmpi. -add_definitions(-DOMPI_SKIP_MPICXX) - -file(GLOB SOURCES - src/*.cpp) - -add_library(jf-live-writer-lib STATIC ${SOURCES}) -target_include_directories(jf-live-writer-lib - PUBLIC include/ - SYSTEM ${MPI_INCLUDE_PATH}) - -target_link_libraries(jf-live-writer-lib - external - core-buffer-lib - ${MPI_LIBRARIES} - ) - -add_executable(jf-live-writer src/main.cpp) - - -if (USE_EIGER) - set (LIB_NAME_UDP_RECV "eiger_live_writer") -else() - set (LIB_NAME_UDP_RECV "jf_live_writer") -endif() - -set_target_properties(jf-live-writer PROPERTIES OUTPUT_NAME ${LIB_NAME_UDP_RECV}) - -target_link_libraries(jf-live-writer - jf-live-writer-lib - zmq - hdf5 - rt - ) - -enable_testing() -add_subdirectory(test/) \ No newline at end of file diff --git a/std-det-writer/CMakeLists.txt b/std-det-writer/CMakeLists.txt new file mode 100644 index 0000000..c01a581 --- /dev/null +++ b/std-det-writer/CMakeLists.txt @@ -0,0 +1,31 @@ +find_package(MPI REQUIRED) +# Because of openmpi. +add_definitions(-DOMPI_SKIP_MPICXX) + +file(GLOB SOURCES + src/*.cpp) + +add_library(std-det-writer-lib STATIC ${SOURCES}) +target_include_directories(std-det-writer-lib + PUBLIC include/ + SYSTEM ${MPI_INCLUDE_PATH}) + +target_link_libraries(std-det-writer-lib + external + core-buffer-lib + ${MPI_LIBRARIES} + ) + +add_executable(std-det-writer src/main.cpp) + +set_target_properties(std-det-writer PROPERTIES OUTPUT_NAME std_det_writer) + +target_link_libraries(std-det-writer + std-det-writer-lib + zmq + hdf5 + rt + ) + +enable_testing() +add_subdirectory(test/) \ No newline at end of file diff --git a/jf-live-writer/README.md b/std-det-writer/README.md similarity index 99% rename from jf-live-writer/README.md rename to std-det-writer/README.md index 21dd53e..e7ddf89 100644 --- a/jf-live-writer/README.md +++ b/std-det-writer/README.md @@ -1,4 +1,4 @@ -# jf-live-writer +# std-det-writer This component is a PHDF5 based MPI writer for high performance detectors that need more than 2GB/s of write speed. It parallelizes the HDF5 writing to diff --git a/jf-live-writer/debug.Dockerfile b/std-det-writer/debug.Dockerfile similarity index 71% rename from jf-live-writer/debug.Dockerfile rename to std-det-writer/debug.Dockerfile index 1a8c53f..eb0f094 100644 --- a/jf-live-writer/debug.Dockerfile +++ b/std-det-writer/debug.Dockerfile @@ -4,7 +4,7 @@ COPY . /sf_daq_buffer/ RUN mkdir /sf_daq_buffer/build && \ cd /sf_daq_buffer/build && \ - cmake3 -DBUILD_JF_LIVE_WRITER=ON .. && \ - make jf-live-writer + cmake3 .. && \ + make std-det-writer WORKDIR /sf_daq_buffer/build diff --git a/jf-live-writer/include/JFH5Writer.hpp b/std-det-writer/include/JFH5Writer.hpp similarity index 100% rename from jf-live-writer/include/JFH5Writer.hpp rename to std-det-writer/include/JFH5Writer.hpp diff --git a/std-det-writer/include/StdDetWriterConfig.hpp b/std-det-writer/include/StdDetWriterConfig.hpp new file mode 100644 index 0000000..847439b --- /dev/null +++ b/std-det-writer/include/StdDetWriterConfig.hpp @@ -0,0 +1,33 @@ +#ifndef SF_DAQ_BUFFER_UDPRECVCONFIG_HPP +#define SF_DAQ_BUFFER_UDPRECVCONFIG_HPP + + +#include +#include +#include +#include +#include + +struct UdpRecvConfig { + static UdpRecvConfig from_json_file(const std::string& filename) { + std::ifstream ifs(filename); + rapidjson::IStreamWrapper isw(ifs); + rapidjson::Document config_parameters; + config_parameters.ParseStream(isw); + + return { + config_parameters["detector_name"].GetString(), + config_parameters["detector_type"].GetString(), + config_parameters["n_modules"].GetInt(), + config_parameters["start_udp_port"].GetInt(), + }; + } + + const std::string detector_name; + const std::string detector_type; + const int n_modules; + const int start_udp_port; +}; + + +#endif //SF_DAQ_BUFFER_UDPRECVCONFIG_HPP diff --git a/jf-live-writer/include/WriterStats.hpp b/std-det-writer/include/WriterStats.hpp similarity index 100% rename from jf-live-writer/include/WriterStats.hpp rename to std-det-writer/include/WriterStats.hpp diff --git a/jf-live-writer/include/broker_format.hpp b/std-det-writer/include/broker_format.hpp similarity index 100% rename from jf-live-writer/include/broker_format.hpp rename to std-det-writer/include/broker_format.hpp diff --git a/jf-live-writer/include/live_writer_config.hpp b/std-det-writer/include/live_writer_config.hpp similarity index 100% rename from jf-live-writer/include/live_writer_config.hpp rename to std-det-writer/include/live_writer_config.hpp diff --git a/jf-live-writer/src/JFH5Writer.cpp b/std-det-writer/src/JFH5Writer.cpp similarity index 100% rename from jf-live-writer/src/JFH5Writer.cpp rename to std-det-writer/src/JFH5Writer.cpp diff --git a/jf-live-writer/src/WriterStats.cpp b/std-det-writer/src/WriterStats.cpp similarity index 100% rename from jf-live-writer/src/WriterStats.cpp rename to std-det-writer/src/WriterStats.cpp diff --git a/jf-live-writer/src/main.cpp b/std-det-writer/src/main.cpp similarity index 87% rename from jf-live-writer/src/main.cpp rename to std-det-writer/src/main.cpp index e2940e7..4af58a7 100644 --- a/jf-live-writer/src/main.cpp +++ b/std-det-writer/src/main.cpp @@ -40,7 +40,9 @@ int main (int argc, char *argv[]) auto receiver = BufferUtils::connect_socket( ctx, config.detector_name, "writer-agent"); - RamBuffer ram_buffer(config.detector_name, config.n_modules); + const size_t IMAGE_N_BYTES = 12; + RamBuffer image_buffer(config.detector_name + "_assembler", + sizeof(ImageMetadata), IMAGE_N_BYTES, 1, RAM_BUFFER_N_SLOTS); JFH5Writer writer(config); WriterStats stats(config.detector_name); @@ -60,9 +62,17 @@ int main (int argc, char *argv[]) stats.start_run(meta); } + // i_image == n_images -> end of run. + if (meta.i_image == meta.n_images) { + writer.close_run(); + + stats.end_run(); + continue; + } + // Fair distribution of images among writers. if (meta.i_image % n_writers == i_writer) { - char* data = ram_buffer.get_slot_data(meta.image_metadata.pulse_id); + char* data = ram_buffer.get_slot_data(meta.image_metadata.id); stats.start_image_write(); writer.write_data(meta.run_id, meta.i_image, data); @@ -74,11 +84,5 @@ int main (int argc, char *argv[]) writer.write_meta(meta.run_id, meta.i_image, meta.image_metadata); } - // i_image + 1 == meta.n_images -> we received the last image. - if (meta.i_image+1 == meta.n_images) { - writer.close_run(); - - stats.end_run(); - } } } diff --git a/jf-live-writer/test/CMakeLists.txt b/std-det-writer/test/CMakeLists.txt similarity index 100% rename from jf-live-writer/test/CMakeLists.txt rename to std-det-writer/test/CMakeLists.txt diff --git a/jf-live-writer/test/main.cpp b/std-det-writer/test/main.cpp similarity index 100% rename from jf-live-writer/test/main.cpp rename to std-det-writer/test/main.cpp