65 #define LN2 0.693147181
85 char *
months[12] = {
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
86 "Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"};
99 st_warn(
"Beam Eff %f out of range: 0.0 - 1.0, or 1.0 - 100.0", val);
108 if(val < 0.01 || val > 1.00)
130 st_print(
"\nCurrent Beam Eff Values: ");
183 st_print(
"Current Rejection Values: ");
239 st_warn(
"No Saved Beam Eff Values to Accept");
249 static struct tm *tmn1;
252 sec = (long)burnT + 7 * 3600;
253 tmn1 = localtime(&sec);
265 fscan = scan - (int)scan;
269 if(fabs(fscan-1.0) < 0.001)
274 if(fabs(fscan-2.0) < 0.001)
279 if(fabs(fscan-3.0) < 0.001)
284 if(fabs(fscan-4.0) < 0.001)
296 double f_sky, rej, T_ant, ta_s, Tmb;
297 double T_src, f_rej, theta_p, R_mars, incl;
298 double lambda, eta_mb, eta_hi, eta_lo, theta_mb;
299 double T0, chi, xi, ts_s, denom, err, diameter;
319 T_src = 178.309 - 0.036 * f_sky;
327 T_src = 266.4 + (245.1 / (1.0 + (f_sky*f_sky / (64.7*64.7))));
336 T_src =
T_R0 * sqrt(
R0 / R_mars);
346 T_src = (f_sky - 90.0) * (149.0 - 140.0) / (90.0 - 227.0);
357 st_print(
"*** CAUTION: Moon option for test purposes only! ***\n");
359 lambda = 1000.0 *
C / f_sky;
361 chi = (eph.
MoonAge /
P) * 360.0 - 180.0;
364 xi = atan(0.24 * lambda / (1.0 + 0.24 * lambda));
369 T0 = 220.02682849 - 0.000348260 * f_sky;
373 T_src = T0 + 0.77 * T0 / sqrt(1.0 + 0.48*lambda + 0.11*lambda*lambda);
374 T_src *= cos(chi - xi);
383 st_fail(
"invalid planet selection");
403 st_report(
"Using a Telescope Diameter of %.1f Meters", diameter);
406 theta_mb = 1.17 * (lambda / diameter) * (180.0 /
PI) * 3600.0;
411 f_rej = 1.0 / (1.0 + pow(10.0, (-rej/10.0)));
424 eta_hi = f_rej * (T_ant + ta_s) / (
planck(f_sky, T_src - ts_s) -
planck(f_sky,
CMB));
425 eta_lo = f_rej * (T_ant - ta_s) / (
planck(f_sky, T_src + ts_s) -
planck(f_sky,
CMB));
429 denom = (1.0 - exp((-
LN2 * theta_p * theta_p) / (theta_mb * theta_mb)));
444 err = (eta_hi - eta_lo) / 2.0;
470 st_report(
"Heliocentric Distance for Mars = %5.3lf a.u.", R_mars);
478 st_report(
"Inclination of Rings = %4.1lf degs", incl);
484 st_report(
"Telescope Main-Beam Temp = %4.1lf K", Tmb);
485 st_report(
"Telescope Main-Beam FWHM = %4.1lf arcsecs", theta_mb);
488 st_report(
"Rejection Factor = %7.5lf", f_rej);
490 st_report(
"Main-Beam Efficiency = %5.2lf +/- %.2lf%%",
491 (st->
eta_mb * 100.0), (st->
err * 100.0));
499 double planck(
double freq,
double T_bright)
503 p = (
H * freq /
K) / (exp((
H * freq) / (
K * T_bright)) - 1.0);
517 static struct tm *tmn3;
568 fprintf(fp,
"%02d %3s %4d %02d:%02d (%d) %7.2f %3.3s %7.7s %10.6lf %02d %6.2lf %4.1lf %.1f %.0f\n",
570 tmn3->tm_mday,
months[tmn3->tm_mon], tmn3->tm_year+1900,
571 tmn3->tm_hour, tmn3->tm_min, n, a->
head.
scan,
577 st_report(
"IF%2d: Avg = %.2f, RMS = %.3f, Eff = %.2f, Err = %.2f",
595 st_report(
"Averages: %d %d %d %d", indx[0], indx[1], indx[2], indx[3]);
598 if((fp = fopen(
"beam_eff.dat",
"a")) == NULL)
600 printf(
"BEAM_EFF: Unable to open beam_eff.dat file\n");
605 fprintf(fp,
"Analysed: %s\n",
getcTime(0));
621 int first = 1, i, n, bknd, bkindx[
MAX_BKNDS], found = 0, saveCalMode;
625 static struct tm *tmn2;
629 bzero((
char *)&bkindx,
sizeof(bkindx));
639 st_fail(
"One or More Rejections are not set");
648 st_fail(
"One or More Rejections are not set");
659 if(strncmp(p->
obsmode,
"CONTSEQ", 7))
687 st_report(
"Obs-Time: Mon %d, Day %d, Year %d, Hour %d, Min %d",
758 st_report(
"Backend %8.8s = %d, Rej = %.1f",
775 p2 = &
results[bknd][bkindx[bknd]];
786 printf(
"Number of Scans %d Out Of Range\n", bkindx[bknd]);
796 printf(
"Backend Indx %d Out Of Range\n", bknd);
812 st_report(
"Results written to beam_eff.dat");
816 st_report(
"Found %d scans matching your criteria", found);
822 if(
getYesNoQuit(
"Use beam eff value of %.3f %.3f. %.3f %.3f: y/N ?",
struct LP_IMAGE_INFO * h0
struct RESULTS results[MAX_BKNDS][MAX_BKNDS]
struct PARSE_STACK * args
double rejections[MAX_BEAMS]
int accum_v1(float *data, struct HEADER *h, int invert, struct ACCUM_RESULTS *ar)
struct tm * breakTime(double burnT)
struct ACCUM_RESULTS accum_results[4]
double parseBeamEff(char *buf)
double restFreq(struct HEADER *h)
char * planet_names[MAX_PLANETS]
int meetsCritiria(struct HEADER *p, int mask)
int findBackend(double scan)
char * getcTime(int offset)
double planck(double freq, double T_bright)
int processResults(int n, int indx, FILE *fp)
int isScanIgnored(double scan)
struct RESULTS averages[MAX_BKNDS]