import json from logging import getLogger from cam_server.pipeline.data_processing import functions from collections import deque _logger = getLogger(__name__) Nbg=10 bg = deque([],Nbg) #pattern = [1, 1, 1, 1, 0] pix_min = 750 pix_max = 1750 x_profile_BG = [] def _interpolate_row(y_known, x_known, x_interp): y_interp = np.interp(x_interp, x_known, y_known) return y_interp def find_edge(data, step_length=100, edge_type="rising", refinement=1): # refine data data_length = data.shape[0] refined_data = np.apply_along_axis( _interpolate_row, axis=0, arr=data, x_known=np.arange(data_length), x_interp=np.arange(0, data_length - 1, refinement), ) # prepare a step function and refine it step_waveform = np.ones(shape=(step_length,)) if edge_type == "rising": step_waveform[: int(step_length / 2)] = -1 elif edge_type == "falling": step_waveform[int(step_length / 2) :] = -1 step_waveform = np.interp( x=np.arange(0, step_length - 1, refinement), xp=np.arange(step_length), fp=step_waveform ) # find edges xcorr = np.apply_along_axis(np.correlate, 0, refined_data, v=step_waveform, mode="valid") edge_position = np.argmax(xcorr, axis=0).astype(float) * refinement xcorr_amplitude = np.amax(xcorr, axis=0) # correct edge_position for step_length edge_position += np.floor(step_length / 2) return {"edge_pos": edge_position, "xcorr": xcorr, "xcorr_ampl": xcorr_amplitude, "signal":data} def process_image(image, pulse_id, timestamp, x_axis, y_axis, parameters, bsdata=None): # Add return values return_value = dict() prefix = parameters["camera_name"]+":" #(min_value, max_value) = functions.get_min_max(image) (x_profile, y_profile) = functions.get_x_y_profile(image) # Could be also y_profile.sum() -> it should give the same result. # Add return values intensity = x_profile.sum() sig = x_profile / x_profile_BG -1 edge_pos= find_edge(sig[ pix_min : pix_max ])["edge_pos"] + pix_min xcorr= find_edge(sig[ pix_min : pix_max ])["xcorr"] #return_value[prefix+"min_value"] = min_value #return_value[prefix+"max_value"] = max_value return_value[prefix+"x_profile"] = x_profile return_value[prefix+"y_profile"] = y_profile return_value[prefix+"intensity"] = intensity return_value[prefix+"sig"] = sig return_value[prefix+"edge_pos"] = edge_pos return_value[prefix+"xcorr"] = xcorr return return_value