Source code for radionets.evaluation.pointsources

import numpy as np


[docs] def get_min_max(element, index): min_val = element[index, :][element[4, :] == 1.0].min() max_val = element[index, :][element[4, :] == 1.0].max() arg_max = np.argmax(element[index, :][element[4, :] == 1.0]) arg_min = np.argmin(element[index, :][element[4, :] == 1.0]) return min_val, max_val, arg_min, arg_max
[docs] def get_length_extended(element): """Identify the first and the last gaussian component in the extended source and compute the distance. Last, add the extension of the source to the length. Parameters ---------- element : ndarray array which contains all sources in the given image Returns ------- ndarray length of extended source """ x_min, x_max, arg_min_x, arg_max_x = get_min_max(element, 0) y_min, y_max, arg_min_y, arg_max_y = get_min_max(element, 1) sig_x_max = element[2, :][element[4, :] == 1.0][arg_max_x] sig_x_min = element[2, :][element[4, :] == 1.0][arg_min_x] sig_y_max = element[3, :][element[4, :] == 1.0][arg_max_y] sig_y_min = element[3, :][element[4, :] == 1.0][arg_min_y] # multiply with the factor for full width-half maximum extend_max = np.sqrt(sig_x_max**2 + sig_y_max**2) * 2.35 extend_min = np.sqrt(sig_x_min**2 + sig_y_min**2) * 2.35 # compute amount of vector laenge_x = (x_max - x_min) ** 2 laenge_y = (y_max - y_min) ** 2 laenge_extend = np.sqrt(laenge_x + laenge_y) + extend_max + extend_min return laenge_extend
[docs] def get_length_point(element): """Compute linear extend of pointsources. Parameters ---------- element : ndarray array which contains all sources in the given image Returns ------- ndarray lengths of the pointsources in the image """ laenge_y_point = element[3, :][element[4, :] == 0.0] * 2 laenge_x_point = element[2, :][element[4, :] == 0.0] * 2 laenge_point = np.max([laenge_x_point, laenge_y_point], axis=0) return laenge_point
[docs] def flux_comparison(pred, truth, source_list): fluxes_pred = [] fluxes_truth = [] sigs_x = [] sigs_y = [] laenge = np.array([]) for i, element in enumerate(source_list): mean_pred = np.array([]) mean_truth = np.array([]) for blob in element.T: y, x, sig_x, sig_y, mask = blob x_low = int(np.floor(x - sig_x)) if x_low < 0: x_low = 0 x_high = int(np.ceil(x + sig_x + 1)) if x_high > 63: x_high = 63 y_low = int(np.floor(y - sig_y)) if y_low < 0: y_low = 0 y_high = int(np.ceil(y + sig_y + 1)) if y_high > 63: y_high = 63 flux_truth = truth[i, int(x_low) : int(x_high), int(y_low) : int(y_high)] flux_pred = pred[i, int(x_low) : int(x_high), int(y_low) : int(y_high)] mean_pred = np.append(mean_pred, flux_pred.mean()) mean_truth = np.append(mean_truth, flux_truth.mean()) sigs_x.append(sig_x) sigs_y.append(sig_y) # sum over extended fluxes for truth and pred c = mean_pred[element[4, :] == 1.0].sum() mean_pred = np.append(mean_pred[element[4, :] == 0.0], c) c = mean_truth[element[4, :] == 1.0].sum() mean_truth = np.append(mean_truth[element[4, :] == 0.0], c) fluxes_pred.append(mean_pred) fluxes_truth.append(mean_truth) # append lengths for point and extended sources laenge_extend = get_length_extended(element) laenge_point = get_length_point(element) laenge = np.append(laenge, laenge_point) laenge = np.append(laenge, laenge_extend) return ( np.array(fluxes_pred, dtype="object"), np.array(fluxes_truth, dtype="object"), laenge, )