gRPC is necessary only for JFJochBroker
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -42,7 +42,6 @@ struct DetectorModuleConfig {
|
||||
uint64_t module_id_in_data_stream;
|
||||
};
|
||||
|
||||
|
||||
class DiffractionExperiment {
|
||||
// Internal detector settings
|
||||
std::chrono::microseconds frame_time_pedestalG1G2;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -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);
|
||||
Reference in New Issue
Block a user