@@ -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