Files
Jungfraujoch/receiver/JFJochReceiverService.h

52 lines
1.8 KiB
C++

// Copyright (2019-2023) Paul Scherrer Institute
#ifndef JUNGFRAUJOCH_JFJOCHRECEIVERSERVICE_H
#define JUNGFRAUJOCH_JFJOCHRECEIVERSERVICE_H
#include <mutex>
#include "JFJochReceiver.h"
#include "../common/NUMAHWPolicy.h"
class JFJochReceiverService {
NUMAHWPolicy numa_policy;
std::unique_ptr<JFJochReceiver> receiver;
AcquisitionDeviceGroup &aq_devices;
Logger &logger;
ImagePusher &image_pusher;
ZMQPreviewPublisher *preview_publisher = nullptr;
int64_t nthreads = 8;
int64_t send_buffer_count = 32;
enum class ReceiverState {Idle, Running};
ReceiverState state = ReceiverState::Idle;
std::mutex state_mutex;
std::condition_variable measurement_done;
std::future<void> measurement;
void FinalizeMeasurement();
DataProcessingSettings data_processing_settings;
public:
JFJochReceiverService(AcquisitionDeviceGroup &aq_devices,
Logger &logger, ImagePusher &pusher);
JFJochReceiverService& PreviewPublisher(ZMQPreviewPublisher *in_preview_writer);
JFJochReceiverService& NumThreads(int64_t input);
JFJochReceiverService& SendBufferCount(int64_t input);
JFJochReceiverService& NUMAPolicy(const NUMAHWPolicy& policy);
JFJochReceiverService& NUMAPolicy(const std::string& policy);
void Start(const DiffractionExperiment &experiment, const JFCalibration *calibration);
void Abort();
void Cancel();
JFJochReceiverOutput Stop();
void SetDataProcessingSettings(const DataProcessingSettings& settings);
Plot GetDataProcessingPlot(const PlotRequest& request);
RadialIntegrationProfiles GetRadialIntegrationProfiles();
JFJochReceiverStatus GetStatus();
std::vector<AcquisitionDeviceNetConfig> GetNetworkConfig();
};
#endif //JUNGFRAUJOCH_JFJOCHRECEIVERSERVICE_H