Daily_QC
edit_zstations.c
Go to the documentation of this file.
1 #include "prototypes_new.h"
2 
3 int isave;
5 int new_qual;
7 extern int func[];
8 Widget textz;
9 
10 void edit_zstations(int win_x,int win_y,unsigned int win_button)
11 
12 {
13 
14 extern Widget edit_dialog;
15 extern struct zdata zdata[10];
16 extern unsigned long cmap[16];
17 extern Widget drawing_area;
18 extern struct station zstation[500];
19 extern int max_zstations;
20 extern Font font[10];
21 extern int npoint[2],zoom;
22 extern struct display_set display_set[4];
23 extern Display *display;
24 extern GC gc;
25 extern int mmap[16];
26 extern void kill_widget();
27 extern struct dval dval;
28 extern int dflag[10];
30 void change_zcustom_file();
33 void cancel_zedit();
34 void set_snotel();
35 extern int pcpn_day,pcpn_time;
36 Widget rowcol,rowcol3,pbutton,rowcol1,sep;
37 float conv=.0174;
38 int MY=10;
39 Arg args[10];
40 Cardinal argcount;
41 int i;
42 double testdist,maxdist;
43 int x,y;
44 XmString t;
45 Dimension width,height;
46 signed long XSIZE,YSIZE;
47 float xrat,yrat,mult;
48 int xmin,xmax,ymin,ymax,display_flag,xcen,ycen,h;
49 long lint1,lint2;
50 float dmult,lat,lon;
51 char *st[10],buf[100],muf[10];
52 long r,s;
53 int time_pos,naflag,m;
54 XmString help_string;
55 time_pos=pcpn_time;
56 
57 XSetFont(display,gc,font[3]);
58 
59 /* need to set flag to plot */
60 
61 /* need to set resource in widget also */
62 
63 XSetFunction(display,gc,GXcopy);
64 
65 XtSetArg(args[0],XtNwidth,&width);
66 XtSetArg(args[1],XtNheight,&height);
67 XtGetValues(drawing_area,args,2);
68 
69 XSIZE=(long)width*10L;
70 YSIZE=(long)height*10L;
71 
72 xrat=(float)XSIZE/(float)12800;
73 yrat=(float)YSIZE/(float)9600;
74 
75 if(xrat < yrat)
76  mult=xrat;
77 
78 else
79  mult=yrat;
80 
81 display_flag=0;
82 h=0;
83 
85 xmin= display_set[display_flag].xmin[h];
86 xmax= display_set[display_flag].xmax[h];
87 ymin= display_set[display_flag].ymin[h];
88 ymax= display_set[display_flag].ymax[h];
89 xcen= display_set[display_flag].xcen[h];
90 ycen= display_set[display_flag].ycen[h];
91 
92 lint1=(long)npoint[0]*(long)MY;
93 lint2=(long)npoint[1]*(long)MY;
94 
95 x=win_x;
96 y=win_y;
97 
98 if(zoom==1) {
99 
100  win_x=x*MY/mult;
101  win_y=y*MY/mult;
102 
103  }
104 
105 else {
106 
107 
108  win_x=((x*MY-xcen)/zoom + lint1)/mult;
109  win_y=((y*MY-ycen)/zoom + lint2)/mult;
110 
111  }
112 
113 
114 if(zoom==1) {
115 
116  x=(win_x*mult)/MY;
117  y=(win_y*mult)/MY;
118 
119  }
120 
121 else {
122 
123  x=(((win_x*mult)-lint1)*zoom+xcen)/MY;
124  y=(((win_y*mult)-lint2)*zoom+ycen)/MY;
125 
126  }
127 
128 isave=-1;
129 maxdist=9999;
130 
131 for(i=0;i<max_zstations;i++){
132 
133 
134  if(zdata[pcpn_day].stn[i].zlevel2[time_pos].data < 0)
135  continue;
136 
137  lat=zstation[i].lat;
138  lon=zstation[i].lon;
139 
140  r=dval.a * cos(lat*conv)/(1+sin(lat*conv))
141  * cos((lon-dval.lo-90)*conv) + dval.xo +.5;
142 
143  s=dval.a * cos(lat*conv)/(1+sin(lat*conv))
144  * sin((lon-dval.lo-90)*conv) + dval.yo + .5;
145 
146  testdist= pow((double)(win_x-r),2) + pow((double)(win_y-s),2);
147  testdist= pow(testdist,.5);
148 
149  if(testdist < maxdist) {
150 
151  isave=i;
152  maxdist=testdist;
153 
154  }
155 
156  }
157 
158 if(isave==-1)
159  return;
160 
161 reset_value=0;
162 
164 
166 
167 help_string=XmStringCreateLocalized("graph");
168 
169 argcount=0;
170 XtSetArg(args[argcount],XmNdeleteResponse,XmDO_NOTHING);argcount++;
171 XtSetArg(args[argcount],XmNautoUnmanage,False);argcount++;
172 XtSetArg(args[argcount],XmNwidth, 300);argcount++;
173 XtSetArg(args[argcount],XmNheight,350);argcount++;
174 XtSetArg(args[argcount],XmNbackground,mmap[1]);argcount++;
175 XtSetArg(args[argcount],XmNforeground,mmap[0]);argcount++;
176 
177 XtSetArg(args[argcount],XmNhelpLabelString,help_string);argcount++;
178 edit_dialog=XmCreateMessageDialog(drawing_area,"Edit Stations",args,argcount);
179 
180 XtAddCallback(edit_dialog,XmNokCallback,change_zcustom_file,(XtPointer)isave);
181 
182 XtAddCallback(edit_dialog,XmNcancelCallback,cancel_zedit,NULL);
183 
184 argcount=0;
185 XtSetArg(args[argcount],XmNbackground,mmap[1]);argcount++;
186 XtSetArg(args[argcount],XmNforeground,mmap[0]);argcount++;
187 XtSetArg(args[argcount],XmNorientation,XmVERTICAL);argcount++;
188 rowcol=XmCreateRowColumn(edit_dialog,"Edit Stations",args,argcount);
189 
190 strcpy(buf,zstation[isave].hb5);
191 strcat(buf," ");
192 strcat(buf,zstation[isave].parm);
193 t=XmStringCreateLocalized(buf);
194 argcount=0;
195 XtSetArg(args[argcount],XmNbackground,mmap[1]);argcount++;
196 XtSetArg(args[argcount],XmNforeground,mmap[0]);argcount++;
197 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
198 pbutton=XmCreateLabel(rowcol,"Label",args,argcount);
199 XtManageChild(pbutton);
200 XmStringFree(t);
201 
202 strcpy(buf,zstation[isave].name);
203 t=XmStringCreateLocalized(buf);
204 argcount=0;
205 XtSetArg(args[argcount],XmNbackground,mmap[1]);argcount++;
206 XtSetArg(args[argcount],XmNforeground,mmap[0]);argcount++;
207 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
208 pbutton=XmCreateLabel(rowcol,"Label",args,argcount);
209 XtManageChild(pbutton);
210 XmStringFree(t);
211 
212 if(zdata[pcpn_day].stn[isave].zlevel2[time_pos].data < 0)
213  strcpy(muf,"M");
214 else
215  sprintf(muf,"%5.2f",zdata[pcpn_day].stn[isave].zlevel2[time_pos].data);
216 
217 argcount=0;
218 XtSetArg(args[argcount],XmNvalue,muf);argcount++;
219 XtSetArg(args[argcount],XmNbackground,mmap[1]);argcount++;
220 XtSetArg(args[argcount],XmNforeground,mmap[0]);argcount++;
221 textz=XmCreateTextField(rowcol,"Point QPF",args,argcount);
222 XtManageChild(textz);
223 
224 t=XmStringCreateLocalized("Station quality");
225 
226 argcount=0;
227 XtSetArg(args[argcount],XmNbackground,mmap[1]);argcount++;
228 XtSetArg(args[argcount],XmNforeground,mmap[0]);argcount++;
229 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
230 pbutton=XmCreateLabel(rowcol,"Label",args,argcount);
231 XtManageChild(pbutton);
232 XmStringFree(t);
233 
234 if(initial_qual < 0 || zdata[pcpn_day].stn[isave].zlevel2[time_pos].data < 0)
235  naflag=1;
236 
237 else
238  naflag=0;
239 
240 
241 argcount=0;
242 XtSetArg(args[argcount],XmNbackground,mmap[1]);argcount++;
243 XtSetArg(args[argcount],XmNforeground,mmap[0]);argcount++;
244 XtSetArg(args[argcount],XmNpacking,XmPACK_COLUMN); argcount++;
245 XtSetArg(args[argcount],XmNnumColumns,2);argcount++;
246 XtSetArg(args[argcount],XmNorientation,XmVERTICAL);argcount++;
247 rowcol1=XmCreateRadioBox(rowcol,"Edit Stations",args,argcount);
248 
249 if(initial_qual==2) {
250 
251  st[0]="Manual";
252  st[1]="Reset to Original";
253 
254  for(i=0;i<2;i++) {
255 
256  argcount=0;
257  XtSetArg(args[argcount],XmNbackground,mmap[1]);argcount++;
258  XtSetArg(args[argcount],XmNforeground,mmap[0]);argcount++;
259  XtSetArg(args[argcount],XmNselectColor,cmap[4]);argcount++;
260 
261  if(i==0)
262  XtSetArg(args[argcount],XmNset,True);
263 
264  else
265  XtSetArg(args[argcount],XmNset,False);
266 
267  argcount++;
268 
269  pbutton=XmCreateToggleButton(rowcol1,st[i],args,argcount);
270  XtAddCallback(pbutton,XmNvalueChangedCallback,reset_zstation_quality,
271  (XtPointer)i);
272 
273  XtManageChild(pbutton);
274 
275 
276  }
277 
278 
279 }
280 
281 st[0]="Screened";
282 st[1]="Estimated";
283 st[2]="Bad";
284 
285 for(i=0;i<3;i++) {
286 
287  argcount=0;
288  XtSetArg(args[argcount],XmNbackground,mmap[1]);argcount++;
289  XtSetArg(args[argcount],XmNforeground,mmap[0]);argcount++;
290  XtSetArg(args[argcount],XmNselectColor,cmap[4]);argcount++;
291 
292  if(initial_qual==5 && i != 1)
293  continue;
294 
295  if(initial_qual!=5 && i==1)
296  continue;
297 
298  if(i==0 && initial_qual==8 && naflag != 1)
299  XtSetArg(args[argcount],XmNset,True);
300 
301  else if(i==1 && initial_qual==5 && naflag != 1)
302  XtSetArg(args[argcount],XmNset,True);
303 
304  else if(i==2 && initial_qual==1 && naflag != 1)
305  XtSetArg(args[argcount],XmNset,True);
306 
307  else
308  XtSetArg(args[argcount],XmNset,False);
309 
310  argcount++;
311 
312  pbutton=XmCreateToggleButton(rowcol1,st[i],args,argcount);
313  XtAddCallback(pbutton,XmNvalueChangedCallback,change_zstation_quality,
314  (XtPointer)(i));
315  XtManageChild(pbutton);
316 
317  if(naflag==1)
318  XtSetSensitive(pbutton,False);
319 
320 }
321 
322 if(zstation[isave].xadd==-1 && zstation[isave].yadd==-1)
323  initial_pos=0;
324 
325 else if(zstation[isave].xadd==0 && zstation[isave].yadd==-1)
326  initial_pos=2;
327 
328 else if(zstation[isave].xadd==-1 && zstation[isave].yadd==0)
329  initial_pos=1;
330 
331 else if(zstation[isave].xadd==0 && zstation[isave].yadd==0)
332  initial_pos=3;
333 
334 if(initial_qual != 5) {
335 
336 sep=XmCreateSeparator(rowcol,"swp",NULL,0);
337 
338 XtManageChild(sep);
339 
340 }
341 
342 t=XmStringCreateLocalized("Station Location");
343 argcount=0;
344 XtSetArg(args[argcount],XmNbackground,mmap[1]);argcount++;
345 XtSetArg(args[argcount],XmNforeground,mmap[0]);argcount++;
346 XtSetArg(args[argcount],XmNlabelString,t);argcount++;
347 pbutton=XmCreateLabel(rowcol,"Label",args,argcount);
348 XtManageChild(pbutton);
349 XmStringFree(t);
350 
351 argcount=0;
352 XtSetArg(args[argcount],XmNbackground,mmap[1]);argcount++;
353 XtSetArg(args[argcount],XmNforeground,mmap[0]);argcount++;
354 XtSetArg(args[argcount],XmNpacking,XmPACK_COLUMN); argcount++;
355 XtSetArg(args[argcount],XmNnumColumns,2);argcount++;
356 XtSetArg(args[argcount],XmNorientation,XmVERTICAL);argcount++;
357 rowcol3=XmCreateRadioBox(rowcol,"Edit Stations",args,argcount);
358 
359 st[0]="upper left";
360 st[1]="lower left";
361 st[2]="upper right";
362 st[3]="lower right";
363 
364 for(i=0;i<4;i++) {
365 
366  argcount=0;
367  XtSetArg(args[argcount],XmNbackground,mmap[1]);argcount++;
368  XtSetArg(args[argcount],XmNforeground,mmap[0]);argcount++;
369  XtSetArg(args[argcount],XmNselectColor,cmap[4]);argcount++;
370 
371  if(i==initial_pos)
372  XtSetArg(args[argcount],XmNset,True);
373 
374  else
375  XtSetArg(args[argcount],XmNset,False);
376 
377  argcount++;
378 
379  pbutton=XmCreateToggleButton(rowcol3,st[i],args,argcount);
380  XtAddCallback(pbutton,XmNvalueChangedCallback,change_zstation_location,
381  (XtPointer)(i));
382  XtManageChild(pbutton);
383 
384  }
385 
386 XtManageChild(rowcol1);
387 XtManageChild(rowcol3);
388 XtManageChild(rowcol);
389 XtManageChild(edit_dialog);
390 
391 }
392 void change_zstation_location(Widget w,XtPointer data,XtPointer call_data)
393 
394 {
395 
396 extern struct station zstation[500];
397 
398 if((int)data==0) {
399 
400  zstation[isave].xadd=-1;
401  zstation[isave].yadd=-1;
402 
403  }
404 
405 else if((int)data==2) {
406 
407  zstation[isave].xadd=0;
408  zstation[isave].yadd=-1;
409 
410  }
411 
412 else if((int)data==1) {
413 
414  zstation[isave].xadd=-1;
415  zstation[isave].yadd=0;
416 
417  }
418 
419 else if((int)data==3) {
420 
421  zstation[isave].xadd=0;
422  zstation[isave].yadd=0;
423 
424  }
425 
426 return;
427 
428 }
429 
430 
431 void change_zcustom_file(Widget w,XtPointer data, XtPointer call_data)
432 
433 {
434 
435 extern Widget rowcol1;
436 extern int map_flag;
437 extern int grids_flag;
438 extern int points_flag;
439 extern int pcp_flag;
440 extern Widget drawing_area;
441 extern Widget edit_dialog;
442 extern Widget diswidget[6];
443 extern struct zdata zdata[10];
444 extern int pcpn_time;
445 extern int pcpn_day;
446 extern Display *display;
447 extern Window window;
448 extern Widget top_level;
449 extern Cursor watch_cursor;
450 extern char zstation_list_custom_file[100];
451 extern char *timefile[];
452 int i;
453 extern int max_stations;
454 extern struct station zstation[500];
455 FILE *fp;
456 Cardinal argcount;
457 Arg args[10];
458 int time_pos;
459 char *p;
460 float val,fdif;
461 char *cstr;
462 int k;
463 extern int pcp_in_use[500];
464 Boolean bval;
465 float rtotal;
466 int m;
467 Widget rowcol;
468 XmString t;
469 extern int mmap[16];
470 Widget pbutton;
471 char muf[50];
472 extern Widget rpbutton;
473 extern int max_zstations;
474 
475 time_pos=pcpn_time;
476 
477 XDefineCursor(display,window,watch_cursor);
478 XmUpdateDisplay(top_level);
479 
480 fp=fopen(zstation_list_custom_file,"w");
481 
482 for(i=0;i<max_zstations;i++)
483  fprintf(fp,"%s %s %d %d\n",zstation[i].hb5,zstation[i].parm,
484  zstation[i].xadd,zstation[i].yadd);
485 
486 fclose(fp);
487 
488 argcount=0;
489 XtSetArg(args[argcount],XmNvalue,&cstr);argcount++;
490 XtGetValues(textz,args,argcount);
491 
492 val=atof(cstr);
493 p=strchr(cstr,'M');
494 XtFree(cstr);
495 
496 /* use manually entered data */
497 
498 fdif=fabs(val-zdata[pcpn_day].stn[isave].zlevel2[time_pos].data);
499 
500 if(fdif > .01 && p == NULL && reset_value==0) {
501 
502  zdata[pcpn_day].stn[isave].zlevel2[time_pos].data=val;
503  zdata[pcpn_day].stn[isave].zlevel2[time_pos].qual=2;
504 
505  }
506 
507 else {
508 
510 
511  /* 24 hour data set bad/good then 6 hourly bad/good also */
512 
513  }
514 
515 time_pos=100+pcpn_day*4 +pcpn_time;
516 
517 pcp_in_use[time_pos]=-1;
518 
519 if(zdata[pcpn_day].used[pcpn_time]!=0) {
520 
522 
523  }
524 
525 for(k=1;k<5;k++)
526  XtSetSensitive(diswidget[k],False);
527 
528 time_pos=100+pcp_flag;
529 
530 if(points_flag==1 && pcp_in_use[time_pos]==-1)
531  k=0;
532 
533 else if(points_flag==1 && grids_flag==-1 && map_flag==-1)
534  k=0;
535 
536 else if(points_flag==-1 && grids_flag==1 && map_flag==-1)
537  k=1;
538 
539 else if(points_flag==-1 && grids_flag==-1 && map_flag==1)
540  k=2;
541 
542 else if(points_flag==1 && grids_flag==1 && map_flag==-1)
543  k=3;
544 
545 else if(points_flag==1 && grids_flag==-1 && map_flag==1)
546  k=4;
547 
548 else if(points_flag==-1 && grids_flag==-1 && map_flag==-1)
549  k=5;
550 
551 XtSetArg(args[0],XmNmenuHistory,diswidget[k]);
552 XtSetValues(rowcol1,args,1);
553 
554 XtSetSensitive(rpbutton,True);
555 
556 XtDestroyWidget(edit_dialog);
557 
558 edit_dialog=NULL;
559 
560 write_screen();
561 
562 return;
563 
564 }
565 
566 static int hmflag=0;
567 
568 void change_zstation_quality(Widget w,XtPointer data, XtPointer call_data)
569 
570 {
571 
572 
573 extern int pcpn_day;
574 extern struct zdata zdata[10];
575 extern int pcpn_time;
576 extern struct station zstation[500];
577 int time_pos;
578 int k;
579 Arg args[10];
580 
581 hmflag++;
582 if(hmflag==1)
583  return;
584 
585 hmflag=0;
586 
587 if((int)data==0)
588  new_qual=8;
589 
590 else if((int)data==1)
591  new_qual=5;
592 
593 else if((int)data==2)
594  new_qual=1;
595 
596 }
597 
598 
600 
601 {
602 
603 extern Widget edit_dialog;
604 
605 XtDestroyWidget(edit_dialog);
606 
607 edit_dialog=NULL;
608 
609 }
610 
611 void reset_zstation_quality(Widget w,XtPointer data, XtPointer call_data)
612 
613 {
614 
615 extern int pcpn_day;
616 extern struct zdata zdata[10];
617 extern int pcpn_time;
618 int time_pos;
619 int k;
620 
621 time_pos=pcpn_time;
622 
623 if((int)data==1) {
624 
625 
626  for(k=0;k<5;k++) {
627 
630 
633 
634  }
635 
636  reset_value=1;
638 
639  }
640 
641 else
642  reset_value=0;
643 
644 
645 }
646 
647 
int max_stations
Definition: daily_qc.c:199
char s
Definition: build_list.c:122
char t
Definition: build_list.c:122
int points_flag
Definition: daily_qc.c:283
char zstation_list_custom_file[1000]
Definition: daily_qc.c:174
int pcpn_time
Definition: daily_qc.c:248
Widget rowcol1
Definition: daily_qc.c:53
struct station zstation[500]
Definition: daily_qc.c:196
unsigned long mmap[16]
Definition: daily_qc.c:226
void kill_widget(Widget widget, XtPointer client_data, XtPointer call_data)
Definition: daily_qc.c:6473
int pcp_in_use[500]
Definition: daily_qc.c:243
Widget diswidget[6]
Definition: daily_qc.c:218
Widget top_level
Definition: daily_qc.c:214
void write_screen()
Definition: daily_qc.c:1623
int dflag[10]
Definition: daily_qc.c:293
int pcpn_day
Definition: daily_qc.c:248
GC gc
Definition: daily_qc.c:224
int pcp_flag
Definition: daily_qc.c:246
Display * display
Definition: daily_qc.c:228
int max_zstations
Definition: daily_qc.c:45
Font font[10]
Definition: daily_qc.c:231
int map_flag
Definition: daily_qc.c:283
unsigned long cmap[16]
Definition: daily_qc.c:226
int zoom
Definition: daily_qc.c:289
char * timefile[]
Definition: daily_qc.c:144
Widget rpbutton
Definition: daily_qc.c:52
Window window
Definition: daily_qc.c:229
Widget drawing_area
Definition: daily_qc.c:214
int npoint[2]
Definition: daily_qc.c:289
Widget edit_dialog
Definition: daily_qc.c:100
int grids_flag
Definition: daily_qc.c:283
Cursor watch_cursor
Definition: daily_qc.c:220
int display_flag
Definition: daily_qc.c:268
int initial_qual
Definition: edit_zstations.c:6
int new_qual
Definition: edit_zstations.c:5
void change_zstation_quality(Widget w, XtPointer data, XtPointer call_data)
static int hmflag
int isave
Definition: edit_zstations.c:3
int initial_pos
Definition: edit_zstations.c:6
void change_zstation_location(Widget w, XtPointer data, XtPointer call_data)
void change_zcustom_file(Widget w, XtPointer data, XtPointer call_data)
int func[]
Definition: daily_qc.c:159
int reset_value
Definition: edit_zstations.c:4
Widget textz
Definition: edit_zstations.c:8
void cancel_zedit()
void reset_zstation_quality(Widget w, XtPointer data, XtPointer call_data)
void edit_zstations(int win_x, int win_y, unsigned int win_button)
float dmult[4]
Definition: misc.h:540
long xmin[4]
Definition: misc.h:534
long xmax[4]
Definition: misc.h:536
long ymax[4]
Definition: misc.h:537
long ymin[4]
Definition: misc.h:535
long ycen[4]
Definition: misc.h:539
long xcen[4]
Definition: misc.h:538
Definition: misc.h:397
double lo
Definition: misc.h:402
double a
Definition: misc.h:399
double yo
Definition: misc.h:401
double xo
Definition: misc.h:400
Definition: misc.h:232
float lat
Definition: misc.h:239
float lon
Definition: misc.h:240
char parm[10]
Definition: misc.h:237
int yadd
Definition: misc.h:246
char hb5[10]
Definition: misc.h:235
int xadd
Definition: misc.h:245
Definition: misc.h:200
struct ztn stn[500]
Definition: misc_new.h:442
int used[5]
Definition: misc_new.h:439
short int qual
Definition: misc_new.h:358
float data
Definition: misc_new.h:357
struct zlevel * zlevel2
Definition: misc_new.h:394
struct zlevel * zlevel1
Definition: misc_new.h:393