Daily_QC
time_series.c
Go to the documentation of this file.
1 #include "prototypes_new.h"
2 
3 void time_series(int win_x,int win_y,unsigned int win_button)
4 
5 {
6 extern struct ts ts[20];
7 extern int tsmax;
8 extern char scratch_file[100];
9 extern int gage_char[2];
10 extern Cursor watch_cursor;
11 extern Cursor dotbox_cursor;
12 extern Widget top_level;
13 extern Window window;
14 extern Widget drawing_area;
15 extern Display *display;
16 int isave;
17 extern struct pdata pdata[10];
18 extern int qflag[10];
19 extern struct station station[3000];
20 extern int max_stations;
21 extern int npoint[2],zoom;
22 extern struct display_set display_set[4];
23 extern struct dval dval;
24 extern int dflag[10];
25 extern int pcpn_day,pcpn_time;
26 extern int pcpn_time_step;
27 float conv=.0174;
28 int MY=10;
29 Arg args[10];
30 int i;
31 double testdist,maxdist;
32 int x,y;
33 Dimension width,height;
34 signed long XSIZE,YSIZE;
35 float xrat,yrat,mult;
36 int xmin,xmax,ymin,ymax,display_flag,xcen,ycen,h;
37 long lint1,lint2;
38 float dmult,lat,lon;
39 char cmd[100],pc[10];
40 long r,s;
41 int time_pos,m;
42 char tbuf[50];
43 time_t ctime;
44 struct tm *gm;
45 
46 if(pcpn_time_step==0)
47  time_pos=pcpn_time;
48 
49 else
50  time_pos=4;
51 
52 /* need to set flag to plot */
53 
54 /* need to set resource in widget also */
55 
56 XtSetArg(args[0],XtNwidth,&width);
57 XtSetArg(args[1],XtNheight,&height);
58 XtGetValues(drawing_area,args,2);
59 
60 XSIZE=(long)width*10L;
61 YSIZE=(long)height*10L;
62 
63 xrat=(float)XSIZE/(float)12800;
64 yrat=(float)YSIZE/(float)9600;
65 
66 if(xrat < yrat)
67  mult=xrat;
68 
69 else
70  mult=yrat;
71 
72 display_flag=0;
73 h=0;
74 
76 xmin= display_set[display_flag].xmin[h];
77 xmax= display_set[display_flag].xmax[h];
78 ymin= display_set[display_flag].ymin[h];
79 ymax= display_set[display_flag].ymax[h];
80 xcen= display_set[display_flag].xcen[h];
81 ycen= display_set[display_flag].ycen[h];
82 
83 lint1=(long)npoint[0]*(long)MY;
84 lint2=(long)npoint[1]*(long)MY;
85 
86 x=win_x;
87 y=win_y;
88 
89 if(zoom==1) {
90 
91  win_x=x*MY/mult;
92  win_y=y*MY/mult;
93 
94  }
95 
96 else {
97 
98 
99  win_x=((x*MY-xcen)/zoom + lint1)/mult;
100  win_y=((y*MY-ycen)/zoom + lint2)/mult;
101 
102  }
103 
104 
105 if(zoom==1) {
106 
107  x=(win_x*mult)/MY;
108  y=(win_y*mult)/MY;
109 
110  }
111 
112 else {
113 
114  x=(((win_x*mult)-lint1)*zoom+xcen)/MY;
115  y=(((win_y*mult)-lint2)*zoom+ycen)/MY;
116 
117  }
118 
119 isave=-1;
120 maxdist=9999;
121 
122 for(i=0;i<max_stations;i++){
123 
124  lat=station[i].lat;
125  lon=station[i].lon;
126 
127  if(station[i].tip==0 && gage_char[0]==-1)
128  continue;
129 
130  if(station[i].tip==1 && gage_char[1]==-1)
131  continue;
132 
133  for(m=0;m<tsmax;m++) {
134 
135  if(strncmp(&station[i].parm[3],ts[m].abr,2)==0 && dflag[m+1] == 1)
136  break;
137  }
138 
139  if(m==tsmax)
140  continue;
141 
142  for(m=0;m<9;m++) {
143 
144  if(m==pdata[pcpn_day].stn[i].frain[time_pos].qual &&
145  qflag[m]==1)
146  break;
147 
148  }
149 
150  if(m==9)
151  continue;
152 
153  r=dval.a * cos(lat*conv)/(1+sin(lat*conv))
154  * cos((lon-dval.lo-90)*conv) + dval.xo +.5;
155 
156  s=dval.a * cos(lat*conv)/(1+sin(lat*conv))
157  * sin((lon-dval.lo-90)*conv) + dval.yo + .5;
158 
159  testdist= pow((double)(win_x-r),2) + pow((double)(win_y-s),2);
160  testdist= pow(testdist,.5);
161 
162  if(testdist < maxdist) {
163 
164  isave=i;
165  maxdist=testdist;
166 
167  }
168 
169  }
170 
171 if(isave==-1)
172  return;
173 
174 strcpy(pc,station[isave].parm);
175 
176 pc[3]='R';
177 if(pc[4]!='Z') {
178 
179  pc[1]='C';
180  pc[2]='I';
181 
182  }
183 
184 else
185  pc[2]='D';
186 
187 ctime=pdata[0].data_time;
188 
189 gm=gmtime(&ctime);
190 
191 /*display_data(station[isave].hb5,pc,gm->tm_mon+1,gm->tm_mday,gm->tm_year+1900,12,15,scratch_file);*/
192 
193 }
194 
195 
196 
int max_stations
Definition: daily_qc.c:199
char s
Definition: build_list.c:122
int pcpn_time
Definition: daily_qc.c:248
int pcpn_time_step
Definition: daily_qc.c:238
Widget top_level
Definition: daily_qc.c:214
int dflag[10]
Definition: daily_qc.c:293
int pcpn_day
Definition: daily_qc.c:248
char scratch_file[1000]
Definition: daily_qc.c:137
Display * display
Definition: daily_qc.c:228
Cursor dotbox_cursor
Definition: daily_qc.c:222
int qflag[10]
Definition: daily_qc.c:293
int gage_char[2]
Definition: daily_qc.c:161
int zoom
Definition: daily_qc.c:289
int tsmax
Definition: daily_qc.c:87
Window window
Definition: daily_qc.c:229
Widget drawing_area
Definition: daily_qc.c:214
int npoint[2]
Definition: daily_qc.c:289
Cursor watch_cursor
Definition: daily_qc.c:220
int display_flag
Definition: daily_qc.c:268
char qual[10]
Definition: display_data.c:29
int isave
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
time_t data_time
Definition: misc.h:218
Definition: misc.h:232
float lat
Definition: misc.h:239
float lon
Definition: misc.h:240
Definition: misc.h:200
Definition: misc_new.h:35
void time_series(int win_x, int win_y, unsigned int win_button)
Definition: time_series.c:3