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