3232"""
3333import sys
3434import glob as glob
35- from py_eddy_tracker_classes import plt , np , dt , Dataset , ndimage , time , \
35+ from py_eddy_tracker_classes import plt , np , dt , Dataset , time , \
3636 datestr2datetime , gaussian_resolution , \
3737 get_cax , collection_loop , track_eddies , \
38- anim_figure , interpolate
38+ anim_figure
3939from py_eddy_tracker_amplitude import SwirlSpeed
4040import make_eddy_tracker_list_obj as eddy_tracker
41+ import scipy .ndimage as ndimage
42+ import scipy .interpolate as interpolate
43+ import scipy .spatial as spatial
4144from dateutil import parser
4245from mpl_toolkits .basemap import Basemap
4346import yaml
@@ -266,15 +269,15 @@ def get_AVISO_f_pm_pn(self):
266269 self ._f = self ._gof .copy ()
267270 self ._gof = self .GRAVITY / self ._gof
268271
269- lonu = self .half_interp (self .lonpad ()[:,:- 1 ], self .lonpad ()[:,1 :])
270- latu = self .half_interp (self .latpad ()[:,:- 1 ], self .latpad ()[:,1 :])
272+ lonu = self .half_interp (self .lonpad ()[:, :- 1 ], self .lonpad ()[:, 1 :])
273+ latu = self .half_interp (self .latpad ()[:, :- 1 ], self .latpad ()[:, 1 :])
271274 lonv = self .half_interp (self .lonpad ()[:- 1 ], self .lonpad ()[1 :])
272275 latv = self .half_interp (self .latpad ()[:- 1 ], self .latpad ()[1 :])
273276
274277 # Get pm and pn
275278 pm = np .zeros_like (self .lonpad ())
276- pm [:,1 :- 1 ] = self .haversine_dist (lonu [:,:- 1 ], latu [:,:- 1 ],
277- lonu [:,1 :], latu [:,1 :])
279+ pm [:,1 :- 1 ] = self .haversine_dist (lonu [:, :- 1 ], latu [:, :- 1 ],
280+ lonu [:, 1 :], latu [:, 1 :])
278281 pm [:,0 ] = pm [:,1 ]
279282 pm [:,- 1 ] = pm [:,- 2 ]
280283 self ._dx = pm
@@ -356,7 +359,7 @@ def uvmask(self):
356359 Mp , Lp = self .mask .shape
357360 M = Mp - 1
358361 L = Lp - 1
359- self ._umask = self .mask [:,:L ] * self .mask [:,1 :Lp ]
362+ self ._umask = self .mask [:, :L ] * self .mask [:, 1 :Lp ]
360363 self ._vmask = self .mask [:M ] * self .mask [1 :Mp ]
361364 return self
362365
@@ -379,28 +382,6 @@ def make_gridmask(self, with_pad=True, use_maskoceans=False):
379382 x , y = self .M (self .lonpad (), self .latpad ())
380383 else :
381384 x , y = self .M (self .lon (), self .lat ())
382- #print '--- Computing Basemap mask'
383- #self.mask = np.ones_like(x, dtype=bool)
384- #if use_maskoceans:
385- #print "------ using Basemap *maskoceans*: this is fast but may be"
386- #print "------ marginally less accurate than Basemap's *is_land* method..."
387- #from mpl_toolkits.basemap import maskoceans
388- #if with_pad:
389- #self.mask = maskoceans(self.lonpad(), self.latpad(), self.mask,
390- #inlands=False, resolution='f', grid=1.25)
391- #else:
392- #self.mask = maskoceans(self.lon(), self.lat())
393- #self.mask = self.mask.mask.astype(int)
394- #else:
395- #print "------ using Basemap *is_land*: this is slow for larger domains"
396- #print "------ but can be speeded up once Basemap's *maskoceans* method is introduced"
397- #print "------ (currently longitude wrapping behaviour is unclear...)"
398- #it = np.nditer([x, y], flags=['multi_index'])
399- #while not it.finished:
400- #self.mask[it.multi_index] = self.M.is_land(x[it.multi_index],
401- #y[it.multi_index])
402- #it.iternext()
403- #self.mask = np.atleast_2d(-self.mask).astype(int)
404385 self .Mx , self .My = x , y
405386 return self
406387
@@ -421,8 +402,8 @@ def set_geostrophic_velocity(self, zeta):
421402 self .upad *= - gof
422403
423404 umask = self .umask ().view ()
424- zeta1 , zeta2 = zeta .data [:,1 :].view (), zeta .data [:,:- 1 ].view ()
425- pm1 , pm2 = self .pm ()[:,1 :].view (), self .pm ()[:,:- 1 ].view ()
405+ zeta1 , zeta2 = zeta .data [:, 1 :].view (), zeta .data [:, :- 1 ].view ()
406+ pm1 , pm2 = self .pm ()[:, 1 :].view (), self .pm ()[:, :- 1 ].view ()
426407 self .vpad [:] = self .u2rho_2d (umask * (zeta1 - zeta2 ) *
427408 0.5 * (pm1 + pm2 ))
428409 self .vpad *= gof
@@ -490,7 +471,7 @@ def __init__(self, AVISO_FILE, LONMIN, LONMAX, LATMIN, LATMAX,
490471 self .fillval = self .read_nc_att (AVISO_FILE ,
491472 'Grid_0001' , '_FillValue' )
492473
493- if LONMIN < 0 and LONMAX <= 0 :
474+ if LONMIN < 0 and LONMAX <= 0 :
494475 self ._lon -= 360.
495476 self ._lon , self ._lat = np .meshgrid (self ._lon , self ._lat )
496477 self ._angle = np .zeros_like (self ._lon )
@@ -554,7 +535,7 @@ def get_AVISO_data(self, AVISO_FILE):
554535 def set_mask (self , sla ):
555536 """
556537 """
557- if sla .mask .size == 1 :
538+ if sla .mask .size == 1 : # all sea points
558539 self .mask = np .ones_like (sla .data )
559540 else :
560541 self .mask = sla .mask .astype (np .int ) - 1
@@ -592,7 +573,7 @@ def fillmask(self, x, mask):
592573
593574 # Multiply the queried good points by the weight, selecting only the
594575 # nearest points. Divide by the number of nearest points to get average
595- xfill = weight * x [igood [:, 0 ][iquery ], igood [:,1 ][iquery ]]
576+ xfill = weight * x [igood [:, 0 ][iquery ], igood [:, 1 ][iquery ]]
596577 xfill = (xfill / weight .sum (axis = 1 )[:, np .newaxis ]).sum (axis = 1 )
597578
598579 # Place average of nearest good points, xfill, into bad point locations
@@ -606,7 +587,6 @@ def lon(self):
606587 # shouldn't need to happen with every call to self.lon()
607588 lon0 = self ._lon [self .j0 :self .j1 , self .i1 :]
608589 lon1 = self ._lon [self .j0 :self .j1 , :self .i0 ]
609- print 'fix this so called only once'
610590 return np .concatenate ((lon0 - 360. , lon1 ), axis = 1 )
611591 else :
612592 return self ._lon [self .j0 :self .j1 , self .i0 :self .i1 ]
0 commit comments