@@ -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
468489class 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 '\n Initialising the AVISO_grid'
500+ print '\n Initialising 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
773785if __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