JFJochReceiver: Single preview, that can be switched to present all or indexed only results
This commit is contained in:
@@ -71,7 +71,7 @@ class DataProcessingPlots extends Component<MyProps, MyState> {
|
||||
render() {
|
||||
return <Paper style={{textAlign: 'center'}} sx={{ height: 630, width: "100%" }}>
|
||||
<Toolbar>
|
||||
<Grid container sx={{ minWidth: 450 }} >
|
||||
<Grid container sx={{ minWidth: 700 }} >
|
||||
<Tabs value={this.state.tab} onChange={this.tabsOnChange}>
|
||||
<Tab label="Indexing" value={1}/>
|
||||
<Tab label="Indexing/file" value={4} />
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React, {Component} from 'react';
|
||||
|
||||
import Paper from '@mui/material/Paper';
|
||||
import {Grid, Slider, Typography} from "@mui/material";
|
||||
import {Grid, Slider, Switch, Typography} from "@mui/material";
|
||||
import {handleErrors} from "./handleErrors";
|
||||
|
||||
type MyProps = {
|
||||
@@ -18,7 +18,8 @@ type MyState = {
|
||||
highResolutionLimit?: number | string,
|
||||
lowResolutionLimit?: number | string,
|
||||
bkgEstimateLowQ: number | string,
|
||||
bkgEstimateHighQ: number | string
|
||||
bkgEstimateHighQ: number | string,
|
||||
previewIndexedOnly: boolean
|
||||
},
|
||||
connection_error: boolean;
|
||||
}
|
||||
@@ -35,7 +36,8 @@ class DataProcessingSettings extends Component<MyProps, MyState> {
|
||||
localBkgSize: 5,
|
||||
highResolutionLimit: 2.5,
|
||||
bkgEstimateLowQ: 3,
|
||||
bkgEstimateHighQ: 5
|
||||
bkgEstimateHighQ: 5,
|
||||
previewIndexedOnly: false
|
||||
},
|
||||
connection_error: true
|
||||
}
|
||||
@@ -44,6 +46,7 @@ class DataProcessingSettings extends Component<MyProps, MyState> {
|
||||
super(props);
|
||||
this.addr = props.addr;
|
||||
}
|
||||
|
||||
putValues() {
|
||||
fetch(this.addr + 'data_processing/settings', {
|
||||
method: "PUT",
|
||||
@@ -52,6 +55,14 @@ class DataProcessingSettings extends Component<MyProps, MyState> {
|
||||
.catch(error => console.log(error) );
|
||||
}
|
||||
|
||||
putValues2(x: MyState) {
|
||||
fetch(this.addr + 'data_processing/settings', {
|
||||
method: "PUT",
|
||||
body: JSON.stringify(x.s)
|
||||
}).then(handleErrors)
|
||||
.catch(error => console.log(error) );
|
||||
}
|
||||
|
||||
getValues() {
|
||||
fetch(this.addr + 'data_processing/settings')
|
||||
.then(handleErrors)
|
||||
@@ -119,6 +130,12 @@ class DataProcessingSettings extends Component<MyProps, MyState> {
|
||||
this.putValues();
|
||||
}
|
||||
|
||||
previewIndexedToggle = (event: React.ChangeEvent<HTMLInputElement>) => {
|
||||
let x = this.state;
|
||||
x.s.previewIndexedOnly = event.target.checked;
|
||||
this.putValues2(x);
|
||||
}
|
||||
|
||||
render() {
|
||||
return <Paper style={{textAlign: 'center'}} sx={{ height: 630, width: '100%' }}>
|
||||
<Grid container spacing={0}>
|
||||
@@ -149,9 +166,13 @@ class DataProcessingSettings extends Component<MyProps, MyState> {
|
||||
onChange={this.setHighResolutionLimit}
|
||||
min={1} max={5} step={0.2} valueLabelDisplay="auto" />
|
||||
<br/>
|
||||
<Switch onChange={this.previewIndexedToggle} checked={this.state.s.previewIndexedOnly}
|
||||
disabled={this.state.connection_error}/>
|
||||
Preview only indexed frames <br/><br/>
|
||||
</Grid>
|
||||
<Grid item xs={1}/>
|
||||
|
||||
|
||||
</Grid>
|
||||
</Paper>
|
||||
}
|
||||
|
||||
@@ -421,6 +421,7 @@ message DataProcessingSettings {
|
||||
optional float low_resolution_limit = 7;
|
||||
float bkg_estimate_low_q = 8;
|
||||
float bkg_estimate_high_q = 9;
|
||||
bool preview_indexed_only = 10;
|
||||
}
|
||||
|
||||
message PreviewFrameSpot {
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -26,7 +26,6 @@ JFJochReceiver::JFJochReceiver(const JFJochProtoBuf::ReceiverInput &settings,
|
||||
Logger &in_logger, int64_t in_forward_and_sum_nthreads,
|
||||
int64_t in_send_buffer_count,
|
||||
ZMQPreviewPublisher* in_preview_publisher,
|
||||
ZMQPreviewPublisher* in_preview_publisher_indexed,
|
||||
const NUMAHWPolicy &in_numa_policy) :
|
||||
experiment(settings.jungfraujoch_settings()),
|
||||
acquisition_device(in_aq_device),
|
||||
@@ -35,7 +34,6 @@ JFJochReceiver::JFJochReceiver(const JFJochProtoBuf::ReceiverInput &settings,
|
||||
frame_transformation_nthreads((experiment.GetSummation() >= threaded_summation_threshold) ?
|
||||
2 : in_forward_and_sum_nthreads),
|
||||
preview_publisher(in_preview_publisher),
|
||||
preview_publisher_indexed(in_preview_publisher_indexed),
|
||||
ndatastreams(experiment.GetDataStreamsNum()),
|
||||
data_acquisition_ready(ndatastreams),
|
||||
frame_transformation_ready((experiment.GetImageNum() > 0) ? frame_transformation_nthreads : 0),
|
||||
@@ -86,8 +84,6 @@ JFJochReceiver::JFJochReceiver(const JFJochProtoBuf::ReceiverInput &settings,
|
||||
if (experiment.GetDetectorMode() == DetectorMode::Conversion) {
|
||||
if (preview_publisher != nullptr)
|
||||
preview_publisher->Start(experiment, calib.value());
|
||||
if (preview_publisher_indexed != nullptr)
|
||||
preview_publisher_indexed->Start(experiment, calib.value());
|
||||
|
||||
if (!GPUImageAnalysis::GPUPresent())
|
||||
logger.Info("GPU support missing");
|
||||
@@ -442,12 +438,9 @@ void JFJochReceiver::FrameTransformationThread() {
|
||||
message.exptime_base = 10*1000*1000;
|
||||
message.indexing_result = 0;
|
||||
|
||||
bool indexed = false;
|
||||
bool send_preview = false;
|
||||
bool calculate_spots = false;
|
||||
|
||||
if ((preview_publisher != nullptr) && (preview_stride > 0) && (image_number % preview_stride == 0))
|
||||
send_preview = true;
|
||||
|
||||
bool send_image = false; // We send image if at least one module was collected in full
|
||||
|
||||
std::unique_ptr<RadialIntegrationProfile> rad_int_profile_image;
|
||||
@@ -547,10 +540,7 @@ void JFJochReceiver::FrameTransformationThread() {
|
||||
for (int i = 0; i < recip.size(); i++)
|
||||
message.spots[i].indexed = indexer_result[0].indexed_spots[i];
|
||||
indexer_result[0].l.Save(message.indexing_lattice);
|
||||
if (preview_publisher_indexed)
|
||||
preview_publisher_indexed->Publish(experiment,
|
||||
transformation.GetPreview16BitImage(),
|
||||
message);
|
||||
indexed = true;
|
||||
} else {
|
||||
message.indexing_result = 1;
|
||||
indexing_solution.AddElement(image_number, 0);
|
||||
@@ -575,7 +565,7 @@ void JFJochReceiver::FrameTransformationThread() {
|
||||
*rad_int_profile_per_file[image_number % experiment.GetDataFileCount()] += *rad_int_profile_image;
|
||||
}
|
||||
|
||||
if (send_preview)
|
||||
if (preview_publisher && (!local_data_processing_settings.preview_indexed_only() || indexed))
|
||||
preview_publisher->Publish(experiment,
|
||||
transformation.GetPreview16BitImage(),
|
||||
message);
|
||||
@@ -727,9 +717,6 @@ void JFJochReceiver::FinalizeMeasurement() {
|
||||
if (preview_publisher != nullptr)
|
||||
preview_publisher->Stop(experiment);
|
||||
|
||||
if (preview_publisher_indexed != nullptr)
|
||||
preview_publisher_indexed->Stop(experiment);
|
||||
|
||||
for (int d = 0; d < ndatastreams; d++)
|
||||
acquisition_device[d]->Cancel();
|
||||
|
||||
|
||||
@@ -59,7 +59,6 @@ class JFJochReceiver {
|
||||
ThreadSafeFIFO<uint64_t> images_to_go;
|
||||
|
||||
ZMQPreviewPublisher *preview_publisher = nullptr;
|
||||
ZMQPreviewPublisher* preview_publisher_indexed = nullptr;
|
||||
|
||||
ImagePusher &image_pusher;
|
||||
bool push_images_to_writer;
|
||||
@@ -131,7 +130,6 @@ public:
|
||||
Logger &logger, int64_t forward_and_sum_nthreads,
|
||||
int64_t send_buffer_count,
|
||||
ZMQPreviewPublisher* preview_publisher,
|
||||
ZMQPreviewPublisher* preview_publisher_indexed,
|
||||
const NUMAHWPolicy &numa_policy);
|
||||
~JFJochReceiver();
|
||||
JFJochReceiver(const JFJochReceiver &other) = delete;
|
||||
|
||||
@@ -21,8 +21,7 @@ grpc::Status JFJochReceiverService::Start(grpc::ServerContext *context, const JF
|
||||
receiver.reset();
|
||||
receiver = std::make_unique<JFJochReceiver>(*request, aq_devices, image_pusher,
|
||||
logger, nthreads, send_buffer_count,
|
||||
preview_publisher, preview_publisher_indexed,
|
||||
numa_policy);
|
||||
preview_publisher, numa_policy);
|
||||
try {
|
||||
// Don't want to stop
|
||||
receiver->SetDataProcessingSettings(data_processing_settings);
|
||||
@@ -114,11 +113,6 @@ JFJochReceiverService& JFJochReceiverService::PreviewPublisher(ZMQPreviewPublish
|
||||
return *this;
|
||||
}
|
||||
|
||||
JFJochReceiverService& JFJochReceiverService::PreviewPublisherIndexed(ZMQPreviewPublisher *in_preview_writer) {
|
||||
preview_publisher_indexed = in_preview_writer;
|
||||
return *this;
|
||||
}
|
||||
|
||||
JFJochReceiverService &JFJochReceiverService::NUMAPolicy(const NUMAHWPolicy &policy) {
|
||||
numa_policy = policy;
|
||||
return *this;
|
||||
|
||||
@@ -19,7 +19,6 @@ class JFJochReceiverService final : public JFJochProtoBuf::gRPC_JFJochReceiver::
|
||||
|
||||
ImagePusher &image_pusher;
|
||||
ZMQPreviewPublisher *preview_publisher = nullptr;
|
||||
ZMQPreviewPublisher *preview_publisher_indexed = nullptr;
|
||||
int64_t nthreads = 8;
|
||||
|
||||
int64_t send_buffer_count = 32;
|
||||
@@ -35,7 +34,6 @@ public:
|
||||
JFJochReceiverService(std::vector<AcquisitionDevice *> &open_capi_device,
|
||||
Logger &logger, ImagePusher &pusher);
|
||||
JFJochReceiverService& PreviewPublisher(ZMQPreviewPublisher *in_preview_writer);
|
||||
JFJochReceiverService& PreviewPublisherIndexed(ZMQPreviewPublisher *in_preview_writer);
|
||||
JFJochReceiverService& NumThreads(int64_t input);
|
||||
JFJochReceiverService& SendBufferCount(int64_t input);
|
||||
JFJochReceiverService& NUMAPolicy(const NUMAHWPolicy& policy);
|
||||
|
||||
@@ -152,12 +152,6 @@ int main(int argc, char **argv) {
|
||||
logger.Info("Preview available on ZMQ addr " + input["preview_zmq_addr"].get<std::string>());
|
||||
}
|
||||
|
||||
if (input.contains("preview_indexed_zmq_addr")) {
|
||||
preview_indexed = std::make_unique<ZMQPreviewPublisher>(context, input["preview_indexed_zmq_addr"]);
|
||||
service.PreviewPublisherIndexed(preview_indexed.get());
|
||||
logger.Info("Preview available for indexed frames on ZMQ addr " + input["preview_indexed_zmq_addr"].get<std::string>());
|
||||
}
|
||||
|
||||
if (input.contains("compression_threads")) {
|
||||
service.NumThreads(input["compression_threads"].get<int64_t>());
|
||||
logger.Info("Compression threads {}", input["compression_threads"].get<int64_t>());
|
||||
|
||||
Reference in New Issue
Block a user