DiffractionExperiment: Move DetectorSettings and DatasetSettings to JFJochStateMachine
This commit is contained in:
@@ -97,6 +97,103 @@ inline JFJochProtoBuf::JFCalibrationStatistics Convert(const std::vector<JFCalib
|
||||
return output;
|
||||
}
|
||||
|
||||
void LoadDatasetSettings(DiffractionExperiment& experiment, const JFJochProtoBuf::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(settings.unit_cell().a(),
|
||||
settings.unit_cell().b(),
|
||||
settings.unit_cell().c(),
|
||||
settings.unit_cell().alpha(),
|
||||
settings.unit_cell().beta(),
|
||||
settings.unit_cell().gamma()));
|
||||
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.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;
|
||||
}
|
||||
} catch (...) {
|
||||
experiment = tmp;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
void LoadDetectorSettings(DiffractionExperiment& experiment, const JFJochProtoBuf::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()));
|
||||
else
|
||||
experiment.FrameTime(std::chrono::microseconds(settings.frame_time_us()));
|
||||
|
||||
experiment.StorageCells(settings.storage_cell_count());
|
||||
experiment.UseInternalPacketGenerator(settings.use_internal_packet_generator());
|
||||
|
||||
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()));
|
||||
} catch (...) {
|
||||
experiment = tmp;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
JFJochStateMachine::JFJochStateMachine(JFJochServices &in_services, Logger &in_logger)
|
||||
: services(in_services), logger(in_logger),
|
||||
data_processing_settings(DiffractionExperiment::DefaultDataProcessingSettings()) {
|
||||
@@ -274,7 +371,7 @@ void JFJochStateMachine::Start(const JFJochProtoBuf::DatasetSettings& settings)
|
||||
|
||||
auto mod_settings = settings;
|
||||
SetDatasetDefaults(mod_settings);
|
||||
experiment.LoadDatasetSettings(mod_settings);
|
||||
LoadDatasetSettings(experiment, mod_settings);
|
||||
|
||||
ClearAndSetMeasurementStatistics();
|
||||
|
||||
@@ -454,9 +551,20 @@ void JFJochStateMachine::SetCalibrationStatistics(const JFJochProtoBuf::JFCalibr
|
||||
calibration_statistics = input;
|
||||
}
|
||||
|
||||
|
||||
JFJochProtoBuf::DetectorSettings JFJochStateMachine::GetDetectorSettings() const {
|
||||
std::unique_lock<std::mutex> ul(m);
|
||||
return experiment.GetDetectorSettings();
|
||||
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());
|
||||
return ret;
|
||||
}
|
||||
|
||||
void JFJochStateMachine::SetDetectorSettings(const JFJochProtoBuf::DetectorSettings &settings) {
|
||||
@@ -464,10 +572,10 @@ void JFJochStateMachine::SetDetectorSettings(const JFJochProtoBuf::DetectorSetti
|
||||
switch (state) {
|
||||
case JFJochState::Inactive:
|
||||
case JFJochState::Error:
|
||||
experiment.LoadDetectorSettings(settings);
|
||||
LoadDetectorSettings(experiment, settings);
|
||||
break;
|
||||
case JFJochState::Idle:
|
||||
experiment.LoadDetectorSettings(settings);
|
||||
LoadDetectorSettings(experiment, settings);
|
||||
TakePedestalInternalAll(ul);
|
||||
break;
|
||||
case JFJochState::Measuring:
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
enum class JFJochState {Inactive, Idle, Measuring, Error, Busy, Pedestal};
|
||||
|
||||
void LoadDatasetSettings(DiffractionExperiment& experiment, const JFJochProtoBuf::DatasetSettings &settings);
|
||||
|
||||
class JFJochStateMachine {
|
||||
Logger &logger;
|
||||
JFJochServices &services;
|
||||
|
||||
@@ -777,119 +777,6 @@ JFJochProtoBuf::DetectorConfig DiffractionExperiment::DetectorConfig(const std::
|
||||
return ret;
|
||||
}
|
||||
|
||||
void DiffractionExperiment::LoadDatasetSettings(const JFJochProtoBuf::DatasetSettings &settings) {
|
||||
// TODO Fix
|
||||
// Save DatasetSettings - if something goes wrong, restore old settings
|
||||
auto tmp = dataset;
|
||||
|
||||
try {
|
||||
// dataset = JFJochProtoBuf::DatasetSettings();
|
||||
ImagesPerTrigger(settings.images_per_trigger());
|
||||
NumTriggers(settings.ntrigger());
|
||||
BeamX_pxl(settings.beam_x_pxl());
|
||||
BeamY_pxl(settings.beam_y_pxl());
|
||||
DetectorDistance_mm(settings.detector_distance_mm());
|
||||
PhotonEnergy_keV(settings.photon_energy_kev());
|
||||
FilePrefix(settings.file_prefix());
|
||||
DataFileCount(settings.data_file_count());
|
||||
if (settings.has_unit_cell())
|
||||
SetUnitCell(UnitCell(settings.unit_cell().a(),
|
||||
settings.unit_cell().b(),
|
||||
settings.unit_cell().c(),
|
||||
settings.unit_cell().alpha(),
|
||||
settings.unit_cell().beta(),
|
||||
settings.unit_cell().gamma()));
|
||||
else
|
||||
SetUnitCell();
|
||||
SpaceGroupNumber(settings.space_group_number());
|
||||
SampleName(settings.sample_name());
|
||||
switch (settings.compression()) {
|
||||
case JFJochProtoBuf::BSHUF_LZ4:
|
||||
Compression(CompressionAlgorithm::BSHUF_LZ4);
|
||||
break;
|
||||
case JFJochProtoBuf::BSHUF_ZSTD:
|
||||
Compression(CompressionAlgorithm::BSHUF_ZSTD);
|
||||
break;
|
||||
case JFJochProtoBuf::BSHUF_ZSTD_RLE:
|
||||
Compression(CompressionAlgorithm::BSHUF_ZSTD_RLE);
|
||||
break;
|
||||
default:
|
||||
case JFJochProtoBuf::NO_COMPRESSION:
|
||||
Compression(CompressionAlgorithm::NO_COMPRESSION);
|
||||
break;
|
||||
}
|
||||
SaveCalibration(settings.save_calibration());
|
||||
if (settings.summation() == 0)
|
||||
Summation(1);
|
||||
else
|
||||
Summation(settings.summation());
|
||||
switch (settings.fpga_pixel_output()) {
|
||||
default:
|
||||
case JFJochProtoBuf::AUTO:
|
||||
FPGAOutputMode(FPGAPixelOutput::Auto);
|
||||
break;
|
||||
case JFJochProtoBuf::INT16:
|
||||
FPGAOutputMode(FPGAPixelOutput::Int16);
|
||||
break;
|
||||
case JFJochProtoBuf::UINT16:
|
||||
FPGAOutputMode(FPGAPixelOutput::Uint16);
|
||||
break;
|
||||
case JFJochProtoBuf::INT32:
|
||||
FPGAOutputMode(FPGAPixelOutput::Int32);
|
||||
break;
|
||||
case JFJochProtoBuf::UINT32:
|
||||
FPGAOutputMode(FPGAPixelOutput::Uint32);
|
||||
break;
|
||||
}
|
||||
} catch (...) {
|
||||
dataset = tmp;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
void DiffractionExperiment::LoadDetectorSettings(const JFJochProtoBuf::DetectorSettings &settings) {
|
||||
// TODO: Fix!!!
|
||||
//auto tmp = internal;
|
||||
try {
|
||||
if (settings.count_time_us() > 0)
|
||||
FrameTime(std::chrono::microseconds(settings.frame_time_us()),
|
||||
std::chrono::microseconds(settings.count_time_us()));
|
||||
else
|
||||
FrameTime(std::chrono::microseconds(settings.frame_time_us()));
|
||||
|
||||
StorageCells(settings.storage_cell_count());
|
||||
UseInternalPacketGenerator(settings.use_internal_packet_generator());
|
||||
|
||||
if (settings.collect_raw_data())
|
||||
Mode(DetectorMode::Raw);
|
||||
else
|
||||
Mode(DetectorMode::Conversion);
|
||||
|
||||
PedestalG0Frames(settings.pedestal_g0_frames());
|
||||
PedestalG1Frames(settings.pedestal_g1_frames());
|
||||
PedestalG2Frames(settings.pedestal_g2_frames());
|
||||
if (settings.storage_cell_delay_ns() > 0)
|
||||
StorageCellDelay(std::chrono::nanoseconds(settings.storage_cell_delay_ns()));
|
||||
} catch (...) {
|
||||
// internal = tmp;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
JFJochProtoBuf::DetectorSettings DiffractionExperiment::GetDetectorSettings() const {
|
||||
JFJochProtoBuf::DetectorSettings ret;
|
||||
ret.set_frame_time_us(GetFrameTime().count());
|
||||
ret.set_count_time_us(GetFrameCountTime().count());
|
||||
ret.set_collect_raw_data(GetDetectorMode() != DetectorMode::Conversion);
|
||||
ret.set_use_internal_packet_generator(IsUsingInternalPacketGen());
|
||||
ret.set_storage_cell_count(GetStorageCellNumber());
|
||||
ret.set_pedestal_g0_frames(GetPedestalG0Frames());
|
||||
ret.set_pedestal_g1_frames(GetPedestalG1Frames());
|
||||
ret.set_pedestal_g2_frames(GetPedestalG2Frames());
|
||||
ret.set_storage_cell_delay_ns(GetStorageCellDelay().count());
|
||||
return ret;
|
||||
}
|
||||
|
||||
void DiffractionExperiment::CheckDataProcessingSettings(const DataProcessingSettings &settings) {
|
||||
check_min("Signal to noise threshold", settings.signal_to_noise_threshold, 1);
|
||||
check_min("Photon count threshold", settings.photon_count_threshold, 0);
|
||||
|
||||
@@ -162,9 +162,6 @@ public:
|
||||
|
||||
operator JFJochProtoBuf::DetectorInput() const;
|
||||
JFJochProtoBuf::DetectorConfig DetectorConfig(const std::vector<AcquisitionDeviceNetConfig>& net_config) const;
|
||||
void LoadDatasetSettings(const JFJochProtoBuf::DatasetSettings &settings);
|
||||
void LoadDetectorSettings(const JFJochProtoBuf::DetectorSettings &settings);
|
||||
JFJochProtoBuf::DetectorSettings GetDetectorSettings() const;
|
||||
|
||||
static void CheckDataProcessingSettings(const DataProcessingSettings& settings);
|
||||
static DataProcessingSettings DefaultDataProcessingSettings();
|
||||
|
||||
@@ -637,139 +637,6 @@ TEST_CASE("DiffractionExperiment_DetectorInput_StorageCell","[DiffractionExperim
|
||||
REQUIRE(ret.storage_cell_start() == x.GetStorageCellStart());
|
||||
}
|
||||
|
||||
TEST_CASE("DiffractionExperiment_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);
|
||||
REQUIRE_NOTHROW(x.LoadDatasetSettings(settings));
|
||||
|
||||
REQUIRE(x.GetImageNumPerTrigger() == 234);
|
||||
REQUIRE(x.GetBeamX_pxl() == Approx(23.4));
|
||||
REQUIRE(x.GetBeamY_pxl() == Approx(123.4));
|
||||
REQUIRE(x.GetSpaceGroupNumber() == 45);
|
||||
REQUIRE(x.GetCompressionAlgorithm() == CompressionAlgorithm::BSHUF_LZ4);
|
||||
REQUIRE(x.GetSampleName() == "lyso1");
|
||||
REQUIRE(x.GetDataFileCount() == 5);
|
||||
REQUIRE(x.GetDetectorDistance_mm() == Approx(57.6));
|
||||
REQUIRE(x.GetSummation() == 36);
|
||||
REQUIRE(x.GetFPGAOutputMode() == FPGAPixelOutput::Int16);
|
||||
}
|
||||
|
||||
TEST_CASE("DiffractionExperiment_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");
|
||||
|
||||
REQUIRE_THROWS(x.LoadDatasetSettings(settings));
|
||||
|
||||
REQUIRE(x.GetImageNumPerTrigger() == 567);
|
||||
REQUIRE(x.GetBeamY_pxl() == Approx(324));
|
||||
REQUIRE(x.GetSpaceGroupNumber() == 0);
|
||||
}
|
||||
|
||||
TEST_CASE("DiffractionExperiment_LoadDetectorSettings", "[DiffractionExperiment]") {
|
||||
DiffractionExperiment x;
|
||||
x.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);
|
||||
|
||||
REQUIRE_NOTHROW(x.LoadDetectorSettings(settings));
|
||||
|
||||
REQUIRE(x.GetFrameTime().count() == 600);
|
||||
REQUIRE(x.GetFrameCountTime().count() == 400);
|
||||
REQUIRE(x.IsUsingInternalPacketGen());
|
||||
REQUIRE(x.GetStorageCellNumber() == 8);
|
||||
REQUIRE(x.GetDetectorMode() == DetectorMode::Raw);
|
||||
REQUIRE(x.GetPedestalG0Frames() == 5000);
|
||||
REQUIRE(x.GetPedestalG1Frames() == 100);
|
||||
REQUIRE(x.GetPedestalG2Frames() == 150);
|
||||
REQUIRE(x.GetStorageCellDelay().count() == 2500);
|
||||
}
|
||||
|
||||
TEST_CASE("DiffractionExperiment_LoadDetectorSettings_StorageCellDelay", "[DiffractionExperiment]") {
|
||||
DiffractionExperiment x;
|
||||
x.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);
|
||||
REQUIRE_NOTHROW(x.LoadDetectorSettings(settings));
|
||||
REQUIRE(x.GetStorageCellDelay().count() == 7000);
|
||||
}
|
||||
|
||||
TEST_CASE("DiffractionExperiment_LoadDetectorSettings_invalid", "[DiffractionExperiment]") {
|
||||
DiffractionExperiment x;
|
||||
x.PedestalG0Frames(456).PedestalG1Frames(1234).PedestalG2Frames(123);
|
||||
x.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);
|
||||
REQUIRE_THROWS(x.LoadDetectorSettings(settings));
|
||||
|
||||
REQUIRE(x.GetFrameTime().count() == 525);
|
||||
REQUIRE(x.GetFrameCountTime().count() == 525 - READOUT_TIME_IN_US);
|
||||
REQUIRE(!x.IsUsingInternalPacketGen());
|
||||
REQUIRE(x.GetStorageCellNumber() == 1);
|
||||
REQUIRE(x.GetDetectorMode() == DetectorMode::Conversion);
|
||||
REQUIRE(x.GetPedestalG0Frames() == 456);
|
||||
REQUIRE(x.GetPedestalG1Frames() == 1234);
|
||||
REQUIRE(x.GetPedestalG2Frames() == 123);
|
||||
}
|
||||
|
||||
TEST_CASE("DiffractionExperiment_LoadDetectorSettings_inferred", "[DiffractionExperiment]") {
|
||||
DiffractionExperiment x;
|
||||
x.PedestalG0Frames(456).PedestalG1Frames(1234).PedestalG2Frames(123);
|
||||
|
||||
JFJochProtoBuf::DetectorSettings settings;
|
||||
settings.set_frame_time_us(600);
|
||||
settings.set_storage_cell_count(1);
|
||||
REQUIRE_NOTHROW(x.LoadDetectorSettings(settings));
|
||||
|
||||
REQUIRE(x.GetFrameTime().count() == 600);
|
||||
REQUIRE(x.GetFrameCountTime().count() == 600 - READOUT_TIME_IN_US);
|
||||
REQUIRE(!x.IsUsingInternalPacketGen());
|
||||
REQUIRE(x.GetStorageCellNumber() == 1);
|
||||
REQUIRE(x.GetDetectorMode() == DetectorMode::Conversion);
|
||||
}
|
||||
|
||||
TEST_CASE("DiffractionExperiment_DefaultDataProcessingSettings","[DiffractionExperiment]") {
|
||||
REQUIRE_NOTHROW(DiffractionExperiment::CheckDataProcessingSettings(
|
||||
DiffractionExperiment::DefaultDataProcessingSettings()));
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
#include "../broker/JFJochStateMachine.h"
|
||||
#include "../broker/JFJochBroker.h"
|
||||
|
||||
using namespace std::literals::chrono_literals;
|
||||
|
||||
TEST_CASE("JFJochStateMachine_States") {
|
||||
Logger logger("JFJochStateMachine_States");
|
||||
JFJochServices services(logger);
|
||||
@@ -251,3 +253,149 @@ TEST_CASE("JFJochBroker") {
|
||||
REQUIRE(broker.Stop(nullptr, nullptr, nullptr).ok());
|
||||
REQUIRE(broker.Deactivate(nullptr, nullptr, nullptr).ok());
|
||||
}
|
||||
|
||||
TEST_CASE("FJochStateMachine_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);
|
||||
REQUIRE_NOTHROW(LoadDatasetSettings(x,settings));
|
||||
|
||||
REQUIRE(x.GetImageNumPerTrigger() == 234);
|
||||
REQUIRE(x.GetBeamX_pxl() == Approx(23.4));
|
||||
REQUIRE(x.GetBeamY_pxl() == Approx(123.4));
|
||||
REQUIRE(x.GetSpaceGroupNumber() == 45);
|
||||
REQUIRE(x.GetCompressionAlgorithm() == CompressionAlgorithm::BSHUF_LZ4);
|
||||
REQUIRE(x.GetSampleName() == "lyso1");
|
||||
REQUIRE(x.GetDataFileCount() == 5);
|
||||
REQUIRE(x.GetDetectorDistance_mm() == Approx(57.6));
|
||||
REQUIRE(x.GetSummation() == 36);
|
||||
REQUIRE(x.GetFPGAOutputMode() == FPGAPixelOutput::Int16);
|
||||
}
|
||||
|
||||
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");
|
||||
|
||||
REQUIRE_THROWS(LoadDatasetSettings(x, settings));
|
||||
|
||||
REQUIRE(x.GetImageNumPerTrigger() == 567);
|
||||
REQUIRE(x.GetBeamY_pxl() == Approx(324));
|
||||
REQUIRE(x.GetSpaceGroupNumber() == 0);
|
||||
}
|
||||
|
||||
TEST_CASE("JFJochStateMachine_SetDetectorSettings", "[DiffractionExperiment]") {
|
||||
Logger logger("JFJochStateMachine_SetDetectorSettings");
|
||||
JFJochServices services(logger);
|
||||
JFJochStateMachine state_machine(services, logger);
|
||||
|
||||
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);
|
||||
|
||||
REQUIRE_NOTHROW(state_machine.SetDetectorSettings(settings));
|
||||
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetFrameTime().count() == 600);
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetFrameCountTime().count() == 400);
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().IsUsingInternalPacketGen());
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetStorageCellNumber() == 8);
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetDetectorMode() == DetectorMode::Raw);
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetPedestalG0Frames() == 5000);
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetPedestalG1Frames() == 100);
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetPedestalG2Frames() == 150);
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetStorageCellDelay().count() == 2500);
|
||||
}
|
||||
|
||||
TEST_CASE("JFJochStateMachine_SetDetectorSettings_StorageCellDelay", "[DiffractionExperiment]") {
|
||||
Logger logger("JFJochStateMachine_SetDetectorSettings_StorageCellDelay");
|
||||
JFJochServices services(logger);
|
||||
JFJochStateMachine state_machine(services, logger);
|
||||
|
||||
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);
|
||||
REQUIRE_NOTHROW(state_machine.SetDetectorSettings(settings));
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetStorageCellDelay().count() == 7000);
|
||||
}
|
||||
|
||||
TEST_CASE("JFJochStateMachine_SetDetectorSettings_invalid", "[DiffractionExperiment]") {
|
||||
Logger logger("JFJochStateMachine_SetDetectorSettings_invalid");
|
||||
JFJochServices services(logger);
|
||||
JFJochStateMachine state_machine(services, logger);
|
||||
|
||||
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);
|
||||
REQUIRE_THROWS(state_machine.SetDetectorSettings(settings));
|
||||
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetFrameTime().count() == 525);
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetFrameCountTime().count() == 525 - READOUT_TIME_IN_US);
|
||||
REQUIRE(!state_machine.NotThreadSafe_Experiment().IsUsingInternalPacketGen());
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetStorageCellNumber() == 1);
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetDetectorMode() == DetectorMode::Conversion);
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetPedestalG0Frames() == 456);
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetPedestalG1Frames() == 1234);
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetPedestalG2Frames() == 123);
|
||||
}
|
||||
|
||||
TEST_CASE("JFJochStateMachine_SetDetectorSettings_inferred", "[DiffractionExperiment]") {
|
||||
Logger logger("JFJochStateMachine_SetDetectorSettings_inferred");
|
||||
JFJochServices services(logger);
|
||||
JFJochStateMachine state_machine(services, logger);
|
||||
|
||||
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);
|
||||
REQUIRE_NOTHROW(state_machine.SetDetectorSettings(settings));
|
||||
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetFrameTime().count() == 600);
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetFrameCountTime().count() == 600 - READOUT_TIME_IN_US);
|
||||
REQUIRE(!state_machine.NotThreadSafe_Experiment().IsUsingInternalPacketGen());
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetStorageCellNumber() == 1);
|
||||
REQUIRE(state_machine.NotThreadSafe_Experiment().GetDetectorMode() == DetectorMode::Conversion);
|
||||
}
|
||||
Reference in New Issue
Block a user