Skip to content

Commit e38a714

Browse files
author
jk-rieck
authored
Merge pull request #27 from jk-rieck/26-detection-of-horseshoe-shapes-needs-refinement
26 detection of horseshoe shapes needs refinement
2 parents edf388d + 18952b1 commit e38a714

File tree

1 file changed

+44
-13
lines changed

1 file changed

+44
-13
lines changed

eddytools/detection.py

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -377,18 +377,20 @@ def detect_OW_core(data, det_param, OW, vort, t, OW_thr, e1f, e2f,
377377
del eddi[e]
378378
continue
379379
if (det_param['no_long'] or det_param['no_two']):
380-
min_width = int(np.around(np.sqrt(region_Npix / np.pi)))
380+
min_width = int(np.floor(np.sqrt(region_Npix / np.pi)))
381381
X_cen = int(np.around(np.mean(index[1])))
382382
Y_cen = int(np.around(np.mean(index[0])))
383383
if det_param['no_two']:
384384
if len(np.shape(data[det_param['OW_thr_name']])) > 1:
385385
peak_thr = OW_thr.values[interior].mean()
386386
else:
387387
peak_thr = OW_thr
388-
X_peaks = len(find_peaks(-OW.isel(time=t).values[Y_cen,
389-
iimin:iimax], height=-peak_thr)[0])
390-
Y_peaks = len(find_peaks(-OW.isel(time=t).values[ijmin:ijmax,
391-
X_cen], height=-peak_thr)[0])
388+
X_peak_info = find_peaks(-OW.isel(time=t).values[Y_cen,
389+
iimin:iimax], height=-peak_thr)
390+
Y_peak_info = find_peaks(-OW.isel(time=t).values[ijmin:ijmax,
391+
X_cen], height=-peak_thr)
392+
X_peaks = len(X_peak_info[0])
393+
Y_peaks = len(Y_peak_info[0])
392394
if ((X_peaks > 1) | (Y_peaks > 1)):
393395
Ypix_cen1 = get_width(OW.isel(time=t).values[ijmin:ijmax,
394396
X_cen], peak_thr)
@@ -398,14 +400,43 @@ def detect_OW_core(data, det_param, OW, vort, t, OW_thr, e1f, e2f,
398400
iimin:iimax], peak_thr)
399401
Xpix_cen2 = get_width(OW.isel(time=t).values[Y_cen,
400402
iimax-1:iimin2:-1], peak_thr)
401-
eddy_no_horseshoe = (((Xpix_cen1 > min_width)
402-
& (Ypix_cen1 > min_width)) |
403-
((Xpix_cen2 > min_width)
404-
& (Ypix_cen2 > min_width)) |
405-
((Xpix_cen2 > min_width)
406-
& (Ypix_cen1 > min_width)) |
407-
((Xpix_cen1 > min_width)
408-
& (Ypix_cen2 > min_width)))
403+
tmp_no_horseshoe = (((Xpix_cen1 > min_width)
404+
& (Ypix_cen1 > min_width)) |
405+
((Xpix_cen2 > min_width)
406+
& (Ypix_cen2 > min_width)) |
407+
((Xpix_cen2 > min_width)
408+
& (Ypix_cen1 > min_width)) |
409+
((Xpix_cen1 > min_width)
410+
& (Ypix_cen2 > min_width)))
411+
if (X_peaks > 1):
412+
X_peak1 = iimin + X_peak_info[0][0]
413+
X_peak2 = iimin + X_peak_info[0][1]
414+
Xmin = -np.max(X_peak_info[1]['peak_heights'])
415+
Xmax = np.max(OW.isel(time=t).values[Y_cen,
416+
X_peak1:X_peak2])
417+
Xdiff = Xmin - Xmax
418+
Xpix_ratio = Xpix_cen1 / Xpix_cen2
419+
if ((Xpix_ratio > 2.5) | (Xpix_ratio < 0.4)):
420+
Xdiff = 0
421+
else:
422+
Xdiff = 0
423+
Xmin = 1
424+
if (Y_peaks > 1):
425+
Y_peak1 = ijmin + Y_peak_info[0][0]
426+
Y_peak2 = ijmin + Y_peak_info[0][1]
427+
Ymin = -np.max(Y_peak_info[1]['peak_heights'])
428+
Ymax = np.max(OW.isel(time=t).values[Y_peak1:Y_peak2,
429+
X_cen])
430+
Ydiff = Ymin - Ymax
431+
Ypix_ratio = Ypix_cen1 / Ypix_cen2
432+
if ((Ypix_ratio > 2.5) | (Ypix_ratio < 0.4)):
433+
Ydiff = 0
434+
else:
435+
Ydiff = 0
436+
Ymin = 1
437+
Xdiff_small = np.abs(Xdiff) < 0.75 * np.abs(Xmin)
438+
Ydiff_small = np.abs(Ydiff) < 0.75 * np.abs(Ymin)
439+
eddy_no_horseshoe = tmp_no_horseshoe & Xdiff_small & Ydiff_small
409440
else:
410441
eddy_no_horseshoe = True
411442
else:

0 commit comments

Comments
 (0)