Linuxpops  3.01.04
Spectral Anaysis Package for Single Dish Data
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
spectra.c
Go to the documentation of this file.
1 #include "ds_extern.h"
2 #include "ds_proto.h"
3 
4 #define TRUE 1
5 #define FALSE 0
6 
7 #define N_INTEG_CHANS 10
8 
9 #define ROW0 0.96
10 #define ROW1 0.92
11 #define ROW2 0.88
12 #define ROW3 0.84
13 
14 static int font0 = FONT_SIZE_SMALL;
15 //static int font1 = FONT_SIZE_NORMAL;
16 //static int font2 = FONT_SIZE_BIG;
17 
18 float startRes;
21 extern int datalen, scan, parallel, lockScale,
23 
24 extern char filenames[16][256], *filename_ctssource[];
25 
26 extern struct SPECTRA_DISPLAY_PARAMS sdp[];
27 
28 char *months[] = { "Jan","Feb","Mar","Apr","May","Jun",
29  "Jul","Aug","Sep","Oct","Nov","Dec" };
30 
31 
32 int doTPprocess = 0;
33 int doFsProcess = 0;
34 int ignorePos = 0;
35 int wasOn = 0;
36 int spcIF = 0;
37 int domarker = 0;
38 int fitChan[2] = { 1, 2 };
39 
40 double workingTsys = 0.0;
41 float workingX[32768];
42 float workingY[32768];
43 
44 struct DS_IMAGE_INFO sc_image, *last_image=NULL;
45 
46 #ifdef TOMMIE
47 int doingSpecFive = 0;
48 int auto_locate = 1;
49 int off_center_line = 0;
50 
51 float sfxb[] = { 0.20, 0.20, 0.20, 0.05, 0.35 };
52 float sfxe[] = { 0.30, 0.30, 0.30, 0.15, 0.45 };
53 float sfyb[] = { 0.60, 0.13, 0.35, 0.35, 0.35 };
54 float sfye[] = { 0.85, 0.35, 0.60, 0.60, 0.60 };
55 
56 struct _SPEC_FIVE {
57  int set;
58  float a, b, rms;
59  double itg_value;
60  struct HEADER head;
61  float data[MAX_DATA_CHANNELS];
62 };
63 struct _SPEC_FIVE specfives[5][20]; /* 5 scans for 9 backends */
64 
65 int specFiveChannel = 0;
66 
67 
68 int docross = 0;
69 int dofft = 0;
70 /*
71 rfftw_plan fftplan = NULL;
72  */
73 
74 struct SPEC_FIVE_PARAMS {
75  int active;
76  int cc;
77  int b1;
78  int b2;
79  int b3;
80  int b4;
81 };
82 
83 struct SPEC_FIVE_PARAMS sfp;
84 #endif
85 
86 int zerodata = 0;
87 
88 struct SPEC_SCANS {
89  float scan;
90  struct SPEC_SCANS *next;
91 };
93 
94 
95 int display_spectra(xb, xe, yb, ye, data, head, procSpec)
96 float xb, xe, yb, ye;
97 float *data;
98 struct HEADER *head;
99 int procSpec;
100 {
101  float *xdata, freqres;
102  int i, noint;
103  float scale;
104  char temp[80];
105 
106  if(debug)
107  {
108  log_msg("display_spectra();");
109  }
110 
111  noint = (int)head->noint;
112  datalen = (int)head->datalen/sizeof(float);
113 
114  zerodata = 0;
115  if(!lockScale)
116  {
117  if( determine_min_max(data, noint, head->scan))
118  {
119  zerodata = 1;
120  }
121  }
122 
123  scale = ye -yb;
124  sprintf(temp, " %7.2f %8.8s", head->scan, head->backend);
125  xgr_drawText(xb, 0.905*scale + yb, temp, RED, font0);
126  xgr_drawBox(xb, 0.05*scale + yb, xe, 0.90*scale + yb, GRAY50);
127 
128  /* Initialize the x-axis data points */
129  if( (xdata = (float *)malloc((unsigned)(noint*sizeof(float)))) == NULL)
130  {
131  log_perror("malloc(xdata)");
132  return(-1);
133  }
134  /* Set the x-axis data points */
135  freqres = head->freqres;
136 
137  startRes = (float)head->refpt*freqres;
138 
139  if( head->sideband == 1.0) /* LSB */
140  {
141  for(i=0;i<noint;i++)
142  {
143  xdata[i] = startRes - ((float)i*freqres);
144  }
145  }
146  else
147  {
148  for(i=0;i<noint;i++) /* USB */
149  {
150  xdata[i] = -startRes + ((float)i*freqres);
151  }
152  }
153 
154  globalStart = xdata[0];
155  globalStop = xdata[noint-1];
156  xgr_drawBin(xdata, data, noint, GREEN);
157 
158  if(zerodata)
159  {
160  xgr_drawText(xb, 0.8*scale + yb, "Data is Zero", RED, font0);
161  }
162 
163  free((char *)xdata);
164 
165  return(1);
166 }
167 
168 
169 
171 char *buf;
172 {
173  int i, b, e;
174  char *cp, tb[80];
175  char tmp[256];;
176 
177  strcpy(tmp, buf);
178 
179  cp = strtok(tmp,"\n\t ");
180  if(cp)
181  {
182  b = atoi(cp);
183  }
184  else
185  {
186  log_msg("do_spectraCombine(), no begin scan specified");
187  return(1);
188  }
189 
190  cp = strtok((char *)NULL,"\n\t ");
191  if(cp)
192  {
193  e = atoi(cp);
194  }
195  else
196  {
197  log_msg("do_spectraCombine(), no begin scan specified");
198  return(1);
199  }
200 
201  cp = strtok((char *)NULL,"\n\t ");
202  if(cp)
203  {
204  spcIF = atoi(cp);
205  }
206  else
207  {
208  log_msg("do_spectraCombine(), no IF specified");
209  return(1);
210  }
211 
212  strcpy(sc_image.magic, "DS_IMAGE_INFO");
213 
214  for(i=b;i<=e;i++)
215  {
216  sprintf(tb,"%d",i);
217  fbScanDone = 1;
218  aosScanDone = 3;
219  do_scanDone(tb);
220 
221  if(ds_delay(0.0))
222  {
223  break;
224  }
225  }
226 
227  do_sendSpecComb();
228 
229  spcIF = 0;
230 
231  return(0);
232 }
233 
234 
236 {
237  int i, j, k, n, indx, fac;
238  double accumX, accumY;
239 
240  if(sc_image.scanct == 0)
241  {
242  return(1);
243  }
244 
245  sc_image.doBaseline = getBaselines(sc_image.baselines);
246  computeBaseLine(0, workingY, &sc_image.a, &sc_image.b, &sc_image.rms, sc_image.scan_noint, 1);
247 
248  if(sc_image.scan_noint > 1024)
249  {
250  n = sc_image.scan_noint;
251  fac = n / 1024;
252  j = 0;
253  indx = 0;
254 
255  for(i=0;i<1024;i++)
256  {
257  accumX = 0.0;
258  accumY = 0.0;
259  for(k=0;k<fac;k++)
260  {
261  accumX += workingX[indx];
262  accumY += workingY[indx++];
263  }
264 
265  if(sc_image.doBaseline)
266  sc_image.ydata[j++] = accumY / fac -((float)i *sc_image.a +sc_image.b);
267  else
268  sc_image.ydata[j++] = accumY / fac;
269 
270  }
271  sc_image.noint = 1024;
272  }
273  else
274  {
275  if(sc_image.doBaseline)
276  {
277  for(i=0;i<sc_image.noint;i++)
278  sc_image.ydata[i] = workingY[i] - ((float)i * sc_image.a + sc_image.b);
279  }
280  else
281  {
282  for(i=0;i<sc_image.noint;i++)
283  sc_image.ydata[i] = workingY[i];
284  }
285 
286  /*
287  bcopy((char *)&workingX,(char *)sc_image.xdata,sc_image.noint*sizeof(float));
288  */
289  }
290  sc_image.tsys = (float)(workingTsys / (double)sc_image.scanct);
291  write(1, &sc_image, sizeof(struct DS_IMAGE_INFO));
292  return(0);
293 }
294 
295 
296 
298 {
299  bzero((char *)&sc_image, sizeof(struct DS_IMAGE_INFO));
300  bzero((char *)&workingX, sizeof(workingX));
301  bzero((char *)&workingY, sizeof(workingY));
302  remSpecScans();
303  workingTsys = 0.0;
304 
305  return(0);
306 }
307 
308 
309 int combineData(xdata, yd, head)
310 float *xdata, *yd;
311 struct HEADER *head;
312 {
313  int k, chan;
314  float *i, iwt, *o, owt;
315 
316  chan = (int)((head->scan - (int)head->scan) * 100.0 + 0.005) - 1;
317 
318  log_msg("CHAN = %d", chan);
319 
320 /* Be advised that spcIF is one-based IF# */
321  if(spcIF && sdp[spcIF-1].head == head)
322  {
323  if(checkSpecScans(head->scan))
324  {
325  log_msg("Scan %.2f already in Spectral Accum", head->scan);
326  return(1);
327  }
328 
329  if(sc_image.freqres == 0.0)
330  sc_image.freqres = (float)head->freqres;
331 
332  if( fabs(sc_image.freqres - (float)head->freqres) > 0.029 )
333  {
334  log_msg("specCombineData(), Freq Res %.3f, scan #%.2f not the same",
335  head->freqres, head->scan);
336  return(1);
337  }
338  if(sc_image.ra == 0.0)
339  sc_image.ra = (float)head->epocra / 15.0;
340 
341  if( fabs(sc_image.ra - (float)head->epocra / 15.0 ) > 0.001 && !ignorePos)
342  {
343  log_msg("specCombineData(), Ra %.3f, scan #%.2f not the same", head->epocra, head->scan);
344  return(1);
345  }
346  if(sc_image.dec == 0.0)
347  sc_image.dec = (float)head->epocdec;
348 
349  if( fabs(sc_image.dec - (float)head->epocdec) > 0.001 && !ignorePos)
350  {
351  log_msg("specCombineData(), Dec %.3f, scan #%.2f not the same", head->epocdec, head->scan);
352  return(1);
353  }
354 
355  if(sc_image.noint == 0)
356  sc_image.noint = sc_image.scan_noint = (int)head->noint;
357 
358  if( sc_image.scan_noint != (int)head->noint )
359  {
360  log_msg("specCombineData(), Noint %3d, scan #%.2f not the same as accumalator %3d", (int)head->noint, head->scan, sc_image.scan_noint);
361  return(1);
362  }
363  if(sc_image.sb == 0)
364  sc_image.sb = (int)head->sideband;
365 
366  if( sc_image.sb != (int)head->sideband )
367  {
368  log_msg("specCombineData(), Sb %d, scan #%.2f not the same", head->sideband, head->scan);
369  return(1);
370  }
371  if(sc_image.freq == 0.0)
372  sc_image.freq = head->restfreq;
373 
374  if( fabs(sc_image.freq - head->restfreq) > 0.0001 )
375  {
376  log_msg("specCombineData(), Freq %.5f, scan #%.2f not the same",
377  head->restfreq/1000.0, head->scan);
378  return(1);
379  }
380  if(sc_image.vel == 0.0)
381  sc_image.vel = (float)head->refpt_vel;
382 
383  if( fabs(sc_image.vel - (float)head->refpt_vel) > 0.0001 && !ignorePos)
384  {
385  log_msg("specCombineData(), Vel %.3f, scan #%.2f not the same", head->refpt_vel, head->scan);
386  return(1);
387  }
388  if(sc_image.cal == 0.0)
389  sc_image.cal = (float)head->tcal;
390 
391  if( fabs(sc_image.cal - (float)head->tcal) > 100.0 )
392  {
393  log_msg("specCombineData(), Tcal %.1f, scan #%.2f not the same", head->tcal, head->scan);
394  return(1);
395  }
396 
397  if(sc_image.bscan == 0.0)
398  sc_image.bscan = (float)head->scan;
399 
400  sc_image.synfreq = head->synfreq;
401  sc_image.escan = (float)head->scan;
402  sc_image.date = (float)head->utdate;
403  sc_image.dv = (float)head->deltax;
404 
405  log_msg("specCombineData(), adding scan %.2f", head->scan);
406  sc_image.scanct++;
407  addSpecScans(head->scan);
408 
409  strncpy(sc_image.source, head->object, 16);
410  sc_image.source[15] = '\0';
411  strncpy(sc_image.coordcd, head->coordcd, 8);
412  sc_image.coordcd[7] = '\0';
413 
414  sc_image.row = -1;
415  sc_image.col = -1;
416  sc_image.time += (float)head->inttime;
417  workingTsys += head->stsys;
418 
419  iwt = head->inttime / ( head->stsys * head->stsys );
420  owt = sc_image.wt;
421 
422  i = yd;
423  o = workingY;
424 
425  for(k=0;k<sc_image.scan_noint;k++, i++, o++)
426  *o = (*o * owt + *i * iwt) / (owt + iwt);
427 
428  sc_image.wt += iwt;
429 
430  bcopy((char *)xdata, (char *)&workingX, sc_image.scan_noint*sizeof(float));
431  }
432 
433  return(0);
434 }
435 
436 
437 
438 
440 {
441  struct SPEC_SCANS *p;
442  struct SPEC_SCANS *q;
443 
444  for(p=spec_scans_head; p; p=q)
445  {
446  q = p->next;
447  if(p)
448  free((char *)p);
449  }
450  spec_scans_head = NULL;
451 
452  return(0);
453 }
454 
455 
456 
458 float s;
459 {
460  struct SPEC_SCANS *m;
461 
462  if(spec_scans_head == NULL)
463  {
464  if((spec_scans_head=(struct SPEC_SCANS *)malloc((unsigned)(sizeof(struct SPEC_SCANS))))==NULL)
465  {
466  log_msg("Error of addSpecScans(malloc(%d))", sizeof(struct SPEC_SCANS));
467  fprintf(stderr,"Error of addSpecScans(malloc(%ld))\n", sizeof(struct SPEC_SCANS));
468  return(1);
469  }
470  spec_scans_head->scan = s;
471  spec_scans_head->next = NULL;
472  return(0);
473  }
474 
475  for(m=spec_scans_head;m->next; m=m->next)
476  {
477  ;
478  }
479 
480  if((m->next=(struct SPEC_SCANS *)malloc((unsigned)(sizeof(struct SPEC_SCANS))))==NULL)
481  {
482  log_msg("Error of addSpecScans(malloc(%d))", sizeof(struct SPEC_SCANS));
483  fprintf(stderr,"Error of addSpecScans(malloc(%ld))\n", sizeof(struct SPEC_SCANS));
484  return(1);
485  }
486 
487  m->next->scan = s;
488  m->next->next = NULL;
489  return(0);
490 }
491 
492 
493 
495 float s;
496 {
497  struct SPEC_SCANS *m;
498 
499  if(spec_scans_head == NULL)
500  return(0);
501 
502  for(m=spec_scans_head;m->next; m=m->next)
503  if(m)
504  if(m->scan == s)
505  return(1);
506 
507  if(m)
508  if(m->scan == s)
509  return(1);
510 
511  return(0);
512 }
513 
514 
515 int do_ignorePos(buf)
516 char *buf;
517 {
518  if(buf)
519  ignorePos = atoi(buf);
520 
521  return(0);
522 }
523 
524 
525 int putHeader(image)
526 struct DS_IMAGE_INFO *image;
527 {
528  int mon, day, yr;
529  char raStr[20], decStr[20], timeStr[20], mapStr[60], buf[256];
530  extern struct XGR_ *server;
531 
532  xgr_setFont(server, font0);
533 
534  sexagesimal(image->time / 3600, timeStr, DDD_MM_SS_S100);
535  strcmprs(timeStr);
536 
537  sexagesimal(image->ra, raStr, DD_MM_SS);
538  sexagesimal(image->dec, decStr, DD_MM_SS);
539 
540  yr = (int)image->date;
541  mon = (int)((image->date - (float)yr) * 100.0);
542  day = (int)((image->date - (float)yr) * 10000.0 +0.5)-mon*100.0;
543 
544  sprintf(buf, "%16.16s %3d SCANS: %7.2f-%7.2f INT=%s DATE: %2d %s %2.2d",
545  image->source,
546  image->scanct,
547  image->bscan,
548  image->escan,
549  timeStr, day, months[mon-1], yr-2000);
550 
551  xgr_drawText(0.05, ROW0, buf, MAGENTA, font0);
552 
553  if(image->col >=0)
554  {
555  sprintf(mapStr," Col %3d Row %3d ", image->col,image->row);
556  }
557  else
558  {
559  sprintf(mapStr, "( %s %s )", raStr, decStr);
560  }
561 
562  sprintf(buf, "%s=%s %s %s CAL= %5.1f TSYS= %5.0f",
563  image->coordcd,
564  raStr,
565  decStr,
566  mapStr,
567  image->cal,
568  image->tsys);
569 
570  xgr_drawText(0.05, ROW1, buf, MAGENTA, font0);
571 
572  sprintf(buf, "FREQ= %.2f SYN= %10.8f VEL= %7.1f DV= %6.2f FR= %4.0f SB= %d",
573  image->freq,
574  image->synfreq / 1000.0,
575  image->vel,
576  image->dv,
577  image->freqres * 1000.0,
578  image->sb );
579  xgr_drawText(0.05, ROW2, buf, MAGENTA, font0);
580 
581  sprintf(buf, "Rms %8.3fK",image->rms);
582  xgr_drawText(0.80, ROW3, buf, MAGENTA, font0);
583 
584  return(0);
585 }
586 
587 
588 
589 int display_image(xb, xe, yb, ye, im)
590 float xb, xe, yb, ye;
591 struct DS_IMAGE_INFO *im;
592 {
593  float *xdata;
594  int i, noint;
595  float scale;
596 // char temp[80];
597  float *data;
598 
599  if(debug)
600  {
601  log_msg("display_image();");
602  }
603 
604  data = &im->ydata[0];
605 
606  noint = (int)im->noint;
607 
608  zerodata = 0;
609  if(!lockScale)
610  {
611  if( determine_min_max(data, noint, im->bscan))
612  {
613  zerodata = 1;
614  }
615  }
616 
617  scale = ye -yb;
618 // sprintf(temp, " %7.2f %8.8s", im->scan, im->backend);
619 // xgr_drawText(xb, 0.905*scale + yb, temp, RED, font0);
620  xgr_drawBox(xb, 0.05*scale + yb, xe, 0.90*scale + yb, GRAY50);
621 
622  /* Initialize the x-axis data points */
623  if( (xdata = (float *)malloc((unsigned)(noint*sizeof(float)))) == NULL)
624  {
625  log_perror("malloc(xdata)");
626  return(-1);
627  }
628 
629 #ifdef TOMMIE
630  /* Set the x-axis data points */
631  startRes = (float)im->refpt*im->freqres;
632 
633  if( im->sb == 2.0) /* LSB */
634  {
635  for(i=0;i<noint;i++)
636  {
637  xdata[i] = startRes + ((float)i*im->freqres);
638  }
639  }
640  else
641  {
642  for(i=0;i<noint;i++) /* USB */
643  {
644  xdata[i] = -startRes - ((float)i*im->freqres);
645  }
646  }
647 #else
648  for(i=0;i<noint;i++)
649  {
650  xdata[i] = (float)i;
651  }
652 #endif
653 
654  globalStart = xdata[0];
655  globalStop = xdata[noint-1];
656 
657  xgr_drawBin(xdata, data, noint, GREEN);
658 
659  if(zerodata)
660  {
661  xgr_drawText(xb, 0.8*scale + yb, "Data is Zero", RED, font0);
662  }
663 
664  free((char *)xdata);
665 
666  return(1);
667 }
668 
669 
670 int doSpecPlot(im)
671 struct DS_IMAGE_INFO *im;
672 {
673  log_msg("doSpecPlot(): depreceiated");
674 
675  return(0);
676 }
677 
678 
680 {
681  if(debug)
682  {
683  log_msg("doSpecWinRepaint()");
684  }
685 
686  if(last_image)
687  {
688  doSpecPlot(last_image);
689  }
690 
691  return(0);
692 }
693 
694 
696 {
697  if(debug)
698  {
699  log_msg("doSpecWinReSize()");
700  }
701 
702  return(0);
703 }
704 
705 
706 int putChanTemp(c, t)
707 int c;
708 float t;
709 {
710  log_msg("putChanTemp(): depreceiated");
711 
712  return(0);
713 }
714 
715 
716 int doSpecPlotWinEvent(event, mask)
717 XEvent *event;
718 unsigned int mask;
719 {
720  int chan;
721  struct WINDOW *w;
722  float x,y, fchan;
723  struct DS_IMAGE_INFO *im = last_image;
724 
725  if(debug)
726  {
727  log_msg("doSpecPlotWinEvent()");
728  }
729 
730  if(last_image == NULL)
731  {
732  log_msg("No Spectral Plot");
733  return(1);
734  }
735 
736  switch(event->type)
737  {
738  case MotionNotify:
739  case ButtonPressMask:
740  break;
741 
742  case KeyPress:
743  checkKeyPress(event);
744  return(1);
745  break;
746 
747  default:
748  return(1);
749  break;
750  }
751 
752  if( xgr_findWindow(event->xbutton.display, event->xbutton.window, &w))
753  {
754  log_msg("xgr_findWindow() returned Non Zero");
755 
756  return(1);
757  }
758 
759  x = ((float)w->plotxe - (float)w->plotxb);
760  x = ((float)event->xbutton.x - (float)w->plotxb) / x - 0.5;
761 
762  y = ((float)w->plotye - (float)w->plotyb);
763  y = ((float)w->plotye - (float)event->xbutton.y) / y - 0.5;
764 
765  fchan = (float)im->noint;
766 
767  fchan = x * fchan + (fchan / 2.0);
768 
769  chan = floor(fchan);
770 
771  if(chan < 0)
772  {
773  chan = 0;
774  }
775  else
776  if(chan > im->noint-1)
777  {
778  chan = im->noint-1;
779  }
780 
781  if(debug)
782  {
783  log_msg("X = %f, Y = %f, Chan = %.2f, %d = %f", x, y, fchan, chan, im->ydata[chan]);
784  }
785 
786  putChanTemp(chan, im->ydata[chan]);
787 
788  return(0);
789 }
int off_center_line
double scan
Definition: header.h:35
struct SPEC_SCANS * spec_scans_head
Definition: spectra.c:92
#define FONT_SIZE_SMALL
Definition: dataFonts.h:6
int plotyb
Definition: xgr.h:63
struct SPECTRA_DISPLAY_PARAMS sdp[MAX_IF_NUMS]
Definition: obsmodes.c:84
int doSpecWinRepaint(void)
Definition: specplot.c:211
int fitChan[2]
Definition: spectra.c:38
#define ROW2
Definition: spectra.c:11
int remSpecScans(void)
Definition: spectra.c:439
int xgr_drawBin(float *xdata, float *ydata, int n, int color)
Definition: xgr.c:1455
#define MAX_DATA_CHANNELS
Definition: linuxpops.c:61
int xgr_drawBox(double x, double y, double x2, double y2, int color)
char * strcmprs(char *str)
int checkKeyPress(XEvent *event)
Definition: otf.c:3293
int ignorePos
Definition: spectra.c:34
double noint
Definition: header.h:211
int lockScale
Definition: xgr.c:31
double datalen
Definition: header.h:34
double utdate
Definition: header.h:61
int scan
int datalen
Definition: dataserv.c:33
int log_perror(char *msg)
int xgr_drawText(double x, double y, char *msg, int clr, int f)
#define RED
Definition: colors.h:5
int determine_min_max(float *ydata, int dl, double scan)
int plotye
Definition: xgr.h:63
int aosScanDone
Definition: mailparse.c:33
int plotxe
Definition: xgr.h:63
#define GRAY50
Definition: colors.h:7
float scan
Definition: spectra.c:89
Definition: header.h:13
char coordcd[8]
Definition: header.h:87
double tcal
Definition: header.h:202
int combineData(float *xdata, float *yd, struct HEADER *head)
Definition: spectra.c:309
int zerodata
Definition: specdata.c:54
float workingY[MAX_CHANS]
Definition: line.c:73
struct LP_IMAGE_INFO last_image
Definition: xgraphic.c:95
int display_image(double xb, double xe, double yb, double ye, struct DS_IMAGE_INFO *im)
int doSpecPlotWinEvent(XEvent *event, unsigned int mask)
Definition: specplot.c:404
int computeBaseLine(struct LP_IMAGE_INFO *image)
Definition: baseline.c:200
float * gainsdata01
Definition: dataserv.c:95
double sideband
Definition: header.h:143
float gainsScanNum
double synfreq
Definition: header.h:132
int debug
Definition: mailparse.c:29
int do_ignorePos(char *buf)
Definition: spectra.c:515
int fbScanDone
Definition: mailparse.c:32
#define ROW0
Definition: spectra.c:9
char * filename_ctssource[]
float globalStop
Definition: specplot.c:22
int do_spectraCombine(char *buf)
Definition: spectra.c:170
int mon
Definition: convol.c:102
int sexagesimal(double dang, char *str, int prec)
char * months[12]
Definition: beam.c:85
int log_msg(const char *fmt,...)
int do_specCombClear()
Definition: line.c:194
int plotxb
Definition: xgr.h:63
#define ROW1
Definition: spectra.c:10
double datamin
Definition: dataserv.c:44
double refpt_vel
Definition: header.h:175
int auto_locate
int putChanTemp(int c, double t)
int addSpecScans(double s)
float globalStart
Definition: specdata.c:37
int doFsProcess
Definition: spectra.c:33
char backend[8]
Definition: header.h:43
int parallel
int do_sendSpecComb(void)
Definition: spectra.c:235
Definition: xgr.h:48
Definition: xgr.h:75
int xgr_findWindow(Display *dpy, Window win, struct WINDOW **w)
Definition: xgr.c:602
#define DD_MM_SS
Definition: sex.h:15
float * offdata01
Definition: dataserv.c:86
int do_scanDone(char *buf)
Definition: mailparse.c:306
double stsys
Definition: header.h:203
double epocra
Definition: header.h:78
int getBaselines(int *b)
Definition: otf.c:3891
int spcIF
Definition: spectra.c:36
double refpt
Definition: header.h:207
double datamax
Definition: dataserv.c:44
int checkSpecScans(double s)
int xgr_setFont(struct XGR_ *s, int f)
Definition: xgr.c:2294
int wasOn
Definition: spectra.c:35
float xdata[MAX_ATM_ELEMENTS]
Definition: atm.c:90
double deltax
Definition: header.h:209
#define DDD_MM_SS_S100
Definition: sex.h:18
int thisIsaRefresh
Definition: dataserv.c:36
float scanNum
Definition: dataserv.c:46
int domarker
Definition: spectra.c:37
int putHeader(struct DS_IMAGE_INFO *image)
Definition: specplot.c:819
double workingTsys
Definition: line.c:69
double rms
Definition: beam.h:5
struct SPEC_SCANS * next
Definition: spectra.c:90
double inttime
Definition: header.h:210
char filenames[16][256]
float workingX[MAX_CHANS]
Definition: line.c:72
#define m(i)
int doTPprocess
Definition: spectra.c:32
int doSpecPlot(struct DS_IMAGE_INFO *im)
Definition: specplot.c:964
#define ROW3
Definition: spectra.c:12
char object[16]
Definition: header.h:40
double restfreq
Definition: header.h:198
int ds_delay(double dc)
Definition: dataserv.c:1167
double freqres
Definition: header.h:199
int display_spectra(double xb, double xe, double yb, double ye, float *data, struct HEADER *head, int procSpec)
int doSpecWinReSize(void)
Definition: specplot.c:227
double epocdec
Definition: header.h:79
#define MAGENTA
Definition: colors.h:9
float ydata[MAX_DATA_CHANNELS]
Definition: ds_image_info.h:39
float startRes
Definition: specplot.c:22
struct XGR_ * server
Definition: dataserv.c:112
#define GREEN
Definition: colors.h:6