Daily_QC
read_t_b.c
Go to the documentation of this file.
1 #include "prototypes_new.h"
2 
3 int read_t_b(char *fname,time_t tget,int i)
4 
5 {
6  extern struct dval dval;
7  extern struct tdata tdata[10];
8  extern struct station tstation[1000];
9  extern int max_tstations;
10  FILE *fr;
11  int j,k,ier,m,qual,len,len2;
12  char kbuf[100],*p,*q,*r,buf[100],hb5[10];
13  long t,u;
14  float conv=.0174;
15  double lat,lon;
16  int number_found[6];
17  char parm[10];
18  int type;
19  char pc,datbuf[50],parmbuf[50];
20  int maxk,startk;
21  struct tm *gm;
22  int uflag[6];
23  float fval;
24  int kread;
25  int reset_flag;
26  int rier;
27  int offset;
28 
29  reset_flag=0;
30  fr=fopen(fname,"r");
31  tdata[i].data_time=tget;
32 
33  gm=gmtime(&tget);
34 
35  tdata[i].ztime=(gm->tm_year+1900)*10000+(gm->tm_mon+1)*100+gm->tm_mday;
36 
37  for(j=0;j<6;j++) {
38 
39  number_found[j]=0;
40  uflag[j]=0;
41 
42  }
43 
44  for(k=0;k<max_tstations;k++) {
45 
46  for(m=0;m<6;m++) {
47 
48  tdata[i].stn[k].tlevel2[m].data=-99;
49  tdata[i].stn[k].tlevel2[m].qual=-99;
50 
51  }
52 
53 
54  }
55 
56 if(fr==NULL) {
57 
58  reset:
59 
60  for(k=0;k<max_tstations;k++) {
61 
62  for(m=0;m<6;m++) {
63 
64  tdata[i].stn[k].tlevel2[m].data=
65  tdata[i].stn[k].tlevel1[m].data;
66 
67  tdata[i].stn[k].tlevel2[m].qual=
68  tdata[i].stn[k].tlevel1[m].qual;
69 
70  if(tdata[i].stn[k].tlevel2[m].data>=0)
71  number_found[m]++;
72 
73 
74  }
75 
76  }
77 
78  for(m=0;m<6;m++) {
79 
80  if(number_found[m] == 0)
81  tdata[i].used[m]=0;
82 
83  tdata[i].level[m]=1;
84 
85  }
86 
88 
89  return(-1);
90 
91  }
92 
93  for(k=0;k<6;k++) {
94 
95  tdata[i].used[k]=1;
96  tdata[i].level[k]=2;
97 
98  }
99 
100 /* initialize structure */
101 
102  for(;;) {
103 
104  bad:
105  p=fgets(kbuf,100,fr);
106  if(p==NULL)
107  break;
108 
109  if(kbuf[0]==':')
110  continue;
111 
112  ier=sscanf(&kbuf[3],"%s %s %s",hb5,datbuf,parmbuf);
113  if(ier==0)
114  continue;
115 
116  p=strchr(parmbuf,'/');
117  if(p==NULL)
118  continue;
119 
120  if(*(p+6)=='X') {
121 
122  offset=7;
123  kread=1;
124  startk=4;
125  maxk=5;
126 
127  }
128 
129  else if(*(p+6)=='N') {
130 
131  offset=7;
132  kread=1;
133  startk=5;
134  maxk=6;
135 
136  }
137 
138  else {
139 
140  offset=0;
141  kread=3;
142  startk=0;
143  maxk=4;
144 
145 
146  }
147 
148 
149  pc=*(p+5);
150 
151  for(j=0;j<max_tstations;j++) {
152 
153  if(strcmp(hb5,tstation[j].hb5)==0 &&
154  pc==tstation[j].parm[4]) {
155 
156  break;
157 
158  }
159 
160  }
161 
162  if(j==max_tstations) {
163 
164  continue;
165 
166  }
167 
168  q=kbuf;
169  for(k=0;k<kread;k++) {
170 
171  p=strchr(q,'/');
172  if(p==NULL)
173  break;
174 
175  q=p+1;
176 
177  }
178 
179  if(k!=kread)
180  continue; /* missing */
181 
182  for(k=startk;k<maxk;k++) {
183 
184  tdata[i].stn[j].tlevel2[k].qual=0;
185 
186  if((p=strchr(q,'/'))==NULL &&
187  (p=strchr(q,'\n'))==NULL)
188  goto bad;
189 
190  *p=0;
191 
192  strcpy(buf,q+offset);
193 
194 
195  if((p=strchr(buf,'m'))!=NULL ||
196  (p=strchr(buf,'M'))!=NULL ||
197  (buf[0]==' ' && buf[1]==' ' &&
198  buf[2]==' ' && buf[3]==' ')) {
199 
200  if(tdata[i].stn[j].tlevel1[k].data > -99)
201  reset_flag=1;
202 
203  tdata[i].stn[j].tlevel2[k].data=-99;
204  tdata[i].stn[j].tlevel2[k].qual=-99;
205 
206  }
207  else {
208 
209  p=buf;
210 
211  number_found[k]++;
212 
213 
214  tdata[i].stn[j].tlevel2[k].data=atoi(buf);
215 
216  r=p;
217  qual=8;
218 
219  while(*r != 0) {
220 
221  if(isalpha(*r) != 0) {
222 
223  if(*r=='S' || *r=='A')
224  qual=0;
225 
226  else if(*r=='F')
227  qual=1;
228 
229  else if(*r=='W')
230  qual=2;
231 
232  else if(*r=='Q')
233  qual=3;
234 
235  else if(*r=='V')
236  qual=8;
237 
238  else if(*r=='E')
239  qual=5;
240 
241  else if(*r=='L')
242  qual=6;
243 
244  tdata[i].stn[j].tlevel2[k].qual=qual;
245 
246  if((qual==5) &&
247  tdata[i].stn[j].tlevel1[k].data >= 0) {
248 
249  ier=is_tbad(i,k,tstation[j].hb5,
250  tstation[j].parm);
251 
252  if(ier==0) {
253 
254  printf("new data overwriting missing %s %s %d\n",
255  tstation[j].hb5,tstation[j].parm,tdata[i].stn[j].tlevel1[k].data);
256 
257  rier=-2;
258  reset_flag=1;
259 
260  }
261 
262  }
263 
264  if((qual!=5 && qual != 2)
265  && tdata[i].stn[j].tlevel1[k].data >= 0
266  && tdata[i].stn[j].tlevel1[k].data !=
267  tdata[i].stn[j].tlevel2[k].data) {
268 
269  printf("new data overwriting old %s %s %d %d\n",
270  tstation[j].hb5,tstation[j].parm,
271  tdata[i].stn[j].tlevel1[k].data,tdata[i].stn[j].tlevel2[k].data);
272 
273  rier=-2;
274  reset_flag=1;
275 
276  }
277 
278  if(qual!=5 && qual != 6 && qual != 2
279  && tdata[i].stn[j].tlevel1[k].data < -98
280  && tdata[i].stn[j].tlevel2[k].data >=0) {
281 
282  printf("data set bad level 1 overwriting level 2 %s %s %d\n",
283  tstation[j].hb5,tstation[j].parm,tdata[i].stn[j].tlevel1[k].data);
284 
285  rier=-2;
286  reset_flag=1;
287 
288  }
289 
290  break;
291 
292  }
293 
294  else
295  r++;
296 
297  }
298 
299  }
300 
301 
302  p=strchr(q,0);
303  q=p+1;
304 
305  }
306 
307  }
308 
309 if(reset_flag==1)
310  goto reset;
311 
312 
313 fclose(fr);
314 
315 for(m=0;m<6;m++) {
316 
317  if(uflag[m]==1) {
318 
319  number_found[m]=0;
320 
321  for(k=0;k<max_tstations;k++) {
322 
323  tdata[i].stn[k].tlevel2[m].data=
324  tdata[i].stn[k].tlevel1[m].data;
325 
326  tdata[i].stn[k].tlevel2[m].qual=
327  tdata[i].stn[k].tlevel1[m].qual;
328 
329  if(tdata[i].stn[k].tlevel2[m].data>-99)
330  number_found[m]++;
331 
332 
333  }
334 
335  tdata[i].level[m]=1;
336 
337 
338  }
339 
340 
341 }
342 
343 for(j=0;j<6;j++) {
344 
345  if(number_found[j] == 0) {
346 
347  tdata[i].used[j]=0;
348  tdata[i].level[j]=1;
349 
350  }
351 
352  ier=get_bad_tvalues(i,m);
353  if(ier==1) {
354 
355  printf("new data overwriting old bad data\n");
356  goto reset;
357 
358  }
359 
360  }
361 
362 return(1);
363 
364 }
365 
366 
367 
368 
369 
370 
371 
372 
373 
374 
375 
376 
377 
378 
379 
380 
381 
382 
383 
384 
385 
386 
387 
struct station tstation[1000]
Definition: daily_qc.c:197
int is_tbad(int iday, int iquart, char *hb5, char *parm)
Definition: bad_tvalues.c:288
int get_bad_tvalues(int iday, int iquart)
Definition: bad_tvalues.c:78
int max_tstations
Definition: daily_qc.c:46
void post_bad_tvalues(int iday)
Definition: bad_tvalues.c:319
char t
Definition: build_list.c:122
char type[5]
Definition: daily_qc.c:98
char qual[10]
Definition: display_data.c:29
fr
Definition: jnk.c:17
printf("pcp %d\n", pcp_in_use[103])
int read_t_b(char *fname, time_t tget, int i)
Definition: read_t_b.c:3
Definition: misc.h:397
Definition: misc.h:232
float lat
Definition: misc.h:239
float lon
Definition: misc.h:240
char parm[10]
Definition: misc.h:237
char hb5[10]
Definition: misc.h:235
Definition: misc.h:200
time_t data_time
Definition: misc_new.h:447
int used[6]
Definition: misc_new.h:449
struct ttn stn[1000]
Definition: misc_new.h:452
int level[6]
Definition: misc_new.h:451
int ztime
Definition: misc_new.h:448
char qual
Definition: misc_new.h:401
short int data
Definition: misc_new.h:400
struct tlevel * tlevel2
Definition: misc_new.h:411
struct tlevel * tlevel1
Definition: misc_new.h:410