From 4307a670ebe3a2451beccf7c522911b1b5b0b287 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Thu, 16 Nov 2023 18:45:39 +0100 Subject: [PATCH] gRPC is necessary only for JFJochBroker --- broker/JFJochBroker.cpp | 114 ++++++++- broker/JFJochStateMachine.cpp | 137 ++++------ broker/JFJochStateMachine.h | 57 ++++- common/DiffractionExperiment.cpp | 23 +- common/DiffractionExperiment.h | 1 - grpc/JFJochWriterClient.cpp | 51 ---- grpc/JFJochWriterClient.h | 21 -- grpc/JFJochWriterGroupClient.cpp | 25 -- grpc/JFJochWriterGroupClient.h | 19 -- tests/CMakeLists.txt | 2 +- tests/JFJochFullIntegrationTest.cpp | 241 +++++++++--------- ...kerTest.cpp => JFJochStateMachineTest.cpp} | 227 ++++++++--------- 12 files changed, 449 insertions(+), 469 deletions(-) delete mode 100644 grpc/JFJochWriterClient.cpp delete mode 100644 grpc/JFJochWriterClient.h delete mode 100644 grpc/JFJochWriterGroupClient.cpp delete mode 100644 grpc/JFJochWriterGroupClient.h rename tests/{JFJochBrokerTest.cpp => JFJochStateMachineTest.cpp} (71%) diff --git a/broker/JFJochBroker.cpp b/broker/JFJochBroker.cpp index 757f5e71..4268c88c 100644 --- a/broker/JFJochBroker.cpp +++ b/broker/JFJochBroker.cpp @@ -163,13 +163,121 @@ JFJochProtoBuf::MeasurementStatistics Convert(const MeasurementStatistics &input return ret; } +DatasetSettings Convert(const JFJochProtoBuf::DatasetSettings& input) { + DatasetSettings ret; + + ret.images_per_trigger = input.images_per_trigger(); + ret.ntrigger = input.ntrigger(); + + switch (input.fpga_pixel_output()) { + + case JFJochProtoBuf::INT16: + ret.fpga_pixel_output = FPGAPixelOutput::Int16; + break; + case JFJochProtoBuf::UINT16: + ret.fpga_pixel_output = FPGAPixelOutput::Uint16; + break; + case JFJochProtoBuf::INT32: + ret.fpga_pixel_output = FPGAPixelOutput::Int32; + break; + case JFJochProtoBuf::UINT32: + ret.fpga_pixel_output = FPGAPixelOutput::Uint32; + break; + default: + case JFJochProtoBuf::AUTO: + ret.fpga_pixel_output = FPGAPixelOutput::Auto; + break; + } + + ret.summation = input.summation(); + ret.beam_x_pxl = input.beam_x_pxl(); + ret.beam_y_pxl = input.beam_y_pxl(); + ret.detector_distance_mm = input.detector_distance_mm(); + ret.photon_energy_keV = input.photon_energy_kev(); + + ret.file_prefix = input.file_prefix(); + ret.data_file_count = input.data_file_count(); + switch (input.compression()) { + + case JFJochProtoBuf::BSHUF_LZ4: + ret.compression = CompressionAlgorithm::BSHUF_LZ4; + break; + case JFJochProtoBuf::BSHUF_ZSTD: + ret.compression = CompressionAlgorithm::BSHUF_ZSTD; + break; + case JFJochProtoBuf::BSHUF_ZSTD_RLE: + ret.compression = CompressionAlgorithm::BSHUF_ZSTD_RLE; + break; + default: + case JFJochProtoBuf::NO_COMPRESSION: + ret.compression = CompressionAlgorithm::NO_COMPRESSION; + break; + } + + + ret.sample_name = input.sample_name(); + if (input.has_unit_cell()) + ret.unit_cell = UnitCell{ + .a = input.unit_cell().a(), + .b = input.unit_cell().b(), + .c = input.unit_cell().c(), + .alpha = input.unit_cell().alpha(), + .beta = input.unit_cell().beta(), + .gamma = input.unit_cell().gamma() + }; + ret.space_group_number = input.space_group_number(); + + ret.rad_int_solid_angle_corr = input.rad_int_solid_angle_corr(); + ret.rad_int_polarization_corr = input.rad_int_polarization_corr(); + ret.rad_int_polarization_factor = input.rad_int_polarization_factor(); + + ret.save_calibration = input.save_calibration(); + return ret; +} + +DetectorSettings Convert(const JFJochProtoBuf::DetectorSettings &input) { + DetectorSettings ret{}; + + ret.frame_time_us = input.frame_time_us(); + ret.count_time_us = input.count_time_us(); + + ret.storage_cell_count = input.storage_cell_count(); + ret.use_internal_packet_generator = input.use_internal_packet_generator(); + ret.collect_raw_data = input.collect_raw_data(); + + ret.pedestal_g0_frames = input.pedestal_g0_frames(); + ret.pedestal_g1_frames = input.pedestal_g1_frames(); + ret.pedestal_g2_frames = input.pedestal_g2_frames(); + + ret.storage_cell_delay_ns = input.storage_cell_delay_ns(); + return ret; +} + +JFJochProtoBuf::DetectorSettings Convert(const DetectorSettings &input) { + JFJochProtoBuf::DetectorSettings ret{}; + + ret.set_frame_time_us(input.frame_time_us); + ret.set_count_time_us(input.count_time_us); + + ret.set_storage_cell_count(input.storage_cell_count); + ret.set_use_internal_packet_generator(input.use_internal_packet_generator); + ret.set_collect_raw_data(input.collect_raw_data); + + ret.set_pedestal_g0_frames(input.pedestal_g0_frames); + ret.set_pedestal_g1_frames(input.pedestal_g1_frames); + ret.set_pedestal_g2_frames(input.pedestal_g2_frames); + + ret.set_storage_cell_delay_ns(input.storage_cell_delay_ns); + return ret; +} + JFJochBroker::JFJochBroker(const DiffractionExperiment &experiment) { state_machine.NotThreadSafe_Experiment() = experiment; } grpc::Status JFJochBroker::Start(grpc::ServerContext *context, const JFJochProtoBuf::DatasetSettings *request, JFJochProtoBuf::Empty *response) { - GRPC_RUN( state_machine.Start(*request) ); + GRPC_RUN( state_machine.Start(Convert(*request)) ); } grpc::Status JFJochBroker::Stop(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, @@ -219,7 +327,7 @@ grpc::Status JFJochBroker::GetRadialIntegrationProfiles(grpc::ServerContext *con grpc::Status JFJochBroker::GetDetectorSettings(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, JFJochProtoBuf::DetectorSettings *response) { - GRPC_RUN( *response = state_machine.GetDetectorSettings() ); + GRPC_RUN( *response = Convert(state_machine.GetDetectorSettings()) ); } grpc::Status JFJochBroker::GetCalibrationStatistics(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request, @@ -230,7 +338,7 @@ grpc::Status JFJochBroker::GetCalibrationStatistics(grpc::ServerContext *context grpc::Status JFJochBroker::PutDetectorSettings(grpc::ServerContext *context, const JFJochProtoBuf::DetectorSettings *request, JFJochProtoBuf::Empty *response) { - GRPC_RUN( state_machine.SetDetectorSettings(*request) ); + GRPC_RUN( state_machine.SetDetectorSettings(Convert(*request)) ); } grpc::Status JFJochBroker::GetDataProcessingSettings(::grpc::ServerContext *context, const ::JFJochProtoBuf::Empty *request, diff --git a/broker/JFJochStateMachine.cpp b/broker/JFJochStateMachine.cpp index 59d8e024..eba347a5 100644 --- a/broker/JFJochStateMachine.cpp +++ b/broker/JFJochStateMachine.cpp @@ -4,99 +4,60 @@ #include "JFJochStateMachine.h" -void LoadDatasetSettings(DiffractionExperiment& experiment, const JFJochProtoBuf::DatasetSettings &settings) { +void LoadDatasetSettings(DiffractionExperiment& experiment, const DatasetSettings &settings) { // Save DatasetSettings - if something goes wrong, restore old settings auto tmp = experiment; try { - // dataset = JFJochProtoBuf::DatasetSettings(); - experiment.ImagesPerTrigger(settings.images_per_trigger()); - experiment.NumTriggers(settings.ntrigger()); - experiment.BeamX_pxl(settings.beam_x_pxl()); - experiment.BeamY_pxl(settings.beam_y_pxl()); - experiment.DetectorDistance_mm(settings.detector_distance_mm()); - experiment.PhotonEnergy_keV(settings.photon_energy_kev()); - experiment.FilePrefix(settings.file_prefix()); - experiment.DataFileCount(settings.data_file_count()); - if (settings.has_unit_cell()) - experiment.SetUnitCell( - UnitCell{.a = settings.unit_cell().a(), - .b = settings.unit_cell().b(), - .c = settings.unit_cell().c(), - .alpha = settings.unit_cell().alpha(), - .beta = settings.unit_cell().beta(), - .gamma = settings.unit_cell().gamma()} - ); + experiment.ImagesPerTrigger(settings.images_per_trigger); + experiment.NumTriggers(settings.ntrigger); + experiment.BeamX_pxl(settings.beam_x_pxl); + experiment.BeamY_pxl(settings.beam_y_pxl); + experiment.DetectorDistance_mm(settings.detector_distance_mm); + experiment.PhotonEnergy_keV(settings.photon_energy_keV); + experiment.FilePrefix(settings.file_prefix); + experiment.DataFileCount(settings.data_file_count); + if (settings.unit_cell) + experiment.SetUnitCell(settings.unit_cell.value()); else experiment.SetUnitCell(); - experiment.SpaceGroupNumber(settings.space_group_number()); - experiment.SampleName(settings.sample_name()); - switch (settings.compression()) { - case JFJochProtoBuf::BSHUF_LZ4: - experiment.Compression(CompressionAlgorithm::BSHUF_LZ4); - break; - case JFJochProtoBuf::BSHUF_ZSTD: - experiment.Compression(CompressionAlgorithm::BSHUF_ZSTD); - break; - case JFJochProtoBuf::BSHUF_ZSTD_RLE: - experiment.Compression(CompressionAlgorithm::BSHUF_ZSTD_RLE); - break; - default: - case JFJochProtoBuf::NO_COMPRESSION: - experiment.Compression(CompressionAlgorithm::NO_COMPRESSION); - break; - } - experiment.SaveCalibration(settings.save_calibration()); - if (settings.summation() == 0) + experiment.SpaceGroupNumber(settings.space_group_number); + experiment.SampleName(settings.sample_name); + experiment.Compression(settings.compression); + experiment.SaveCalibration(settings.save_calibration); + if (settings.summation == 0) experiment.Summation(1); else - experiment.Summation(settings.summation()); - switch (settings.fpga_pixel_output()) { - default: - case JFJochProtoBuf::AUTO: - experiment.FPGAOutputMode(FPGAPixelOutput::Auto); - break; - case JFJochProtoBuf::INT16: - experiment.FPGAOutputMode(FPGAPixelOutput::Int16); - break; - case JFJochProtoBuf::UINT16: - experiment.FPGAOutputMode(FPGAPixelOutput::Uint16); - break; - case JFJochProtoBuf::INT32: - experiment.FPGAOutputMode(FPGAPixelOutput::Int32); - break; - case JFJochProtoBuf::UINT32: - experiment.FPGAOutputMode(FPGAPixelOutput::Uint32); - break; - } + experiment.Summation(settings.summation); + experiment.FPGAOutputMode(settings.fpga_pixel_output); } catch (...) { experiment = tmp; throw; } } -void LoadDetectorSettings(DiffractionExperiment& experiment, const JFJochProtoBuf::DetectorSettings &settings) { +void LoadDetectorSettings(DiffractionExperiment& experiment, const DetectorSettings &settings) { auto tmp = experiment; try { - if (settings.count_time_us() > 0) - experiment.FrameTime(std::chrono::microseconds(settings.frame_time_us()), - std::chrono::microseconds(settings.count_time_us())); + if (settings.count_time_us > 0) + experiment.FrameTime(std::chrono::microseconds(settings.frame_time_us), + std::chrono::microseconds(settings.count_time_us)); else - experiment.FrameTime(std::chrono::microseconds(settings.frame_time_us())); + experiment.FrameTime(std::chrono::microseconds(settings.frame_time_us)); - experiment.StorageCells(settings.storage_cell_count()); - experiment.UseInternalPacketGenerator(settings.use_internal_packet_generator()); + experiment.StorageCells(settings.storage_cell_count); + experiment.UseInternalPacketGenerator(settings.use_internal_packet_generator); - if (settings.collect_raw_data()) + if (settings.collect_raw_data) experiment.Mode(DetectorMode::Raw); else experiment.Mode(DetectorMode::Conversion); - experiment.PedestalG0Frames(settings.pedestal_g0_frames()); - experiment.PedestalG1Frames(settings.pedestal_g1_frames()); - experiment.PedestalG2Frames(settings.pedestal_g2_frames()); - if (settings.storage_cell_delay_ns() > 0) - experiment.StorageCellDelay(std::chrono::nanoseconds(settings.storage_cell_delay_ns())); + experiment.PedestalG0Frames(settings.pedestal_g0_frames); + experiment.PedestalG1Frames(settings.pedestal_g1_frames); + experiment.PedestalG2Frames(settings.pedestal_g2_frames); + if (settings.storage_cell_delay_ns > 0) + experiment.StorageCellDelay(std::chrono::nanoseconds(settings.storage_cell_delay_ns)); } catch (...) { experiment = tmp; throw; @@ -268,7 +229,7 @@ void JFJochStateMachine::Trigger() { services.Trigger(); } -void JFJochStateMachine::Start(const JFJochProtoBuf::DatasetSettings& settings) { +void JFJochStateMachine::Start(const DatasetSettings& settings) { std::unique_lock ul(m); if (state != JFJochState::Idle) @@ -304,11 +265,11 @@ void JFJochStateMachine::Start(const JFJochProtoBuf::DatasetSettings& settings) } } -void JFJochStateMachine::SetDatasetDefaults(JFJochProtoBuf::DatasetSettings &settings) { - if (settings.detector_distance_mm() <= 0) - settings.set_detector_distance_mm(100); - if (settings.ntrigger() <= 0) - settings.set_ntrigger(1); +void JFJochStateMachine::SetDatasetDefaults(DatasetSettings &settings) { + if (settings.detector_distance_mm <= 0) + settings.detector_distance_mm = 100.0; + if (settings.ntrigger <= 0) + settings.ntrigger = 1; } void JFJochStateMachine::Stop() { @@ -462,22 +423,22 @@ void JFJochStateMachine::SetCalibrationStatistics(const std::vector ul(m); - JFJochProtoBuf::DetectorSettings ret; - ret.set_frame_time_us(experiment.GetFrameTime().count()); - ret.set_count_time_us(experiment.GetFrameCountTime().count()); - ret.set_collect_raw_data(experiment.GetDetectorMode() != DetectorMode::Conversion); - ret.set_use_internal_packet_generator(experiment.IsUsingInternalPacketGen()); - ret.set_storage_cell_count(experiment.GetStorageCellNumber()); - ret.set_pedestal_g0_frames(experiment.GetPedestalG0Frames()); - ret.set_pedestal_g1_frames(experiment.GetPedestalG1Frames()); - ret.set_pedestal_g2_frames(experiment.GetPedestalG2Frames()); - ret.set_storage_cell_delay_ns(experiment.GetStorageCellDelay().count()); + DetectorSettings ret; + ret.frame_time_us = experiment.GetFrameTime().count(); + ret.count_time_us = experiment.GetFrameCountTime().count(); + ret.collect_raw_data = (experiment.GetDetectorMode() != DetectorMode::Conversion); + ret.use_internal_packet_generator = experiment.IsUsingInternalPacketGen(); + ret.storage_cell_count = experiment.GetStorageCellNumber(); + ret.pedestal_g0_frames = experiment.GetPedestalG0Frames(); + ret.pedestal_g1_frames = experiment.GetPedestalG1Frames(); + ret.pedestal_g2_frames = experiment.GetPedestalG2Frames(); + ret.storage_cell_delay_ns = experiment.GetStorageCellDelay().count(); return ret; } -void JFJochStateMachine::SetDetectorSettings(const JFJochProtoBuf::DetectorSettings &settings) { +void JFJochStateMachine::SetDetectorSettings(const DetectorSettings &settings) { std::unique_lock ul(m); switch (state) { case JFJochState::Inactive: diff --git a/broker/JFJochStateMachine.h b/broker/JFJochStateMachine.h index d58aa83f..af9927ec 100644 --- a/broker/JFJochStateMachine.h +++ b/broker/JFJochStateMachine.h @@ -8,8 +8,6 @@ #include #include -#include - #include "../common/DiffractionExperiment.h" #include "../jungfrau/JFCalibration.h" #include "../common/Logger.h" @@ -18,8 +16,6 @@ enum class JFJochState {Inactive, Idle, Measuring, Error, Busy, Pedestal}; -void LoadDatasetSettings(DiffractionExperiment& experiment, const JFJochProtoBuf::DatasetSettings &settings); - struct BrokerStatus { JFJochState broker_state; float progress; @@ -58,6 +54,51 @@ struct MeasurementStatistics { float bkg_estimate; }; +struct DatasetSettings { + int64_t images_per_trigger; + int64_t ntrigger; + + FPGAPixelOutput fpga_pixel_output; + int64_t summation; + + float beam_x_pxl; + float beam_y_pxl; + float detector_distance_mm; + float photon_energy_keV; + + std::string file_prefix; + int64_t data_file_count; + + CompressionAlgorithm compression; + + std::string sample_name; + std::optional unit_cell; + int64_t space_group_number; + + bool rad_int_solid_angle_corr; + bool rad_int_polarization_corr; + float rad_int_polarization_factor; + + bool save_calibration; +}; + +struct DetectorSettings { + int64_t frame_time_us; + int64_t count_time_us; + + int64_t storage_cell_count; + bool use_internal_packet_generator; + bool collect_raw_data; + + int64_t pedestal_g0_frames; + int64_t pedestal_g1_frames; + int64_t pedestal_g2_frames; + + int64_t storage_cell_delay_ns; +}; + +void LoadDatasetSettings(DiffractionExperiment& experiment, const DatasetSettings &settings); + class JFJochStateMachine { Logger &logger; JFJochServices &services; @@ -89,7 +130,7 @@ class JFJochStateMachine { DataProcessingSettings data_processing_settings; // Private functions assume that lock m is acquired - void SetDatasetDefaults(JFJochProtoBuf::DatasetSettings& settings); + void SetDatasetDefaults(DatasetSettings& settings); void WaitTillMeasurementDone(); void ImportPedestal(const JFJochReceiverOutput &receiver_output, size_t gain_level, size_t storage_cell = 0); void ImportPedestalG0(const JFJochReceiverOutput &receiver_output); @@ -105,7 +146,7 @@ public: void Initialize(); void Pedestal(); void Deactivate(); - void Start(const JFJochProtoBuf::DatasetSettings& settings); + void Start(const DatasetSettings& settings); void Stop(); void Trigger(); @@ -115,8 +156,8 @@ public: void LoadMask(const std::vector &vec, uint32_t bit); void SetCalibrationStatistics(const std::vector &input); - JFJochProtoBuf::DetectorSettings GetDetectorSettings() const; - void SetDetectorSettings(const JFJochProtoBuf::DetectorSettings& settings); + DetectorSettings GetDetectorSettings() const; + void SetDetectorSettings(const DetectorSettings& settings); // return by value to ensure thread safety std::optional GetMeasurementStatistics() const; diff --git a/common/DiffractionExperiment.cpp b/common/DiffractionExperiment.cpp index 8233d52f..3d70a176 100644 --- a/common/DiffractionExperiment.cpp +++ b/common/DiffractionExperiment.cpp @@ -205,7 +205,16 @@ DiffractionExperiment &DiffractionExperiment::MaskModuleEdges(bool input) { } DiffractionExperiment &DiffractionExperiment::Compression(CompressionAlgorithm input) { - dataset.compression = input; + switch (input) { + case CompressionAlgorithm::NO_COMPRESSION: + case CompressionAlgorithm::BSHUF_LZ4: + case CompressionAlgorithm::BSHUF_ZSTD: + case CompressionAlgorithm::BSHUF_ZSTD_RLE: + dataset.compression = input; + break; + default: + throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, "Invalid value for enum parameter"); + } return *this; } @@ -923,7 +932,17 @@ int64_t DiffractionExperiment::GetSummation() const { } DiffractionExperiment &DiffractionExperiment::FPGAOutputMode(FPGAPixelOutput input) { - dataset.fpga_pixel_output = input; + switch (input) { + case FPGAPixelOutput::Auto: + case FPGAPixelOutput::Int16: + case FPGAPixelOutput::Uint16: + case FPGAPixelOutput::Int32: + case FPGAPixelOutput::Uint32: + dataset.fpga_pixel_output = input; + break; + default: + throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, "Invalid value for enum parameter"); + } return *this; } diff --git a/common/DiffractionExperiment.h b/common/DiffractionExperiment.h index 3719e3ca..1fe33222 100644 --- a/common/DiffractionExperiment.h +++ b/common/DiffractionExperiment.h @@ -42,7 +42,6 @@ struct DetectorModuleConfig { uint64_t module_id_in_data_stream; }; - class DiffractionExperiment { // Internal detector settings std::chrono::microseconds frame_time_pedestalG1G2; diff --git a/grpc/JFJochWriterClient.cpp b/grpc/JFJochWriterClient.cpp deleted file mode 100644 index 6403d8ae..00000000 --- a/grpc/JFJochWriterClient.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (2019-2023) Paul Scherrer Institute - -#include - -#include "JFJochWriterClient.h" -#include "../common/JFJochException.h" - -void JFJochWriterClient::Connect(const std::string &addr) { - if (addr.empty()) _stub.reset(); - else { - _stub = std::make_unique( - grpc::CreateChannel(addr, grpc::InsecureChannelCredentials())); - } -} - -void JFJochWriterClient::Start(const std::string &zmq_push_addr, int64_t series_id) { - JFJochProtoBuf::WriterInput writer_input; - - writer_input.set_zmq_receiver_address(zmq_push_addr); - writer_input.set_series_id(series_id); - - if (_stub) { - grpc::ClientContext context; - JFJochProtoBuf::Empty empty; - auto status = _stub->Start(&context, writer_input, &empty); - if (!status.ok()) throw JFJochException(JFJochExceptionCategory::gRPCError, - "JFJochWriter: " + status.error_message()); - } -} - -void JFJochWriterClient::Abort() { - if (_stub) { - grpc::ClientContext context; - JFJochProtoBuf::Empty empty; - auto status = _stub->Abort(&context, empty, &empty); - if (!status.ok()) throw JFJochException(JFJochExceptionCategory::gRPCError, - "JFJochWriter: " + status.error_message()); - } -} - -JFJochProtoBuf::WriterOutput JFJochWriterClient::Stop() { - JFJochProtoBuf::WriterOutput ret; - if (_stub) { - JFJochProtoBuf::Empty empty; - grpc::ClientContext context; - auto status = _stub->Stop(&context, empty, &ret); - if (!status.ok()) throw JFJochException(JFJochExceptionCategory::gRPCError, - "JFJochWriter: " + status.error_message()); - } - return ret; -} diff --git a/grpc/JFJochWriterClient.h b/grpc/JFJochWriterClient.h deleted file mode 100644 index 8f8658e3..00000000 --- a/grpc/JFJochWriterClient.h +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (2019-2023) Paul Scherrer Institute - -#ifndef JUNGFRAUJOCH_JFJOCHWRITERCLIENT_H -#define JUNGFRAUJOCH_JFJOCHWRITERCLIENT_H - -#include -#include - -#include "../common/DiffractionExperiment.h" - -class JFJochWriterClient { - std::unique_ptr _stub; -public: - void Connect(const std::string &addr); - void Start(const std::string &zmq_push_addr, int64_t series_id); - JFJochProtoBuf::WriterOutput Stop(); - void Abort(); -}; - - -#endif //JUNGFRAUJOCH_JFJOCHWRITERCLIENT_H diff --git a/grpc/JFJochWriterGroupClient.cpp b/grpc/JFJochWriterGroupClient.cpp deleted file mode 100644 index 4fbc2c11..00000000 --- a/grpc/JFJochWriterGroupClient.cpp +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright (2019-2023) Paul Scherrer Institute - -#include "JFJochWriterGroupClient.h" - -void JFJochWriterGroupClient::AddClient(const std::string &addr) { - clients.emplace_back(); - clients[clients.size() - 1].Connect(addr); -} - -void JFJochWriterGroupClient::Start(const std::vector &zmq_push_addr, int64_t series_id) { - for (int i = 0; i < std::min(zmq_push_addr.size(), clients.size()); i++) - clients[i].Start(zmq_push_addr[i], series_id); -} - -std::vector JFJochWriterGroupClient::Stop() { - std::vector ret; - for (auto &i: clients) - ret.push_back(i.Stop()); - return ret; -} - -void JFJochWriterGroupClient::Abort() { - for (auto &i: clients) - i.Abort(); -} diff --git a/grpc/JFJochWriterGroupClient.h b/grpc/JFJochWriterGroupClient.h deleted file mode 100644 index 6f7b57e2..00000000 --- a/grpc/JFJochWriterGroupClient.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (2019-2023) Paul Scherrer Institute - -#ifndef JUNGFRAUJOCH_JFJOCHWRITERGROUPCLIENT_H -#define JUNGFRAUJOCH_JFJOCHWRITERGROUPCLIENT_H - -#include -#include "JFJochWriterClient.h" - -class JFJochWriterGroupClient { - std::vector clients; -public: - void AddClient(const std::string &addr); - void Start(const std::vector &zmq_push_addr, int64_t series_id); - std::vector Stop(); - void Abort(); -}; - - -#endif //JUNGFRAUJOCH_JFJOCHWRITERGROUPCLIENT_H diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 946da4a6..2e8261ee 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -10,7 +10,7 @@ ADD_EXECUTABLE(CatchTest FrameTransformationTest.cpp HDF5WritingTest.cpp PedestalCalcTest.cpp ZMQImagePusherTest.cpp StreamWriterTest.cpp - CoordTest.cpp JFJochBrokerTest.cpp + CoordTest.cpp JFJochStateMachineTest.cpp JFJochReceiverIntegrationTest.cpp AcquisitionCountersTest.cpp JFJochFullIntegrationTest.cpp diff --git a/tests/JFJochFullIntegrationTest.cpp b/tests/JFJochFullIntegrationTest.cpp index 5c9bed7a..1b653c8c 100644 --- a/tests/JFJochFullIntegrationTest.cpp +++ b/tests/JFJochFullIntegrationTest.cpp @@ -1,7 +1,6 @@ // Copyright (2019-2023) Paul Scherrer Institute #include -#include #include "../grpc/gRPCServer_Template.h" #include "../broker/JFJochStateMachine.h" @@ -52,13 +51,13 @@ TEST_CASE("JFJochIntegrationTest_ZMQ", "[JFJochReceiver]") { REQUIRE_NOTHROW(state_machine.Initialize()); logger.Info("Initialized"); - JFJochProtoBuf::DatasetSettings setup; - setup.set_ntrigger(1); - setup.set_images_per_trigger(5); - setup.set_detector_distance_mm(100); - setup.set_file_prefix("integration_test"); - setup.set_photon_energy_kev(12.4); - setup.set_data_file_count(2); + DatasetSettings setup; + setup.ntrigger = 1; + setup.images_per_trigger = 5; + setup.detector_distance_mm = 100; + setup.file_prefix = "integration_test"; + setup.photon_energy_keV = 12.4; + setup.data_file_count = 2; REQUIRE_NOTHROW(state_machine.Start(setup)); logger.Info("Started measurement"); @@ -137,14 +136,14 @@ TEST_CASE("JFJochIntegrationTest_ZMQ_save_calibration", "[JFJochReceiver]") { REQUIRE_NOTHROW(state_machine.Initialize()); logger.Info("Initialized"); - JFJochProtoBuf::DatasetSettings setup; - setup.set_ntrigger(1); - setup.set_images_per_trigger(5); - setup.set_detector_distance_mm(100); - setup.set_file_prefix("integration_test_with_calibration"); - setup.set_photon_energy_kev(12.4); - setup.set_data_file_count(2); - setup.set_save_calibration(true); + DatasetSettings setup; + setup.ntrigger = 1; + setup.images_per_trigger = 5; + setup.detector_distance_mm = 100; + setup.file_prefix = "integration_test_with_calibration"; + setup.photon_energy_keV = 12.4; + setup.data_file_count = 2; + setup.save_calibration = true; REQUIRE_NOTHROW(state_machine.Start(setup)); logger.Info("Started measurement"); @@ -224,13 +223,13 @@ TEST_CASE("JFJochIntegrationTest_ZMQ_2DataStreams_4Devices", "[JFJochReceiver]") REQUIRE_NOTHROW(state_machine.Initialize()); logger.Info("Initialized"); - JFJochProtoBuf::DatasetSettings setup; - setup.set_ntrigger(1); - setup.set_images_per_trigger(5); - setup.set_detector_distance_mm(100); - setup.set_file_prefix("integration_test"); - setup.set_photon_energy_kev(12.4); - setup.set_data_file_count(2); + DatasetSettings setup; + setup.ntrigger = 1; + setup.images_per_trigger = 5; + setup.detector_distance_mm = 100; + setup.file_prefix = "integration_test"; + setup.photon_energy_keV = 12.4; + setup.data_file_count = 2; REQUIRE_NOTHROW(state_machine.Start(setup)); logger.Info("Started measurement"); @@ -307,21 +306,21 @@ TEST_CASE("JFJochIntegrationTest_ZMQ_RAW", "[JFJochReceiver]") { StreamWriter writer(zmq_context, logger, "inproc://#1"); auto writer_future = writer.RunFuture(); - JFJochProtoBuf::DetectorSettings detector_settings; - detector_settings.set_frame_time_us(500); - detector_settings.set_collect_raw_data(true); - detector_settings.set_storage_cell_count(1); + DetectorSettings detector_settings; + detector_settings.frame_time_us = 500; + detector_settings.collect_raw_data = true; + detector_settings.storage_cell_count = 1; REQUIRE_NOTHROW(state_machine.SetDetectorSettings(detector_settings)); REQUIRE_NOTHROW(state_machine.Initialize()); logger.Info("Initialized"); - JFJochProtoBuf::DatasetSettings setup; - setup.set_ntrigger(1); - setup.set_detector_distance_mm(100); - setup.set_file_prefix("integration_raw_test"); - setup.set_images_per_trigger(5); - setup.set_photon_energy_kev(12.4); - setup.set_data_file_count(5); + DatasetSettings setup; + setup.ntrigger = 1; + setup.detector_distance_mm = 100; + setup.file_prefix = "integration_raw_test"; + setup.images_per_trigger = 5; + setup.photon_energy_keV = 12.4; + setup.data_file_count = 5; REQUIRE_NOTHROW(state_machine.Start(setup)); logger.Info("Started measurement"); @@ -404,13 +403,13 @@ TEST_CASE("JFJochIntegrationTest_ZMQ_3Writers", "[JFJochReceiver]") { REQUIRE_NOTHROW(state_machine.Initialize()); logger.Info("Initialized"); - JFJochProtoBuf::DatasetSettings setup; - setup.set_ntrigger(1); - setup.set_detector_distance_mm(100); - setup.set_file_prefix("integration_test_3writers"); - setup.set_images_per_trigger(nimages); - setup.set_photon_energy_kev(12.4); - setup.set_data_file_count(5); + DatasetSettings setup; + setup.ntrigger = 1; + setup.detector_distance_mm = 100; + setup.file_prefix = "integration_test_3writers"; + setup.images_per_trigger = nimages; + setup.photon_energy_keV = 12.4; + setup.data_file_count = 5; REQUIRE_NOTHROW(state_machine.Start(setup)); logger.Info("Started measurement"); @@ -489,13 +488,13 @@ TEST_CASE("JFJochIntegrationTest_Cancel", "[JFJochReceiver]") { REQUIRE_NOTHROW(state_machine.Initialize()); logger.Info("Initialized"); - JFJochProtoBuf::DatasetSettings setup; - setup.set_ntrigger(1); - setup.set_detector_distance_mm(100); - setup.set_file_prefix("integration_test"); - setup.set_images_per_trigger(2 * nimages); - setup.set_photon_energy_kev(12.4); - setup.set_data_file_count(1); + DatasetSettings setup; + setup.ntrigger = 1; + setup.detector_distance_mm = 100; + setup.file_prefix = "integration_test"; + setup.images_per_trigger = 2 * nimages; + setup.photon_energy_keV = 12.4; + setup.data_file_count = 1; REQUIRE_NOTHROW(state_machine.Start(setup)); logger.Info("Started measurement"); @@ -569,14 +568,14 @@ TEST_CASE("JFJochIntegrationTest_ZMQ_with_preview", "[JFJochReceiver]") { REQUIRE_NOTHROW(state_machine.Initialize()); logger.Info("Initialized"); - JFJochProtoBuf::DatasetSettings setup; - setup.set_ntrigger(1); - setup.set_detector_distance_mm(100); - setup.set_file_prefix("integration_test_preview"); - setup.set_images_per_trigger(5); - setup.set_photon_energy_kev(12.4); - setup.set_beam_x_pxl(123.0); - setup.set_data_file_count(1); + DatasetSettings setup; + setup.ntrigger = 1; + setup.detector_distance_mm = 100; + setup.file_prefix = "integration_test_preview"; + setup.images_per_trigger = 5; + setup.photon_energy_keV = 12.4; + setup.beam_x_pxl = 123.0; + setup.data_file_count = 1; REQUIRE_NOTHROW(state_machine.Start(setup)); logger.Info("Started measurement"); @@ -666,14 +665,14 @@ TEST_CASE("JFJochIntegrationTest_ZMQ_with_preview_no_writer", "[JFJochReceiver]" REQUIRE_NOTHROW(state_machine.Initialize()); logger.Info("Initialized"); - JFJochProtoBuf::DatasetSettings setup; - setup.set_ntrigger(1); - setup.set_detector_distance_mm(100); - setup.set_images_per_trigger(5); - setup.set_photon_energy_kev(12.4); - setup.set_beam_x_pxl(123.0); - setup.set_beam_y_pxl(878.0); - setup.set_data_file_count(1); + DatasetSettings setup; + setup.ntrigger = 1; + setup.detector_distance_mm = 100; + setup.images_per_trigger = 5; + setup.photon_energy_keV = 12.4; + setup.beam_x_pxl = 123.0; + setup.beam_y_pxl = 878.0; + setup.data_file_count = 1; REQUIRE_NOTHROW(state_machine.Start(setup)); logger.Info("Started measurement"); @@ -775,21 +774,16 @@ TEST_CASE("JFJochIntegrationTest_ZMQ_lysozyme_spot", "[JFJochReceiver]") { REQUIRE_NOTHROW(state_machine.Initialize()); logger.Info("Initialized"); - JFJochProtoBuf::DatasetSettings setup; - setup.set_ntrigger(1); - setup.set_detector_distance_mm(75); - setup.set_file_prefix("spot_finding_test"); - setup.set_images_per_trigger(nimages); - setup.set_photon_energy_kev(12.4); - setup.set_beam_x_pxl(1090); - setup.set_beam_y_pxl(1136); - setup.mutable_unit_cell()->set_a(36.9); - setup.mutable_unit_cell()->set_b(78.95); - setup.mutable_unit_cell()->set_c(78.95); - setup.mutable_unit_cell()->set_alpha(90.0); - setup.mutable_unit_cell()->set_beta(90.0); - setup.mutable_unit_cell()->set_gamma(90.0); - setup.set_data_file_count(1); + DatasetSettings setup; + setup.ntrigger = 1; + setup.detector_distance_mm = 75; + setup.file_prefix = "spot_finding_test"; + setup.images_per_trigger = nimages; + setup.photon_energy_keV = 12.4; + setup.beam_x_pxl = 1090; + setup.beam_y_pxl = 1136; + setup.unit_cell = UnitCell{.a = 36.9, .b = 78.95, .c = 78.95, .alpha = 90.0, .beta = 90.0, .gamma = 90.0}; + setup.data_file_count = 1; DataProcessingSettings settings; settings.signal_to_noise_threshold = 4; @@ -889,30 +883,30 @@ TEST_CASE("JFJochIntegrationTest_ZMQ_lysozyme_spot_and_index", "[JFJochReceiver] REQUIRE_NOTHROW(state_machine.Initialize()); logger.Info("Initialized"); - JFJochProtoBuf::DatasetSettings setup; - setup.set_ntrigger(1); - setup.set_detector_distance_mm(75); - setup.set_file_prefix("spot_finding_test"); - setup.set_images_per_trigger(nimages); - setup.set_photon_energy_kev(12.4); - setup.set_beam_x_pxl(1090); - setup.set_beam_y_pxl(1136); + DatasetSettings setup; + setup.ntrigger = 1; + setup.detector_distance_mm = 75; + setup.file_prefix = "spot_finding_test"; + setup.images_per_trigger = nimages; + setup.photon_energy_keV = 12.4; + setup.beam_x_pxl = 1090; + setup.beam_y_pxl = 1136; setup.mutable_unit_cell()->set_a(36.9); setup.mutable_unit_cell()->set_b(78.95); setup.mutable_unit_cell()->set_c(78.95); setup.mutable_unit_cell()->set_alpha(90.0); setup.mutable_unit_cell()->set_beta(90.0); setup.mutable_unit_cell()->set_gamma(90.0); - setup.set_data_file_count(1); + setup.data_file_count = 1; JFJochProtoBuf::DataProcessingSettings settings; - settings.set_signal_to_noise_threshold(4); - settings.set_photon_count_threshold(5); - settings.set_min_pix_per_spot(3); - settings.set_max_pix_per_spot(200); - settings.set_low_resolution_limit(80.0); - settings.set_high_resolution_limit(2.5); - settings.set_local_bkg_size(5); + settings.signal_to_noise_threshold = 4; + settings.photon_count_threshold = 5; + settings.min_pix_per_spot = 3; + settings.max_pix_per_spot = 200; + settings.low_resolution_limit = 80.0; + settings.high_resolution_limit = 2.5; + settings.local_bkg_size = 5; REQUIRE_NOTHROW(state_machine.SetDataProcessingSettings(settings)); @@ -1006,21 +1000,16 @@ TEST_CASE("JFJochIntegrationTest_ZMQ_lysozyme_rad_int", "[JFJochReceiver]") { REQUIRE_NOTHROW(state_machine.Initialize()); logger.Info("Initialized"); - JFJochProtoBuf::DatasetSettings setup; - setup.set_ntrigger(1); - setup.set_detector_distance_mm(75); - setup.set_file_prefix("spot_finding_test"); - setup.set_images_per_trigger(nimages); - setup.set_photon_energy_kev(12.4); - setup.set_beam_x_pxl(1090); - setup.set_beam_y_pxl(1136); - setup.mutable_unit_cell()->set_a(36.9); - setup.mutable_unit_cell()->set_b(78.95); - setup.mutable_unit_cell()->set_c(78.95); - setup.mutable_unit_cell()->set_alpha(90.0); - setup.mutable_unit_cell()->set_beta(90.0); - setup.mutable_unit_cell()->set_gamma(90.0); - setup.set_data_file_count(4); + DatasetSettings setup; + setup.ntrigger = 1; + setup.detector_distance_mm = 75; + setup.file_prefix = "spot_finding_test"; + setup.images_per_trigger = nimages; + setup.photon_energy_keV = 12.4; + setup.beam_x_pxl = 1090; + setup.beam_y_pxl = 1136; + setup.unit_cell = UnitCell{.a = 36.9, .b = 78.95, .c = 78.95, .alpha = 90.0, .beta = 90.0, .gamma = 90.0}; + setup.data_file_count = 4; REQUIRE_NOTHROW(state_machine.Start(setup)); logger.Info("Started measurement"); @@ -1119,31 +1108,31 @@ TEST_CASE("JFJochIntegrationTest_ZMQ_lysozyme_spot_and_index_sum", "[JFJochRecei REQUIRE_NOTHROW(state_machine.Initialize()); logger.Info("Initialized"); - JFJochProtoBuf::DatasetSettings setup; - setup.set_ntrigger(1); - setup.set_detector_distance_mm(75); - setup.set_summation(3); - setup.set_file_prefix("spot_finding_test"); + DatasetSettings setup; + setup.ntrigger = 1; + setup.detector_distance_mm = 75; + setup.summation = 3; + setup.file_prefix = "spot_finding_test"; setup.set_images_per_trigger(nimages / 3); - setup.set_photon_energy_kev(12.4); - setup.set_beam_x_pxl(1090); - setup.set_beam_y_pxl(1136); + setup.photon_energy_keV = 12.4; + setup.beam_x_pxl = 1090; + setup.beam_y_pxl = 1136; setup.mutable_unit_cell()->set_a(36.9); setup.mutable_unit_cell()->set_b(78.95); setup.mutable_unit_cell()->set_c(78.95); setup.mutable_unit_cell()->set_alpha(90.0); setup.mutable_unit_cell()->set_beta(90.0); setup.mutable_unit_cell()->set_gamma(90.0); - setup.set_data_file_count(1); + setup.data_file_count = 1; JFJochProtoBuf::DataProcessingSettings settings; - settings.set_signal_to_noise_threshold(4); - settings.set_photon_count_threshold(5); - settings.set_min_pix_per_spot(3); - settings.set_max_pix_per_spot(200); - settings.set_low_resolution_limit(80.0); - settings.set_high_resolution_limit(2.5); - settings.set_local_bkg_size(5); + settings.signal_to_noise_threshold = 4; + settings.photon_count_threshold = 5; + settings.min_pix_per_spot = 3; + settings.max_pix_per_spot = 200; + settings.low_resolution_limit = 80.0; + settings.high_resolution_limit = 2.5; + settings.local_bkg_size = 5; REQUIRE_NOTHROW(state_machine.SetDataProcessingSettings(settings)); diff --git a/tests/JFJochBrokerTest.cpp b/tests/JFJochStateMachineTest.cpp similarity index 71% rename from tests/JFJochBrokerTest.cpp rename to tests/JFJochStateMachineTest.cpp index 8870c0bf..013a5b9a 100644 --- a/tests/JFJochBrokerTest.cpp +++ b/tests/JFJochStateMachineTest.cpp @@ -2,7 +2,6 @@ #include #include "../broker/JFJochStateMachine.h" -#include "../broker/JFJochBroker.h" using namespace std::literals::chrono_literals; @@ -12,13 +11,13 @@ TEST_CASE("JFJochStateMachine_States") { JFJochStateMachine state_machine(services, logger); state_machine.AddDetectorSetup(DetectorGeometry(4)); - JFJochProtoBuf::DatasetSettings setup; - setup.set_ntrigger(1); - setup.set_detector_distance_mm(100); - setup.set_file_prefix("integration_test"); - setup.set_images_per_trigger(5); - setup.set_photon_energy_kev(12.4); - setup.set_data_file_count(5); + DatasetSettings setup; + setup.ntrigger = 1; + setup.detector_distance_mm = 100; + setup.file_prefix = "integration_test"; + setup.images_per_trigger = 5; + setup.photon_energy_keV = 12.4; + setup.data_file_count = 5; JFJochState state; REQUIRE_NOTHROW(state = state_machine.GetState()); @@ -42,13 +41,13 @@ TEST_CASE("JFJochStateMachine_State_Pedestal") { JFJochStateMachine state_machine(services, logger); state_machine.AddDetectorSetup(DetectorGeometry(4)); - JFJochProtoBuf::DatasetSettings setup; - setup.set_ntrigger(1); - setup.set_detector_distance_mm(100); - setup.set_file_prefix("integration_test"); - setup.set_images_per_trigger(5); - setup.set_photon_energy_kev(12.4); - setup.set_data_file_count(5); + DatasetSettings setup; + setup.ntrigger = 1; + setup.detector_distance_mm = 100; + setup.file_prefix = "integration_test"; + setup.images_per_trigger = 5; + setup.photon_energy_keV = 12.4; + setup.data_file_count = 5; state_machine.DebugOnly_SetState(JFJochState::Pedestal); @@ -60,9 +59,9 @@ TEST_CASE("JFJochStateMachine_State_Pedestal") { REQUIRE_THROWS(state_machine.Pedestal()); REQUIRE_THROWS(state_machine.Initialize()); - JFJochProtoBuf::DetectorSettings settings; - settings.set_frame_time_us(500); - settings.set_storage_cell_count(16); + DetectorSettings settings; + settings.frame_time_us = 500; + settings.storage_cell_count = 16; REQUIRE_THROWS(state_machine.SetDetectorSettings(settings)); } @@ -72,13 +71,13 @@ TEST_CASE("JFJochStateMachine_State_Measure") { JFJochStateMachine state_machine(services, logger); state_machine.AddDetectorSetup(DetectorGeometry(4)); - JFJochProtoBuf::DatasetSettings setup; - setup.set_ntrigger(1); - setup.set_detector_distance_mm(100); - setup.set_file_prefix("integration_test"); - setup.set_images_per_trigger(5); - setup.set_photon_energy_kev(12.4); - setup.set_data_file_count(5); + DatasetSettings setup; + setup.ntrigger = 1; + setup.detector_distance_mm = 100; + setup.file_prefix = "integration_test"; + setup.images_per_trigger = 5; + setup.photon_energy_keV = 12.4; + setup.data_file_count = 5; state_machine.DebugOnly_SetState(JFJochState::Measuring); @@ -90,9 +89,9 @@ TEST_CASE("JFJochStateMachine_State_Measure") { REQUIRE_THROWS(state_machine.Pedestal()); REQUIRE_THROWS(state_machine.Initialize()); - JFJochProtoBuf::DetectorSettings settings; - settings.set_frame_time_us(500); - settings.set_storage_cell_count(16); + DetectorSettings settings; + settings.frame_time_us = 500; + settings.storage_cell_count = 16; REQUIRE_THROWS(state_machine.SetDetectorSettings(settings)); } @@ -102,13 +101,13 @@ TEST_CASE("JFJochStateMachine_State_Error") { JFJochStateMachine state_machine(services, logger); state_machine.AddDetectorSetup(DetectorGeometry(4)); - JFJochProtoBuf::DatasetSettings setup; - setup.set_ntrigger(1); - setup.set_detector_distance_mm(100); - setup.set_file_prefix("integration_test"); - setup.set_images_per_trigger(5); - setup.set_photon_energy_kev(12.4); - setup.set_data_file_count(5); + DatasetSettings setup; + setup.ntrigger = 1; + setup.detector_distance_mm = 100; + setup.file_prefix = "integration_test"; + setup.images_per_trigger = 5; + setup.photon_energy_keV = 12.4; + setup.data_file_count = 5; state_machine.DebugOnly_SetState(JFJochState::Error); @@ -119,9 +118,9 @@ TEST_CASE("JFJochStateMachine_State_Error") { REQUIRE_THROWS(state_machine.Start(setup)); REQUIRE_THROWS(state_machine.Pedestal()); - JFJochProtoBuf::DetectorSettings settings; - settings.set_frame_time_us(500); - settings.set_storage_cell_count(16); + DetectorSettings settings; + settings.frame_time_us = 500; + settings.storage_cell_count = 16; REQUIRE_NOTHROW(state_machine.SetDetectorSettings(settings)); REQUIRE_NOTHROW(state_machine.Initialize()); @@ -135,18 +134,18 @@ TEST_CASE("JFJochStateMachine_Setup") { JFJochServices services(logger); JFJochStateMachine state_machine(services, logger); - JFJochProtoBuf::DetectorSettings settings, settings_save; - settings.set_pedestal_g1_frames(-15); - settings.set_pedestal_g0_frames(2378); + DetectorSettings settings, settings_save; + settings.pedestal_g1_frames = -15; + settings.pedestal_g0_frames = 2378; REQUIRE_THROWS(state_machine.SetDetectorSettings(settings)); REQUIRE(state_machine.NotThreadSafe_Experiment().GetPedestalG0Frames() != 2378); - settings.set_pedestal_g2_frames(2800); - settings.set_pedestal_g1_frames(3000); - settings.set_pedestal_g0_frames(2378); - settings.set_storage_cell_count(16); - settings.set_frame_time_us(600); - settings.set_count_time_us(247); + settings.pedestal_g2_frames = 2800; + settings.pedestal_g1_frames = 3000; + settings.pedestal_g0_frames = 2378; + settings.storage_cell_count = 16; + settings.frame_time_us = 600; + settings.count_time_us = 247; REQUIRE_NOTHROW(state_machine.SetDetectorSettings(settings)); REQUIRE(state_machine.NotThreadSafe_Experiment().GetPedestalG0Frames() == 2378); REQUIRE(state_machine.NotThreadSafe_Experiment().GetPedestalG1Frames() == 3000); @@ -156,8 +155,8 @@ TEST_CASE("JFJochStateMachine_Setup") { REQUIRE(state_machine.NotThreadSafe_Experiment().GetFrameCountTime() == std::chrono::microseconds(247)); REQUIRE_NOTHROW(settings_save = state_machine.GetDetectorSettings()); - REQUIRE(settings_save.storage_cell_count() == 16); - REQUIRE(settings_save.count_time_us() == 247); + REQUIRE(settings_save.storage_cell_count == 16); + REQUIRE(settings_save.count_time_us == 247); } TEST_CASE("JFJochStateMachine_NoDetectorSetup") { @@ -195,9 +194,9 @@ TEST_CASE("JFJochStateMachine_StorageCells") { JFJochStateMachine state_machine(services, logger); state_machine.AddDetectorSetup(DetectorGeometry(4)); - JFJochProtoBuf::DetectorSettings settings; - settings.set_frame_time_us(500); - settings.set_storage_cell_count(16); + DetectorSettings settings; + settings.frame_time_us = 500; + settings.storage_cell_count = 16; REQUIRE_NOTHROW(state_machine.SetDetectorSettings(settings)); REQUIRE(state_machine.NotThreadSafe_Experiment().GetStorageCellNumber() == 16); REQUIRE_NOTHROW(state_machine.Initialize()); @@ -233,42 +232,22 @@ TEST_CASE("JFJochStateMachine_AddDetectorSetup_Multiple") { REQUIRE(state_machine.GetState() == JFJochState::Inactive); } -TEST_CASE("JFJochBroker") { - DiffractionExperiment experiment; - - JFJochBroker broker(experiment); - broker.AddDetectorSetup(DetectorGeometry(4)); - - REQUIRE(broker.Initialize(nullptr, nullptr, nullptr).ok()); - - JFJochProtoBuf::DatasetSettings setup; - setup.set_ntrigger(1); - setup.set_detector_distance_mm(100); - setup.set_file_prefix("integration_test"); - setup.set_images_per_trigger(5); - setup.set_photon_energy_kev(12.4); - setup.set_data_file_count(5); - - REQUIRE(broker.Start(nullptr, &setup, nullptr).ok()); - REQUIRE(broker.Stop(nullptr, nullptr, nullptr).ok()); - REQUIRE(broker.Deactivate(nullptr, nullptr, nullptr).ok()); -} - -TEST_CASE("FJochStateMachine_LoadDatasetSettings", "[DiffractionExperiment]") { +TEST_CASE("JFJochStateMachine_LoadDatasetSettings", "[DiffractionExperiment]") { DiffractionExperiment x; x.ImagesPerTrigger(567).BeamY_pxl(324).Compression(CompressionAlgorithm::BSHUF_ZSTD); - JFJochProtoBuf::DatasetSettings settings; - settings.set_images_per_trigger(234); - settings.set_ntrigger(56); - settings.set_beam_x_pxl(23.4); - settings.set_beam_y_pxl(123.4); - settings.set_photon_energy_kev(WVL_1A_IN_KEV); - settings.set_detector_distance_mm(57.6); - settings.set_data_file_count(5); - settings.set_space_group_number(45); - settings.set_sample_name("lyso1"); - settings.set_summation(36); - settings.set_fpga_pixel_output(JFJochProtoBuf::INT16); + DatasetSettings settings; + settings.images_per_trigger = 234; + settings.ntrigger = 56; + settings.beam_x_pxl = 23.4; + settings.beam_y_pxl = 123.4; + settings.photon_energy_keV = WVL_1A_IN_KEV; + settings.detector_distance_mm = 57.6; + settings.data_file_count = 5; + settings.space_group_number = 45; + settings.sample_name = "lyso1"; + settings.summation = 36; + settings.fpga_pixel_output = FPGAPixelOutput::Int16; + settings.compression = CompressionAlgorithm::BSHUF_LZ4; REQUIRE_NOTHROW(LoadDatasetSettings(x,settings)); REQUIRE(x.GetImageNumPerTrigger() == 234); @@ -286,16 +265,16 @@ TEST_CASE("FJochStateMachine_LoadDatasetSettings", "[DiffractionExperiment]") { TEST_CASE("JFJochStateMachine_LoadDatasetSettings_Invalid", "[DiffractionExperiment]") { DiffractionExperiment x; x.ImagesPerTrigger(567).BeamY_pxl(324).Compression(CompressionAlgorithm::BSHUF_ZSTD); - JFJochProtoBuf::DatasetSettings settings; - settings.set_images_per_trigger(-1); - settings.set_ntrigger(56); - settings.set_beam_x_pxl(23.4); - settings.set_beam_y_pxl(123.4); - settings.set_photon_energy_kev(WVL_1A_IN_KEV); - settings.set_detector_distance_mm(57.6); - settings.set_data_file_count(5); - settings.set_space_group_number(45); - settings.set_sample_name("lyso1"); + DatasetSettings settings; + settings.images_per_trigger = -1; + settings.ntrigger = 56; + settings.beam_x_pxl = 23.4; + settings.beam_y_pxl = 123.4; + settings.photon_energy_keV = WVL_1A_IN_KEV; + settings.detector_distance_mm = 57.6; + settings.data_file_count = 5; + settings.space_group_number = 45; + settings.sample_name = "lyso1"; REQUIRE_THROWS(LoadDatasetSettings(x, settings)); @@ -311,15 +290,15 @@ TEST_CASE("JFJochStateMachine_SetDetectorSettings", "[DiffractionExperiment]") { state_machine.NotThreadSafe_Experiment().PedestalG0Frames(456).PedestalG1Frames(1234).PedestalG2Frames(123).StorageCellDelay(2500ns); - JFJochProtoBuf::DetectorSettings settings; - settings.set_frame_time_us(600); - settings.set_count_time_us(400); - settings.set_storage_cell_count(8); - settings.set_use_internal_packet_generator(true); - settings.set_collect_raw_data(true); - settings.set_pedestal_g0_frames(5000); - settings.set_pedestal_g1_frames(100); - settings.set_pedestal_g2_frames(150); + DetectorSettings settings; + settings.frame_time_us = 600; + settings.count_time_us = 400; + settings.storage_cell_count = 8; + settings.use_internal_packet_generator = true; + settings.collect_raw_data = true; + settings.pedestal_g0_frames = 5000; + settings.pedestal_g1_frames = 100; + settings.pedestal_g2_frames = 150; REQUIRE_NOTHROW(state_machine.SetDetectorSettings(settings)); @@ -341,13 +320,13 @@ TEST_CASE("JFJochStateMachine_SetDetectorSettings_StorageCellDelay", "[Diffracti state_machine.NotThreadSafe_Experiment().PedestalG0Frames(456).PedestalG1Frames(1234).PedestalG2Frames(123).StorageCellDelay(5000ns); - JFJochProtoBuf::DetectorSettings settings; - settings.set_frame_time_us(600); - settings.set_count_time_us(400); - settings.set_storage_cell_count(8); - settings.set_use_internal_packet_generator(true); - settings.set_collect_raw_data(true); - settings.set_storage_cell_delay_ns(7000); + DetectorSettings settings; + settings.frame_time_us = 600; + settings.count_time_us = 400; + settings.storage_cell_count = 8; + settings.use_internal_packet_generator = true; + settings.collect_raw_data = true; + settings.storage_cell_delay_ns = 7000; REQUIRE_NOTHROW(state_machine.SetDetectorSettings(settings)); REQUIRE(state_machine.NotThreadSafe_Experiment().GetStorageCellDelay().count() == 7000); } @@ -360,15 +339,15 @@ TEST_CASE("JFJochStateMachine_SetDetectorSettings_invalid", "[DiffractionExperim state_machine.NotThreadSafe_Experiment().PedestalG0Frames(456).PedestalG1Frames(1234).PedestalG2Frames(123) .FrameTime(525us).Mode(DetectorMode::Conversion); - JFJochProtoBuf::DetectorSettings settings; - settings.set_frame_time_us(600); - settings.set_count_time_us(800); - settings.set_storage_cell_count(16); - settings.set_use_internal_packet_generator(true); - settings.set_collect_raw_data(true); - settings.set_pedestal_g0_frames(5000); - settings.set_pedestal_g1_frames(100); - settings.set_pedestal_g2_frames(150); + DetectorSettings settings; + settings.frame_time_us = 600; + settings.count_time_us = 800; + settings.storage_cell_count = 16; + settings.use_internal_packet_generator = true; + settings.collect_raw_data = true; + settings.pedestal_g0_frames = 5000; + settings.pedestal_g1_frames = 100; + settings.pedestal_g2_frames = 150; REQUIRE_THROWS(state_machine.SetDetectorSettings(settings)); REQUIRE(state_machine.NotThreadSafe_Experiment().GetFrameTime().count() == 525); @@ -388,9 +367,9 @@ TEST_CASE("JFJochStateMachine_SetDetectorSettings_inferred", "[DiffractionExperi state_machine.NotThreadSafe_Experiment().PedestalG0Frames(456).PedestalG1Frames(1234).PedestalG2Frames(123); - JFJochProtoBuf::DetectorSettings settings; - settings.set_frame_time_us(600); - settings.set_storage_cell_count(1); + DetectorSettings settings; + settings.frame_time_us = 600; + settings.storage_cell_count = 1; REQUIRE_NOTHROW(state_machine.SetDetectorSettings(settings)); REQUIRE(state_machine.NotThreadSafe_Experiment().GetFrameTime().count() == 600);