From 15d634bb8279f983c3ae930802b0c0938eac5add Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Tue, 30 Jul 2024 13:58:16 +0200 Subject: [PATCH] moved radial_integration algo out of work function --- dap/algos/__init__.py | 2 +- dap/algos/radprof.py | 46 +++++++++++++++++++++++++++++++++++++++++++ dap/worker.py | 45 +++--------------------------------------- 3 files changed, 50 insertions(+), 43 deletions(-) diff --git a/dap/algos/__init__.py b/dap/algos/__init__.py index 064c713..45f00c7 100644 --- a/dap/algos/__init__.py +++ b/dap/algos/__init__.py @@ -1,4 +1,4 @@ -from .radprof import prepare_radial_profile, radial_profile +from .radprof import calc_radial_integration diff --git a/dap/algos/radprof.py b/dap/algos/radprof.py index bad21f8..1796bac 100644 --- a/dap/algos/radprof.py +++ b/dap/algos/radprof.py @@ -1,6 +1,52 @@ import numpy as np +def calc_radial_integration(results, data, keep_pixels, pixel_mask_pf, center_radial_integration, r_radial_integration): + data_copy_1 = np.copy(data) + + if keep_pixels is None and pixel_mask_pf is not None: + keep_pixels = (pixel_mask_pf != 0) + if center_radial_integration is None: + center_radial_integration = [results["beam_center_x"], results["beam_center_y"]] + r_radial_integration = None + if r_radial_integration is None: + r_radial_integration, nr_radial_integration = prepare_radial_profile(data_copy_1, center_radial_integration, keep_pixels) + r_min_max = [int(np.min(r_radial_integration)), int(np.max(r_radial_integration)) + 1] + + + apply_threshold = results.get("apply_threshold", False) + + if apply_threshold and all(k in results for k in ("threshold_min", "threshold_max")): + threshold_min = float(results["threshold_min"]) + threshold_max = float(results["threshold_max"]) + data_copy_1[data_copy_1 < threshold_min] = np.nan + if threshold_max > threshold_min: + data_copy_1[data_copy_1 > threshold_max] = np.nan + + rp = radial_profile(data_copy_1, r_radial_integration, nr_radial_integration, keep_pixels) + + silent_region_min = results.get("radial_integration_silent_min", None) + silent_region_max = results.get("radial_integration_silent_max", None) + + if ( + silent_region_min is not None and + silent_region_max is not None and + silent_region_max > silent_region_min and + silent_region_min > r_min_max[0] and + silent_region_max < r_min_max[1] + ): + + integral_silent_region = np.sum(rp[silent_region_min:silent_region_max]) + rp = rp / integral_silent_region + results["radint_normalised"] = [silent_region_min, silent_region_max] + + results["radint_I"] = list(rp[r_min_max[0]:]) + results["radint_q"] = r_min_max + + return keep_pixels, center_radial_integration, r_radial_integration + + + def radial_profile(data, r, nr, keep_pixels=None): if keep_pixels is not None: tbin = np.bincount(r, data[keep_pixels].ravel()) diff --git a/dap/worker.py b/dap/worker.py index 066d0f9..d98a1c3 100644 --- a/dap/worker.py +++ b/dap/worker.py @@ -10,7 +10,7 @@ import numpy as np import zmq from peakfinder8_extension import peakfinder_8 -from algos import prepare_radial_profile, radial_profile +from algos import calc_radial_integration FLAGS = 0 @@ -250,51 +250,12 @@ def work(backend_address, accumulator_host, accumulator_port, visualisation_host results["saturated_pixels_x"] = saturated_pixels_coordinates[1].tolist() results["saturated_pixels_y"] = saturated_pixels_coordinates[0].tolist() + # pump probe analysis do_radial_integration = results.get("do_radial_integration", False) - if do_radial_integration: + keep_pixels, center_radial_integration, r_radial_integration = calc_radial_integration(results, data, keep_pixels, pixel_mask_pf, center_radial_integration, r_radial_integration) - data_copy_1 = np.copy(data) - - if keep_pixels is None and pixel_mask_pf is not None: - keep_pixels = pixel_mask_pf!=0 - if center_radial_integration is None: - center_radial_integration = [results["beam_center_x"], results["beam_center_y"]] - r_radial_integration = None - if r_radial_integration is None: - r_radial_integration, nr_radial_integration = prepare_radial_profile(data_copy_1, center_radial_integration, keep_pixels) - r_min_max = [int(np.min(r_radial_integration)), int(np.max(r_radial_integration)) + 1] - - - apply_threshold = results.get("apply_threshold", False) - - if apply_threshold and all(k in results for k in ("threshold_min", "threshold_max")): - threshold_min = float(results["threshold_min"]) - threshold_max = float(results["threshold_max"]) - data_copy_1[data_copy_1 < threshold_min] = np.nan - if threshold_max > threshold_min: - data_copy_1[data_copy_1 > threshold_max] = np.nan - - rp = radial_profile(data_copy_1, r_radial_integration, nr_radial_integration, keep_pixels) - - silent_region_min = results.get("radial_integration_silent_min", None) - silent_region_max = results.get("radial_integration_silent_max", None) - - if ( - silent_region_min is not None and - silent_region_max is not None and - silent_region_max > silent_region_min and - silent_region_min > r_min_max[0] and - silent_region_max < r_min_max[1] - ): - - integral_silent_region = np.sum(rp[silent_region_min:silent_region_max]) - rp = rp / integral_silent_region - results["radint_normalised"] = [silent_region_min, silent_region_max] - - results["radint_I"] = list(rp[r_min_max[0]:]) - results["radint_q"] = r_min_max #copy image to work with peakfinder, just in case d = np.copy(data)