1 #define DEFINE_OTF_STRUCT
131 log_msg(
"freeOtfMemory(): Enter");
135 for(g=gridHead;g;g=o)
139 free((
char *)g->
chans);
161 log_msg(
"freeOtfMemory(): Done");
168 int cols, rows, noint;
173 log_msg(
"otfGridInit(): Initializing %dx%dx%d Chs", cols, rows, noint);
184 log_msg(
"otfGridInit(): Error in malloc(%d)", n *
sizeof(
struct OTF_GRID));
197 if((
workArrayChans=(
double *)malloc((
unsigned)(n *
sizeof(
double)))) == NULL)
199 log_msg(
"otfGridInit(): Error in malloc(%d)", n *
sizeof(
double));
223 log_msg(
"otfGridInit(): Done");
235 static int old_ver = 0;
236 static double old_scan = 0.0;
237 static struct HEADER *old_head = NULL;
244 if(old_ver == ver && fabs(old_scan-scan) < 0.01)
278 log_msg(
"do_addHeader(): Error adding scan %.2f, in ver %d", scan, ver);
286 return((
struct HEADER *)NULL);
301 if(otf_scan_headers == NULL)
306 return((
struct HEADER *)NULL);
313 for(m=otf_scan_headers;m->
next; m=m->
next)
343 return((
struct HEADER *)NULL);
359 if(otf_scan_headers == NULL)
369 return((
struct HEADER *)NULL);
372 otf_scan_headers->
ver = v;
373 otf_scan_headers->
scan = s;
375 bcopy((
char *)head, (
char *)&otf_scan_headers->
head,
sizeof(
struct HEADER));
377 otf_scan_headers->
next = NULL;
383 return(&otf_scan_headers->
head);
387 for(m=otf_scan_headers;m->
next; m=m->
next)
401 return((
struct HEADER *)NULL);
407 bcopy((
char *)head, (
char *)&m->
next->
head,
sizeof(
struct HEADER));
428 for(p=otf_scan_headers; p; p=q)
438 otf_scan_headers = NULL;
460 n = sscanf(buf,
"%d %f", &v, &f);
464 if((f > 0.0 && f < 49999.9) && (v > 0 && v < 999))
470 log_msg(
"Scan %.2f, in version %d ignored", f, v);
474 log_msg(
"Scan %.2f, in version %d, could NOT be ignored", f, v);
479 log_msg(
"Scan %.2f already ignored in version %d", f, v);
484 log_msg(
"Scan %f or version: %d, out of range", f, v);
493 log_msg(
"do_ignoreScan(): Missing args for ignore: %d", n);
520 if(ignore_scans_head == NULL)
532 for(m=ignore_scans_head;m->
next; m=m->
next)
576 if(ignore_scans_head == NULL)
578 if((ignore_scans_head=(
struct MAP_SCANS *)malloc((
unsigned)(
sizeof(
struct MAP_SCANS))))==NULL)
589 ignore_scans_head->
ver = v;
590 ignore_scans_head->
scan = s;
591 ignore_scans_head->
next = NULL;
601 for(m=ignore_scans_head;m->
next; m=m->
next)
639 for(p=ignore_scans_head; p; p=q)
649 ignore_scans_head = NULL;
669 if(ignore_scans_head == NULL)
677 for(m=ignore_scans_head;m->
next; m=m->
next, i++)
681 fprintf(fp,
"ignore %d %7.2f\n", m->
ver, m->
scan);
687 fprintf(fp,
"ignore %d %7.2f\n", m->
ver, m->
scan);
708 if(ignore_scans_head == NULL)
719 for(m=ignore_scans_head;m->
next; m=m->
next, i++)
723 log_msg(
"Ignoring scan %3d = %7.2f, in Version: %d", i, m->
scan, m->
ver);
729 log_msg(
"Ignoring scan %3d = %7.2f, in Version: %d", i, m->
scan, m->
ver);
779 if(m->
scan == s && m->
ver == v)
791 if(m->
scan == s && m->
ver == v)
822 log_msg(
"Error of addMapScans addMapScans(malloc(%d))",
sizeof(
struct MAP_SCANS));
849 log_msg(
"Error of addMapScans addMapScans(malloc(%d))",
sizeof(
struct MAP_SCANS));
951 dl = (int)datalen / (
sizeof(
float) * ( (int)noint +5));
966 static time_t oldTime=0;
971 if(abs(t-oldTime) > 5)
973 fprintf(stdout,
"Starting specdata viewer\n");
976 log_msg(
"sock_write() returned Error; starting specdata viewer");
978 sprintf(sysBuf,
"specdata &");
1041 bzero((
char *)&
sd,
sizeof(
sd));
1054 sockWriteNoBitch = 1;
1056 sockWriteNoBitch = 0;
1112 log_msg(
"doOtfGridRePaint()");
1121 log_msg(
"doOtfGridRePaint(): lastAction = INTERP");
1131 log_msg(
"doOtfGridRePaint(): lastAction = NORMAL_MAP");
1141 log_msg(
"doOtfGridRePaint(): lastAction = CHANNEL_MAP");
1151 log_msg(
"doOtfGridRePaint(): LastGraph = OTF_GRAPH");
1174 log_msg(
"doOtfGridRePaint(): LastGraph = Unknown");
1219 log_msg(
"do_otfRmBadChan(): OTF Array or header is empty");
1234 if(bc > noint || bc < 0)
1239 log_msg(
"do_otfRmBadChan(): Removing Channel %4d from Map", bc);
1241 for(g=gridHead;g;g=g->
next)
1273 log_msg(
"do_otfRmBadChan(): Recomputing Baselines");
1280 log_msg(
"do_otfRmBadChan(): Done");
1294 int i, noint, nspec, nspike;
1304 log_msg(
"spikeCheck(): OTF Array or header is empty");
1317 log_msg(
"Missing arg for despike");
1331 for(g=gridHead;g;g=g->
next)
1336 for(i=0;i<noint;i++)
1340 val = g->
chans[i] - ((float)i * g->
a + g->
b);
1367 log_msg(
"Corrected %d spectra", nspec);
1380 int j, k, count=0, tcount=0;
1390 log_msg(
"COMPUTEINTEN: OTF Array or header is empty");
1399 log_msg(
"COMPUTEINTEN: bc, %d; or ec, %d; greater then nochan, %d", bc, ec,
otf.
noint);
1406 log_msg(
"computeInten(): Started");
1409 for(g=gridHead;g;g=g->
next)
1427 accum += g->
chans[j] - ((float)j * g->
a + g->
b);
1431 accum += g->
chans[j];
1446 if(isnan(intInten2))
1501 log_msg(
"computeInten(): Computed %d out of %d populated cells", count, tcount);
1521 log_msg(
"COMPUTEMINMAX: OTF Array is empty");
1547 log_msg(
"COMPUTEMINMAX: Recomputing OTF Cell Min & Max Values");
1557 for(g=gridHead;g;g=g->
next)
1561 if(g->
col == 0 && g->
row == 0)
1613 log_msg(
"COMPUTESHADE: OTF Array is empty");
1630 log_msg(
"COMPUTESHADE: Recomputing OTF Cell Color Shades");
1635 for(g=gridHead;g;g=g->
next)
1726 xmin = xscale / -2.0;
1733 data[i] += (xmin + (xscale * (float)i));
1741 data[i] -= (xmin + (xscale * (float)i));
1758 float deltax, deltay, xstart, ystart, bsize;
1780 bsize = 32.0 * 60.0;
1790 deltax = bsize / 3600.0 / 15.0;
1791 deltay = bsize / 3600.0;
1796 log_msg(
"placeBeamSize(): xstart = %f, ystart = %f, deltax = %f, deltay = %f", xstart, ystart, deltax, deltay);
1801 xstart+deltax*2.0, ystart-deltay*2.0,
1826 log_msg(
"initGrid(): otfGridInit() returned %d", ret);
1847 float xl, xr, yt, yb;
1848 float xmin, xmax, ymin, ymax, kmin, kmax;
1850 float deltax, deltay;
1851 float xscale, yscale;
1859 log_msg(
"paintOtfGrid(): ignoreAllRepaints set: Ignoring ForceDrawGrid");
1869 log_msg(
"paintOtfGrid(): Enter");
1873 log_msg(
"paintOtfGrid(): Resizing Gridder Window");
1888 log_msg(
"paintOtfGrid(): No otf.head; returning");
1912 log_msg(
"paintOtfGrid(): Done");
1943 ymin = yscale / -2.0;
1944 ymax = yscale / 2.0;
1956 deltax = (xmax - xmin) / (
float)
otf.
cols;
1957 deltay = (ymax - ymin) / (
float)
otf.
rows;
1967 kmax = -999999999.0;
1971 log_msg(
"PAINTGRID: Regenerating OTF Plot");
1992 xl = xmin+(float)col * deltax;
1993 xr = xmin+(float)(col+1) * deltax;
1994 yt = ymin+(float)row * deltay;
1995 yb = ymin+(float)(row+1) * deltay;
2058 sprintf(tbuf,
"Gamma: %6.2f",
otf.
gamma);
2085 log_msg(
"paintOtfGrid(): Done");
2110 float xl, xr, yt, yb;
2111 float deltax, deltay;
2113 float xmin, xmax, ymin, ymax;
2125 deltay = (ymax - ymin) / (
float)1;
2129 xl = xmin+(float)i*deltax;
2130 xr = xmin+(float)(i+1)*deltax;
2132 yb = ymin +1.0*deltay;
2134 if( (i+1) > (
otf.
cutoff * max_gray_scale / 100))
2198 log_msg(
"Number of Channels %d, Not the same as grid %d", noint,
otf.
noint);
2220 int i, j,
first = 1, rej;
2221 int workCent_x = -1, workCent_y = -1;
2222 int colIndx, rowIndx;
2224 float *raData, *decData;
2229 double deltaRa = 0.0, deltaDec = 0.0, cosDec;
2253 ra = (*raData++ / cosDec - deltaRa) * 3600.0;
2254 dec = (*decData++ - deltaDec) * 3600.0;
2264 if(colIndx<0 || colIndx>
otf.
cols-1 || rowIndx<0 || rowIndx>
otf.
rows-1)
2273 workCent_x = colIndx;
2274 workCent_y = rowIndx;
2278 cell_x = workCent_x - colIndx;
2279 cell_y = workCent_y - rowIndx;
2289 workCent_x = colIndx;
2290 workCent_y = rowIndx;
2313 log_msg(
"ACCUMULATOR: Scan: %.2f: All %d Spectra Out of Bounds",
otf.
head->
scan, rej);
2374 for(k=0;k<
otf.
noint;k++, w++, o++, g++)
2376 *w = (((*w / (double)p->
n) - (double)*o) / (double)*o) * (double)*g;
2395 if(g->version[i] == ver)
2403 if(g->version[i] == 0)
2429 bzero((
char *)&out[0],
sizeof(out));
2438 for(i=0;i<(n-s);i++,k++)
2462 for(i=s;i<
n;i++,k++)
2468 for(i=(n-5);i<
n;i++)
2476 for(i=(n-s);i<
n;i++,k++)
2507 log_msg(
"ACCUM: OTF Array is empty");
2541 log_msg(
"Err accumWorkIntoGrid(malloc(%d))",
sizeof(
struct OTF_GRID));
2553 gridLast = gridLast->
next = f;
2557 gridHead = gridLast = f;
2564 if((f->
chans=(
float *)malloc((
unsigned)(n*
sizeof(
float))))==NULL)
2566 log_msg(
"Error in accumWorkIntoGrid(malloc(%d))", n*
sizeof(
float));
2569 bzero((
char *)f->
chans, n *
sizeof(
float) );
2580 for(k=0;k<n;k++, o++, w++)
2582 *w = ((double)*w * f->
wt + *o * p->
wt) / (f->
wt + p->
wt);
2588 f->
time += (float)p->
n * 0.1;
2627 for(g=gridHead;g;g=g->
next)
2647 for(g=gridHead;g;g=g->
next)
2668 log_msg(
"BASELINE: OTF Array is empty");
2675 log_msg(
"BASELINE: Recomputing OTF Cell Baselines");
2678 for(g=gridHead;g;g=g->
next)
2692 float *
data, *
a, *
b, *Rms;
2695 int i, j, l, k, noInt;
2699 float a1, b1, siga1, sigb1, chi2_1, q1;
2742 lsqArray[k++] = p[j];
2754 lsqfit(x,lsqArray, 0, k, sig, 0, &b1, &a1, &sigb1, &siga1, &chi2_1, &q1);
2818 sums += ((y[i] - mean) * (y[i] - mean));
2845 { XK_1, 0,
"1",
"Set Lower Level Cutoff to 10 percent" },
2846 { XK_2, 0,
"2",
"Set Lower Level Cutoff to 20 percent" },
2847 { XK_3, 0,
"3",
"Set Lower Level Cutoff to 30 percent" },
2848 { XK_4, 0,
"4",
"Set Lower Level Cutoff to 40 percent" },
2849 { XK_5, 0,
"5",
"Set Lower Level Cutoff to 50 percent" },
2850 { XK_6, 0,
"6",
"Set Lower Level Cutoff to 60 percent" },
2851 { XK_7, 0,
"7",
"Set Lower Level Cutoff to 70 percent" },
2852 { XK_8, 0,
"8",
"Set Lower Level Cutoff to 80 percent" },
2853 { XK_9, 0,
"9",
"Set Lower Level Cutoff to 90 percent" },
2854 { XK_0, 0,
"0",
"Set Lower Level Cutoff to Full Range" },
2855 { XK_b, 0,
"b",
"Place a 'beam-size' marker on screen" },
2856 { XK_B, 0,
"B",
"Toggle the Removal of Baselines" },
2857 { XK_d, 0,
"d",
"Toggle up through Colors of Regions" },
2858 { XK_D, 0,
"D",
"Toggle Down through Colors of Regions" },
2859 { XK_f, 0,
"f",
"Set Color Scheme to Flame (Repeat to Toggle Through all)" },
2860 { XK_g, 0,
"g",
"Set Color Scheme to Grayscale" },
2861 { XK_i, 0,
"i",
"Show Map in Interp Mode" },
2862 { XK_l, 0,
"l",
"Toggle Region Labels" },
2863 { XK_m, 0,
"m",
"Show Channel Map Mosaic" },
2864 { XK_o, 0,
"o",
"Reset Map to Original Values" },
2865 { XK_p, 0,
"p",
"Set Color Scheme to Pseudo" },
2866 { XK_p, 0,
"<control> + p",
"Screen Capture OTF Plot" },
2867 { XK_r, 0,
"r",
"Revert Map to Regular Mode" },
2868 { XK_R, 0,
"R",
"Show a Map of RMS Values" },
2869 { XK_r, 0,
"<control> r",
"Toggle Region Outlines" },
2870 { XK_t, 0,
"t",
"Show a Map of Tsys Values" },
2871 { XK_T, 0,
"T",
"Show a Map of Integrated Time Values" },
2872 { XK_Up, 0,
"Up-Arrow",
"Move Lower Threshold Up 1%" },
2873 { XK_Down, 0,
"Down-Arrow",
"Move Lower Threshold Down 1%" },
2874 { XK_Up, 0,
"<Control> Up-Arrow",
"Increase Gamma Effect 5%" },
2875 { XK_Down, 0,
"<Control> Down-Arrow",
"Decrease Gamma Effect 5%" },
2876 { XK_Up, 0,
"<shift> Up-Arrow",
"Increase Scale 5%" },
2877 { XK_Down, 0,
"<shift> Down-Arrow",
"Decrease Scale 5%" },
2879 { XK_Up, 1,
"Up-Arrow",
"Move Integration Region Up" },
2880 { XK_Down, 1,
"Down-Arrow",
"Move Integration Region Down" },
2881 { XK_Up, 1,
"<Control> Up-Arrow",
"Move Upper Integration Channel Up" },
2882 { XK_Down, 1,
"<Control> Down-Arrow",
"Move Upper Integration Channel Down" },
2883 { XK_Up, 1,
"<shift> Up-Arrow",
"Move Lower Integration Channel Up" },
2884 { XK_Down, 1,
"<shift> Down-Arrow",
"Move Lower Integration Channel Down" },
2885 { XK_p, 1,
"<control> + p",
"Screen Capture Spectrum Plot" }
2888 #define MAX_KEYSYMS (sizeof(keysyms) / sizeof(struct STURCT_KEYSYMS))
2897 sprintf(tbuf,
"Press the Following Keys in Either the OTF or Spectral Plot Windows\n");
2899 printf(
"\n%s\n", tbuf);
2912 sprintf(tbuf,
"Press %s key for %s", k->
key, k->
help);
2913 printf(
"%s\n", tbuf);
2922 sprintf(tbuf,
"Press the Following Keys Spectral Plot Windows\n");
2924 printf(
"\n%s\n", tbuf);
2937 sprintf(tbuf,
"Press %s key for %s", k->
key, k->
help);
2938 printf(
"%s\n", tbuf);
2957 XComposeStatus compose;
2958 char buffer[1], tbuf[256], cbuf[256];
2959 char fname[256], sysBuf[256];
2960 int bufsize=1, change = 0;
2961 static int color = 0;
2962 static int old_cutoff = -1;
2964 XLookupString((XKeyEvent *)e, buffer, bufsize, &keysym, &compose);
2968 case XK_1:
otf.
cutoff = 10; change = 2;
break;
2969 case XK_2:
otf.
cutoff = 20; change = 2;
break;
2970 case XK_3:
otf.
cutoff = 30; change = 2;
break;
2971 case XK_4:
otf.
cutoff = 40; change = 2;
break;
2972 case XK_5:
otf.
cutoff = 50; change = 2;
break;
2973 case XK_6:
otf.
cutoff = 60; change = 2;
break;
2974 case XK_7:
otf.
cutoff = 70; change = 2;
break;
2975 case XK_8:
otf.
cutoff = 80; change = 2;
break;
2976 case XK_9:
otf.
cutoff = 90; change = 2;
break;
2977 case XK_0:
otf.
cutoff = 0; change = 2;
break;
2979 if(e->xkey.state & ControlMask)
2985 if(e->xkey.state & ShiftMask)
3004 if(e->xkey.state & ControlMask)
3010 if(e->xkey.state & ShiftMask)
3069 case XK_g: sprintf(cbuf,
"gray /q"); color = 0; change = 3;
break;
3071 case XK_o: change = 5;
break;
3074 if(e->xkey.state & ControlMask)
3076 sprintf(fname,
"OTF-Plot-%s.png",
getLogDate(0));
3078 sprintf(sysBuf,
"import -w 0x%x %s", (
unsigned int)
server->
otfwin->
win, fname);
3084 printf(
"Created file: %s\n", fname);
3088 sprintf(cbuf,
"pseudo");
3109 sprintf(cbuf,
"flame%d", color-1);
3140 if(e->xkey.state & ControlMask)
3195 default:
log_msg(
"Un-handled key stroke: 0x%x", keysym);
break;
3210 sprintf(tbuf,
"otf_cutoff = %d /q",
otf.
cutoff);
3219 sprintf(tbuf,
"otf_color = %d /q", color);
3229 sprintf(tbuf,
"otf_gamma = %f /q",
otf.
gamma);
3249 sprintf(tbuf,
"otf_cutoff = %d /q",
otf.
cutoff);
3254 sprintf(tbuf,
"otf_color = 0 /q");
3258 sprintf(cbuf,
"pseudo /q");
3263 sprintf(tbuf,
"otf_gamma = %f /q",
otf.
gamma);
3297 XComposeStatus compose;
3298 char buffer[1], tbuf[256];
3299 char fname[256], sysBuf[256];
3300 int bufsize=1, change = 0;
3301 static int old_b = -1, old_e = -1;
3317 XLookupString((XKeyEvent *)event, buffer, bufsize, &keysym, &compose);
3319 if(keysym == XK_p && event->xkey.state & ControlMask)
3321 if(event->xkey.state & ControlMask)
3323 sprintf(fname,
"SpectralPlot-%s.png",
getLogDate(0));
3325 sprintf(sysBuf,
"import -w 0x%x %s", (
unsigned int)event->xany.window, fname);
3331 printf(
"Created file: %s\n", fname);
3335 if(keysym == XK_Up && event->xkey.state & ControlMask)
3347 if(keysym == XK_Down && event->xkey.state & ControlMask)
3359 if(keysym == XK_Up && event->xkey.state & ShiftMask)
3371 if(keysym == XK_Down && event->xkey.state & ShiftMask)
3401 if(keysym == XK_Down)
3426 sprintf(tbuf,
"otf_bint_chan = %d /q",
otf.
int_chans[0]);
3428 sprintf(tbuf,
"otf_eint_chan = %d /q",
otf.
int_chans[1]);
3456 int n, ret, col, row;
3458 n = sscanf(buf,
"%d %d", &col, &row);
3472 log_msg(
"Sending Copy of 'Spectral Plot Window to Linuxpops/Helper'.");
3502 log_msg(
"No data for Cell: %d, %d", col, row);
3545 log_msg(
"getRequestedCell(): No Intensity for cell: %d: %e", indx, f->
plotVal1);
3558 int col, row, indx, but;
3560 double ra, dec, raOff, decOff;
3566 log_msg(
"otfGridDisplaySpec()");
3571 log_msg(
"DISPLAYSPEC: OTF Array is empty");
3575 but =
event->xbutton.button;
3580 if(but == 2 || but == 3 || but == 4 || but == 5)
3582 log_msg(
"Button Motion on Button: %d", but);
3584 case ButtonPressMask:
3585 if(but == 2 || but == 3 || but == 4 || but == 5)
3587 log_msg(
"Button Press on Button: %d", but);
3602 if(
xgr_findWindow(event->xbutton.display, event->xbutton.window, &w))
3604 log_msg(
"xgr_findWindow() returned Non Zero");
3609 x = ((float)event->xbutton.x - (
float)w->
plotxb) / x - 0.5;
3613 y = ((float)w->
plotye - (
float)
event->xbutton.y) / y - 0.5;
3621 log_msg(
"Req Col or Row, out of bounds: %d %d", col, row);
3632 log_msg(
"Got new beam location of Col: %d, Row: %d", col, row);
3646 raOff *= 1.0 - (12.0 / 1000.0);
3650 dec += decOff / 3600.0;
3656 sprintf(tbuf,
"otf_beam_ra = %f /q",
otf.
beamRa / 15.0);
3658 sprintf(tbuf,
"otf_beam_dec = %f /q",
otf.
beamDec);
3675 log_msg(
"No data for Cell: %d, %d", col, row);
3685 log_msg(
"Cell: %d, %d, ignored", col, row);
3728 log_msg(
"otfGridDisplaySpec(): No Intensity for cell: %d: %e", indx, f->
plotVal1);
3749 log_msg(
"DISPLAYREQ: OTF Array is empty");
3756 if(f && f->
set == 1)
3770 double ra, dec, raOff, decOff;
3776 log_msg(
"DISPLAYGRIDSPEC: OTF Array is empty");
3789 dec += decOff / 3600.0;
3839 for(j=0;j<noint;j++)
3846 for(j=0;j<noint;j++)
3855 sockWriteNoBitch = 1;
3859 sockWriteNoBitch = 0;
3863 fprintf(stdout,
"Starting specplot viewer\n");
3866 log_msg(
"sock_write() returned Error; starting specplot viewer");
3868 sprintf(sysBuf,
"specplot &");
3879 fprintf(stdout,
"sock_write() Still returning Error; Check Instalation\n");
3882 log_msg(
"sock_write() Still returning Error; Check Installation");
3907 int i,
b, e, n, ob, oe, record=0,
interp=0;
3908 char dir[20], *cp, tmp[256];
3909 char sysBuf[256], fname[256], src[256];
3914 if(strstr(buf,
"record"))
3919 if(strstr(buf,
"interp"))
3924 cp = strtok(tmp,
" \n\t");
3931 log_msg(
"Bad begin chan specifier in do_otfVelRun");
3935 cp = strtok((
char *)NULL,
" \n\t");
3942 log_msg(
"Bad ending chan specifier in do_otfVelRun");
3946 cp = strtok((
char *)NULL,
" \n\t");
3953 log_msg(
"Bad channel spacing chan specifier in do_otfVelRun");
3957 cp = strtok((
char *)NULL,
" \n\t");
3964 log_msg(
"Bad direction specifier in do_otfVelRun");
3968 cp = strtok((
char *)NULL,
" \n\t");
3988 if(!strncmp(dir,
"forw", 4))
4023 sprintf(fname,
"%s-%.3f-%03d.png", src,
otf.
head->
restfreq / 1000.0, i);
4025 sprintf(sysBuf,
"import -w 0x%x %s", (
unsigned int)
server->
otfwin->
win, fname);
4066 log_msg(
"GRIDDUMP: OTF Array is empty");
4081 if(f && f->
set == 1)
4103 int i,
b, e, repaint = 1;
4110 log_msg(
"do_otfGridLoad(): Enter");
4119 cp = strtok(tmp,
"\n\t ");
4127 log_msg(
"do_otfGridLoad(), no begin scan specified");
4136 cp = strtok((
char *)NULL,
"\n\t ");
4144 log_msg(
"do_otfGridLoad(), no end scan specified");
4153 cp = strtok((
char *)NULL,
"\n\t ");
4188 if(!(i % 10) || i == b || i == e)
4206 log_msg(
"do_otfGridLoad(): Breaking out of load");
4225 log_msg(
"do_otfGridLoad(): Done loading scans");
4294 s = (
struct XGR_ *)p;
4298 s2 = (
struct WINDOW *)p2;
4348 int i, row, col, k, x, y;
4350 float *inarray=NULL, *outarray=NULL;
4357 log_msg(
"INTERP: OTF Array is empty");
4381 if( (inarray = (
float *)malloc((
unsigned)(in *
sizeof(
float)))) == NULL)
4383 log_msg(
"Unable to malloc(%d) inarray in interpAndPlot()", in *
sizeof(
float));
4388 if( (outarray = (
float *)malloc((
unsigned)(out *
sizeof(
float)))) == NULL)
4390 log_msg(
"Unable to malloc(%d) outarray in interpAndPlot()", in *
sizeof(
float));
4392 free((
char *)inarray);
4397 bzero((
char *)inarray, in *
sizeof(
float));
4398 bzero((
char *)outarray, out *
sizeof(
float));
4401 for(row=
otf.
rows-1;row>=0;row--)
4407 if(f && f->
set == 1)
4409 inarray[k++] = (float)f->
shade;
4424 d = (float)outarray[i];
4437 uc = (
unsigned char)outarray[i];
4442 otf.
ximage->data[i] = (
unsigned char)s->grayScale[(
int)uc];
4458 d = (float)outarray[i];
4471 uc = (
unsigned char)outarray[i];
4476 XPutPixel(
otf.
ximage, x, y, s->grayScale[(
int)uc]);
4486 XPutImage(s->dpy, s->cur->act, s->cur->gc,
otf.
ximage, 0, 0,
4487 s->cur->pixmapX, s->cur->pixmapY,
4507 free((
char *)inarray);
4512 free((
char *)outarray);
4528 visual = DefaultVisual(display, DefaultScreen(display));
4532 return((XImage *)NULL);
4535 xi = XCreateImage(display, visual, (
unsigned int)depth, ZPixmap,0,
4536 (
char *)NULL, (
unsigned int)w, (
unsigned int)h, 16, 0);
4539 log_msg(
"XCreateImage failed");
4540 return((XImage *)NULL);
4543 ui = (unsigned)(xi->height*xi->bytes_per_line*
sizeof(
char));
4544 if((xi->data=(
char *)malloc(ui))==NULL)
4546 log_msg(
"Unable to malloc(%d) ximage in createXimage()", ui);
4548 return((XImage *)NULL);
4551 bzero((
char *)xi->data, xi->height * xi->bytes_per_line *
sizeof(
char));
4561 int i, j, bc, ec, indx, halfway,
first=1;
4562 char *cp, tmp[256], vbuf[80];
4563 float scale, xb, xe, yb, ye, vbc, vec, refpt, deltax12, vel;
4564 static int cc=256, nx=5, ny=5, nc=1;
4572 sprintf(tmp,
"%d %d %d %d", cc, nx, ny, nc);
4575 cp = strtok(tmp,
" \n\t");
4582 log_msg(
"Bad Center channel in do_otfChannelMap()");
4586 cp = strtok(NULL,
" \n\t");
4593 log_msg(
"Bad num of col specifier in do_otfChannelMap()");
4597 cp = strtok((
char *)NULL,
" \n\t");
4604 log_msg(
"Bad num of row specifier in do_otfChannelMap()");
4608 cp = strtok((
char *)NULL,
" \n\t");
4615 log_msg(
"Bad num of channels specifier in do_otfChannelMap()");
4633 halfway = (nx*ny*nc) / 2;
4634 indx = cc - halfway;
4638 for(i=(ny-1);i>=0;i--)
4644 xb = (float)j / (
float)nx;
4645 xe = (float)(j+1) / (float)nx;
4646 yb = (float)i / (
float)ny;
4647 ye = (float)(i+1) / (float)ny;
4674 vbc = vel - (((float)bc - refpt) * deltax12) + deltax12 / 2.0;
4675 vec = vel - (((float)ec - refpt) * deltax12) - deltax12 / 2.0;
4679 vbc = vel - (((float)bc - refpt) * -deltax12) - deltax12 / 2.0;
4680 vec = vel - (((float)ec - refpt) * -deltax12) + deltax12 / 2.0;
4683 if( (vec < vel && vbc > vel) || (vbc < vel && vec > vel))
4685 sprintf(vbuf,
"%.1f, %.1f %.1f km/s", vbc, vec, vel);
4690 sprintf(vbuf,
"%.1f, %.1f km/s", vbc, vec);
4710 sprintf(
oldBuf,
"otfchannelmap %d %d %d", nx, ny, nc);
4744 if(max < 0 || max > 8)
4749 bzero((
char *)&
v1a,
sizeof(
v1a));
4750 bzero((
char *)&
v2a,
sizeof(
v2a));
4752 frac = 1.0 / (double)max;
4754 for(i=0;i<(max+1);i++)
4756 v1a[i] = 1.0 - (frac * (double)i);
4757 v2a[i] = frac * (double)i;
4760 log_msg(
"V1A: %d: %f %f %f %f %f %f %f %f", max,
4763 log_msg(
"V2A: %d: %f %f %f %f %f %f %f %f", max,
4785 return(v1 *
v1a[indx] + v2 *
v2a[indx]);
4801 log_msg(
"do_otfSpectralSum(): OTF Array is empty");
4806 bzero((
char *)&p1,
sizeof(p1));
4807 bzero((
char *)&chans,
sizeof(chans));
4810 p1p->
chans = &chans[0];
4831 for(k=0;k<
otf.
noint;k++, p1c++, p2c++)
4833 *p1c = (*p1c * p1p->
wt + *p2c * p2p->
wt) / (p1p->
wt + p2p->
wt);
4839 p1p->
tsys = sqrt(1.0 / (p1p->
wt / p1p->
time));
4907 log_msg(
"Sending Copy of 'Spectral Plot Window to Linuxpops/Helper'.");
4935 char *cp, tmpStr[256], fname[256];
4936 double x, y, z, vrange, lowerThres, zfactor = 1.0;
4937 double tmp, vel, refpt, deltax12;
4938 double accum1, vel1,
intInten, velratio, velrange;
4939 double accum2, vel2, urms = 10.0, raSize, decSize;
4945 log_msg(
"do_otf3d(): OTF Array is empty");
4950 strcpy(tmpStr, buf);
4952 cp = strtok(tmpStr,
" \n\t");
4959 log_msg(
"do_otf3d(): Bad begin chan specifier in do_otf3d");
4964 cp = strtok((
char *)NULL,
" \n\t");
4971 log_msg(
"do_otf3d(): Bad ending chan specifier in do_otf3d");
4976 cp = strtok((
char *)NULL,
" \n\t");
4983 log_msg(
"do_otf3d(): Bad interp spacing in do_otf3d");
4988 cp = strtok((
char *)NULL,
" \n\t");
4995 log_msg(
"do_otf3d(): Bad vel_range specifier in do_otf3d");
5000 cp = strtok((
char *)NULL,
" \n\t");
5007 log_msg(
"do_otf3d(): Bad Lower Threshold specifier in do_otf3d");
5012 cp = strtok((
char *)NULL,
" \n\t");
5019 log_msg(
"do_otf3d(): Bad Upper rms specifier in do_otf3d");
5024 cp = strtok((
char *)NULL,
" \n\t");
5031 log_msg(
"do_otf3d(): Bad Z-Axis Factor specifier in do_otf3d");
5036 if(fabs(zfactor) < 0.1)
5043 log_msg(
"do_otf3d(): Bad Lower Threshold specifier with too many active celles: %d do_otf3d",
otf.
numCellsUsed);
5048 if(ec-bc < 0 || ec>
otf.
noint || bc < 1 || vrange == 0.0 || interp < 1 || interp > 8)
5050 log_msg(
"do_otf3d(): Bad parameters: %d [0 - <ec], %d [>bc - <noint-1], vrange: %.3f, %d [1 - 8]",
5051 bc, ec, vrange, interp);
5057 strcpy(fname,
"/home/reduced/otf-3d.pts");
5059 if( (fp = fopen(fname,
"w") ) <= (FILE *)0)
5061 log_msg(
"do_otf3d(): Unable to open %s", fname);
5074 vel1 = vel - (((double)bc - refpt) * deltax12) + deltax12 / 2.0;
5075 vel2 = vel - (((double)ec - refpt) * deltax12) - deltax12 / 2.0;
5079 vel1 = vel - (((double)bc - refpt) * -deltax12) - deltax12 / 2.0;
5080 vel2 = vel - (((double)ec - refpt) * -deltax12) + deltax12 / 2.0;
5090 velrange = vel2 - vel1;
5091 velratio = velrange * vrange;
5096 log_msg(
"raSeize = %f, decSeize = %f", raSize, decSize);
5097 log_msg(
"velrange = %f, velration = %f, zfactor = %f", velrange, velratio, zfactor);
5100 fprintf(fp,
" X Y Z Intensity Tsys rms\n");
5111 log_msg(
"Wrote %d cells to %s", count, fname);
5148 accum1 = f->
chans[l] - ((double)l * f->
a + f->
b);
5149 accum2 = f->
chans[l+1] - ((double)(l+1) * f->
a + f->
b);
5153 accum1 = f->
chans[l];
5154 accum2 = f->
chans[l+1];
5157 if(accum1 < lowerThres && accum2 < lowerThres)
5164 vel1 = vel - (((double)l - refpt) * deltax12) + deltax12 / 2.0;
5165 vel2 = vel - (((double)(l+1) - refpt) * deltax12) + deltax12 / 2.0;
5169 vel1 = vel - (((double)l - refpt) * -deltax12) - deltax12 / 2.0;
5170 vel2 = vel - (((double)(l+1) - refpt) * -deltax12) - deltax12 / 2.0;
5175 z =
findInterp(vel1, vel2, m, interp) * velratio;
5176 intInten =
findInterp(accum1, accum2, m, interp);
5178 if(intInten > lowerThres && f->
rms < urms)
5180 fprintf(fp,
"%.4f %.4f %.4f %.4f %.4f %.4f\n", x, y, z * zfactor, intInten, f->
tsys, f->
rms);
5192 log_msg(
"Wrote out Row: %d", row);
5201 log_msg(
"Wrote %d cells to %s", count, fname);
5224 char *cp, fname[256],
session[256];
5231 log_msg(
"do_otf3dplot(): OTF Array is empty");
5236 cp = strtok(buf,
"\t\n ");
5240 log_msg(
"do_otf3dplot(): Missing 'session' argument");
5245 strcpy(session, cp);
5247 cp = strtok(NULL,
"\t\n ");
5258 sprintf(fname,
"/tmp/%s/otf-3d-plot.dem", session);
5260 if( (fp = fopen(fname,
"w") ) <= (FILE *)0)
5262 log_msg(
"do_otf3dplot(): Unable to open '%s'", fname);
5266 fprintf(fp,
"reset\n");
5267 fprintf(fp,
"set title \"OTF Map\"\n");
5269 fprintf(fp,
"set xlabel \"R.A. Offset\"\n");
5270 fprintf(fp,
"set ylabel \"Dec. Offset\"\n");
5271 fprintf(fp,
"set zlabel \"Intensity\"\n");
5274 fprintf(fp,
"set border 4095\n");
5275 fprintf(fp,
"set hidden3d\n");
5279 fprintf(fp,
"set zrange [%f:%f]\n", 0.0, 10.0);
5284 fprintf(fp,
"set isosamples 60\n");
5286 fprintf(fp,
"set ticslevel 0.1\n");
5291 fprintf(fp,
"set pm3d interpolate %d,%d\n",
interp,
interp);
5296 fprintf(fp,
"set pm3d\n");
5299 fprintf(fp,
"set palette color\n");
5300 fprintf(fp,
"set palette model RGB\n");
5301 fprintf(fp,
"set palette defined ( 0 \"blue\", 1 \"green\", 2 \"yellow\", 3 \"red\" )\n");
5302 fprintf(fp,
"set palette gamma 1.0\n");
5305 fprintf(fp,
"set view 60.0, 30.0, 1.0, 1.0\n");
5307 fprintf(fp,
"set terminal x11 background rgb \"black\" enhanced 1 size 1200, 850 position 800, 500\n");
5309 fprintf(fp,
"set contour both\n");
5314 fprintf(fp,
"splot \"/tmp/%s/otf-3d-plot.dat\" every 1::0::1024 with lines\n", session);
5319 sprintf(fname,
"/tmp/%s/otf-3d-plot.dat", session);
5321 if( (fp = fopen(fname,
"w") ) <= (FILE *)0)
5323 log_msg(
"do_otf3dplot(): Unable to open '%s'", fname);
5339 if(f && f->
set == 1)
5348 fprintf(fp,
"%.2f %.2f %.2f\n", x, y, z);
5360 log_msg(
"do_otf3dplot(); Wrote %d cells to %s", count, fname);
5362 sprintf(fname,
"xgraphic load \"/tmp/%s/otf-3d-plot.dem\"", session);
5397 int row,
col, k, count=0;
5398 char *cp, fname[256];
5405 log_msg(
"do_otf3dplot(): OTF Array is empty");
5410 cp = strtok(buf,
"\t\n ");
5414 log_msg(
"do_otfRmRMS(): Missing 'rms limit' argument");
5419 rmsLimit = atof(cp);
5423 log_msg(
"do_otfRmRMS(): 'rmslimit' argument %f, unresonable");
5429 sprintf(fname,
"bad_rms_cells.txt");
5431 if( (fp = fopen(fname,
"w") ) <= (FILE *)0)
5433 log_msg(
"do_otfRmRMS(): Unable to open '%s'", fname);
5448 if(f->
rms > rmsLimit)
5450 fprintf(fp,
"row: %4d, col: %4d, rms: %8.4f, bscan: %8.2f, escan %8.2f ", row, col, f->
rms, f->
bscan, f->
escan);
5456 fprintf(fp,
"%3d ", f->
version[k]);
5488 log_msg(
"do_otfRmRMS(); Wrote %d cells to %s", count, fname);
5506 log_msg(
"do_otf3dplot(): OTF Array is empty");
5511 cp = strtok(buf,
"\t\n ");
5515 log_msg(
"do_zapCell(): Missing 'Col' argument");
5521 cp = strtok(NULL,
"\t\n ");
5525 log_msg(
"do_zapCell(): Missing 'Row' argument");
5542 log_msg(
"No data in cell: %d x %d", col, row);
5564 log_msg(
"do_zapCell(); Cleared Cell: Col: %d x Row: %d", col, row);
5574 #define SECOND_FFB 2
5576 #define FOURTH_FFB 4
5579 #define SEVENTH_FFB 7
5580 #define EIGHTH_FFB 8
5625 if(f && f->
set == 1)
5643 int i,
row,
col, n, count = 0;
5644 double p1_avg, p2_avg;
5648 for(col=2;col<
otf.
cols-2;col++)
5652 for(row=2;row<
otf.
rows-2;row++)
5656 if(f && f->
set == 1)
5674 log_msg(
"Col: %4d, Row: %4d missing, found next valid cell: %d %d, Gap: %d", col, row, p2->
col, p2->
row, n);
5681 p1_avg = 0.5 +
v1a[1];
5682 p2_avg = 0.5 +
v2a[1];
5683 log_msg(
"Averages: %f %f", p1_avg, p2_avg);
5691 p1_avg = 0.5 +
v1a[1+i];
5692 p2_avg = 0.5 +
v2a[1+i];
5693 log_msg(
"Averages: %f %f", p1_avg, p2_avg);
5714 log_msg(
"do_fullInterpFill(): Repaired %d cells", count);
5734 double p1_avg, p2_avg;
5735 int try,
row,
col, *count;
5738 float *gc, *p1c, *p2c;
5740 if( p1->set == 1 && p2->set == 1)
5742 if(p1->wt && p2->wt)
5753 bzero((
char *)f,
sizeof(
struct OTF_GRID));
5757 gridLast = gridLast->
next = f;
5759 if((f->chans = (
float *)malloc(
otf.
noint *
sizeof(
float))) == NULL)
5766 bzero((
char *)f->chans,
otf.
noint *
sizeof(
float) );
5773 for(chan=0;chan<
otf.
noint;chan++, p1c++, gc++)
5775 *gc = (*gc * f->wt + (*p1c * p1->wt * p1_avg)) / (f->wt + (p1->wt * p1_avg));
5778 f->wt += (p1->wt * p1_avg);
5783 for(chan=0;chan<
otf.
noint;chan++, p2c++, gc++)
5785 *gc = (*gc * f->wt + (*p2c * p2->wt * p2_avg)) / (f->wt + (p2->wt * p2_avg));
5788 f->wt += (p2->wt * p2_avg);
5792 f->scanct = p1->scanct + p2->scanct;
5793 f->time = (p1->time * p1_avg) + (p2->time * p2_avg);
5795 f->tsys = sqrt(1.0 / (f->wt / f->time));
5799 log_msg(
"%d: Setting Col: %3d, Row: %3d Tsys to: %7.1f, from %.1f %.1f",
try, col, row, f->tsys, p1->tsys, p2->tsys);
5802 f->bscan = p2->bscan;
5803 f->escan = p2->escan;
5815 strcpy(f->source, p1->source);
5821 log_msg(
"do_otfFixBadCells(): p1->wt or p2->wt == 0; %f %f; skipping", p1->wt, p2->wt);
5826 log_msg(
"do_otfFixBadCells(): p1->set or p2->set == 0; %d %d; skipping", p1->set, p2->set);
5839 int row,
col,
try, count = 0;
5845 log_msg(
"FIXBADCELLS: OTF Array is empty");
5849 if(strstr(buf,
"interp"))
5856 for(row=1;row<
otf.
rows-1;row++)
5858 for(col=1;col<
otf.
cols-1;col++)
5862 if(f && f->
set == 1)
5869 for(
try=0;
try<2;
try++)
5893 log_msg(
"OTFFIXBADCELLS: Repaired %d cells", count);
5912 log_msg(
"do_otfListCells(): OTF Array is empty");
5917 for(row=1;row<
otf.
rows-1;row++)
5919 for(col=1;col<
otf.
cols-1;col++)
5925 log_msg(
"Col: %4d, Row: %4d, ScanCt: %.1f, Tsys: %.1f, Wt: %.2e", col, row, f->
scanct, f->
tsys, f->
wt);
5939 log_msg(
"forceDrawGrid(): ignoreAllRepaints set");
5944 log_msg(
"forceDrawGrid(): Enter");
5968 double raOff, decOff,
bscan= 999999.9,
escan = -999999.9;
5969 char *cp, fname[256],
source[256];
5975 log_msg(
"do_otfListCells(): OTF Array is empty");
5981 if((cp = strstr(buf,
"row")))
5987 for(col=1;col<
otf.
cols-1;col++)
6005 log_msg(
"Got the row header");
6009 log_msg(
"Could NOT get the row header");
6012 strcpy(source, f->
source);
6014 sprintf(fname,
"%s-Row-%d.otfdata", source, row);
6016 if((fp = fopen(fname,
"w")) <= (FILE *)NULL)
6018 log_msg(
"Unable to open: %s", fname);
6025 fprintf(fp,
"%e %e\n", raOff, f->
intInten);
6048 if((cp = strstr(buf,
"col")))
6054 for(row=1;row<
otf.
rows-1;row++)
6068 log_msg(
"Got the row header");
6072 log_msg(
"Could NOT get the row header");
6075 strcpy(source, f->
source);
6077 sprintf(fname,
"%s-Col-%d.otfdata", source, col);
6079 if((fp = fopen(fname,
"w")) <= (FILE *)NULL)
6081 log_msg(
"Unable to open: %s", fname);
6088 fprintf(fp,
"%e %e\n", decOff, f->
intInten);
6112 log_msg(
"Wrong Args to otfslice");
6139 log_msg(
"Sending Copy of 'Spectral Plot Window to Linuxpops/Helper'.");
6143 log_msg(
"Created File: %s", fname);
6155 char raStr[256], decStr[256];
6157 extern int log_dup2stdout;
6203 log_msg(
"OTF: Map Coordinates: RA: %s; Dec: %s", raStr, decStr);
6212 log_msg(
"OTF: Total Number of OTF Map Scans: %d", tScans);
6258 log_msg(
"OTF: baselines[8] = %d %d %d %d %d %d %d %d",
6303 int in, out, cols, rows;
6304 float *inarray=NULL, *outarray=NULL;
6311 log_msg(
"interpAndWrite(): OTF Array is empty");
6315 sprintf(fname,
"/tmp/dataserv-grid.%d.dat", getpid());
6317 if((fp = fopen(fname,
"w")) == NULL)
6319 log_msg(
"interpAndWrite(): Unable to open %s", fname);
6329 if( (inarray = (
float *)malloc((
unsigned)(in *
sizeof(
float)))) == NULL)
6331 log_msg(
"interpAndWrite(): Unable to malloc(%d) inarray", in *
sizeof(
float));
6336 if( (outarray = (
float *)malloc((
unsigned)(out *
sizeof(
float)))) == NULL)
6338 log_msg(
"interpAndWrite(): Unable to malloc(%d) outarray", in *
sizeof(
float));
6340 free((
char *)inarray);
6345 bzero((
char *)inarray, in *
sizeof(
float));
6346 bzero((
char *)outarray, out *
sizeof(
float));
6349 for(row=
otf.
rows-1;row>=0;row--)
6357 inarray[k++] = (float)f->
shade;
6369 for(row=0;row<rows;row++)
6371 for(col=0;col<cols;col++,i++)
6373 fprintf(fp,
"%d %d %f\n", row, col, (
float)outarray[i]);
6383 free((
char *)inarray);
6388 free((
char *)outarray);
6398 #define SQR(a) (sqrarg=(a),sqrarg*sqrarg)
6400 int lsqfit(x, y,
bdata, ndata, sig, mwt,
a,
b, siga, sigb, chi2, q)
6401 float x[],y[],sig[],*
a,*
b,*siga,*sigb,*chi2,*q;
6402 int bdata,ndata,mwt;
6405 float wt, t, sxoss, sx = 0.0, sy = 0.0, st2 = 0.0,
ss, sigdat;
6415 for(i=bdata;i<ndata;i++)
6417 wt = 1.0 /
SQR(sig[i]);
6425 for(i=bdata;i<ndata;i++)
6438 for(i=bdata;i<ndata;i++)
6440 t = (x[i] - sxoss) / sig[i];
6442 *b += t * y[i] / sig[i];
6447 for(i=bdata;i<ndata;i++)
6456 *a = (sy - sx * (*b)) /
ss;
6457 *siga = sqrt((1.0 + sx * sx / (
ss * st2)) /
ss);
6458 *sigb = sqrt(1.0 / st2);
6463 for(i=bdata;i<ndata;i++)
6465 *chi2 +=
SQR(y[i] - (*a) - (*b) * x[i]);
6469 sigdat = sqrt((*chi2) / (ndata - bdata - 2));
struct WINDOW_HEAD windows
int xgr_drawGrid(double f1b, double f1e, double f2b, double f2e, int n1, int n2, int dx, int dy, int tick, int label, int clr1, int clr2, int format)
int spikeCheck(char *buf)
int do_printIgnoreScans(void)
int printKeySymHelp(void)
int xgr_drawPosText(double x, double y, char *msg, int clr, int f)
#define MAX_DATA_CHANNELS
int sock_write(struct SOCK *s, char *message, int l)
int xgr_drawBox(double x, double y, double x2, double y2, int color)
char * strcmprs(char *str)
int do_toggleRegion(void)
int checkKeyPress(XEvent *event)
int interp(double *array, int nx, int ny, double *parray, int npx, int npy)
int shiftOtfChans(double *in, int n, int shift)
struct OTF_GRID * gridLast
int do_fullInterpFill(char *buf)
struct OTF_GRID * gridHead
int do_etime(int func, int action)
int do_otfTsys(char *buf)
int do_otfRmRMS(char *buf)
int accumDataIntoWork(void)
struct DS_IMAGE_INFO ds_image_info
int do_otfColorChoice(char *buf)
int createInterpTable(int max)
char * getLogDate(int offset)
int do_otfTime(char *buf)
#define SUBTRACTPREDICTEDRA
struct LP_IMAGE_INFO last_image
int computeBaseLine(struct LP_IMAGE_INFO *image)
int otfGridDisplaySpec(XEvent *event, unsigned int mask)
struct MAP_SCANS * ignore_scans_head
struct GRID_ACCUM workArray[WORK_ARRAY_X][WORK_ARRAY_Y]
struct SCAN_HEADERS * otf_scan_headers
int computeRms(float *y, int n, float *rms)
int doOtfGridRePaint(void)
struct OTF_GRID * fetchMapCell(int row, int col)
int displayOtfGridSpectra(struct OTF_GRID *s)
int sexagesimal(double dang, char *str, int prec)
int do_toggleRegionLabels(void)
int interpAndPlot(struct XGR_ *s)
struct HEADER * checkScanHeader(int v, float s)
int getNumSpectra(double datalen, double noint)
int log_msg(const char *fmt,...)
XImage * createXimage(Display *display, int w, int h, int depth)
int dispatchOtfGridEvents(XEvent *e)
#define DO_PRINTIGNORESCANS
int do_otfSlice(char *buf)
int lsqfit(float x[], float y[], int bdata, int ndata, float sig[], int mwt, float *a, float *b, float *siga, float *sigb, float *chi2, float *q)
int xgr_drawFillBox(double xmin, double xmax, double ymin, double ymax, double xl, double yt, double xr, double yb, int color)
int accumWorkIntoGrid(void)
int do_otf3dplot(char *buf)
int do_otfRmBadChan(void)
int checkMapScans(int v, double s)
int setMapCell(int row, int col, struct OTF_GRID *f)
int do_toggleRegionBold(int dir)
int getRequestedCell(int row, int col)
int do_otfListCells(char *buf)
int xgr_setWindowSize(char *name, double x, double y)
struct STURCT_KEYSYMS keysyms[]
int checkIgnoreScans(int v, double s)
int addIgnoreScans(int v, double s)
int xgr_findWindow(Display *dpy, Window win, struct WINDOW **w)
int doOtfGridReSize(void)
int normalizeAndCal(void)
int subtractPredictedRA(float *data)
int do_otfSpectralSum(char *buf)
int do_scanDone(char *buf)
int xgr_drawTextClear(double x, double y, char *msg, int clr, int f)
#define WORK_ARRAY_X_CENT
int opticalFileNeedDisplay
int interpAndWrite(struct XGR_ *s)
double findInterp(double v1, double v2, int indx, int max)
int displayRequestedOtf(void)
int badChanArray[MAX_BAD_CHAN]
int do_ignoreScan(char *buf)
float bdata[MAX_ATM_ELEMENTS]
int addMapScans(int v, double s)
struct WINDOW_HEAD * next
int do_saveIgnoreScans(FILE *fp)
#define WORK_ARRAY_Y_CENT
int computeInten(int bc, int ec)
int do_printMapScans(void)
int resendSpecData(struct SPECDATA *sd)
int do_otf3dcube(char *buf)
int do_otf(float *data, struct HEADER *head, float *offdata, float *gainsdata)
int xgr_pixmapToWindow(char *name)
struct HEADER * addScanHeader(int v, float s, struct HEADER *head)
int do_otfVelRun(char *buf)
int xgr_setBox(double x, double y, double dx, double dy)
int insertVersion(struct OTF_GRID *g, int ver)
int xgr_drawCircle(double xmin, double xmax, double ymin, double ymax, double x, double y, double w, double h, int color, int size)
int do_otfFixBadCells(char *buf)
int otfGridInit(int cols, int rows, int noint)
#define DO_SAVEIGNORESCANS
int weightedAvergeCells(struct OTF_GRID *f, struct OTF_GRID *p1, double p1_avg, struct OTF_GRID *p2, double p2_avg, int try, int row, int col, int *count)
int to_xgraphic(char *buf)
int doSpecPlot(struct DS_IMAGE_INFO *im)
struct HEADER * do_addHeader(int ver, float scan, struct HEADER *head)
struct MAP_SCANS * map_scans_head
struct OTF_GRID ** gridArray
int scaleData(float *data)
#define PLOT_INT_INTENSITY
int findNextCell(int row, int col, struct OTF_GRID **p2)
int do_zapCell(char *buf)
int xgr_mapUnmapWindow(char *name, int map)
int do_otfGridLoad(char *buf)
float ydata[MAX_DATA_CHANNELS]
int xgr_checkForEvents(void)
int recomputeBaseLines(void)
int do_otfSendPlot(char *buf)
int xgr_clearScreen(void)
int do_otfChannelMap(char *buf)
int xgr_setCurWindow(int win, int which)