@@ -138,23 +138,27 @@ def read_nc_att(self, varfile, varname, att):
138
138
with Dataset (varfile ) as nc :
139
139
return eval ('' .join (("nc.variables[varname]." , att )))
140
140
141
- def set_initial_indices (self , LONMIN , LONMAX , LATMIN , LATMAX ):
141
+ def set_initial_indices (self ):
142
142
"""
143
- Get indices for desired domain
143
+ Set indices for desired domain
144
144
"""
145
+ LONMIN , LONMAX = self .LONMIN , self .LONMAX
146
+ LATMIN , LATMAX = self .LATMIN , self .LATMAX
147
+
145
148
print '--- Setting initial indices to *%s* domain' % self .THE_DOMAIN
146
149
print '------ LONMIN = %s, LONMAX = %s, LATMIN = %s, LATMAX = %s' % (
147
150
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 )
156
157
157
158
def kdt (lon , lat , limits , k = 4 ):
159
+ """
160
+ Make kde tree for indices if domain crosses zero meridian
161
+ """
158
162
ppoints = np .array ([lon .ravel (), lat .ravel ()]).T
159
163
ptree = spatial .cKDTree (ppoints )
160
164
pindices = ptree .query (limits , k = k )[1 ]
@@ -463,6 +467,23 @@ def getEKE(self):
463
467
self .eke [:] = self .u ** 2 + self .v ** 2
464
468
self .eke *= 0.5
465
469
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
466
487
467
488
468
489
class AvisoGrid (PyEddyTracker ):
@@ -476,7 +497,7 @@ def __init__(self, AVISO_FILE, THE_DOMAIN, PRODUCT,
476
497
Initialise the grid object
477
498
"""
478
499
super (AvisoGrid , self ).__init__ ()
479
- print '\n Initialising the AVISO_grid'
500
+ print '\n Initialising the * AVISO_grid* '
480
501
self .THE_DOMAIN = THE_DOMAIN
481
502
self .PRODUCT = PRODUCT
482
503
self .LONMIN = LONMIN
@@ -515,8 +536,9 @@ def __init__(self, AVISO_FILE, THE_DOMAIN, PRODUCT,
515
536
self .set_basemap (with_pad = with_pad )
516
537
self .get_AVISO_f_pm_pn ()
517
538
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)
520
542
521
543
def __getstate__ (self ):
522
544
"""
@@ -758,16 +780,6 @@ def brypath(self, imin=0, imax=-1, jmin=0, jmax=-1):
758
780
brypath = np .array ([lon , lat ]).T
759
781
return path .Path (brypath )
760
782
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
-
771
783
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
772
784
773
785
if __name__ == '__main__' :
@@ -872,13 +884,12 @@ def set_interp_coeffs(self, sla, uspd):
872
884
if 'SLA' in DIAGNOSTIC_TYPE :
873
885
ZWL = np .atleast_1d (config ['SMOOTHING_SLA' ]['ZWL' ])
874
886
MWL = np .atleast_1d (config ['SMOOTHING_SLA' ]['MWL' ])
875
- SMOOTHING_TYPE = config ['SMOOTHING_SLA' ]['TYPE' ]
876
887
elif 'Q' in DIAGNOSTIC_TYPE :
877
888
SMOOTH_FAC = config ['SMOOTHING_Q' ]['SMOOTH_FAC' ]
878
- SMOOTHING_TYPE = config ['SMOOTHING_SLA' ]['TYPE' ]
879
889
else :
880
890
Exception
881
-
891
+ SMOOTHING_TYPE = config ['SMOOTHING_SLA' ]['TYPE' ]
892
+
882
893
if 'Q' in DIAGNOSTIC_TYPE :
883
894
AMP0 = 0.02 # vort/f
884
895
elif 'SLA' in DIAGNOSTIC_TYPE :
@@ -925,7 +936,7 @@ def set_interp_coeffs(self, sla, uspd):
925
936
926
937
if 'Gaussian' in SMOOTHING_TYPE :
927
938
# Get parameters for ndimage.gaussian_filter
928
- zres , mres = gaussian_resolution (sla_grd .get_resolution (),
939
+ ZRES , MRES = gaussian_resolution (sla_grd .get_resolution (),
929
940
ZWL , MWL )
930
941
931
942
fig = plt .figure (1 )
@@ -940,10 +951,10 @@ def set_interp_coeffs(self, sla, uspd):
940
951
941
952
# Initialise two eddy objects to hold data
942
953
#kwargs = config
943
- A_eddy = eddy_tracker .TrackList ('AVISO' , ' Anticyclonic' , A_SAVEFILE ,
954
+ A_eddy = eddy_tracker .TrackList ('Anticyclonic' , A_SAVEFILE ,
944
955
sla_grd , search_ellipse , ** config )
945
956
946
- C_eddy = eddy_tracker .TrackList ('AVISO' , ' Cyclonic' , C_SAVEFILE ,
957
+ C_eddy = eddy_tracker .TrackList ('Cyclonic' , C_SAVEFILE ,
947
958
sla_grd , search_ellipse , ** config )
948
959
949
960
A_eddy .search_ellipse = search_ellipse
@@ -1022,7 +1033,7 @@ def set_interp_coeffs(self, sla, uspd):
1022
1033
np .place (sla , sla .data == sla_grd .FILLVAL , 0. )
1023
1034
# High pass filter, see
1024
1035
# 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 ])
1026
1037
1027
1038
elif 'Hanning' in SMOOTHING_TYPE :
1028
1039
@@ -1252,8 +1263,6 @@ def set_interp_coeffs(self, sla, uspd):
1252
1263
animax , animax_cbar )
1253
1264
1254
1265
# Save inactive eddies to nc file
1255
- # IMPORTANT: this must be done at every time step!!
1256
- #saving_START_TIME = time.time()
1257
1266
if not first_record :
1258
1267
1259
1268
if A_eddy .VERBOSE :
0 commit comments