@@ -287,7 +287,7 @@ def __init__(self, DATATYPE, SIGN_TYPE, SAVE_DIR, grd, search_ellipse,
287287
288288 self .DIAGNOSTIC_TYPE = kwargs .get ('DIAGNOSTIC_TYPE' , 'SLA' )
289289
290- self .THE_DOMAIN = kwargs .get ('THE_DOMAIN' , 'Global ' )
290+ self .THE_DOMAIN = kwargs .get ('THE_DOMAIN' , 'Regional ' )
291291 self .LONMIN = np .float64 (kwargs .get ('LONMIN' , - 40 ))
292292 self .LONMAX = np .float64 (kwargs .get ('LONMAX' , - 30 ))
293293 self .LATMIN = np .float64 (kwargs .get ('LATMIN' , 20 ))
@@ -304,10 +304,13 @@ def __init__(self, DATATYPE, SIGN_TYPE, SAVE_DIR, grd, search_ellipse,
304304
305305 self .INTERP_METHOD = kwargs .get ('INTERP_METHOD' , 'RectBivariate' )
306306 self .JDAY_REFERENCE = kwargs .get ('JDAY_REFERENCE' , 2448623.0 )
307+
308+ # NOTE: '.copy()' suffix is essential here
307309 self .CONTOUR_PARAMETER = kwargs .get ('CONTOUR_PARAMETER' ,
308- np .linspace (- 100. , 101 , 1 ))
310+ np .arange (- 100. , 101 , 1 )). copy ( )
309311 if 'Cyclonic' in SIGN_TYPE :
310- self .CONTOUR_PARAMETER = self .CONTOUR_PARAMETER [::- 1 ]
312+ self .CONTOUR_PARAMETER *= - 1
313+
311314 self .SHAPE_ERROR = kwargs .get ('SHAPE_ERROR' ,
312315 np .full (self .CONTOUR_PARAMETER .size , 55. ))
313316
@@ -514,7 +517,7 @@ def get_inactive_tracks(self, rtime):
514517
515518
516519
517- def create_netcdf (self , directory , savedir , title ,
520+ def create_netcdf (self , directory , savedir ,
518521 grd = None , Ymin = None , Ymax = None ,
519522 Mmin = None , Mmax = None , model = None ,
520523 sigma_lev = None , rho_ntr = None ):
@@ -526,7 +529,7 @@ def create_netcdf(self, directory, savedir, title,
526529 else :
527530 self .savedir = savedir .replace ('.nc' , '_ARGO_enabled.nc' )
528531 nc = Dataset (self .savedir , 'w' , format = 'NETCDF4' )
529- nc .title = '' .join ((title , ' eddy tracks' ))
532+ nc .title = '' .join ((self . SIGN_TYPE , ' eddy tracks' ))
530533 nc .directory = directory
531534 nc .DAYS_BTWN_RECORDS = np .float64 (self .DAYS_BTWN_RECORDS )
532535 nc .TRACK_DURATION_MIN = np .float64 (self .TRACK_DURATION_MIN )
@@ -1074,7 +1077,7 @@ def __init__(self, THE_DOMAIN, grd, RW_PATH=None):
10741077 self .ZERO_CROSSING = grd .ZERO_CROSSING
10751078 self .RW_PATH = RW_PATH
10761079 self ._tree = None
1077- if self .THE_DOMAIN in ('Global' , 'ROMS' ):
1080+ if self .THE_DOMAIN in ('Global' , 'Regional' , ' ROMS' ):
10781081 assert self .RW_PATH is not None , \
10791082 'Must supply a path for the Rossby deformation radius data'
10801083 data = np .loadtxt (RW_PATH )
@@ -1094,6 +1097,7 @@ def __init__(self, THE_DOMAIN, grd, RW_PATH=None):
10941097
10951098 def __getstate__ (self ):
10961099 """
1100+ Needed for Pickle
10971101 """
10981102 result = self .__dict__ .copy ()
10991103 result .pop ('_tree' )
@@ -1102,15 +1106,18 @@ def __getstate__(self):
11021106
11031107 def __setstate__ (self , thedict ):
11041108 """
1109+ Needed for Pickle
11051110 """
11061111 self .__dict__ = thedict
11071112 self ._make_kdtree ()
11081113
11091114
11101115 def get_rwdistance (self , xpt , ypt , DAYS_BTWN_RECORDS ):
11111116 """
1117+ Return the distance required by SearchEllipse
1118+ to construct a search ellipse for eddy tracking.
11121119 """
1113- if self .THE_DOMAIN in ('Global' , 'ROMS' ):
1120+ if self .THE_DOMAIN in ('Global' , 'Regional' , ' ROMS' ):
11141121 #print 'xpt, ypt', xpt, ypt
11151122 self .distance [:] = self ._get_rlongwave_spd (xpt , ypt )
11161123 self .distance *= 86400.
@@ -1152,6 +1159,8 @@ def get_rwdistance(self, xpt, ypt, DAYS_BTWN_RECORDS):
11521159
11531160 def _make_subset (self ):
11541161 """
1162+ Make a subset of _defrad data over the domain.
1163+ If 'Global' is defined then widen the domain.
11551164 """
11561165 pad = 1.5 # degrees
11571166 LONMIN , LONMAX , LATMIN , LATMAX = self .limits
@@ -1168,11 +1177,21 @@ def _make_subset(self):
11681177 self ._lon = self ._lon [lloi ]
11691178 self ._lat = self ._lat [lloi ]
11701179 self ._defrad = self ._defrad [lloi ]
1180+
1181+ if 'Global' in self .THE_DOMAIN :
1182+ lloi = self ._lon > 260.
1183+ self ._lon = np .append (self ._lon , self ._lon [lloi ] - 360. )
1184+ self ._lat = np .append (self ._lat , self ._lat [lloi ])
1185+ self ._defrad = np .append (self ._defrad , self ._defrad [lloi ])
1186+
11711187 self .x , self .y = self .M (self ._lon , self ._lat )
11721188 return self
11731189
11741190
11751191 def _make_kdtree (self ):
1192+ """
1193+ Compute KDE tree for nearest indices.
1194+ """
11761195 points = np .vstack ([self .x , self .y ]).T
11771196 self ._tree = spatial .cKDTree (points )
11781197 return self
@@ -1207,8 +1226,25 @@ def _get_rlongwave_spd(self, xpt, ypt):
12071226 return self .r_spd_long
12081227
12091228
1210-
1211-
1229+ def view_grid_subset (self ):
1230+ """
1231+ Figure to check RossbyWaveSpeed grid after call to
1232+ self._make_subset()
1233+ To use, uncomment in SearchEllipse __init__ method
1234+ """
1235+ stride = 30
1236+ plt .figure ()
1237+ ax = plt .subplot ()
1238+ self .M .scatter (self .x , self .y , c = 'b' )
1239+ self .M .drawcoastlines ()
1240+ self .M .fillcontinents ()
1241+ self .M .drawparallels (np .arange (- 90 , 90. + stride , stride ),
1242+ labels = [1 , 0 , 0 , 0 ], ax = ax )
1243+ self .M .drawmeridians (np .arange (- 360 , 360. + stride , stride ),
1244+ labels = [0 , 0 , 0 , 1 ], ax = ax )
1245+ plt .show ()
1246+
1247+
12121248class SearchEllipse (object ):
12131249 """
12141250 Class to construct a search ellipse/circle around a specified point.
@@ -1238,6 +1274,7 @@ def __init__(self, THE_DOMAIN, grd, DAYS_BTWN_RECORDS, RW_PATH=None):
12381274 self .n_s_minor = self .DAYS_BTWN_RECORDS * 15e4 / 7.
12391275 self .semi_n_s_minor = 0.5 * self .n_s_minor
12401276 self .rwv = RossbyWaveSpeed (THE_DOMAIN , grd , RW_PATH = RW_PATH )
1277+ #self.rwv.view_grid_subset()
12411278 self .rw_c = np .empty (1 )
12421279 self .rw_c_mod = np .empty (1 )
12431280 self .rw_c_fac = 1.75
@@ -1306,7 +1343,7 @@ def set_search_ellipse(self, xpt, ypt):
13061343 self .xpt = xpt
13071344 self .ypt = ypt
13081345
1309- if self .THE_DOMAIN in ('Global' , 'ROMS' ):
1346+ if self .THE_DOMAIN in ('Global' , 'Regional' , ' ROMS' ):
13101347 self .rw_c [:] = self .rwv .get_rwdistance (xpt , ypt ,
13111348 self .DAYS_BTWN_RECORDS )
13121349 self .rw_c_mod [:] = 1.75
0 commit comments