1+ # %run global_tracking.py
2+
3+ from netCDF4 import Dataset
4+ import numpy as np
5+
6+
7+ class GlobalTracking (object ):
8+ """
9+
10+ """
11+ def __init__ (self , eddy , ymd_str ):
12+ """
13+ """
14+ self .tracklist = eddy .tracklist
15+ self .SIGN_TYPE = eddy .SIGN_TYPE
16+ self .ymd_str = ymd_str
17+ self .num_tracks = np .sum ([i .alive for i in self .tracklist ])
18+
19+
20+ def create_netcdf (self ):
21+ """
22+ """
23+ with Dataset ('%s_%s.nc' % (self .SIGN_TYPE , self .ymd_str ),
24+ 'w' , format = 'NETCDF4' ) as nc :
25+
26+ # Create dimensions
27+ nc .createDimension ('tracks' , self .num_tracks )
28+ nc .createDimension ('properties' , None )
29+
30+ # Create variables
31+ t = 0
32+ for track in self .tracklist :
33+ if track .alive :
34+ varname = 'track_%s' % np .str (t ).zfill (4 )
35+ nc .createVariable (varname , np .float64 , ('properties' ))
36+ t += 1
37+ nc .createVariable ('track_lengths' , np .int , ('tracks' ))
38+
39+
40+ def write_tracks (self ):
41+ """
42+ """
43+ t = 0
44+ for track in self .tracklist :
45+ tracklen = len (track .lon )
46+ if track .alive :
47+ properties = np .hstack ((track .dayzero , track .saved2nc ,
48+ track .save_extras , track .lon , track .lat ,
49+ track .amplitude , track .radius_s ,
50+ track .radius_e , track .uavg ,
51+ track .teke , track .ocean_time ))
52+
53+ with Dataset ('%s_%s.nc' % (self .SIGN_TYPE , self .ymd_str ), 'a' ) as nc :
54+ varname = 'track_%s' % np .str (t ).zfill (4 )
55+ nc .variables [varname ][:] = properties
56+ nc .variables ['track_lengths' ][t ] = tracklen
57+ t += 1
58+
59+
60+ def read_tracks (self ):
61+ """
62+ Read and sort the property data for returning to the
63+ Eddy object
64+ """
65+ with Dataset ('Anticyclonic_20140312.nc' ) as nc :
66+ tracklens = nc .variables ['track_lengths' ][:]
67+ for t , tracklen in enumerate (tracklengths ):
68+
69+ varname = 'track_%s' % np .str (t ).zfill (4 )
70+ track = nc .variables [varname ][:]
71+ dayzero = track [0 ].astype (bool )
72+ saved2nc = track [1 ].astype (bool )
73+ save_extras = track [2 ].astype (bool )
74+
75+ inds = np .arange (3 , 3 + (tracklen * 8 ), tracklen )
76+ lon = track [inds [0 ]:inds [1 ]]
77+ lat = track [inds [1 ]:inds [2 ]]
78+ amplitude = track [inds [2 ]:inds [3 ]]
79+ radius_s = track [inds [3 ]:inds [4 ]]
80+ radius_e = track [inds [4 ]:inds [5 ]]
81+ uavg = track [inds [5 ]:inds [6 ]]
82+ teke = track [inds [6 ]:inds [7 ]]
83+ ocean_time = track [inds [7 ]:]
84+
85+
86+ properties = nc .variables ['track_0000' ][:]
87+
88+
89+
90+
0 commit comments