void update_dev_file(){ write_axis(0, x); write_axis(1, y); write_axis(2, z); write_axis(3, pitch); write_axis(4, roll); write_axis(5, yaw); }
static fitsfile* create_fits_file(const char* filename, int precision, int width, int height, int num_times, int num_channels, double centre_deg[2], double fov_deg[2], double start_time_mjd, double delta_time_sec, double start_freq_hz, double delta_freq_hz, int horizon_mode, const char* settings_log, size_t settings_log_length, int* status) { int imagetype; long naxes[4], naxes_dummy[4] = {1l, 1l, 1l, 1l}; double delta; const double deg2rad = M_PI / 180.0; const double rad2deg = 180.0 / M_PI; fitsfile* f = 0; const char* line; size_t length; if (*status) return 0; /* Create a new FITS file and write the image headers. */ if (oskar_file_exists(filename)) remove(filename); imagetype = (precision == OSKAR_DOUBLE ? DOUBLE_IMG : FLOAT_IMG); naxes[0] = width; naxes[1] = height; naxes[2] = num_channels; naxes[3] = num_times; fits_create_file(&f, filename, status); fits_create_img(f, imagetype, 4, naxes_dummy, status); fits_write_date(f, status); fits_write_key_str(f, "TELESCOP", "OSKAR " OSKAR_VERSION_STR, 0, status); /* Write axis headers. */ if (horizon_mode) { delta = oskar_convert_fov_to_cellsize(M_PI, width); write_axis(f, 1, "-----SIN", "Azimuthal angle", 0.0, -delta * rad2deg, (width + 1) / 2.0, status); delta = oskar_convert_fov_to_cellsize(M_PI, height); write_axis(f, 2, "-----SIN", "Elevation", 90.0, delta * rad2deg, (height + 1) / 2.0, status); } else { delta = oskar_convert_fov_to_cellsize(fov_deg[0] * deg2rad, width); write_axis(f, 1, "RA---SIN", "Right Ascension", centre_deg[0], -delta * rad2deg, (width + 1) / 2.0, status); delta = oskar_convert_fov_to_cellsize(fov_deg[1] * deg2rad, height); write_axis(f, 2, "DEC--SIN", "Declination", centre_deg[1], delta * rad2deg, (height + 1) / 2.0, status); } write_axis(f, 3, "FREQ", "Frequency", start_freq_hz, delta_freq_hz, 1.0, status); write_axis(f, 4, "UTC", "Time", start_time_mjd * 86400.0, delta_time_sec, 1.0, status); /* Write other headers. */ fits_write_key_str(f, "TIMESYS", "UTC", NULL, status); fits_write_key_str(f, "TIMEUNIT", "s", "Time axis units", status); fits_write_key_dbl(f, "MJD-OBS", start_time_mjd, 10, "Start time", status); if (!horizon_mode) { fits_write_key_dbl(f, "OBSRA", centre_deg[0], 10, "RA", status); fits_write_key_dbl(f, "OBSDEC", centre_deg[1], 10, "DEC", status); } /* Write the settings log up to this point as HISTORY comments. */ line = settings_log; length = settings_log_length; for (; settings_log_length > 0;) { const char* eol; fits_write_history(f, line, status); eol = (const char*) memchr(line, '\0', length); if (!eol) break; eol += 1; length -= (eol - line); line = eol; } /* Update header keywords with the correct axis lengths. * Needs to be done here because CFITSIO doesn't let us write only the * file header with the correct axis lengths to start with. This trick * allows us to create a small dummy image block to write only the headers, * and not waste effort moving a huge block of zeros within the file. */ fits_update_key_lng(f, "NAXIS1", naxes[0], 0, status); fits_update_key_lng(f, "NAXIS2", naxes[1], 0, status); fits_update_key_lng(f, "NAXIS3", naxes[2], 0, status); fits_update_key_lng(f, "NAXIS4", naxes[3], 0, status); return f; }