diff --git a/src/lib/convex_hull.py b/src/lib/convex_hull.py index 7cdfcd8..5e576fe 100755 --- a/src/lib/convex_hull.py +++ b/src/lib/convex_hull.py @@ -270,7 +270,7 @@ def del_aligned(s, Omega): # Implement Graham algorithm -def convex_hull(A): +def convex_hull(H): """ Implement Graham algorithm to find the convex hull of a given list of points, handling aligned points. @@ -283,17 +283,20 @@ def convex_hull(A): List of points defining the convex hull of the input list A. """ S = empty_stack() - Omega = min_lexico(A) - sort_angles_distances(Omega, A) - A = del_aligned(A, Omega) - stack(S, A[0]) - stack(S, A[1]) - stack(S, A[2]) - for i in range(3, len(A)): - while pseudo_angle(stack_sub_top(S), stack_top(S), A[i]) <= 0: - unstack(S) - stack(S, A[i]) - return S + Omega = min_lexico(H) + sort_angles_distances(Omega, H) + A = del_aligned(H, Omega) + if len(A) < 3: + return H + else: + stack(S, A[0]) + stack(S, A[1]) + stack(S, A[2]) + for i in range(3, len(A)): + while pseudo_angle(stack_sub_top(S), stack_top(S), A[i]) <= 0: + unstack(S) + stack(S, A[i]) + return S def image_hull(image, step=5, null_val=0., inside=True): @@ -328,25 +331,24 @@ def image_hull(image, step=5, null_val=0., inside=True): H = [] shape = np.array(image.shape) row, col = np.indices(shape) - for i in range(0, shape[0], step): - r = row[i, :][image[i, :] > null_val] - c = col[i, :][image[i, :] > null_val] - if len(r) > 1 and len(c) > 1: - H.append((r[0], c[0])) - H.append((r[-1], c[-1])) - for j in range(0, shape[1], step): - r = row[:, j][image[:, j] > null_val] - c = col[:, j][image[:, j] > null_val] - if len(r) > 1 and len(c) > 1: - if not ((r[0], c[0]) in H): - H.append((r[0], c[0])) - if not ((r[-1], c[-1]) in H): - H.append((r[-1], c[-1])) + for i in range(0, int(min(shape)/2), step): + r1, r2 = row[i, :][image[i, :] > null_val], row[-i, :][image[-i, :] > null_val] + c1, c2 = col[i, :][image[i, :] > null_val], col[-i, :][image[-i, :] > null_val] + if r1.shape[0] > 1: + H.append((r1[0], c1[0])) + H.append((r1[-1], c1[-1])) + if r2.shape[0] > 1: + H.append((r2[0], c2[0])) + H.append((r2[-1], c2[-1])) S = np.array(convex_hull(H)) x_min, y_min = S[:, 0] < S[:, 0].mean(), S[:, 1] < S[:, 1].mean() x_max, y_max = S[:, 0] > S[:, 0].mean(), S[:, 1] > S[:, 1].mean() # Get the 4 extrema + # S0 = S[x_min*y_min][np.argmin(S[x_min*y_min][:, 0])] + # S1 = S[x_min*y_max][np.argmax(S[x_min*y_max][:, 1])] + # S2 = S[x_max*y_min][np.argmin(S[x_max*y_min][:, 1])] + # S3 = S[x_max*y_max][np.argmax(S[x_max*y_max][:, 0])] S0 = S[x_min*y_min][np.abs(0-S[x_min*y_min].sum(axis=1)).min() == np.abs(0-S[x_min*y_min].sum(axis=1))][0] S1 = S[x_min*y_max][np.abs(shape[1]-S[x_min*y_max].sum(axis=1)).min() == np.abs(shape[1]-S[x_min*y_max].sum(axis=1))][0] S2 = S[x_max*y_min][np.abs(shape[0]-S[x_max*y_min].sum(axis=1)).min() == np.abs(shape[0]-S[x_max*y_min].sum(axis=1))][0] diff --git a/src/lib/fits.py b/src/lib/fits.py index ec90801..8f9b389 100755 --- a/src/lib/fits.py +++ b/src/lib/fits.py @@ -14,7 +14,6 @@ from os.path import join as path_join from astropy.io import fits from astropy.wcs import WCS from lib.convex_hull import clean_ROI -from lib.utils import princ_angle def get_obs_data(infiles, data_folder="", compute_flux=False): diff --git a/src/lib/reduction.py b/src/lib/reduction.py index 8d46219..2c194b4 100755 --- a/src/lib/reduction.py +++ b/src/lib/reduction.py @@ -442,11 +442,11 @@ def get_error(data_array, headers, error_array=None, data_mask=None, sub_type=No Returns: data_array : numpy.ndarray Array containing the data to study minus the background. - headers : header list - Updated headers associated with the images in data_array. error_array : numpy.ndarray Array containing the background values associated to the images in data_array. + headers : header list + Updated headers associated with the images in data_array. background : numpy.ndarray Array containing the pixel background value for each image in data_array.