static int refill_buffer(void* userdata, void* buffer, unsigned int offset, unsigned int n) { fitstable_t* tab = userdata; //logverb("fitstable.c:refill_buffer: offset %i, n %i\n", offset, n); if (fitstable_read_structs(tab, buffer, tab->br->elementsize, offset, n)) { ERROR("Error refilling FITS table read buffer"); return -1; } return 0; }
int startree_write_tagalong_table(fitstable_t* intab, fitstable_t* outtab, const char* racol, const char* deccol) { int i, R, NB, N; char* buf; qfits_header* hdr; fitstable_clear_table(intab); fitstable_add_fits_columns_as_struct(intab); fitstable_copy_columns(intab, outtab); if (!racol) racol = "RA"; if (!deccol) deccol = "DEC"; fitstable_remove_column(outtab, racol); fitstable_remove_column(outtab, deccol); fitstable_read_extension(intab, 1); hdr = fitstable_get_header(outtab); qfits_header_add(hdr, "AN_FILE", AN_FILETYPE_TAGALONG, "Extra data for stars", NULL); if (fitstable_write_header(outtab)) { ERROR("Failed to write tag-along data header"); return -1; } R = fitstable_row_size(intab); NB = 1000; logverb("Input row size: %i, output row size: %i\n", R, fitstable_row_size(outtab)); buf = malloc(NB * R); N = fitstable_nrows(intab); for (i=0; i<N; i+=NB) { int nr = NB; if (i+NB > N) nr = N - i; if (fitstable_read_structs(intab, buf, R, i, nr)) { ERROR("Failed to read tag-along data from catalog"); return -1; } if (fitstable_write_structs(outtab, buf, R, nr)) { ERROR("Failed to write tag-along data"); return -1; } } free(buf); if (fitstable_fix_header(outtab)) { ERROR("Failed to fix tag-along data header"); return -1; } return 0; }
int fitstable_read_struct(fitstable_t* tab, int offset, void* struc) { return fitstable_read_structs(tab, struc, 0, offset, 1); }
int matchfile_read_matches(matchfile* mf, MatchObj* entries, int offset, int count) { return fitstable_read_structs(mf, entries, sizeof(MatchObj), offset, count); }
int nomad_fits_read_entries(nomad_fits* cat, int offset, int count, nomad_entry* entries) { return fitstable_read_structs(cat, entries, sizeof(nomad_entry), offset, count); }