Files
Jungfraujoch/tests/JFJochBrokerTest.cpp
Filip Leonarski 1757d42182 Initial commit
Signed-off-by: Filip Leonarski <filip.leonarski@psi.ch>
2023-04-06 11:17:59 +02:00

214 lines
7.8 KiB
C++

// Copyright (2019-2022) Paul Scherrer Institute
// SPDX-License-Identifier: GPL-3.0-or-later
#include <catch2/catch.hpp>
#include "../broker/JFJochStateMachine.h"
#include "../broker/JFJochBroker.h"
TEST_CASE("JFJochStateMachine_States") {
Logger logger("JFJochStateMachine_States");
JFJochServices services(logger);
JFJochStateMachine state_machine(services, logger);
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);
setup.set_summation(1);
JFJochState state;
REQUIRE_NOTHROW(state = state_machine.GetState());
REQUIRE(state == JFJochState::Inactive);
REQUIRE_THROWS(state_machine.Start(setup));
REQUIRE_THROWS(state_machine.Pedestal());
REQUIRE_NOTHROW(state_machine.Initialize());
REQUIRE_NOTHROW(state = state_machine.GetState());
REQUIRE(state == JFJochState::Idle);
REQUIRE_NOTHROW(state_machine.Deactivate());
REQUIRE_NOTHROW(state = state_machine.GetState());
REQUIRE(state == JFJochState::Inactive);
}
TEST_CASE("JFJochStateMachine_State_Pedestal") {
Logger logger("JFJochStateMachine_State_Pedestal");
JFJochServices services(logger);
JFJochStateMachine state_machine(services, logger);
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);
setup.set_summation(1);
state_machine.DebugOnly_SetState(JFJochState::Pedestal);
JFJochState state;
REQUIRE_NOTHROW(state = state_machine.GetState());
REQUIRE(state == JFJochState::Pedestal);
REQUIRE_THROWS(state_machine.Start(setup));
REQUIRE_THROWS(state_machine.Pedestal());
REQUIRE_THROWS(state_machine.Initialize());
JFJochProtoBuf::DetectorSettings settings;
settings.set_frame_time_us(500);
settings.set_use_storage_cells(true);
REQUIRE_THROWS(state_machine.SetDetectorSettings(settings));
}
TEST_CASE("JFJochStateMachine_State_Measure") {
Logger logger("JFJochStateMachine_State_Measure");
JFJochServices services(logger);
JFJochStateMachine state_machine(services, logger);
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);
setup.set_summation(1);
state_machine.DebugOnly_SetState(JFJochState::Measuring);
JFJochState state;
REQUIRE_NOTHROW(state = state_machine.GetState());
REQUIRE(state == JFJochState::Measuring);
REQUIRE_THROWS(state_machine.Start(setup));
REQUIRE_THROWS(state_machine.Pedestal());
REQUIRE_THROWS(state_machine.Initialize());
JFJochProtoBuf::DetectorSettings settings;
settings.set_frame_time_us(500);
settings.set_use_storage_cells(true);
REQUIRE_THROWS(state_machine.SetDetectorSettings(settings));
}
TEST_CASE("JFJochStateMachine_State_Error") {
Logger logger("JFJochStateMachine_State_Error");
JFJochServices services(logger);
JFJochStateMachine state_machine(services, logger);
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);
setup.set_summation(1);
state_machine.DebugOnly_SetState(JFJochState::Error);
JFJochState state;
REQUIRE_NOTHROW(state = state_machine.GetState());
REQUIRE(state == JFJochState::Error);
REQUIRE_THROWS(state_machine.Start(setup));
REQUIRE_THROWS(state_machine.Pedestal());
JFJochProtoBuf::DetectorSettings settings;
settings.set_frame_time_us(500);
settings.set_use_storage_cells(true);
REQUIRE_NOTHROW(state_machine.SetDetectorSettings(settings));
REQUIRE_NOTHROW(state_machine.Initialize());
REQUIRE_NOTHROW(state = state_machine.GetState());
REQUIRE(state == JFJochState::Idle);
}
TEST_CASE("JFJochStateMachine_Setup") {
Logger logger("JJFJochStateMachine_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);
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_use_storage_cells(true);
settings.set_frame_time_us(600);
settings.set_count_time_us(247);
REQUIRE_NOTHROW(state_machine.SetDetectorSettings(settings));
REQUIRE(state_machine.NotThreadSafe_Experiment().GetPedestalG0Frames() == 2378);
REQUIRE(state_machine.NotThreadSafe_Experiment().GetPedestalG1Frames() == 3000);
REQUIRE(state_machine.NotThreadSafe_Experiment().GetPedestalG2Frames() == 2800);
REQUIRE(state_machine.NotThreadSafe_Experiment().GetStorageCellNumber() == 16);
REQUIRE(state_machine.NotThreadSafe_Experiment().GetFrameTime() == std::chrono::microseconds(600));
REQUIRE(state_machine.NotThreadSafe_Experiment().GetFrameCountTime() == std::chrono::microseconds(247));
REQUIRE_NOTHROW(settings_save = state_machine.GetDetectorSettings());
REQUIRE(settings_save.use_storage_cells());
REQUIRE(settings_save.count_time_us() == 247);
}
TEST_CASE("JFJochStateMachine_GainCalibration") {
Logger logger("JFJochBrokerService_GainCalibration");
JFJochServices services(logger);
JFJochStateMachine state_machine(services, logger);
state_machine.NotThreadSafe_Experiment() = DiffractionExperiment(1, {2,2});
REQUIRE_NOTHROW(state_machine.Initialize());
state_machine.LoadGainFile("../../tests/test_data/gainMaps_M049.bin");
state_machine.LoadGainFile("../../tests/test_data/gainMaps_M049.bin");
state_machine.LoadGainFile("../../tests/test_data/gainMaps_M049.bin");
REQUIRE_THROWS(state_machine.Initialize());
state_machine.LoadGainFile("../../tests/test_data/gainMaps_M049.bin");
REQUIRE_NOTHROW(state_machine.Initialize());
}
TEST_CASE("JFJochStateMachine_StorageCells") {
Logger logger("JFJochBrokerService_StorageCells");
JFJochServices services(logger);
JFJochStateMachine state_machine(services, logger);
JFJochProtoBuf::DetectorSettings settings;
settings.set_frame_time_us(500);
settings.set_use_storage_cells(true);
REQUIRE_NOTHROW(state_machine.SetDetectorSettings(settings));
REQUIRE(state_machine.NotThreadSafe_Experiment().GetStorageCellNumber() == 16);
REQUIRE_NOTHROW(state_machine.Initialize());
JFJochProtoBuf::JFCalibration calibration_pbuf;
REQUIRE_NOTHROW(calibration_pbuf = state_machine.GetCalibration());
REQUIRE(calibration_pbuf.nstorage_cells() == 16);
}
TEST_CASE("JFJochBroker") {
DiffractionExperiment experiment;
JFJochBroker broker(experiment);
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);
setup.set_summation(1);
REQUIRE(broker.Start(nullptr, &setup, nullptr).ok());
REQUIRE(broker.Stop(nullptr, nullptr, nullptr).ok());
REQUIRE(broker.Deactivate(nullptr, nullptr, nullptr).ok());
}