Daily_QC
group_edit_tstations.c
Go to the documentation of this file.
1 #include "prototypes_new.h"
2 
3 void group_edit_tstations(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 tdata tdata[10];
17 extern unsigned long cmap[16];
18 extern Widget drawing_area;
19 extern struct station tstation[1000];
20 extern int max_tstations;
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 printf("start\n");
62 
63 if(pcpn_time_step==0)
64  time_pos=pcpn_time;
65 
66 else if(pcpn_time_step==1)
67  time_pos=4;
68 
69 else if(pcpn_time_step==2)
70  time_pos=5;
71 
72 XSetFont(display,gc,font[3]);
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_tstations;i++){
143 
144 
145  if(tdata[pcpn_day].stn[i].tlevel2[time_pos].data ==-99 )
146  continue;
147 
148  lat=tstation[i].lat;
149  lon=tstation[i].lon;
150 
151 
152  for(m=0;m<tsmax;m++) {
153 
154  if(strncmp(&tstation[i].parm[3],ts[m].abr,2)==0 && dflag[m+1] == 1)
155  break;
156 
157  }
158 
159 
160  if(m==tsmax)
161  continue;
162 
163 
164  for(m=0;m<9;m++) {
165 
166  if(m==tdata[pcpn_day].stn[i].tlevel2[time_pos].qual &&
167  qflag[m]==1)
168  break;
169 
170  }
171 
172  if(m==9)
173  continue;
174 
175  r=dval.a * cos(lat*conv)/(1+sin(lat*conv))
176  * cos((lon-dval.lo-90)*conv) + dval.xo +.5;
177 
178  s=dval.a * cos(lat*conv)/(1+sin(lat*conv))
179  * sin((lon-dval.lo-90)*conv) + dval.yo + .5;
180 
181  testdist= pow((double)(win_x-r),2) + pow((double)(win_y-s),2);
182  testdist= pow(testdist,.5);
183 
184  if(testdist < maxdist) {
185 
186  isave=i;
187  maxdist=testdist;
188 
189  }
190 
191  }
192 
193 if(isave==-1)
194  return;
195 
197 
198 if(pcpn_time_step==0)
199  time_pos=150+pcpn_day*4+pcpn_time;
200 
201 else if(pcpn_time_step==1)
202  time_pos=190+pcpn_day;
203 
204 else if(pcpn_time_step==2)
205  time_pos=200+pcpn_day;
206 
207 pcp_in_use[time_pos]=-1;
208 
210 
211 if(pcpn_time_step==1 || pcpn_time_step==2) {
212 
213 for(k=0;k<4;k++) {
214 
215  time_pos=150+pcpn_day*4+k;
216 
217  pcp_in_use[time_pos]=-1;
218 
219  if(tdata[pcpn_day].used[k]!=0)
220  tdata[pcpn_day].used[k]=2;
221 }
222 
223 }
224 
225 XtSetSensitive(diswidget[1],False);
226 XtSetSensitive(diswidget[2],False);
227 XtSetArg(args[0],XmNset,False);
228 XtSetValues(diswidget[1],args,1);
229 XtSetArg(args[0],XmNset,False);
230 XtSetValues(diswidget[2],args,1);
231 
232 write_screen();
233 
234 return;
235 
236 }
struct station tstation[1000]
Definition: daily_qc.c:197
int max_tstations
Definition: daily_qc.c:46
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 reset_tstation_quality(Widget w, XtPointer data, XtPointer call_data)
void change_tstation_location(Widget w, XtPointer data, XtPointer call_data)
void change_tstation_quality(Widget w, XtPointer data, XtPointer call_data)
void cancel_edit()
void change_custom_file(Widget w, XtPointer data, XtPointer call_data)
void group_edit_tstations(int win_x, int win_y, unsigned int win_button)
printf("pcp %d\n", pcp_in_use[103])
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
Definition: misc.h:200
int used[6]
Definition: misc_new.h:449
struct ttn stn[1000]
Definition: misc_new.h:452
char qual
Definition: misc_new.h:401
Definition: misc_new.h:35
struct tlevel * tlevel2
Definition: misc_new.h:411