int main(int argc, char *argv[]) { int year, month, day, hour, min, err; double MJD, fracday, dh, dm, sec; if (argc != 2) { printf("\nUsage: 'mjd2cal MJD'\n\n"); exit(1); } MJD = atof(argv[1]); slaDjcl(MJD, &year, &month, &day, &fracday, &err); if (err == -1) { printf("\nTry again. Bad MJD.\n\n"); exit(1); } dh = fracday * 24.0; hour = (int) dh; dm = (dh - hour) * 60.0; min = (int) dm; sec = (dm - min) * 60.0; printf("\nDate is %2d %s %4d at %2d hours %2d minutes and %.8g seconds\n\n", day, months[month - 1], year, hour, min, sec); exit(0); }
void mjd_to_datestr(double mjd, char *datestr) // Convert an MJD to a PSRFITS-style DATEOBS { int year, month, day, hour, min, err; double fracday, dh, dm, sec; slaDjcl(mjd, &year, &month, &day, &fracday, &err); if (err == -1) { printf("Error in mjd_to_datestr: Bad MJD '%.12f'.\n", mjd); exit(1); } dh = fracday * 24.0; hour = (int) dh; dm = (dh - hour) * 60.0; min = (int) dm; sec = (dm - min) * 60.0; if (sec < 10.0) { sprintf(datestr, "%4d-%02d-%02dT%2d:%02d:0%.6g", year, month, day, hour, min, sec); } else { sprintf(datestr, "%4d-%02d-%02dT%02d:%2d:%.6g", year, month, day, hour, min, sec); } }
int put_header(fitsfile *fptr, struct uvf_header *header, int gcount, double refdat, char *origin) { int naxis = 7; long pcount = 6; long naxes[7] = {0, 3, 1, 1, 1, 1, 1}; float bscale = 1.0, bzero = 0.0; int one = 1, zero = 0; double dfac1, dfac2, dref1, dref2, frac; char str[80]; int status = 0; int ier, year, month, day; char datobs[16]; /* Create the DATOBS string */ slaDjcl(refdat, &year, &month, &day, &frac, &ier); if (ier != 0) fputs("Invalid DATOBS for FITS file.\n", stderr); sprintf(datobs, "%4.4d-%2.2d-%2.2d", year, month, day); /* Check for presence of INTTIM */ if (header->index_inttim >=0) pcount = 7; /* Write required keywords. */ naxes[2] = header->nstokes; naxes[4] = header->nif; fits_write_grphdr(fptr, 1, FLOAT_IMG, naxis, naxes, pcount, gcount, 1, &status); fits_write_key(fptr, TFLOAT, "BSCALE", &bscale, 0, &status); fits_write_key(fptr, TFLOAT, "BZERO", &bzero, 0, &status); /* Additional keywords. */ fits_write_key(fptr, TSTRING, "OBJECT", header->object, "Source name", &status); fits_write_key(fptr, TSTRING, "TELESCOP", header->telescop, 0, &status); fits_write_key(fptr, TSTRING, "INSTRUME", header->instrume, 0, &status); fits_write_key(fptr, TSTRING, "OBSERVER", header->observer, 0, &status); fits_write_key(fptr, TSTRING, "DATE-OBS", datobs, 0, &status); fits_write_key(fptr, TSTRING, "BUNIT", header->bunit, 0, &status); fits_write_key(fptr, TSTRING, "RADECSYS", header->radecsys, 0, &status); fits_write_key(fptr, TDOUBLE, "EQUINOX", &header->equinox, "Equinox of RA/Dec", &status); fits_write_key(fptr, TDOUBLE, "EPOCH", &header->equinox, "Alternate name for EQUINOX", &status); fits_write_key(fptr, TDOUBLE, "OBSRA", &header->obsra, "Antenna pointing RA", &status); fits_write_key(fptr, TDOUBLE, "OBSDEC", &header->obsdec, "Antenna pointing Dec", &status); /* FITS coordinate parameters */ fits_write_key(fptr, TSTRING, "CTYPE2", "COMPLEX", "1=real, 2=imag, 3=weight", &status); fits_write_key(fptr, TINT, "CRVAL2", &one, 0, &status); fits_write_key(fptr, TINT, "CDELT2", &one, 0, &status); fits_write_key(fptr, TINT, "CRPIX2", &one, 0, &status); fits_write_key(fptr, TSTRING, "CTYPE3", "STOKES", "Correlator: -1=RR, -2=LL, -3=RL, -4=LR",&status); fits_write_key(fptr, TINT, "CRVAL3", &header->stokes, 0, &status); fits_write_key(fptr, TINT, "CDELT3", &header->delta_stokes, 0, &status); fits_write_key(fptr, TINT, "CRPIX3", &one, 0, &status); fits_write_key(fptr, TSTRING, "CTYPE4", "FREQ","Frequency, Hz", &status); fits_write_key(fptr, TDOUBLE, "CRVAL4", &header->freq, 0, &status); fits_write_key(fptr, TDOUBLE, "CDELT4", &header->bw, 0, &status); fits_write_key(fptr, TINT, "CRPIX4", &one, 0, &status); fits_write_key(fptr, TSTRING, "CTYPE5", "IF", "IF number",&status); fits_write_key(fptr, TINT, "CRVAL5", &one, 0, &status); fits_write_key(fptr, TINT, "CDELT5", &one, 0, &status); fits_write_key(fptr, TINT, "CRPIX5", &one, 0, &status); fits_write_key(fptr, TSTRING, "CTYPE6", "RA", "Right ascension, degrees", &status); fits_write_key(fptr, TDOUBLE, "CRVAL6", &header->ra, 0, &status); fits_write_key(fptr, TINT, "CDELT6", &zero, 0, &status); fits_write_key(fptr, TINT, "CRPIX6", &one, 0, &status); fits_write_key(fptr, TSTRING, "CTYPE7", "DEC", "Declination, degrees", &status); fits_write_key(fptr, TDOUBLE, "CRVAL7", &header->dec, 0, &status); fits_write_key(fptr, TINT, "CDELT7", &zero, 0, &status); fits_write_key(fptr, TINT, "CRPIX7", &one, 0, &status); /* FITS random parameters. */ fits_write_key(fptr, TSTRING, "PTYPE1", "UU", "baseline u projection, seconds", &status); fits_write_key(fptr, TINT, "PSCAL1", &one, 0, &status); fits_write_key(fptr, TINT, "PZERO1", &zero, 0, &status); fits_write_key(fptr, TSTRING, "PTYPE2", "VV", "baseline v projection, seconds", &status); fits_write_key(fptr, TINT, "PSCAL2", &one, 0, &status); fits_write_key(fptr, TINT, "PZERO2", &zero, 0, &status); fits_write_key(fptr, TSTRING, "PTYPE3", "WW", "baseline w projection, seconds", &status); fits_write_key(fptr, TINT, "PSCAL3", &one, 0, &status); fits_write_key(fptr, TINT, "PZERO3", &zero, 0, &status); fits_write_key(fptr, TSTRING, "PTYPE4", "BASELINE", "256*ANT1 + ANT2", &status); fits_write_key(fptr, TINT, "PSCAL4", &one, 0, &status); fits_write_key(fptr, TINT, "PZERO4", &zero, 0, &status); dfac1 = 1.0; dref1 = refdat + 2400000.5; /* convert MJD to JD */ fits_write_key(fptr, TSTRING, "PTYPE5", "DATE", "UTC Julian Date part 1", &status); fits_write_key(fptr, TDOUBLE, "PSCAL5", &dfac1, "Days", &status); fits_write_key(fptr, TDOUBLE, "PZERO5", &dref1, 0, &status); dfac2 = 1.0/86400.0; dref2 = 0.0; fits_write_key(fptr, TSTRING, "PTYPE6", "DATE", "UTC Julian Date part 2", &status); fits_write_key(fptr, TDOUBLE, "PSCAL6", &dfac2, "Days/86400 (sec)", &status); fits_write_key(fptr, TFLOAT, "PZERO6", &dref2, 0, &status); if (pcount >= 7) { fits_write_key(fptr, TSTRING, "PTYPE7", "INTTIM", "Integration time (sec)", &status); fits_write_key(fptr, TINT, "PSCAL7", &one, 0, &status); fits_write_key(fptr, TINT, "PZERO7", &zero, 0, &status); } sprintf(str, "%.12s (run by %.12s on %.12s)", origin, getenv("USER"), getenv("HOST")); fits_write_key(fptr, TSTRING, "ORIGIN", str," ", &status); /* Date/time of file creation */ fits_write_date(fptr, &status); fits_report_error(stderr, status); return status; }