JFJochReceiver: Give one plot at a time

This commit is contained in:
leonarski_f committed 2023-04-18 14:51:51 +02:00
1 parent 962edaa4ad
commit 25cb4df0bf
21 files changed
+186 -152

No files matched your search

+3 -3
View File
@@ -49,9 +49,9 @@ grpc::Status JFJochBroker::GetStatus(grpc::ServerContext *context, const JFJochP
GRPC_RUN( *response = state_machine.GetStatus() );
}
grpc::Status JFJochBroker::GetPlots(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request,
JFJochProtoBuf::ReceiverDataProcessingPlots *response) {
GRPC_RUN( *response = state_machine.GetPlots() );
grpc::Status JFJochBroker::GetPlots(grpc::ServerContext *context, const JFJochProtoBuf::PlotRequest *request,
JFJochProtoBuf::Plot *response) {
GRPC_RUN( *response = state_machine.GetPlots(*request) );
}
grpc::Status JFJochBroker::GetPreview(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request,
+2 -2
View File
@@ -41,8 +41,8 @@ public:
grpc::Status GetStatus(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request,
JFJochProtoBuf::BrokerStatus *response) override;
grpc::Status GetPlots(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request,
JFJochProtoBuf::ReceiverDataProcessingPlots *response) override;
grpc::Status GetPlots(grpc::ServerContext *context, const JFJochProtoBuf::PlotRequest *request,
JFJochProtoBuf::Plot *response) override;
grpc::Status GetPreview(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request,
JFJochProtoBuf::PreviewFrame *response) override;
+3 -8
View File
@@ -143,16 +143,11 @@ JFJochProtoBuf::ReceiverStatus JFJochServices::GetReceiverStatus() {
return receiver.GetStatus();
}
JFJochProtoBuf::ReceiverDataProcessingPlots JFJochServices::GetPlots() {
JFJochProtoBuf::Plot JFJochServices::GetPlots(const JFJochProtoBuf::PlotRequest &request) {
try {
return receiver.GetPlots();
return receiver.GetPlots(request);
} catch (...) {
JFJochProtoBuf::ReceiverDataProcessingPlots plots;
*plots.mutable_indexing_rate() = JFJochProtoBuf::Plot();
*plots.mutable_bkg_estimate() = JFJochProtoBuf::Plot();
*plots.mutable_spot_count() = JFJochProtoBuf::Plot();
*plots.mutable_radial_int_profile() = JFJochProtoBuf::Plot();
return plots;
return JFJochProtoBuf::Plot();
}
}
+1 -1
View File
@@ -31,7 +31,7 @@ public:
JFJochProtoBuf::ReceiverStatus GetReceiverStatus();
JFJochProtoBuf::PreviewFrame GetPreviewFrame();
JFJochProtoBuf::ReceiverDataProcessingPlots GetPlots();
JFJochProtoBuf::Plot GetPlots(const JFJochProtoBuf::PlotRequest &request);
void SetDataProcessingSettings(const JFJochProtoBuf::DataProcessingSettings &settings);
JFJochServices& Receiver(const std::string &addr);
+2 -2
View File
@@ -493,8 +493,8 @@ JFJochProtoBuf::BrokerStatus JFJochStateMachine::GetStatus() const {
return ret;
}
JFJochProtoBuf::ReceiverDataProcessingPlots JFJochStateMachine::GetPlots() const {
return services.GetPlots();
JFJochProtoBuf::Plot JFJochStateMachine::GetPlots(const JFJochProtoBuf::PlotRequest &request) const {
return services.GetPlots(request);
}
void JFJochStateMachine::SetDataProcessingSettings(const JFJochProtoBuf::DataProcessingSettings &settings) {
+1 -1
View File
@@ -84,7 +84,7 @@ public:
JFJochProtoBuf::JFCalibrationStatistics GetCalibrationStatistics() const;
JFJochProtoBuf::BrokerStatus GetStatus() const;
JFJochProtoBuf::ReceiverDataProcessingPlots GetPlots() const;
JFJochProtoBuf::Plot GetPlots(const JFJochProtoBuf::PlotRequest &request) const;
JFJochProtoBuf::Image GetNeXusMask() const;
JFJochProtoBuf::Image GetPedestalG0() const;
+2 -4
View File
@@ -690,12 +690,10 @@ int64_t DiffractionExperiment::GetSpotFindingStride() const {
}
int64_t DiffractionExperiment::GetSpotFindingBin() const {
if (GetSpotFindingPeriod().count() <= 0)
return 100;
else if (GetSpotFindingPeriod().count() >= 1000*1000)
if (GetImageTime().count() >= 200*1000)
return 1;
else
return 1000*1000/(GetSpotFindingPeriod().count()); // 1 bin = 1 second
return 200*1000 / GetImageTime().count(); // 1 bin = 1 second
}
int64_t DiffractionExperiment::GetPreviewStride(std::chrono::microseconds period) const {
+9 -5
View File
@@ -11,7 +11,7 @@
#include <jfjoch.pb.h>
#include "JFJochException.h"
#include <iostream>
template <class T> class StatusVector {
mutable std::mutex m;
@@ -20,10 +20,10 @@ template <class T> class StatusVector {
public:
void AddElement(uint32_t id, T val) {
std::unique_lock<std::mutex> ul(m);
content[id] = val;
if (id > max_id)
max_id = id;
}
[[nodiscard]] float Mean() const {
@@ -47,8 +47,12 @@ public:
"Bin number must be greater than zero");
std::vector<float> ret;
size_t elems = (max_id + 1) / bin_size + (((max_id + 1) % bin_size > 0) ? 1 : 0);
ret.resize(elems);
if (!content.empty()) {
for (int bin = 0; bin < max_id / bin_size + ((max_id % bin_size > 0) ? 1 : 0); bin++) {
for (int bin = 0; bin < elems; bin++) {
double sum = 0;
int64_t count = 0;
@@ -61,9 +65,9 @@ public:
}
}
if (count > 0)
ret.push_back(static_cast<float>(sum / static_cast<double>(count)));
ret[bin] = static_cast<float>(sum / static_cast<double>(count));
else
ret.push_back(0.0);
ret[bin] = 0.0;
}
}
return ret;
+3 -4
View File
@@ -131,17 +131,16 @@ JFJochProtoBuf::ReceiverNetworkConfig JFJochReceiverClient::GetNetworkConfig() {
return ret;
}
JFJochProtoBuf::ReceiverDataProcessingPlots JFJochReceiverClient::GetPlots() {
JFJochProtoBuf::ReceiverDataProcessingPlots ret;
JFJochProtoBuf::Plot JFJochReceiverClient::GetPlots(const JFJochProtoBuf::PlotRequest &request) {
JFJochProtoBuf::Plot ret;
if (_stub) {
grpc::ClientContext context;
JFJochProtoBuf::Empty empty;
auto status = _stub->GetDataProcessingPlots(&context, empty, &ret);
auto status = _stub->GetDataProcessingPlots(&context, request, &ret);
if (!status.ok()) throw JFJochException(JFJochExceptionCategory::gRPCError,
"JFJochReceiver: " + status.error_message());
} else {
// TODO: Write some dummy plots
}
return ret;
}
+1 -1
View File
@@ -22,7 +22,7 @@ public:
JFJochProtoBuf::ReceiverStatus GetStatus();
JFJochProtoBuf::PreviewFrame GetPreviewFrame();
JFJochProtoBuf::ReceiverNetworkConfig GetNetworkConfig();
JFJochProtoBuf::ReceiverDataProcessingPlots GetPlots();
JFJochProtoBuf::Plot GetPlots(const JFJochProtoBuf::PlotRequest& request);
};
+14 -3
View File
@@ -260,6 +260,18 @@ message ReceiverStatus {
optional float indexing_rate = 3;
}
enum PlotType {
BKG_ESTIMATE = 0;
RAD_INT = 1;
SPOT_COUNT = 2;
INDEXING_RATE = 3;
}
message PlotRequest {
PlotType type = 1;
uint64 binning = 2;
}
message ReceiverDataProcessingPlots {
Plot bkg_estimate = 1;
Plot radial_int_profile = 2;
@@ -377,7 +389,6 @@ message DataProcessingSettings {
optional float low_resolution_limit = 7;
float bkg_estimate_low_q = 8;
float bkg_estimate_high_q = 9;
optional int64 result_binning = 10;
}
message PreviewFrame {
@@ -481,7 +492,7 @@ service gRPC_JFJochReceiver {
rpc Stop (Empty) returns (ReceiverOutput) {}
rpc GetStatus (Empty) returns (ReceiverStatus) {}
rpc SetDataProcessingSettings(DataProcessingSettings) returns (Empty) {}
rpc GetDataProcessingPlots(Empty) returns (ReceiverDataProcessingPlots) {}
rpc GetDataProcessingPlots(PlotRequest) returns (Plot) {}
rpc GetPreviewFrame (Empty) returns (PreviewFrame) {}
rpc GetNetworkConfig (Empty) returns (ReceiverNetworkConfig) {}
}
@@ -517,7 +528,7 @@ service gRPC_JFJochBroker {
rpc GetMeasurementStatistics (Empty) returns (MeasurementStatistics) {}
rpc GetDataProcessingSettings (Empty) returns (DataProcessingSettings) {}
rpc PutDataProcessingSettings (DataProcessingSettings) returns (Empty) {}
rpc GetPlots (Empty) returns (ReceiverDataProcessingPlots) {}
rpc GetPlots (PlotRequest) returns (Plot) {}
rpc GetPreview (Empty) returns (PreviewFrame) {}
rpc GetPedestalG0 (Empty) returns (Image) {}
+3 -3
View File
@@ -174,12 +174,12 @@ async def put_data_processing_settings(data: str = Body(...)):
raise HTTPException(status_code=400, detail=e.details())
@app.get("/data_processing/plots")
async def get_settings():
@app.post("/data_processing/plots")
async def get_settings(data: str = Body(...)):
try:
stub = jfjoch_pb2_grpc.gRPC_JFJochBrokerStub(channel)
return MessageToDict(
stub.GetPlots(jfjoch_pb2.Empty()), including_default_value_fields=True
stub.GetPlots(Parse(data, jfjoch_pb2.PlotRequest())), including_default_value_fields=True
)
except grpc.RpcError as e:
raise HTTPException(status_code=400, detail=e.details())
+67 -63
View File
@@ -13,7 +13,7 @@ _sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0cjfjoch.proto\x12\x0eJFJochProtoBuf\"\x07\n\x05\x45mpty\"W\n\x08UnitCell\x12\t\n\x01\x61\x18\x01 \x01(\x02\x12\t\n\x01\x62\x18\x02 \x01(\x02\x12\t\n\x01\x63\x18\x03 \x01(\x02\x12\r\n\x05\x61lpha\x18\x04 \x01(\x02\x12\x0c\n\x04\x62\x65ta\x18\x05 \x01(\x02\x12\r\n\x05gamma\x18\x06 \x01(\x02\")\n\x06Vector\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02\"|\n\x10RotationSettings\x12\x17\n\x0fstart_angle_deg\x18\x01 \x01(\x02\x12 \n\x18\x61ngle_incr_per_image_deg\x18\x02 \x01(\x02\x12-\n\rrotation_axis\x18\x03 \x01(\x0b\x32\x16.JFJochProtoBuf.Vector\"\x1c\n\x04Plot\x12\t\n\x01x\x18\x01 \x03(\x02\x12\t\n\x01y\x18\x02 \x03(\x02\"\xa5\x04\n\x0f\x44\x61tasetSettings\x12\x1a\n\x12images_per_trigger\x18\x01 \x01(\x03\x12\x10\n\x08ntrigger\x18\x02 \x01(\x03\x12\x13\n\tsummation\x18\x03 \x01(\x03H\x00\x12\x17\n\rimage_time_us\x18\x04 \x01(\x03H\x00\x12\x12\n\nbeam_x_pxl\x18\x05 \x01(\x02\x12\x12\n\nbeam_y_pxl\x18\x06 \x01(\x02\x12\x1c\n\x14\x64\x65tector_distance_mm\x18\x07 \x01(\x02\x12\x19\n\x11photon_energy_keV\x18\x08 \x01(\x02\x12\x13\n\x0b\x66ile_prefix\x18\t \x01(\t\x12\x17\n\x0f\x64\x61ta_file_count\x18\n \x01(\x03\x12\x30\n\x0b\x63ompression\x18\x0b \x01(\x0e\x32\x1b.JFJochProtoBuf.Compression\x12\x13\n\x0bsample_name\x18\x0c \x01(\t\x12\x30\n\tunit_cell\x18\r \x01(\x0b\x32\x18.JFJochProtoBuf.UnitCellH\x01\x88\x01\x01\x12\x1a\n\x12space_group_number\x18\x0e \x01(\x03\x12\x36\n\x11scattering_vector\x18\x0f \x01(\x0b\x32\x16.JFJochProtoBuf.VectorH\x02\x88\x01\x01\x12\x18\n\x10\x61pply_pixel_mask\x18\x10 \x01(\x08\x12\x12\n\nbinning2x2\x18\x11 \x01(\x08\x42\x08\n\x06timingB\x0c\n\n_unit_cellB\x14\n\x12_scattering_vector\"\xf6\x02\n\x10\x44\x65tectorSettings\x12\x15\n\rframe_time_us\x18\x01 \x01(\x03\x12\x1a\n\rcount_time_us\x18\x02 \x01(\x03H\x00\x88\x01\x01\x12\x19\n\x11use_storage_cells\x18\x03 \x01(\x08\x12%\n\x1duse_internal_packet_generator\x18\x04 \x01(\x08\x12\x18\n\x10\x63ollect_raw_data\x18\x05 \x01(\x08\x12\x1f\n\x12pedestal_g0_frames\x18\x06 \x01(\x03H\x01\x88\x01\x01\x12\x1f\n\x12pedestal_g1_frames\x18\x07 \x01(\x03H\x02\x88\x01\x01\x12\x1f\n\x12pedestal_g2_frames\x18\x08 \x01(\x03H\x03\x88\x01\x01\x12\x19\n\x11\x63onversion_on_cpu\x18\t \x01(\x08\x42\x10\n\x0e_count_time_usB\x15\n\x13_pedestal_g0_framesB\x15\n\x13_pedestal_g1_framesB\x15\n\x13_pedestal_g2_frames\"b\n\x16\x44\x65tectorModuleGeometry\x12\x0e\n\x06pixel0\x18\x01 \x01(\x03\x12\x1b\n\x13\x66\x61st_direction_step\x18\x02 \x01(\x03\x12\x1b\n\x13slow_direction_step\x18\x03 \x01(\x03\"z\n\x10\x44\x65tectorGeometry\x12\x11\n\twidth_pxl\x18\x01 \x01(\x03\x12\x12\n\nheight_pxl\x18\x02 \x01(\x03\x12?\n\x0fmodule_geometry\x18\x03 \x03(\x0b\x32&.JFJochProtoBuf.DetectorModuleGeometry\"\xc1\x01\n\x08\x44\x65tector\x12\x10\n\x08nmodules\x18\x01 \x01(\x03\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x15\n\rpixel_size_mm\x18\x03 \x01(\x02\x12\x17\n\x0fmodule_hostname\x18\x04 \x03(\t\x12\x32\n\x08geometry\x18\x05 \x01(\x0b\x32 .JFJochProtoBuf.DetectorGeometry\x12*\n\x04type\x18\x06 \x01(\x0e\x32\x1c.JFJochProtoBuf.DetectorType\"\xe1\x05\n\x10InternalSettings\x12\"\n\x1a\x66rame_time_pedestalG1G2_us\x18\x01 \x01(\x03\x12\x15\n\rframe_time_us\x18\x03 \x01(\x03\x12\x15\n\rcount_time_us\x18\x04 \x01(\x03\x12*\n\x08\x64\x65tector\x18\x05 \x01(\x0b\x32\x18.JFJochProtoBuf.Detector\x12\x14\n\x0cndatastreams\x18\x06 \x01(\x03\x12&\n\x1einternal_fpga_packet_generator\x18\t \x01(\x08\x12\x15\n\rstorage_cells\x18\n \x01(\x03\x12\x1a\n\x12storage_cell_start\x18\x0b \x01(\x03\x12\x1a\n\x12pedestal_g0_frames\x18\x0c \x01(\x03\x12\x1a\n\x12pedestal_g1_frames\x18\r \x01(\x03\x12\x1a\n\x12pedestal_g2_frames\x18\x0e \x01(\x03\x12\x19\n\x11preview_period_us\x18\x0f \x01(\x03\x12\x1e\n\x16spot_finding_period_us\x18\x10 \x01(\x03\x12*\n\x04mode\x18\x13 \x01(\x0e\x32\x1c.JFJochProtoBuf.DetectorMode\x12\x19\n\x11mask_module_edges\x18\x14 \x01(\x08\x12\x17\n\x0fmask_chip_edges\x18\x15 \x01(\x08\x12\x16\n\x0eipv4_base_addr\x18\x16 \x01(\x03\x12\r\n\x05low_q\x18\x1a \x01(\x02\x12\x0e\n\x06high_q\x18\x1b \x01(\x02\x12\x11\n\tq_spacing\x18\x1c \x01(\x02\x12\x10\n\x08git_sha1\x18\x1d \x01(\t\x12\x10\n\x08git_date\x18\x1e \x01(\t\x12\x19\n\x11\x63onversion_on_cpu\x18\x1f \x01(\x08\x12\x13\n\x0bsource_name\x18 \x01(\t\x12\x19\n\x11source_name_short\x18! \x01(\t\x12\x17\n\x0finstrument_name\x18\" \x01(\t\x12\x1d\n\x15instrument_name_short\x18# \x01(\t\"|\n\x14JungfraujochSettings\x12\x30\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x1f.JFJochProtoBuf.DatasetSettings\x12\x32\n\x08internal\x18\x02 \x01(\x0b\x32 .JFJochProtoBuf.InternalSettings\"\x1e\n\nJFPedestal\x12\x10\n\x08pedestal\x18\x01 \x01(\x0c\"-\n\x11JFGainCalibration\x12\x18\n\x10gain_calibration\x18\x01 \x01(\x0c\"\xb2\x01\n\rJFCalibration\x12\x10\n\x08nmodules\x18\x01 \x01(\x04\x12\x16\n\x0enstorage_cells\x18\x02 \x01(\x04\x12,\n\x08pedestal\x18\x03 \x03(\x0b\x32\x1a.JFJochProtoBuf.JFPedestal\x12\x0c\n\x04mask\x18\Line truncated
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0cjfjoch.proto\x12\x0eJFJochProtoBuf\"\x07\n\x05\x45mpty\"W\n\x08UnitCell\x12\t\n\x01\x61\x18\x01 \x01(\x02\x12\t\n\x01\x62\x18\x02 \x01(\x02\x12\t\n\x01\x63\x18\x03 \x01(\x02\x12\r\n\x05\x61lpha\x18\x04 \x01(\x02\x12\x0c\n\x04\x62\x65ta\x18\x05 \x01(\x02\x12\r\n\x05gamma\x18\x06 \x01(\x02\")\n\x06Vector\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02\"|\n\x10RotationSettings\x12\x17\n\x0fstart_angle_deg\x18\x01 \x01(\x02\x12 \n\x18\x61ngle_incr_per_image_deg\x18\x02 \x01(\x02\x12-\n\rrotation_axis\x18\x03 \x01(\x0b\x32\x16.JFJochProtoBuf.Vector\"\x1c\n\x04Plot\x12\t\n\x01x\x18\x01 \x03(\x02\x12\t\n\x01y\x18\x02 \x03(\x02\"\xa5\x04\n\x0f\x44\x61tasetSettings\x12\x1a\n\x12images_per_trigger\x18\x01 \x01(\x03\x12\x10\n\x08ntrigger\x18\x02 \x01(\x03\x12\x13\n\tsummation\x18\x03 \x01(\x03H\x00\x12\x17\n\rimage_time_us\x18\x04 \x01(\x03H\x00\x12\x12\n\nbeam_x_pxl\x18\x05 \x01(\x02\x12\x12\n\nbeam_y_pxl\x18\x06 \x01(\x02\x12\x1c\n\x14\x64\x65tector_distance_mm\x18\x07 \x01(\x02\x12\x19\n\x11photon_energy_keV\x18\x08 \x01(\x02\x12\x13\n\x0b\x66ile_prefix\x18\t \x01(\t\x12\x17\n\x0f\x64\x61ta_file_count\x18\n \x01(\x03\x12\x30\n\x0b\x63ompression\x18\x0b \x01(\x0e\x32\x1b.JFJochProtoBuf.Compression\x12\x13\n\x0bsample_name\x18\x0c \x01(\t\x12\x30\n\tunit_cell\x18\r \x01(\x0b\x32\x18.JFJochProtoBuf.UnitCellH\x01\x88\x01\x01\x12\x1a\n\x12space_group_number\x18\x0e \x01(\x03\x12\x36\n\x11scattering_vector\x18\x0f \x01(\x0b\x32\x16.JFJochProtoBuf.VectorH\x02\x88\x01\x01\x12\x18\n\x10\x61pply_pixel_mask\x18\x10 \x01(\x08\x12\x12\n\nbinning2x2\x18\x11 \x01(\x08\x42\x08\n\x06timingB\x0c\n\n_unit_cellB\x14\n\x12_scattering_vector\"\xf6\x02\n\x10\x44\x65tectorSettings\x12\x15\n\rframe_time_us\x18\x01 \x01(\x03\x12\x1a\n\rcount_time_us\x18\x02 \x01(\x03H\x00\x88\x01\x01\x12\x19\n\x11use_storage_cells\x18\x03 \x01(\x08\x12%\n\x1duse_internal_packet_generator\x18\x04 \x01(\x08\x12\x18\n\x10\x63ollect_raw_data\x18\x05 \x01(\x08\x12\x1f\n\x12pedestal_g0_frames\x18\x06 \x01(\x03H\x01\x88\x01\x01\x12\x1f\n\x12pedestal_g1_frames\x18\x07 \x01(\x03H\x02\x88\x01\x01\x12\x1f\n\x12pedestal_g2_frames\x18\x08 \x01(\x03H\x03\x88\x01\x01\x12\x19\n\x11\x63onversion_on_cpu\x18\t \x01(\x08\x42\x10\n\x0e_count_time_usB\x15\n\x13_pedestal_g0_framesB\x15\n\x13_pedestal_g1_framesB\x15\n\x13_pedestal_g2_frames\"b\n\x16\x44\x65tectorModuleGeometry\x12\x0e\n\x06pixel0\x18\x01 \x01(\x03\x12\x1b\n\x13\x66\x61st_direction_step\x18\x02 \x01(\x03\x12\x1b\n\x13slow_direction_step\x18\x03 \x01(\x03\"z\n\x10\x44\x65tectorGeometry\x12\x11\n\twidth_pxl\x18\x01 \x01(\x03\x12\x12\n\nheight_pxl\x18\x02 \x01(\x03\x12?\n\x0fmodule_geometry\x18\x03 \x03(\x0b\x32&.JFJochProtoBuf.DetectorModuleGeometry\"\xc1\x01\n\x08\x44\x65tector\x12\x10\n\x08nmodules\x18\x01 \x01(\x03\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x15\n\rpixel_size_mm\x18\x03 \x01(\x02\x12\x17\n\x0fmodule_hostname\x18\x04 \x03(\t\x12\x32\n\x08geometry\x18\x05 \x01(\x0b\x32 .JFJochProtoBuf.DetectorGeometry\x12*\n\x04type\x18\x06 \x01(\x0e\x32\x1c.JFJochProtoBuf.DetectorType\"\xe1\x05\n\x10InternalSettings\x12\"\n\x1a\x66rame_time_pedestalG1G2_us\x18\x01 \x01(\x03\x12\x15\n\rframe_time_us\x18\x03 \x01(\x03\x12\x15\n\rcount_time_us\x18\x04 \x01(\x03\x12*\n\x08\x64\x65tector\x18\x05 \x01(\x0b\x32\x18.JFJochProtoBuf.Detector\x12\x14\n\x0cndatastreams\x18\x06 \x01(\x03\x12&\n\x1einternal_fpga_packet_generator\x18\t \x01(\x08\x12\x15\n\rstorage_cells\x18\n \x01(\x03\x12\x1a\n\x12storage_cell_start\x18\x0b \x01(\x03\x12\x1a\n\x12pedestal_g0_frames\x18\x0c \x01(\x03\x12\x1a\n\x12pedestal_g1_frames\x18\r \x01(\x03\x12\x1a\n\x12pedestal_g2_frames\x18\x0e \x01(\x03\x12\x19\n\x11preview_period_us\x18\x0f \x01(\x03\x12\x1e\n\x16spot_finding_period_us\x18\x10 \x01(\x03\x12*\n\x04mode\x18\x13 \x01(\x0e\x32\x1c.JFJochProtoBuf.DetectorMode\x12\x19\n\x11mask_module_edges\x18\x14 \x01(\x08\x12\x17\n\x0fmask_chip_edges\x18\x15 \x01(\x08\x12\x16\n\x0eipv4_base_addr\x18\x16 \x01(\x03\x12\r\n\x05low_q\x18\x1a \x01(\x02\x12\x0e\n\x06high_q\x18\x1b \x01(\x02\x12\x11\n\tq_spacing\x18\x1c \x01(\x02\x12\x10\n\x08git_sha1\x18\x1d \x01(\t\x12\x10\n\x08git_date\x18\x1e \x01(\t\x12\x19\n\x11\x63onversion_on_cpu\x18\x1f \x01(\x08\x12\x13\n\x0bsource_name\x18 \x01(\t\x12\x19\n\x11source_name_short\x18! \x01(\t\x12\x17\n\x0finstrument_name\x18\" \x01(\t\x12\x1d\n\x15instrument_name_short\x18# \x01(\t\"|\n\x14JungfraujochSettings\x12\x30\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x1f.JFJochProtoBuf.DatasetSettings\x12\x32\n\x08internal\x18\x02 \x01(\x0b\x32 .JFJochProtoBuf.InternalSettings\"\x1e\n\nJFPedestal\x12\x10\n\x08pedestal\x18\x01 \x01(\x0c\"-\n\x11JFGainCalibration\x12\x18\n\x10gain_calibration\x18\x01 \x01(\x0c\"\xb2\x01\n\rJFCalibration\x12\x10\n\x08nmodules\x18\x01 \x01(\x04\x12\x16\n\x0enstorage_cells\x18\x02 \x01(\x04\x12,\n\x08pedestal\x18\x03 \x03(\x0b\x32\x1a.JFJochProtoBuf.JFPedestal\x12\x0c\n\x04mask\x18\Line truncated
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'jfjoch_pb2', globals())
@@ -22,16 +22,18 @@ if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
_FPGASTATUS_FIFOSTATUSENTRY._options = None
_FPGASTATUS_FIFOSTATUSENTRY._serialized_options = b'8\001'
_COMPRESSION._serialized_start=8375
_COMPRESSION._serialized_end=8459
_DETECTORTYPE._serialized_start=8461
_DETECTORTYPE._serialized_end=8500
_DETECTORMODE._serialized_start=8502
_DETECTORMODE._serialized_end=8592
_FPGAFIFOSTATUS._serialized_start=8594
_FPGAFIFOSTATUS._serialized_end=8644
_STATE._serialized_start=8646
_STATE._serialized_end=8740
_COMPRESSION._serialized_start=8399
_COMPRESSION._serialized_end=8483
_DETECTORTYPE._serialized_start=8485
_DETECTORTYPE._serialized_end=8524
_DETECTORMODE._serialized_start=8526
_DETECTORMODE._serialized_end=8616
_FPGAFIFOSTATUS._serialized_start=8618
_FPGAFIFOSTATUS._serialized_end=8668
_STATE._serialized_start=8670
_STATE._serialized_end=8764
_PLOTTYPE._serialized_start=8766
_PLOTTYPE._serialized_end=8842
_EMPTY._serialized_start=32
_EMPTY._serialized_end=39
_UNITCELL._serialized_start=41
@@ -76,56 +78,58 @@ if _descriptor._USE_C_DESCRIPTORS == False:
_RECEIVERNETWORKCONFIG._serialized_end=3906
_RECEIVERSTATUS._serialized_start=3909
_RECEIVERSTATUS._serialized_end=4056
_RECEIVERDATAPROCESSINGPLOTS._serialized_start=4059
_RECEIVERDATAPROCESSINGPLOTS._serialized_end=4269
_WRITERINPUT._serialized_start=4271
_WRITERINPUT._serialized_end=4333
_WRITEROUTPUT._serialized_start=4335
_WRITEROUTPUT._serialized_end=4415
_DETECTORMODULECONFIG._serialized_start=4418
_DETECTORMODULECONFIG._serialized_end=4676
_DETECTORCONFIG._serialized_start=4678
_DETECTORCONFIG._serialized_end=4774
_DETECTORINPUT._serialized_start=4777
_DETECTORINPUT._serialized_end=5026
_DETECTOROUTPUT._serialized_start=5028
_DETECTOROUTPUT._serialized_end=5044
_DETECTORSTATUS._serialized_start=5046
_DETECTORSTATUS._serialized_end=5144
_FPGASTATUS._serialized_start=5147
_FPGASTATUS._serialized_end=6217
_FPGASTATUS_FIFOSTATUSENTRY._serialized_start=6136
_FPGASTATUS_FIFOSTATUSENTRY._serialized_end=6217
_INDEXERDATAPROCESSINGPLOTS._serialized_start=6219
_INDEXERDATAPROCESSINGPLOTS._serialized_end=6292
_DATAPROCESSINGSETTINGS._serialized_start=6295
_DATAPROCESSINGSETTINGS._serialized_end=6689
_PREVIEWFRAME._serialized_start=6692
_PREVIEWFRAME._serialized_end=6961
_MODULESTATISTICS._serialized_start=6964
_MODULESTATISTICS._serialized_end=7201
_IMAGE._serialized_start=7203
_IMAGE._serialized_end=7276
_MASKTOLOAD._serialized_start=7278
_MASKTOLOAD._serialized_end=7324
_MEASUREMENTSTATISTICS._serialized_start=7327
_MEASUREMENTSTATISTICS._serialized_end=7835
_BROKERSTATUS._serialized_start=7838
_BROKERSTATUS._serialized_end=7979
_BROKERFULLSTATUS._serialized_start=7982
_BROKERFULLSTATUS._serialized_end=8146
_DETECTORLISTELEMENT._serialized_start=8148
_DETECTORLISTELEMENT._serialized_end=8220
_DETECTORLIST._serialized_start=8222
_DETECTORLIST._serialized_end=8340
_DETECTORSELECTION._serialized_start=8342
_DETECTORSELECTION._serialized_end=8373
_GRPC_JFJOCHRECEIVER._serialized_start=8743
_GRPC_JFJOCHRECEIVER._serialized_end=9427
_GRPC_JFJOCHWRITER._serialized_start=9430
_GRPC_JFJOCHWRITER._serialized_end=9632
_GRPC_JFJOCHDETECTOR._serialized_start=9635
_GRPC_JFJOCHDETECTOR._serialized_end=10021
_GRPC_JFJOCHBROKER._serialized_start=10024
_GRPC_JFJOCHBROKER._serialized_end=11630
_PLOTREQUEST._serialized_start=4058
_PLOTREQUEST._serialized_end=4128
_RECEIVERDATAPROCESSINGPLOTS._serialized_start=4131
_RECEIVERDATAPROCESSINGPLOTS._serialized_end=4341
_WRITERINPUT._serialized_start=4343
_WRITERINPUT._serialized_end=4405
_WRITEROUTPUT._serialized_start=4407
_WRITEROUTPUT._serialized_end=4487
_DETECTORMODULECONFIG._serialized_start=4490
_DETECTORMODULECONFIG._serialized_end=4748
_DETECTORCONFIG._serialized_start=4750
_DETECTORCONFIG._serialized_end=4846
_DETECTORINPUT._serialized_start=4849
_DETECTORINPUT._serialized_end=5098
_DETECTOROUTPUT._serialized_start=5100
_DETECTOROUTPUT._serialized_end=5116
_DETECTORSTATUS._serialized_start=5118
_DETECTORSTATUS._serialized_end=5216
_FPGASTATUS._serialized_start=5219
_FPGASTATUS._serialized_end=6289
_FPGASTATUS_FIFOSTATUSENTRY._serialized_start=6208
_FPGASTATUS_FIFOSTATUSENTRY._serialized_end=6289
_INDEXERDATAPROCESSINGPLOTS._serialized_start=6291
_INDEXERDATAPROCESSINGPLOTS._serialized_end=6364
_DATAPROCESSINGSETTINGS._serialized_start=6367
_DATAPROCESSINGSETTINGS._serialized_end=6713
_PREVIEWFRAME._serialized_start=6716
_PREVIEWFRAME._serialized_end=6985
_MODULESTATISTICS._serialized_start=6988
_MODULESTATISTICS._serialized_end=7225
_IMAGE._serialized_start=7227
_IMAGE._serialized_end=7300
_MASKTOLOAD._serialized_start=7302
_MASKTOLOAD._serialized_end=7348
_MEASUREMENTSTATISTICS._serialized_start=7351
_MEASUREMENTSTATISTICS._serialized_end=7859
_BROKERSTATUS._serialized_start=7862
_BROKERSTATUS._serialized_end=8003
_BROKERFULLSTATUS._serialized_start=8006
_BROKERFULLSTATUS._serialized_end=8170
_DETECTORLISTELEMENT._serialized_start=8172
_DETECTORLISTELEMENT._serialized_end=8244
_DETECTORLIST._serialized_start=8246
_DETECTORLIST._serialized_end=8364
_DETECTORSELECTION._serialized_start=8366
_DETECTORSELECTION._serialized_end=8397
_GRPC_JFJOCHRECEIVER._serialized_start=8845
_GRPC_JFJOCHRECEIVER._serialized_end=9512
_GRPC_JFJOCHWRITER._serialized_start=9515
_GRPC_JFJOCHWRITER._serialized_end=9717
_GRPC_JFJOCHDETECTOR._serialized_start=9720
_GRPC_JFJOCHDETECTOR._serialized_end=10106
_GRPC_JFJOCHBROKER._serialized_start=10109
_GRPC_JFJOCHBROKER._serialized_end=11698
# @@protoc_insertion_point(module_scope)
+12 -12
View File
@@ -46,8 +46,8 @@ class gRPC_JFJochReceiverStub(object):
)
self.GetDataProcessingPlots = channel.unary_unary(
'/JFJochProtoBuf.gRPC_JFJochReceiver/GetDataProcessingPlots',
request_serializer=jfjoch__pb2.Empty.SerializeToString,
response_deserializer=jfjoch__pb2.ReceiverDataProcessingPlots.FromString,
request_serializer=jfjoch__pb2.PlotRequest.SerializeToString,
response_deserializer=jfjoch__pb2.Plot.FromString,
)
self.GetPreviewFrame = channel.unary_unary(
'/JFJochProtoBuf.gRPC_JFJochReceiver/GetPreviewFrame',
@@ -153,8 +153,8 @@ def add_gRPC_JFJochReceiverServicer_to_server(servicer, server):
),
'GetDataProcessingPlots': grpc.unary_unary_rpc_method_handler(
servicer.GetDataProcessingPlots,
request_deserializer=jfjoch__pb2.Empty.FromString,
response_serializer=jfjoch__pb2.ReceiverDataProcessingPlots.SerializeToString,
request_deserializer=jfjoch__pb2.PlotRequest.FromString,
response_serializer=jfjoch__pb2.Plot.SerializeToString,
),
'GetPreviewFrame': grpc.unary_unary_rpc_method_handler(
servicer.GetPreviewFrame,
@@ -290,8 +290,8 @@ class gRPC_JFJochReceiver(object):
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/JFJochProtoBuf.gRPC_JFJochReceiver/GetDataProcessingPlots',
jfjoch__pb2.Empty.SerializeToString,
jfjoch__pb2.ReceiverDataProcessingPlots.FromString,
jfjoch__pb2.PlotRequest.SerializeToString,
jfjoch__pb2.Plot.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -764,8 +764,8 @@ class gRPC_JFJochBrokerStub(object):
)
self.GetPlots = channel.unary_unary(
'/JFJochProtoBuf.gRPC_JFJochBroker/GetPlots',
request_serializer=jfjoch__pb2.Empty.SerializeToString,
response_deserializer=jfjoch__pb2.ReceiverDataProcessingPlots.FromString,
request_serializer=jfjoch__pb2.PlotRequest.SerializeToString,
response_deserializer=jfjoch__pb2.Plot.FromString,
)
self.GetPreview = channel.unary_unary(
'/JFJochProtoBuf.gRPC_JFJochBroker/GetPreview',
@@ -1014,8 +1014,8 @@ def add_gRPC_JFJochBrokerServicer_to_server(servicer, server):
),
'GetPlots': grpc.unary_unary_rpc_method_handler(
servicer.GetPlots,
request_deserializer=jfjoch__pb2.Empty.FromString,
response_serializer=jfjoch__pb2.ReceiverDataProcessingPlots.SerializeToString,
request_deserializer=jfjoch__pb2.PlotRequest.FromString,
response_serializer=jfjoch__pb2.Plot.SerializeToString,
),
'GetPreview': grpc.unary_unary_rpc_method_handler(
servicer.GetPreview,
@@ -1312,8 +1312,8 @@ class gRPC_JFJochBroker(object):
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/JFJochProtoBuf.gRPC_JFJochBroker/GetPlots',
jfjoch__pb2.Empty.SerializeToString,
jfjoch__pb2.ReceiverDataProcessingPlots.FromString,
jfjoch__pb2.PlotRequest.SerializeToString,
jfjoch__pb2.Plot.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+25 -14
View File
@@ -601,28 +601,39 @@ void JFJochReceiver::AddRadialIntegrationProfile(const std::vector<float> &resul
}
}
void JFJochReceiver::GetRadialIntegrationProfile(JFJochProtoBuf::ReceiverDataProcessingPlots &plots) {
void JFJochReceiver::GetRadialIntegrationProfile(JFJochProtoBuf::Plot &plot) {
std::unique_lock<std::mutex> ul(rad_int_profile_mutex);
auto plot = plots.mutable_radial_int_profile();
const auto &bin_to_q = rad_int_mapping->GetBinToQ();
if (!rad_int_profile.empty()) {
*plot->mutable_x() = {bin_to_q.begin(), bin_to_q.end()};
*plot->mutable_y() = {rad_int_profile.begin(), rad_int_profile.end()};
*plot.mutable_x() = {bin_to_q.begin(), bin_to_q.end()};
*plot.mutable_y() = {rad_int_profile.begin(), rad_int_profile.end()};
}
}
JFJochProtoBuf::ReceiverDataProcessingPlots JFJochReceiver::GetPlots() {
JFJochProtoBuf::ReceiverDataProcessingPlots ret;
auto local_data_processing_settings = GetDataProcessingSettings();
JFJochProtoBuf::Plot JFJochReceiver::GetPlots(const JFJochProtoBuf::PlotRequest &request) {
JFJochProtoBuf::Plot ret;
auto nbins = experiment.GetSpotFindingBin();
if (local_data_processing_settings.has_result_binning())
nbins = local_data_processing_settings.result_binning();
if (request.binning() > 0)
nbins = request.binning();
spot_count.GetPlot(*ret.mutable_spot_count(), nbins);
bkg_estimate.GetPlot(*ret.mutable_bkg_estimate(), nbins);
indexing_solution.GetPlot(*ret.mutable_indexing_rate(), nbins);
GetRadialIntegrationProfile(ret);
switch (request.type()) {
case JFJochProtoBuf::RAD_INT:
GetRadialIntegrationProfile(ret);
break;
case JFJochProtoBuf::SPOT_COUNT:
spot_count.GetPlot(ret, nbins);
break;
case JFJochProtoBuf::INDEXING_RATE:
indexing_solution.GetPlot(ret, nbins);
break;
case JFJochProtoBuf::BKG_ESTIMATE:
bkg_estimate.GetPlot(ret, nbins);
break;
default:
// Do nothing
break;
}
return ret;
}
+2 -2
View File
@@ -100,7 +100,7 @@ class JFJochReceiver {
JFJochProtoBuf::DataProcessingSettings GetDataProcessingSettings();
void AddRadialIntegrationProfile(const std::vector<float> &result);
void GetRadialIntegrationProfile(JFJochProtoBuf::ReceiverDataProcessingPlots &plots);
void GetRadialIntegrationProfile(JFJochProtoBuf::Plot &plots);
void UpdateMaxImage(int64_t image_number);
public:
@@ -122,7 +122,7 @@ public:
double GetIndexingRate() const;
void SetDataProcessingSettings(const JFJochProtoBuf::DataProcessingSettings &data_processing_settings);
JFJochProtoBuf::ReceiverDataProcessingPlots GetPlots();
JFJochProtoBuf::Plot GetPlots(const JFJochProtoBuf::PlotRequest& request);
};
#endif //JUNGFRAUJOCH_JFJOCHRECEIVER_H
+5 -3
View File
@@ -129,12 +129,14 @@ grpc::Status JFJochReceiverService::GetStatus(grpc::ServerContext *context, cons
}
grpc::Status
JFJochReceiverService::GetDataProcessingPlots(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request,
JFJochProtoBuf::ReceiverDataProcessingPlots *response) {
JFJochReceiverService::GetDataProcessingPlots(grpc::ServerContext *context, const JFJochProtoBuf::PlotRequest *request,
JFJochProtoBuf::Plot *response) {
// Need to hold mutex, as receiver might not exist here, if state is idle
std::unique_lock<std::mutex> ul(state_mutex);
if (request->binning() <= 0)
return {grpc::StatusCode::ABORTED, "Binning must be > 0"};
if (receiver)
*response = receiver->GetPlots();
*response = receiver->GetPlots(*request);
return grpc::Status::OK;
}
+2 -2
View File
@@ -47,8 +47,8 @@ public:
JFJochProtoBuf::PreviewFrame *response) override;
grpc::Status GetNetworkConfig(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request,
JFJochProtoBuf::ReceiverNetworkConfig *response) override;
grpc::Status GetDataProcessingPlots(grpc::ServerContext *context, const JFJochProtoBuf::Empty *request,
JFJochProtoBuf::ReceiverDataProcessingPlots *response) override;
grpc::Status GetDataProcessingPlots(grpc::ServerContext *context, const JFJochProtoBuf::PlotRequest *request,
JFJochProtoBuf::Plot *response) override;
};
+1 -13
View File
@@ -440,6 +440,7 @@ TEST_CASE("DiffractionExperiment_SpotFinding", "[DiffractionExperiment]") {
DiffractionExperiment x;
std::map<size_t, uint32_t> map, map2;
x.ImagesPerTrigger(10000).Summation(1).FrameTime(1ms);
REQUIRE(x.GetSpotFindingBin() == 200);
x.SpotFindingPeriod(0ms);
REQUIRE(x.GetSpotFindingStride() == 0);
REQUIRE(x.GetSpotFindingPeriod().count() == 0);
@@ -447,19 +448,6 @@ TEST_CASE("DiffractionExperiment_SpotFinding", "[DiffractionExperiment]") {
x.SpotFindingPeriod(1s);
REQUIRE(x.GetSpotFindingPeriod() == std::chrono::milliseconds(1000));
REQUIRE(x.GetSpotFindingStride() == 1000);
REQUIRE(x.GetSpotFindingBin() == 1);
x.SpotFindingPeriod(10s);
REQUIRE(x.GetSpotFindingBin() == 1);
x.SpotFindingPeriod(10ms);
REQUIRE(x.GetSpotFindingBin() == 100);
x.SpotFindingPeriod(4ms);
REQUIRE(x.GetSpotFindingBin() == 250);
x.SpotFindingPeriod(50ms);
REQUIRE(x.GetSpotFindingBin() == 20);
REQUIRE_THROWS(x.SpotFindingPeriod(-5ms));
+20 -6
View File
@@ -814,13 +814,27 @@ TEST_CASE("JFJochIntegrationTest_ZMQ_background_estimation", "[JFJochReceiver]")
REQUIRE_NOTHROW(state_machine.Stop());
logger.Info("Stopped measurement");
JFJochProtoBuf::ReceiverDataProcessingPlots plots;
REQUIRE(fpga_receiver.GetDataProcessingPlots(nullptr, nullptr, &plots).ok());
JFJochProtoBuf::PlotRequest req;
req.set_type(JFJochProtoBuf::BKG_ESTIMATE);
req.set_binning(10);
REQUIRE(plots.bkg_estimate().x_size() == 1);
REQUIRE(plots.bkg_estimate().y_size() == 1);
REQUIRE(plots.bkg_estimate().x(0) == Approx(4.5));
REQUIRE(plots.bkg_estimate().y(0) == Approx((5 + 23) / 2.0));
JFJochProtoBuf::Plot plot;
REQUIRE(fpga_receiver.GetDataProcessingPlots(nullptr, &req, &plot).ok());
REQUIRE(plot.x_size() == 1);
REQUIRE(plot.y_size() == 1);
REQUIRE(plot.x(0) == Approx(4.5));
REQUIRE(plot.y(0) == Approx((5 + 23) / 2.0));
req.set_type(JFJochProtoBuf::BKG_ESTIMATE);
req.set_binning(1);
REQUIRE(fpga_receiver.GetDataProcessingPlots(nullptr, &req, &plot).ok());
REQUIRE(plot.x_size() == 10);
REQUIRE(plot.y_size() == 10);
req.set_binning(0);
REQUIRE(!fpga_receiver.GetDataProcessingPlots(nullptr, &req, &plot).ok());
auto tmp = state_machine.GetMeasurementStatistics();
REQUIRE(tmp.has_value());
+8
View File
@@ -28,6 +28,14 @@ TEST_CASE("StatusVector_GetStatus","[StatusVector]") {
REQUIRE(status_out[3] == 0);
REQUIRE(status_out[4] == Approx(45));
REQUIRE(status_out[5] == Approx((44+41)/2.0));
status_out = status_vector.GetStatus(1);
REQUIRE(status_out.size() == 2601);
REQUIRE(status_out[5] == 11);
REQUIRE(status_out[1900] == 0);
REQUIRE(status_out[2000] == 45);
REQUIRE(status_out[2543] == 44);
REQUIRE(status_out[2600] == 41);
}
TEST_CASE("StatusVector_Plot","[StatusVector]") {