gRPC is necessary only for JFJochBroker

This commit is contained in:
2023-11-16 18:45:39 +01:00
parent 0babc43637
commit 4307a670eb
12 changed files with 449 additions and 469 deletions

View File

@@ -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,

View File

@@ -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<std::mutex> 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<JFCalibratio
}
JFJochProtoBuf::DetectorSettings JFJochStateMachine::GetDetectorSettings() const {
DetectorSettings JFJochStateMachine::GetDetectorSettings() const {
std::unique_lock<std::mutex> 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<std::mutex> ul(m);
switch (state) {
case JFJochState::Inactive:

View File

@@ -8,8 +8,6 @@
#include <future>
#include <optional>
#include <jfjoch.pb.h>
#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<UnitCell> 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<uint32_t> &vec, uint32_t bit);
void SetCalibrationStatistics(const std::vector<JFCalibrationModuleStatistics> &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<MeasurementStatistics> GetMeasurementStatistics() const;

View File

@@ -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;
}

View File

@@ -42,7 +42,6 @@ struct DetectorModuleConfig {
uint64_t module_id_in_data_stream;
};
class DiffractionExperiment {
// Internal detector settings
std::chrono::microseconds frame_time_pedestalG1G2;

View File

@@ -1,51 +0,0 @@
// Copyright (2019-2023) Paul Scherrer Institute
#include <grpcpp/grpcpp.h>
#include "JFJochWriterClient.h"
#include "../common/JFJochException.h"
void JFJochWriterClient::Connect(const std::string &addr) {
if (addr.empty()) _stub.reset();
else {
_stub = std::make_unique<JFJochProtoBuf::gRPC_JFJochWriter::Stub>(
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;
}

View File

@@ -1,21 +0,0 @@
// Copyright (2019-2023) Paul Scherrer Institute
#ifndef JUNGFRAUJOCH_JFJOCHWRITERCLIENT_H
#define JUNGFRAUJOCH_JFJOCHWRITERCLIENT_H
#include <string>
#include <jfjoch.grpc.pb.h>
#include "../common/DiffractionExperiment.h"
class JFJochWriterClient {
std::unique_ptr<JFJochProtoBuf::gRPC_JFJochWriter::Stub> _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

View File

@@ -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<std::string> &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<JFJochProtoBuf::WriterOutput> JFJochWriterGroupClient::Stop() {
std::vector<JFJochProtoBuf::WriterOutput> ret;
for (auto &i: clients)
ret.push_back(i.Stop());
return ret;
}
void JFJochWriterGroupClient::Abort() {
for (auto &i: clients)
i.Abort();
}

View File

@@ -1,19 +0,0 @@
// Copyright (2019-2023) Paul Scherrer Institute
#ifndef JUNGFRAUJOCH_JFJOCHWRITERGROUPCLIENT_H
#define JUNGFRAUJOCH_JFJOCHWRITERGROUPCLIENT_H
#include <vector>
#include "JFJochWriterClient.h"
class JFJochWriterGroupClient {
std::vector<JFJochWriterClient> clients;
public:
void AddClient(const std::string &addr);
void Start(const std::vector<std::string> &zmq_push_addr, int64_t series_id);
std::vector<JFJochProtoBuf::WriterOutput> Stop();
void Abort();
};
#endif //JUNGFRAUJOCH_JFJOCHWRITERGROUPCLIENT_H

View File

@@ -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

View File

@@ -1,7 +1,6 @@
// Copyright (2019-2023) Paul Scherrer Institute
#include <catch2/catch.hpp>
#include <jfjoch.pb.h>
#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));

View File

@@ -2,7 +2,6 @@
#include <catch2/catch.hpp>
#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);