Daily_QC
bad_tvalues.c
Go to the documentation of this file.
1 
2 #include "prototypes_new.h"
3 
4 void read_bad_tvalues(char *fname,int m)
5 
6 {
7 extern struct tdata tdata[10];
8 extern struct bad_daily_values bad_tvalues[6000];
9 FILE *fp;
10 char bfile[100],hb5[10],pc[10],ibuf[100];
11 float fvalue;
12 int i,ier,iquart;
13 char *p;
14 
15 strcpy(bfile,fname);
16 
17 fp=fopen(bfile,"r");
18 
19 if(fp==NULL)
20  return;
21 
22 for(i=0;i<6000;i++) {
23 
24  if(bad_tvalues[i].used==1)
25  continue;
26 
27  p=fgets(ibuf,80,fp);
28 
29  if(p==NULL)
30  break;
31 
32  ier=sscanf(ibuf,"%s %s %d %f",hb5,pc,&iquart,&fvalue);
33 
34  bad_tvalues[i].used=1;
35  strcpy(bad_tvalues[i].hb5,hb5);
36  strcpy(bad_tvalues[i].parm,pc);
37  bad_tvalues[i].day=m;
38  bad_tvalues[i].quart=iquart;
40 
41  }
42 
43 fclose(fp);
44 
45 return;
46 
47 }
48 
49 void purge_bad_tvalues(int iday)
50 
51 {
52 
53 extern struct bad_daily_values bad_tvalues[6000];
54 int i,k;
55 
56 for(k=0;k<6;k++) {
57 
58 for(i=0;i<6000;i++) {
59 
60  if(bad_tvalues[i].used==1 &&
61  bad_tvalues[i].day==iday &&
62  bad_tvalues[i].quart==k)
63  bad_tvalues[i].used=0;
64 
65  }
66 
67 }
68 
69 return;
70 
71 }
72 
73 extern struct bad_daily_values bad_tvalues[6000];
74 extern struct tdata tdata[10];
75 extern struct station tstation[1000];
76 extern int max_tstations;
77 
78 int get_bad_tvalues(int iday,int iquart)
79 
80 {
81 
82 int i,j,h;
83 
84 for(i=0;i<6000;i++) {
85 
86  if(bad_tvalues[i].used==0)
87  continue;
88 
89  if(bad_tvalues[i].day != iday ||
90  bad_tvalues[i].quart != iquart)
91  continue;
92 
93  for(j=0;j<max_tstations;j++) {
94 
95  if(strcmp(bad_tvalues[i].hb5,tstation[j].hb5)==0 &&
96  bad_tvalues[i].parm[4]==tstation[j].parm[4]) {
97 
98  if(tdata[iday].stn[j].tlevel2[iquart].qual == 5 &&
99  bad_tvalues[i].fvalue != tdata[iday].stn[j].tlevel1[iquart].data &&
100  tdata[iday].stn[j].tlevel1[iquart].data >= 0) {
101 
102  printf("for station %s %f %f\n",tstation[j].hb5,bad_tvalues[i].fvalue,
103  tdata[iday].stn[j].tlevel1[iquart].data);
104 
105  /* eliminate all bad values for current month */
106  for(h=0;h<6000;h++) {
107 
108  if(bad_tvalues[i].used==0)
109  continue;
110 
111  if(bad_tvalues[i].day != iday ||
112  bad_tvalues[i].quart != iquart)
113  continue;
114 
115  bad_tvalues[h].used=0;
116 
117  }
118 
119  /* swap in level 1 data */
120 
121  return(1);
122 
123  }
124 
125  else {
126 
127  tdata[iday].stn[j].tlevel2[iquart].qual=1;
128  tdata[iday].stn[j].tlevel2[iquart].data=bad_tvalues[i].fvalue;
129 
130  }
131 
132  }
133 
134  }
135 
136  }
137 
138 return(0);
139 
140 }
141 
142 extern struct bad_daily_values bad_tvalues[6000];
143 
144 void write_bad_tvalues(char *fname,int iday)
145 
146 {
147 
148 FILE *fp;
149 char bfile[100],ibuf[100];
150 int i,ier;
151 
152 strcpy(bfile,fname);
153 
154 fp=fopen(bfile,"w");
155 
156 for(i=0;i<6000;i++) {
157 
158  if(bad_tvalues[i].used==0)
159  continue;
160 
161  if(iday==bad_tvalues[i].day) {
162 
163  ier=sprintf(ibuf,"%s %s %d %f\n",bad_tvalues[i].hb5,bad_tvalues[i].parm,
165 
166  fputs(ibuf,fp);
167 
168  }
169 
170  }
171 
172 fclose(fp);
173 
174 return;
175 
176 }
177 
178 
179 extern struct bad_daily_values bad_tvalues[6000];
180 
181 void update_bad_tvalues(int iday)
182 
183 {
184 
185 int i,j,h,k;
186 char parm[10];
187 
188 for(i=0;i<6000;i++) {
189 
190  if(bad_tvalues[i].used==0)
191  continue;
192 
193  if(bad_tvalues[i].day != iday)
194  continue;
195 
196  bad_tvalues[i].used=0;
197 
198  }
199 
200 for(j=0;j<max_tstations;j++) {
201 
202  for(k=0;k<6;k++) {
203 
204  if(tdata[iday].stn[j].tlevel2[k].qual != 1)
205  continue;
206 
207  for(h=0;h<6000;h++) {
208 
209  if(bad_tvalues[h].used!=0)
210  continue;
211 
212  bad_tvalues[h].used=1;
213 
214  bad_tvalues[h].fvalue=tdata[iday].stn[j].tlevel1[k].data;
215 
216  strcpy(bad_tvalues[h].hb5,tstation[j].hb5);
217 
218  strcpy(parm,tstation[j].parm);
219 
220  if(k<4)
221  parm[5]='Z';
222 
223  else if(k==4)
224  parm[5]='X';
225 
226  if(k==6)
227  parm[5]='N';
228 
229  strcpy(bad_tvalues[h].parm,parm);
230  bad_tvalues[h].day=iday;
231  bad_tvalues[h].quart=k;
232 
233  break;
234 
235  }
236  }
237 
238  }
239 
240 return;
241 
242 }
243 
244 
245 extern struct bad_daily_values bad_tvalues[6000];
246 
247 void restore_bad_tvalues(int iday)
248 
249 {
250 
251 int i,j,h,k;
252 
253 for(k=0;k<6;k++) {
254 
255 for(i=0;i<6000;i++) {
256 
257  if(bad_tvalues[i].used==0)
258  continue;
259 
260  if(bad_tvalues[i].day != iday ||
261  bad_tvalues[i].quart != k)
262  continue;
263 
264  for(j=0;j<max_tstations;j++) {
265 
266  if(strcmp(bad_tvalues[i].hb5,tstation[j].hb5)==0 &&
267  bad_tvalues[i].parm[4]==tstation[j].parm[4]) {
268 
269  tdata[iday].stn[j].tlevel2[k].data=bad_tvalues[i].fvalue;
270  tdata[iday].stn[j].tlevel2[k].qual=1;
271 
272  break;
273 
274  }
275 
276  }
277  }
278 
279 
280 }
281 
282 return;
283 
284 }
285 
286 extern struct bad_daily_values bad_tvalues[6000];
287 
288 int is_tbad(int iday,int iquart,char *hb5,char *parm)
289 
290 {
291 
292 int i,j;
293 
294 for(i=0;i<6000;i++) {
295 
296  if(bad_tvalues[i].used==0)
297  continue;
298 
299  if(bad_tvalues[i].day != iday ||
300  bad_tvalues[i].quart != iquart)
301  continue;
302 
303  for(j=0;j<max_tstations;j++) {
304 
305  if(strcmp(bad_tvalues[i].hb5,hb5)==0 &&
306  bad_tvalues[i].parm[4]==parm[4])
307  return(1);
308 
309  }
310  }
311 
312 return(0);
313 
314 }
315 
316 
317 extern struct bad_daily_values bad_daily_values[6000];
318 
319 void post_bad_tvalues(int iday)
320 
321 {
322 
323 int i,j,h,k;
324 
325 for(k=0;k<6;k++) {
326 
327 for(i=0;i<6000;i++) {
328 
329  if(bad_tvalues[i].used==0)
330  continue;
331 
332  if(bad_tvalues[i].day != iday ||
333  bad_tvalues[i].quart != k)
334  continue;
335 
336  for(j=0;j<max_tstations;j++) {
337 
338  if(strcmp(bad_tvalues[i].hb5,tstation[j].hb5)==0 &&
339  bad_tvalues[i].parm[4]==tstation[j].parm[4]) {
340 
341  if(tdata[iday].stn[j].tlevel2[k].data==bad_tvalues[i].fvalue){
342 
343  tdata[iday].stn[j].tlevel2[k].data=
344  bad_tvalues[i].fvalue;
345 
346  tdata[iday].stn[j].tlevel2[k].qual=1;
347 
348  }
349 
350  break;
351 
352  }
353 
354  }
355  }
356 
357 }
358 return;
359 
360 }
361 
362 
363 
364 
365 
366 
367 
368 
369 
370 
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
struct bad_daily_values bad_tvalues[6000]
Definition: bad_tvalues.c:142
void update_bad_tvalues(int iday)
Definition: bad_tvalues.c:181
void read_bad_tvalues(char *fname, int m)
Definition: bad_tvalues.c:4
void purge_bad_tvalues(int iday)
Definition: bad_tvalues.c:49
void restore_bad_tvalues(int iday)
Definition: bad_tvalues.c:247
int max_tstations
Definition: daily_qc.c:46
void post_bad_tvalues(int iday)
Definition: bad_tvalues.c:319
void write_bad_tvalues(char *fname, int iday)
Definition: bad_tvalues.c:144
char qual[10]
Definition: display_data.c:29
int day
Definition: display_data.c:30
printf("pcp %d\n", pcp_in_use[103])
char parm[10]
Definition: misc.h:16
char hb5[10]
Definition: misc.h:15
float fvalue
Definition: misc.h:19
Definition: misc.h:232
char parm[10]
Definition: misc.h:237
char hb5[10]
Definition: misc.h:235
Definition: misc.h:200
struct ttn stn[1000]
Definition: misc_new.h:452
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