Skip to content

Commit dda01ce

Browse files
committed
Changed far_away in track_eddies
1 parent 19878e8 commit dda01ce

6 files changed

+580
-471
lines changed

make_eddy_track_AVISO.py

Lines changed: 41 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -138,23 +138,27 @@ def read_nc_att(self, varfile, varname, att):
138138
with Dataset(varfile) as nc:
139139
return eval(''.join(("nc.variables[varname].", att)))
140140

141-
def set_initial_indices(self, LONMIN, LONMAX, LATMIN, LATMAX):
141+
def set_initial_indices(self):
142142
"""
143-
Get indices for desired domain
143+
Set indices for desired domain
144144
"""
145+
LONMIN, LONMAX = self.LONMIN, self.LONMAX
146+
LATMIN, LATMAX = self.LATMIN, self.LATMAX
147+
145148
print '--- Setting initial indices to *%s* domain' % self.THE_DOMAIN
146149
print '------ LONMIN = %s, LONMAX = %s, LATMIN = %s, LATMAX = %s' % (
147150
LONMIN, LONMAX, LATMIN, LATMAX)
148-
self.i0, _ = self.nearest_point(LONMIN,
149-
LATMIN + 0.5 * (LATMAX - LATMIN))
150-
self.i1, _ = self.nearest_point(LONMAX,
151-
LATMIN + 0.5 * (LATMAX - LATMIN))
152-
_, self.j0 = self.nearest_point(LONMIN + 0.5 * (LONMAX - LONMIN),
153-
LATMIN)
154-
_, self.j1 = self.nearest_point(LONMIN + 0.5 * (LONMAX - LONMIN),
155-
LATMAX)
151+
LATMIN_OFFSET = LATMIN + (0.5 * (LATMAX - LATMIN))
152+
self.i0, _ = self.nearest_point(LONMIN, LATMIN_OFFSET)
153+
self.i1, _ = self.nearest_point(LONMAX, LATMIN_OFFSET)
154+
LONMIN_OFFSET = LONMIN + (0.5 * (LONMAX - LONMIN))
155+
_, self.j0 = self.nearest_point(LONMIN_OFFSET, LATMIN)
156+
_, self.j1 = self.nearest_point(LONMIN_OFFSET, LATMAX)
156157

157158
def kdt(lon, lat, limits, k=4):
159+
"""
160+
Make kde tree for indices if domain crosses zero meridian
161+
"""
158162
ppoints = np.array([lon.ravel(), lat.ravel()]).T
159163
ptree = spatial.cKDTree(ppoints)
160164
pindices = ptree.query(limits, k=k)[1]
@@ -463,6 +467,23 @@ def getEKE(self):
463467
self.eke[:] = self.u**2 + self.v**2
464468
self.eke *= 0.5
465469
return self
470+
471+
def set_interp_coeffs(self, sla, uspd):
472+
"""
473+
Won't work for rotated grid
474+
"""
475+
if 'AVISO' in self.PRODUCT:
476+
self.sla_coeffs = interpolate.RectBivariateSpline(
477+
self.lat()[:, 0], self.lon()[0], sla, kx=1, ky=1)
478+
self.uspd_coeffs = interpolate.RectBivariateSpline(
479+
self.lat()[:, 0], self.lon()[0], uspd, kx=1, ky=1)
480+
elif 'ROMS' in self.PRODUCT:
481+
points = np.array([self.lon().ravel(), self.lat().ravel()]).T
482+
self.sla_coeffs = interpolate.CloughTocher2DInterpolator(
483+
points, sla.ravel())
484+
self.uspd_coeffs = interpolate.CloughTocher2DInterpolator(
485+
points, uspd.ravel())
486+
return self
466487

467488

468489
class AvisoGrid (PyEddyTracker):
@@ -476,7 +497,7 @@ def __init__(self, AVISO_FILE, THE_DOMAIN, PRODUCT,
476497
Initialise the grid object
477498
"""
478499
super(AvisoGrid, self).__init__()
479-
print '\nInitialising the AVISO_grid'
500+
print '\nInitialising the *AVISO_grid*'
480501
self.THE_DOMAIN = THE_DOMAIN
481502
self.PRODUCT = PRODUCT
482503
self.LONMIN = LONMIN
@@ -515,8 +536,9 @@ def __init__(self, AVISO_FILE, THE_DOMAIN, PRODUCT,
515536
self.set_basemap(with_pad=with_pad)
516537
self.get_AVISO_f_pm_pn()
517538
self.set_u_v_eke()
518-
pad2 = 2 * self.pad
519-
self.shape = (self.f().shape[0] - pad2, self.f().shape[1] - pad2)
539+
self.shape = self.lon().shape
540+
#pad2 = 2 * self.pad
541+
#self.shape = (self.f().shape[0] - pad2, self.f().shape[1] - pad2)
520542

521543
def __getstate__(self):
522544
"""
@@ -758,16 +780,6 @@ def brypath(self, imin=0, imax=-1, jmin=0, jmax=-1):
758780
brypath = np.array([lon, lat]).T
759781
return path.Path(brypath)
760782

761-
def set_interp_coeffs(self, sla, uspd):
762-
"""
763-
Won't work for rotated grid
764-
"""
765-
self.sla_coeffs = interpolate.RectBivariateSpline(
766-
self.lat()[:, 0], self.lon()[0], sla, kx=1, ky=1)
767-
self.uspd_coeffs = interpolate.RectBivariateSpline(
768-
self.lat()[:, 0], self.lon()[0], uspd, kx=1, ky=1)
769-
return self
770-
771783
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
772784

773785
if __name__ == '__main__':
@@ -872,13 +884,12 @@ def set_interp_coeffs(self, sla, uspd):
872884
if 'SLA' in DIAGNOSTIC_TYPE:
873885
ZWL = np.atleast_1d(config['SMOOTHING_SLA']['ZWL'])
874886
MWL = np.atleast_1d(config['SMOOTHING_SLA']['MWL'])
875-
SMOOTHING_TYPE = config['SMOOTHING_SLA']['TYPE']
876887
elif 'Q' in DIAGNOSTIC_TYPE:
877888
SMOOTH_FAC = config['SMOOTHING_Q']['SMOOTH_FAC']
878-
SMOOTHING_TYPE = config['SMOOTHING_SLA']['TYPE']
879889
else:
880890
Exception
881-
891+
SMOOTHING_TYPE = config['SMOOTHING_SLA']['TYPE']
892+
882893
if 'Q' in DIAGNOSTIC_TYPE:
883894
AMP0 = 0.02 # vort/f
884895
elif 'SLA' in DIAGNOSTIC_TYPE:
@@ -925,7 +936,7 @@ def set_interp_coeffs(self, sla, uspd):
925936

926937
if 'Gaussian' in SMOOTHING_TYPE:
927938
# Get parameters for ndimage.gaussian_filter
928-
zres, mres = gaussian_resolution(sla_grd.get_resolution(),
939+
ZRES, MRES = gaussian_resolution(sla_grd.get_resolution(),
929940
ZWL, MWL)
930941

931942
fig = plt.figure(1)
@@ -940,10 +951,10 @@ def set_interp_coeffs(self, sla, uspd):
940951

941952
# Initialise two eddy objects to hold data
942953
#kwargs = config
943-
A_eddy = eddy_tracker.TrackList('AVISO', 'Anticyclonic', A_SAVEFILE,
954+
A_eddy = eddy_tracker.TrackList('Anticyclonic', A_SAVEFILE,
944955
sla_grd, search_ellipse, **config)
945956

946-
C_eddy = eddy_tracker.TrackList('AVISO', 'Cyclonic', C_SAVEFILE,
957+
C_eddy = eddy_tracker.TrackList('Cyclonic', C_SAVEFILE,
947958
sla_grd, search_ellipse, **config)
948959

949960
A_eddy.search_ellipse = search_ellipse
@@ -1022,7 +1033,7 @@ def set_interp_coeffs(self, sla, uspd):
10221033
np.place(sla, sla.data == sla_grd.FILLVAL, 0.)
10231034
# High pass filter, see
10241035
# http://stackoverflow.com/questions/6094957/high-pass-filter-for-image-processing-in-python-by-using-scipy-numpy
1025-
sla -= ndimage.gaussian_filter(sla, [mres, zres])
1036+
sla -= ndimage.gaussian_filter(sla, [MRES, ZRES])
10261037

10271038
elif 'Hanning' in SMOOTHING_TYPE:
10281039

@@ -1252,8 +1263,6 @@ def set_interp_coeffs(self, sla, uspd):
12521263
animax, animax_cbar)
12531264

12541265
# Save inactive eddies to nc file
1255-
# IMPORTANT: this must be done at every time step!!
1256-
#saving_START_TIME = time.time()
12571266
if not first_record:
12581267

12591268
if A_eddy.VERBOSE:

0 commit comments

Comments
 (0)