moved peakfinder_analysis out of work function
This commit is contained in:
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
from .radprof import calc_radial_integration
|
from .radprof import calc_radial_integration
|
||||||
from .addmask import calc_apply_additional_mask
|
from .addmask import calc_apply_additional_mask
|
||||||
|
from .peakfind import calc_peakfinder_analysis
|
||||||
|
|
||||||
|
|
||||||
|
63
dap/algos/peakfind.py
Normal file
63
dap/algos/peakfind.py
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
from copy import copy
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
from peakfinder8_extension import peakfinder_8
|
||||||
|
|
||||||
|
|
||||||
|
def calc_peakfinder_analysis(results, pfdata, pixel_mask_pf):
|
||||||
|
x_beam = results["beam_center_x"] - 0.5 # to coordinates where position of first pixel/point is 0.5, 0.5
|
||||||
|
y_beam = results["beam_center_y"] - 0.5 # to coordinates where position of first pixel/point is 0.5, 0.5
|
||||||
|
hitfinder_min_snr = results["hitfinder_min_snr"]
|
||||||
|
hitfinder_min_pix_count = int(results["hitfinder_min_pix_count"])
|
||||||
|
hitfinder_adc_thresh = results["hitfinder_adc_thresh"]
|
||||||
|
|
||||||
|
asic_ny, asic_nx = pfdata.shape
|
||||||
|
nasics_y, nasics_x = 1, 1
|
||||||
|
hitfinder_max_pix_count = 100
|
||||||
|
max_num_peaks = 10000
|
||||||
|
|
||||||
|
# usually don't need to change this value, rather robust
|
||||||
|
hitfinder_local_bg_radius= 20.
|
||||||
|
|
||||||
|
# in case of further modification with the mask, make a new one, independent from real mask
|
||||||
|
maskPr = np.copy(pixel_mask_pf)
|
||||||
|
|
||||||
|
y, x = np.indices(pfdata.shape)
|
||||||
|
pix_r = np.sqrt((x-x_beam)**2 + (y-y_beam)**2)
|
||||||
|
|
||||||
|
peak_list_x, peak_list_y, peak_list_value = peakfinder_8(
|
||||||
|
max_num_peaks,
|
||||||
|
pfdata.astype(np.float32),
|
||||||
|
maskPr.astype(np.int8),
|
||||||
|
pix_r.astype(np.float32),
|
||||||
|
asic_nx, asic_ny,
|
||||||
|
nasics_x, nasics_y,
|
||||||
|
hitfinder_adc_thresh,
|
||||||
|
hitfinder_min_snr,
|
||||||
|
hitfinder_min_pix_count,
|
||||||
|
hitfinder_max_pix_count,
|
||||||
|
hitfinder_local_bg_radius
|
||||||
|
)
|
||||||
|
|
||||||
|
number_of_spots = len(peak_list_x)
|
||||||
|
results["number_of_spots"] = number_of_spots
|
||||||
|
if number_of_spots != 0:
|
||||||
|
results["spot_x"] = [-1.0] * number_of_spots
|
||||||
|
results["spot_y"] = [-1.0] * number_of_spots
|
||||||
|
results["spot_intensity"] = copy(peak_list_value)
|
||||||
|
for i in range(number_of_spots):
|
||||||
|
results["spot_x"][i] = peak_list_x[i] + 0.5
|
||||||
|
results["spot_y"][i] = peak_list_y[i] + 0.5
|
||||||
|
else:
|
||||||
|
results["spot_x"] = []
|
||||||
|
results["spot_y"] = []
|
||||||
|
results["spot_intensity"] = []
|
||||||
|
|
||||||
|
npeaks_threshold_hit = results.get("npeaks_threshold_hit", 15)
|
||||||
|
|
||||||
|
if number_of_spots >= npeaks_threshold_hit:
|
||||||
|
results["is_hit_frame"] = True
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -6,9 +6,8 @@ from time import sleep
|
|||||||
|
|
||||||
import jungfrau_utils as ju
|
import jungfrau_utils as ju
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from peakfinder8_extension import peakfinder_8
|
|
||||||
|
|
||||||
from algos import calc_radial_integration, calc_apply_additional_mask
|
from algos import calc_radial_integration, calc_apply_additional_mask, calc_peakfinder_analysis
|
||||||
from zmqsocks import ZMQSockets
|
from zmqsocks import ZMQSockets
|
||||||
from utils import json_load, read_bit
|
from utils import json_load, read_bit
|
||||||
|
|
||||||
@ -246,60 +245,9 @@ def work(backend_address, accumulator_host, accumulator_port, visualisation_host
|
|||||||
# in case all needed parameters are present, make peakfinding
|
# in case all needed parameters are present, make peakfinding
|
||||||
do_peakfinder_analysis = results.get("do_peakfinder_analysis", False)
|
do_peakfinder_analysis = results.get("do_peakfinder_analysis", False)
|
||||||
if do_peakfinder_analysis and pixel_mask_pf is not None and all(k in results for k in ("beam_center_x", "beam_center_y", "hitfinder_min_snr", "hitfinder_min_pix_count", "hitfinder_adc_thresh")):
|
if do_peakfinder_analysis and pixel_mask_pf is not None and all(k in results for k in ("beam_center_x", "beam_center_y", "hitfinder_min_snr", "hitfinder_min_pix_count", "hitfinder_adc_thresh")):
|
||||||
x_beam = results["beam_center_x"] - 0.5 # to coordinates where position of first pixel/point is 0.5, 0.5
|
calc_peakfinder_analysis(results, pfdata, pixel_mask_pf)
|
||||||
y_beam = results["beam_center_y"] - 0.5 # to coordinates where position of first pixel/point is 0.5, 0.5
|
|
||||||
hitfinder_min_snr = results["hitfinder_min_snr"]
|
|
||||||
hitfinder_min_pix_count = int(results["hitfinder_min_pix_count"])
|
|
||||||
hitfinder_adc_thresh = results["hitfinder_adc_thresh"]
|
|
||||||
|
|
||||||
asic_ny, asic_nx = pfdata.shape
|
|
||||||
nasics_y, nasics_x = 1, 1
|
|
||||||
hitfinder_max_pix_count = 100
|
|
||||||
max_num_peaks = 10000
|
|
||||||
|
|
||||||
# usually don't need to change this value, rather robust
|
|
||||||
hitfinder_local_bg_radius= 20.
|
|
||||||
|
|
||||||
# in case of further modification with the mask, make a new one, independent from real mask
|
|
||||||
maskPr = np.copy(pixel_mask_pf)
|
|
||||||
|
|
||||||
y, x = np.indices(pfdata.shape)
|
|
||||||
pix_r = np.sqrt((x-x_beam)**2 + (y-y_beam)**2)
|
|
||||||
|
|
||||||
peak_list_x, peak_list_y, peak_list_value = peakfinder_8(
|
|
||||||
max_num_peaks,
|
|
||||||
pfdata.astype(np.float32),
|
|
||||||
maskPr.astype(np.int8),
|
|
||||||
pix_r.astype(np.float32),
|
|
||||||
asic_nx, asic_ny,
|
|
||||||
nasics_x, nasics_y,
|
|
||||||
hitfinder_adc_thresh,
|
|
||||||
hitfinder_min_snr,
|
|
||||||
hitfinder_min_pix_count,
|
|
||||||
hitfinder_max_pix_count,
|
|
||||||
hitfinder_local_bg_radius
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
number_of_spots = len(peak_list_x)
|
|
||||||
results["number_of_spots"] = number_of_spots
|
|
||||||
if number_of_spots != 0:
|
|
||||||
results["spot_x"] = [-1.0] * number_of_spots
|
|
||||||
results["spot_y"] = [-1.0] * number_of_spots
|
|
||||||
results["spot_intensity"] = copy(peak_list_value)
|
|
||||||
for i in range(number_of_spots):
|
|
||||||
results["spot_x"][i] = peak_list_x[i] + 0.5
|
|
||||||
results["spot_y"][i] = peak_list_y[i] + 0.5
|
|
||||||
else:
|
|
||||||
results["spot_x"] = []
|
|
||||||
results["spot_y"] = []
|
|
||||||
results["spot_intensity"] = []
|
|
||||||
|
|
||||||
npeaks_threshold_hit = results.get("npeaks_threshold_hit", 15)
|
|
||||||
|
|
||||||
if number_of_spots >= npeaks_threshold_hit:
|
|
||||||
results["is_hit_frame"] = True
|
|
||||||
|
|
||||||
|
# ???
|
||||||
forceSendVisualisation = False
|
forceSendVisualisation = False
|
||||||
if data.dtype != np.uint16:
|
if data.dtype != np.uint16:
|
||||||
apply_threshold = results.get("apply_threshold", False)
|
apply_threshold = results.get("apply_threshold", False)
|
||||||
|
Reference in New Issue
Block a user