NCCOOS Trac Projects: Top | Web | Platforms | Processing | Viz | Sprints | Sandbox | (Wind)

root/raw2proc/trunk/raw2proc/test_codar.py

Revision 451 (checked in by cbc, 13 years ago)

Add various proc and config files not already under SVN.

Line 
1 #!/usr/bin/env python
2 # Last modified:  Time-stamp: <2010-12-09 16:17:25 haines>
3
4 import sys
5 import os
6 import re
7 from procutil import *
8 from raw2proc import *
9
10 def load_data(inFile):
11     lines=None
12     if os.path.exists(inFile):
13         f = open(inFile, 'r')
14         lines = f.readlines()
15         f.close()
16         if len(lines)<=0:
17             print 'Empty file: '+ inFile           
18     else:
19         print 'File does not exist: '+ inFile
20     return lines
21
22 import numpy
23 from datetime import datetime
24 from time import strptime
25 from StringIO import StringIO
26 from matplotlib.mlab import griddata
27
28 fn = '/seacoos/data/nc-coos/level0/ouba/hfr_totals/2010_07/TOTL_OUBA_2010_07_14_0000.tuv'
29 lines = load_data(fn)
30
31 # get sample datetime from filename
32 # fn = sensor_info['fn']
33 # sample_dt_start = filt_datetime(fn)
34
35 # read header that match '%(k): (v)\n' pairs on each line
36 m = re.findall(r'^(%.*):\s*(.*)$', ''.join(lines), re.MULTILINE)
37 for k,v in m:
38     if k == '%TimeStamp':
39         sample_dt = scanf_datetime(v, fmt='%Y %m %d %H %M %S')
40     elif k == '%TableType':
41         ftype = v
42     elif k == '%TableColumns':
43         ncol = int(v)
44     elif k == '%TableRows':
45         nrow = int(v)
46
47 # read data from string of lines but make it behave like a file object with StringIO
48 s = StringIO(''.join(lines))
49 s.seek(0) # ensures start posn of file
50 d = numpy.loadtxt(s, comments='%')
51 # lat, lon, u, v = numpy.loadtxt(s, usecols=(0,1,2,3), comments='%', unpack=True)
52 if 'TOT4' in ftype:
53     lon = d[:,0]
54     lat = d[:,1]
55     wu = d[:,2]
56     wv = d[:,3]
57     gridflag = d[:,4]
58     wu_std_qual = d[:,5]
59     wv_std_qual = d[:,6]
60     cov_qual = d[:,7]
61     x_dist = d[:,8]
62     y_dist = d[:,9]
63     rang = d[:,10]
64     bearing = d[:,11]
65     vel_mag = d[:,12]
66     vel_dir = d[:,13]
67     s1 = d[:,14]
68     s2 = d[:,15]
69     s3 = d[:,16]
70     s4 = d[:,17]
71     s5 = d[:,18]
72     s6 = d[:,19]
73
74 # define the lat/lon grid based on 6km resolution
75 # For Outer Banks north and east of Cape Hatteras, bounding box is defined by:
76 minlat, maxlat = (34.5, 38)
77 minlon, maxlon = (-76, -73.)
78 midlat = minlat + 0.5*(maxlat-minlat)
79 # ~111 km = 1 deg latitude
80 nlat = numpy.round((maxlat-minlat) *111/6)
81 nlon = numpy.round((maxlon-minlon) * math.cos(midlat*math.pi/180)*111/6)
82 yi = numpy.linspace(minlat, maxlat, nlat)
83 xi = numpy.linspace(minlon, maxlon, nlon)
84 ui = griddata(lon, lat, wu, xi, yi)
85 vi = griddata(lon, lat, wv, xi, yi)
86 # ---------------------------------------------------------------
87 data = {
88     'dt' : numpy.array(numpy.ones((1,), dtype=object)*numpy.nan),
89     'time' : numpy.array(numpy.ones((1,), dtype=long)*numpy.nan),
90     'lon' : numpy.array(numpy.ones((1,nlon), dtype=float)*numpy.nan),
91     'lat' : numpy.array(numpy.ones((1,nlat), dtype=float)*numpy.nan),
92     'u' : numpy.array(numpy.ones((1,nlon,nlat), dtype=float)*numpy.nan),
93     'v' : numpy.array(numpy.ones((1,nlon,nlat), dtype=float)*numpy.nan),
94     }
95 # ---------------------------------------------------------------
96 i = 0
97 data['dt'][i] =  sample_dt #
98 data['time'][i] =  dt2es(sample_dt) #
99 data['lon'][i] = xi # new longitude grid
100 data['lat'][i] = yi # new latitude grid
101 data['u'][i] = ui # u-component of water velocity (cm/s)
102 data['v'][i] = vi # v-component of water velocity
103
104
105
106    
Note: See TracBrowser for help on using the browser.