1
2
3
4 from pylab import *
5 import glob
6 import os
7
8
9 inch2mm = 25.4
10 knots2ms = 0.51444
11
12 year='2005'
13 ddir='/net/nas2/export/eo/rawdata/station_data/GSOD/newdata/' + year + '/'
14 odir='/net/nas2/export/eo/rawdata/station_data/GSOD/newdata/output/'
15
16 os.system('mkdir -p '+ odir)
17
18
19 f=open('all_stations.txt','r'); X=f.readlines()
20 stat=[]; stat2=[]; name=[]
21 ct1=[]; ct2=[]; ct3=[]
22 lat=[]; lon=[]; elev=[]
23 dummy=-99999.
24 for i in range(len(X)):
25 stat.append(X[i][0:6])
26 stat2.append(X[i][7:12])
27 name.append(X[i][13:42])
28 ct1=X[i][43:45]; ct2=X[i][46:48]; ct3=X[i][49:56]
29 try:
30 lat.append(float(X[i][57:64])/1000.)
31 except:
32 lat.append(dummy)
33 try:
34 lon.append(float(X[i][65:72])/1000.)
35 except:
36 lon.append(dummy)
37 try:
38 elev.append(float(X[i][73:79]))
39 except:
40 elev.append(dummy)
41 lat=asarray(lat); lon=asarray(lon)
42 lat[lat==dummy]=nan; lon[lon==dummy]=nan
43 f.close()
44
45
46
47
48 T=zeros((len(lat),366))
49 Tmax=zeros((len(lat),366))
50 Tmin=zeros((len(lat),366))
51 T[:,:]=nan; Tmax[:,:]=nan; Tmin[:,:]=nan
52 YEAR=zeros((len(lat),366)); YEAR[:,:]=dummy
53 MONTH=zeros((len(lat),366))
54 DAY=zeros((len(lat),366))
55 WDSP=zeros((len(lat),366)); WDSP[:,:]=dummy
56 MXSPD=zeros((len(lat),366)); MXSPD[:,:]=dummy
57 PRCP=zeros((len(lat),366)); PRCP[:,:]=dummy
58
59
60
61 for k in range(len(lat)):
62
63 s = stat[k]
64
65 print 'Processing station: ', k, '/', len(lat), s
66
67 istat = k
68 files=glob.glob(ddir + s + '*-' + year + '.op')
69 if len(files) != 1:
70 if len(files) == 0:
71 print 'Missing station ... ' + s
72 continue
73 else:
74 print 'We have a problem here: ', files
75 stop
76 print 'Processing! ***'
77
78
79 file=files[0]
80 f=open(file,'r')
81 ls=f.readlines()
82 for i in range(1,len(ls)):
83
84 l=ls[i]
85 sta =l[ 0:6 ]
86 wban =l[ 7:12 ]
87 year =l[14:18]; month =l[18:20]; day =l[20:22]
88 t =l[26:30 ]; nt =l[31:33]
89 dew =l[37:41]; ndew =l[42:44]
90 slp =l[46:52]; nslp =l[53:55]
91 stp =l[57:63]; nstp =l[64:66]
92 vis =l[67:73]; nvis =l[74:76]
93 wdsp =l[78:83]; nwdsp =l[84:86]
94 mxspd =l[88:93]
95 gust =l[95:100]
96 tmax =l[102:108]
97 tmin =l[110:116]
98 prcp =l[117:123]
99 pflag =l[123:124]
100 snow =l[125:130]
101
102 if sta != s:
103 print 'ERROR: station does not fit to data!', sta, s
104 stop
105
106
107 jd = datestr2num(year + '-' + month + '-' + day) - datestr2num(year + '-01-01') + 1
108
109 idx = int(jd-1)
110
111
112 if float(t) != 9999.9:
113 T[istat,idx] = float(t)
114 else:
115 T[istat,idx] = nan
116 if float(tmax) != 9999.9:
117 Tmax[istat,idx] = float(tmax)
118 else:
119 Tmax[istat,idx] = nan
120 if float(tmin) != 9999.9:
121 Tmin[istat,idx] = float(tmin)
122 else:
123 Tmin[istat,idx] = nan
124
125 YEAR[istat,idx] = int(year)
126 MONTH[istat,idx] = int(month)
127 DAY[istat,idx] = int(day)
128
129 if float(wdsp) != 999.9:
130 WDSP[istat,idx] = float(wdsp)*knots2ms
131 else:
132 WDSP[istat,idx] = nan
133
134 if float(mxspd) != 999.9:
135 MXSPD[istat,idx] = float(mxspd)*knots2ms
136 else:
137 MXSPD[istat,idx] = nan
138
139 if float(prcp) != 99.99:
140 PRCP[istat,idx] = float(prcp)*inch2mm
141 else:
142 PRCP[istat,idx] = nan
143
144 f.close()
145 os.system('mv ' + file + ' ' + file + '.proc')
146
147
148 T=(T-32.) * 5. / 9. + 273.15
149 Tmax=(Tmax-32.) * 5. / 9. + 273.15
150 Tmin=(Tmin-32.) * 5. / 9. + 273.15
151
152 T[isnan(T)] = dummy
153 Tmax[isnan(Tmax)] = dummy
154 Tmin[isnan(Tmin)] = dummy
155 PRCP[isnan(PRCP)] = dummy
156 WDSP[isnan(WDSP)] = dummy
157 MXSPD[isnan(MXSPD)] = dummy
158
159
160
161 for i in range(366):
162 j=i+1
163 istr = str(j)
164 if (j<100):
165 istr = '0' + istr
166 if (j<10):
167 istr = '0' + istr
168
169 print 'Writeing results for JD: ', istr
170 f=open(odir + year + istr + '.out','w')
171
172 f.write('YEAR \t MONTH \t DAY \t LON \t LAT \t ELEV \t Tmean_K \t Tmin_K \t Tmax_K \t WINDMEAN_MS \t WINDMAX_MS \t PRECIP_MM \n')
173 for k in range(len(lat)):
174 if (~isnan(lon[k])) and (~isnan(lat[k]) and (YEAR[k,i] != dummy) ):
175 f.write(str(int(YEAR[k,i])) + '\t' + str(int(MONTH[k,i])) + '\t' + str(int(DAY[k,i])) + '\t' + str(lon[k]) + '\t' + str(lat[k]) + '\t' + str(elev[k]) + '\t' + str(T[k,i]) + '\t' + str(Tmin[k,i]) + '\t' + str(Tmax[k,i]) + '\t' + str(WDSP[k,i]) + '\t' + str(MXSPD[k,i]) + '\t' + str(PRCP[k,i]) + '\n' )
176 f.close()
177
178 f.close()
179
180
181
182
183
184