v1.0.0-rc.31
This commit is contained in:
@@ -7,12 +7,15 @@
|
||||
|
||||
JFJochReceiverService::JFJochReceiverService(AcquisitionDeviceGroup &in_aq_devices,
|
||||
Logger &in_logger, ImagePusher &pusher,
|
||||
size_t send_buffer_size_MiB) :
|
||||
logger(in_logger), aq_devices(in_aq_devices),
|
||||
image_pusher(pusher), spot_finding_settings(DiffractionExperiment::DefaultDataProcessingSettings()),
|
||||
buffer(send_buffer_size_MiB * 1024 * 1024) {}
|
||||
size_t send_buffer_size_MiB)
|
||||
: aq_devices(in_aq_devices),
|
||||
logger(in_logger),
|
||||
image_buffer(send_buffer_size_MiB * 1024 * 1024),
|
||||
image_pusher(pusher),
|
||||
spot_finding_settings(DiffractionExperiment::DefaultDataProcessingSettings()) {
|
||||
}
|
||||
|
||||
JFJochReceiverService& JFJochReceiverService::NumThreads(int64_t input) {
|
||||
JFJochReceiverService &JFJochReceiverService::NumThreads(int64_t input) {
|
||||
if (input <= 0)
|
||||
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, "Thread number must be above zero");
|
||||
nthreads = input;
|
||||
@@ -77,17 +80,16 @@ void JFJochReceiverService::Start(const DiffractionExperiment &experiment,
|
||||
preview_image_indexed,
|
||||
receiver_status,
|
||||
plots,
|
||||
buffer,
|
||||
image_buffer,
|
||||
zmq_preview_socket.get(),
|
||||
zmq_metadata_socket.get());
|
||||
try {
|
||||
// Don't want to stop
|
||||
receiver->SetSpotFindingSettings(spot_finding_settings);
|
||||
|
||||
} catch (...) {}
|
||||
} catch (...) {
|
||||
}
|
||||
measurement = std::async(std::launch::async, &JFJochReceiverService::FinalizeMeasurement, this);
|
||||
state = ReceiverState::Running;
|
||||
|
||||
} catch (const JFJochException &e) {
|
||||
logger.ErrorException(e);
|
||||
throw;
|
||||
@@ -103,7 +105,7 @@ void JFJochReceiverService::Cancel(bool silent) {
|
||||
JFJochReceiverOutput JFJochReceiverService::Stop() {
|
||||
std::unique_lock ul(state_mutex);
|
||||
|
||||
measurement_done.wait(ul, [this] { return (state != ReceiverState::Running);});
|
||||
measurement_done.wait(ul, [this] { return (state != ReceiverState::Running); });
|
||||
|
||||
if (state != ReceiverState::Idle)
|
||||
throw JFJochException(JFJochExceptionCategory::WrongReceiverState, "Receiver in weird state");
|
||||
@@ -220,7 +222,7 @@ JFJochReceiverService &JFJochReceiverService::PreviewSocket(const std::string &a
|
||||
return *this;
|
||||
}
|
||||
|
||||
JFJochReceiverService & JFJochReceiverService::MetadataSocket(const std::string &addr) {
|
||||
JFJochReceiverService &JFJochReceiverService::MetadataSocket(const std::string &addr) {
|
||||
if (!addr.empty()) {
|
||||
logger.Info("ZeroMQ metadata socket available at {}", addr);
|
||||
zmq_metadata_socket = std::make_unique<ZMQMetadataSocket>(addr);
|
||||
@@ -246,7 +248,7 @@ JFJochReceiverService &JFJochReceiverService::PreviewSocketSettings(const ZMQPre
|
||||
return *this;
|
||||
}
|
||||
|
||||
JFJochReceiverService & JFJochReceiverService::MetadataSocketSettings(const ZMQMetadataSettings &input) {
|
||||
JFJochReceiverService &JFJochReceiverService::MetadataSocketSettings(const ZMQMetadataSettings &input) {
|
||||
if (zmq_metadata_socket)
|
||||
zmq_metadata_socket->ImportSettings(input);
|
||||
return *this;
|
||||
@@ -263,3 +265,26 @@ ZMQMetadataSettings JFJochReceiverService::GetMetadataSocketSettings() const {
|
||||
return zmq_metadata_socket->GetSettings();
|
||||
return {};
|
||||
}
|
||||
|
||||
void JFJochReceiverService::GetStartMessageFromBuffer(std::vector<uint8_t> &v) {
|
||||
image_buffer.GetStartMessage(v);
|
||||
}
|
||||
|
||||
void JFJochReceiverService::GetImageFromBuffer(std::vector<uint8_t> &v, int64_t image_number) {
|
||||
image_buffer.GetImage(v, image_number);
|
||||
}
|
||||
|
||||
ImageBufferStatus JFJochReceiverService::GetImageBufferStatus() const {
|
||||
return image_buffer.GetStatus();
|
||||
}
|
||||
|
||||
void JFJochReceiverService::ClearImageBuffer() {
|
||||
std::unique_lock ul(state_mutex);
|
||||
// Clearing image buffer during data collection could be catastrophic, so better protect here, even if redundant
|
||||
// with JFJochStateMachine
|
||||
if (state == ReceiverState::Idle)
|
||||
image_buffer.Finalize(std::chrono::milliseconds(2500));
|
||||
else
|
||||
throw JFJochException(JFJochExceptionCategory::WrongDAQState,
|
||||
"Cannot clear image buffer during data collection");
|
||||
}
|
||||
Reference in New Issue
Block a user