int codefile_fix_header(codefile_t* cf) { qfits_header* hdr; fitsbin_t* fb = cf->fb; fitsbin_chunk_t* chunk = codes_chunk(cf); chunk->itemsize = cf->dimcodes * sizeof(double); chunk->nrows = cf->numcodes; hdr = codefile_get_header(cf); // fill in the real values... fits_header_mod_int(hdr, "DIMCODES", cf->dimcodes, "Number of values in a code."); fits_header_mod_int(hdr, "NCODES", cf->numcodes, "Number of codes."); fits_header_mod_int(hdr, "NSTARS", cf->numstars, "Number of stars."); fits_header_mod_double(hdr, "SCALE_U", cf->index_scale_upper, "Upper-bound index scale (radians)."); fits_header_mod_double(hdr, "SCALE_L", cf->index_scale_lower, "Lower-bound index scale (radians)."); fits_header_mod_int(hdr, "INDEXID", cf->indexid, "Index unique ID."); fits_header_mod_int(hdr, "HEALPIX", cf->healpix, "Healpix of this index."); fits_header_mod_int(hdr, "HPNSIDE", cf->hpnside, "Nside of the healpixelization"); if (fitsbin_fix_primary_header(fb) || fitsbin_fix_chunk_header(fb, chunk)) { ERROR("Failed to fix code header"); return -1; } return 0; }
void test_fitsbin_1(CuTest* ct) { fitsbin_t* in, *out; int i; int N = 6; double outdata[6]; double* indata; char* fn; fitsbin_chunk_t chunk; fn = get_tmpfile(0); out = fitsbin_open_for_writing(fn); CuAssertPtrNotNull(ct, out); CuAssertIntEquals(ct, 0, fitsbin_write_primary_header(out)); for (i=0; i<N; i++) { outdata[i] = i*i; } fitsbin_chunk_init(&chunk); chunk.tablename = "test1"; chunk.itemsize = sizeof(double); chunk.nrows = N; chunk.data = outdata; CuAssertIntEquals(ct, 0, fitsbin_write_chunk(out, &chunk)); CuAssertIntEquals(ct, fitsbin_fix_primary_header(out), 0); CuAssertIntEquals(ct, fitsbin_close(out), 0); fitsbin_chunk_clean(&chunk); // writing shouldn't affect the data values for (i=0; i<N; i++) { CuAssertIntEquals(ct, outdata[i], i*i); } in = fitsbin_open(fn); CuAssertPtrNotNull(ct, in); fitsbin_chunk_init(&chunk); chunk.tablename = "test1"; CuAssertIntEquals(ct, 0, fitsbin_read_chunk(in, &chunk)); CuAssertIntEquals(ct, sizeof(double), chunk.itemsize); CuAssertIntEquals(ct, N, chunk.nrows); indata = chunk.data; CuAssertPtrNotNull(ct, indata); CuAssertIntEquals(ct, 0, memcmp(outdata, indata, sizeof(outdata))); CuAssertIntEquals(ct, 0, fitsbin_close(in)); }
void test_inmemory_fitsbin_1(CuTest* ct) { fitsbin_t* fb; int i; int N = 6; double outdata[6]; double* indata; fitsbin_chunk_t chunk; fb = fitsbin_open_in_memory(); CuAssertPtrNotNull(ct, fb); CuAssertIntEquals(ct, 0, fitsbin_write_primary_header(fb)); for (i=0; i<N; i++) { outdata[i] = i*i; } fitsbin_chunk_init(&chunk); chunk.tablename = "test1"; chunk.itemsize = sizeof(double); chunk.nrows = N; chunk.data = outdata; CuAssertIntEquals(ct, 0, fitsbin_write_chunk(fb, &chunk)); CuAssertIntEquals(ct, 0, fitsbin_fix_primary_header(fb)); fitsbin_chunk_clean(&chunk); // writing shouldn't affect the data values for (i=0; i<N; i++) { CuAssertIntEquals(ct, outdata[i], i*i); } CuAssertIntEquals(ct, 0, fitsbin_switch_to_reading(fb)); fitsbin_chunk_init(&chunk); chunk.tablename = "test1"; CuAssertIntEquals(ct, 0, fitsbin_read_chunk(fb, &chunk)); CuAssertIntEquals(ct, sizeof(double), chunk.itemsize); CuAssertIntEquals(ct, N, chunk.nrows); indata = chunk.data; CuAssertPtrNotNull(ct, indata); CuAssertIntEquals(ct, 0, memcmp(outdata, indata, sizeof(outdata))); CuAssertIntEquals(ct, 0, fitsbin_close(fb)); }