32
32
"""
33
33
import sys
34
34
import 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 , \
36
36
datestr2datetime , gaussian_resolution , \
37
37
get_cax , collection_loop , track_eddies , \
38
- anim_figure , interpolate
38
+ anim_figure
39
39
from py_eddy_tracker_amplitude import SwirlSpeed
40
40
import 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
41
44
from dateutil import parser
42
45
from mpl_toolkits .basemap import Basemap
43
46
import yaml
@@ -266,15 +269,15 @@ def get_AVISO_f_pm_pn(self):
266
269
self ._f = self ._gof .copy ()
267
270
self ._gof = self .GRAVITY / self ._gof
268
271
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 :])
271
274
lonv = self .half_interp (self .lonpad ()[:- 1 ], self .lonpad ()[1 :])
272
275
latv = self .half_interp (self .latpad ()[:- 1 ], self .latpad ()[1 :])
273
276
274
277
# Get pm and pn
275
278
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 :])
278
281
pm [:,0 ] = pm [:,1 ]
279
282
pm [:,- 1 ] = pm [:,- 2 ]
280
283
self ._dx = pm
@@ -356,7 +359,7 @@ def uvmask(self):
356
359
Mp , Lp = self .mask .shape
357
360
M = Mp - 1
358
361
L = Lp - 1
359
- self ._umask = self .mask [:,:L ] * self .mask [:,1 :Lp ]
362
+ self ._umask = self .mask [:, :L ] * self .mask [:, 1 :Lp ]
360
363
self ._vmask = self .mask [:M ] * self .mask [1 :Mp ]
361
364
return self
362
365
@@ -379,28 +382,6 @@ def make_gridmask(self, with_pad=True, use_maskoceans=False):
379
382
x , y = self .M (self .lonpad (), self .latpad ())
380
383
else :
381
384
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)
404
385
self .Mx , self .My = x , y
405
386
return self
406
387
@@ -421,8 +402,8 @@ def set_geostrophic_velocity(self, zeta):
421
402
self .upad *= - gof
422
403
423
404
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 ()
426
407
self .vpad [:] = self .u2rho_2d (umask * (zeta1 - zeta2 ) *
427
408
0.5 * (pm1 + pm2 ))
428
409
self .vpad *= gof
@@ -490,7 +471,7 @@ def __init__(self, AVISO_FILE, LONMIN, LONMAX, LATMIN, LATMAX,
490
471
self .fillval = self .read_nc_att (AVISO_FILE ,
491
472
'Grid_0001' , '_FillValue' )
492
473
493
- if LONMIN < 0 and LONMAX <= 0 :
474
+ if LONMIN < 0 and LONMAX <= 0 :
494
475
self ._lon -= 360.
495
476
self ._lon , self ._lat = np .meshgrid (self ._lon , self ._lat )
496
477
self ._angle = np .zeros_like (self ._lon )
@@ -554,7 +535,7 @@ def get_AVISO_data(self, AVISO_FILE):
554
535
def set_mask (self , sla ):
555
536
"""
556
537
"""
557
- if sla .mask .size == 1 :
538
+ if sla .mask .size == 1 : # all sea points
558
539
self .mask = np .ones_like (sla .data )
559
540
else :
560
541
self .mask = sla .mask .astype (np .int ) - 1
@@ -592,7 +573,7 @@ def fillmask(self, x, mask):
592
573
593
574
# Multiply the queried good points by the weight, selecting only the
594
575
# 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 ]]
596
577
xfill = (xfill / weight .sum (axis = 1 )[:, np .newaxis ]).sum (axis = 1 )
597
578
598
579
# Place average of nearest good points, xfill, into bad point locations
@@ -606,7 +587,6 @@ def lon(self):
606
587
# shouldn't need to happen with every call to self.lon()
607
588
lon0 = self ._lon [self .j0 :self .j1 , self .i1 :]
608
589
lon1 = self ._lon [self .j0 :self .j1 , :self .i0 ]
609
- print 'fix this so called only once'
610
590
return np .concatenate ((lon0 - 360. , lon1 ), axis = 1 )
611
591
else :
612
592
return self ._lon [self .j0 :self .j1 , self .i0 :self .i1 ]
0 commit comments