Daily_QC
group_edit_stations.c
Go to the documentation of this file.
1 #include "prototypes_new.h"
2 
3 void group_edit_stations(int win_x,int win_y,unsigned int win_button)
4 
5 {
6 extern int pcp_in_use[500];
7 extern Widget diswidget[3];
8 extern float filter_value;
9 extern struct ts ts[20];
10 extern int tsmax;
11 extern Widget edit_dialog;
12 extern int isom;
13 extern int gage_char[2];
14 extern int method;
15 extern int qflag[10];
16 extern struct pdata pdata[10];
17 extern unsigned long cmap[16];
18 extern Widget drawing_area;
19 extern struct station station[3000];
20 extern int max_stations;
21 extern Font font[10];
22 extern int npoint[2],zoom;
23 extern struct display_set display_set[4];
24 extern Display *display;
25 extern GC gc;
26 extern int mmap[16];
27 extern void kill_widget();
28 extern struct dval dval;
29 extern int dflag[10];
31 void change_custom_file();
34 void cancel_edit();
35 void set_snotel();
36 extern int pcpn_day,pcpn_time;
37 extern int pcpn_time_step;
38 Widget rowcol,rowcol3,pbutton,rowcol1,sep;
39 float conv=.0174;
40 int MY=10;
41 Arg args[10];
42 Cardinal argcount;
43 int i;
44 double testdist,maxdist;
45 int x,y;
46 XmString t;
47 Dimension width,height;
48 signed long XSIZE,YSIZE;
49 float xrat,yrat,mult;
50 int xmin,xmax,ymin,ymax,display_flag,xcen,ycen,h;
51 long lint1,lint2;
52 float dmult,lat,lon;
53 char *st[10],buf[100],muf[10];
54 long r,s;
55 int time_pos,naflag,m;
56 XmString help_string;
57 extern int group_qual;
58 int isave;
59 int k;
60 
61 
62 if(pcpn_time_step==0)
63  time_pos=pcpn_time;
64 
65 else
66  time_pos=4;
67 
68 XSetFont(display,gc,font[3]);
69 
70 /* need to set flag to plot */
71 
72 /* need to set resource in widget also */
73 
74 XSetFunction(display,gc,GXcopy);
75 
76 XtSetArg(args[0],XtNwidth,&width);
77 XtSetArg(args[1],XtNheight,&height);
78 XtGetValues(drawing_area,args,2);
79 
80 XSIZE=(long)width*10L;
81 YSIZE=(long)height*10L;
82 
83 xrat=(float)XSIZE/(float)12800;
84 yrat=(float)YSIZE/(float)9600;
85 
86 if(xrat < yrat)
87  mult=xrat;
88 
89 else
90  mult=yrat;
91 
92 display_flag=0;
93 h=0;
94 
96 xmin= display_set[display_flag].xmin[h];
97 xmax= display_set[display_flag].xmax[h];
98 ymin= display_set[display_flag].ymin[h];
99 ymax= display_set[display_flag].ymax[h];
100 xcen= display_set[display_flag].xcen[h];
101 ycen= display_set[display_flag].ycen[h];
102 
103 lint1=(long)npoint[0]*(long)MY;
104 lint2=(long)npoint[1]*(long)MY;
105 
106 x=win_x;
107 y=win_y;
108 
109 if(zoom==1) {
110 
111  win_x=x*MY/mult;
112  win_y=y*MY/mult;
113 
114  }
115 
116 else {
117 
118 
119  win_x=((x*MY-xcen)/zoom + lint1)/mult;
120  win_y=((y*MY-ycen)/zoom + lint2)/mult;
121 
122  }
123 
124 
125 if(zoom==1) {
126 
127  x=(win_x*mult)/MY;
128  y=(win_y*mult)/MY;
129 
130  }
131 
132 else {
133 
134  x=(((win_x*mult)-lint1)*zoom+xcen)/MY;
135  y=(((win_y*mult)-lint2)*zoom+ycen)/MY;
136 
137  }
138 
139 isave=-1;
140 maxdist=9999;
141 
142 for(i=0;i<max_stations;i++){
143 
144 
145  if(pdata[pcpn_day].stn[i].frain[time_pos].data < 0)
146  continue;
147 
148  if(pdata[pcpn_day].stn[i].frain[time_pos].data < filter_value)
149  continue;
150 
151  lat=station[i].lat;
152  lon=station[i].lon;
153 
154  if(station[i].tip==0 && gage_char[0]==-1)
155  continue;
156 
157  if(station[i].tip==1 && gage_char[1]==-1)
158  continue;
159 
160 
161  for(m=0;m<tsmax;m++) {
162 
163  if(strncmp(&station[i].parm[3],ts[m].abr,2)==0 && dflag[m+1] == 1)
164  break;
165 
166  }
167 
168 
169  if(m==tsmax)
170  continue;
171 
172 
173  for(m=0;m<9;m++) {
174 
175  if(m==pdata[pcpn_day].stn[i].frain[time_pos].qual &&
176  qflag[m]==1)
177  break;
178 
179  }
180 
181  if(m==9)
182  continue;
183 
184  r=dval.a * cos(lat*conv)/(1+sin(lat*conv))
185  * cos((lon-dval.lo-90)*conv) + dval.xo +.5;
186 
187  s=dval.a * cos(lat*conv)/(1+sin(lat*conv))
188  * sin((lon-dval.lo-90)*conv) + dval.yo + .5;
189 
190  testdist= pow((double)(win_x-r),2) + pow((double)(win_y-s),2);
191  testdist= pow(testdist,.5);
192 
193  if(testdist < maxdist) {
194 
195  isave=i;
196  maxdist=testdist;
197 
198  }
199 
200  }
201 
202 if(isave==-1)
203  return;
204 
205 
207 
208 if(group_qual==1 &&
209  time_pos==4 && pdata[pcpn_day].stn[isave].sflag[time_pos]==1) {
210 
211  pdata[pcpn_day].stn[isave].frain[time_pos].data=
212  pdata[pcpn_day].stn[isave].rain[time_pos].data;
213 
214  pdata[pcpn_day].stn[isave].sflag[time_pos]=-1;
215 
216  }
217 
218 if(time_pos==4 && ( group_qual==1 || group_qual==0 || group_qual==8)) {
219 
220  for(k=0;k<4;k++)
221  pdata[pcpn_day].stn[isave].frain[k].qual=group_qual;
222 
223  }
224 
225  /* 6 hour data set bad set 24 hour bad too */
226 
227 if(time_pos != 4 && group_qual==1 &&
228  pdata[pcpn_day].stn[isave].frain[4].qual != 5 &&
229  pdata[pcpn_day].stn[isave].frain[4].qual != 4)
231 
232 
233 for(k=0;k<5;k++) {
234 
235  if(k < 4)
236  time_pos=pcpn_day*4 +k;
237 
238  else
239  time_pos=40+pcpn_day;
240 
241  pcp_in_use[time_pos]=-1;
242 
243 
244  if(pdata[pcpn_day].used[k]!=0)
245  pdata[pcpn_day].used[k]=2;
246  }
247 
248 XtSetSensitive(diswidget[1],False);
249 XtSetSensitive(diswidget[2],False);
250 XtSetArg(args[0],XmNset,False);
251 XtSetValues(diswidget[1],args,1);
252 XtSetArg(args[0],XmNset,False);
253 XtSetValues(diswidget[2],args,1);
254 
255 write_screen();
256 
257 return;
258 
259 }
int max_stations
Definition: daily_qc.c:199
char s
Definition: build_list.c:122
char t
Definition: build_list.c:122
int pcpn_time
Definition: daily_qc.c:248
Widget rowcol1
Definition: daily_qc.c:53
int pcpn_time_step
Definition: daily_qc.c:238
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
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
Display * display
Definition: daily_qc.c:228
Font font[10]
Definition: daily_qc.c:231
unsigned long cmap[16]
Definition: daily_qc.c:226
float filter_value
Definition: daily_qc.c:119
int qflag[10]
Definition: daily_qc.c:293
int group_qual
Definition: daily_qc.c:67
int gage_char[2]
Definition: daily_qc.c:161
int zoom
Definition: daily_qc.c:289
int tsmax
Definition: daily_qc.c:87
Widget drawing_area
Definition: daily_qc.c:214
int npoint[2]
Definition: daily_qc.c:289
int isom
Definition: daily_qc.c:141
Widget edit_dialog
Definition: daily_qc.c:100
int method
Definition: daily_qc.c:254
int display_flag
Definition: daily_qc.c:268
char qual[10]
Definition: display_data.c:29
int isave
void change_station_quality(Widget w, XtPointer data, XtPointer call_data)
void reset_station_quality(Widget w, XtPointer data, XtPointer call_data)
void cancel_edit()
void change_custom_file(Widget w, XtPointer data, XtPointer call_data)
void change_station_location(Widget w, XtPointer data, XtPointer call_data)
void group_edit_stations(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:216
int used[5]
Definition: misc.h:219
struct stn stn[1500]
Definition: misc.h:222
float data
Definition: misc.h:193
short int qual
Definition: misc.h:194
Definition: misc.h:232
float lat
Definition: misc.h:239
float lon
Definition: misc.h:240
Definition: misc.h:200
struct rain rain[5]
Definition: misc.h:202
struct rain frain[5]
Definition: misc.h:203
short int * sflag
Definition: misc_new.h:385
Definition: misc_new.h:35