int fitstable_append_to(fitstable_t* intable, FILE* fid) { fitstable_t* outtable; qfits_header* tmphdr; outtable = fitstable_open_for_appending_to(fid); fitstable_clear_table(intable); fitstable_add_fits_columns_as_struct(intable); fitstable_copy_columns(intable, outtable); outtable->table = fits_copy_table(intable->table); outtable->table->nr = 0; // swap in the input header. tmphdr = outtable->header; outtable->header = intable->header; if (fitstable_write_header(outtable)) { ERROR("Failed to write output table header"); return -1; } if (fitstable_copy_rows_data(intable, NULL, fitstable_nrows(intable), outtable)) { ERROR("Failed to copy rows from input table to output"); return -1; } if (fitstable_fix_header(outtable)) { ERROR("Failed to fix output table header"); return -1; } outtable->header = tmphdr; // clear this so that fitstable_close() doesn't fclose() it. outtable->fid = NULL; fitstable_close(outtable); return 0; }
int unpermute_stars_files(const char* skdtinfn, const char* quadinfn, const char* skdtoutfn, const char* quadoutfn, anbool dosweeps, anbool check, char** args, int argc) { quadfile_t* qfin; quadfile_t* qfout; startree_t* treein; startree_t* treeout; fitstable_t* tagout = NULL; fitstable_t* tagin; int rtn; logmsg("Reading star tree from %s ...\n", skdtinfn); treein = startree_open(skdtinfn); if (!treein) { ERROR("Failed to read star kdtree from %s.\n", skdtinfn); return -1; } logmsg("Reading quadfile from %s ...\n", quadinfn); qfin = quadfile_open(quadinfn); if (!qfin) { ERROR("Failed to read quadfile from %s.\n", quadinfn); return -1; } logmsg("Writing quadfile to %s ...\n", quadoutfn); qfout = quadfile_open_for_writing(quadoutfn); if (!qfout) { ERROR("Failed to write quadfile to %s.\n", quadoutfn); return -1; } rtn = unpermute_stars(treein, qfin, &treeout, qfout, dosweeps, check, args, argc); if (rtn) return rtn; if (quadfile_close(qfout)) { ERROR("Failed to close output quadfile.\n"); return -1; } logmsg("Writing star kdtree to %s ...\n", skdtoutfn); if (startree_write_to_file(treeout, skdtoutfn)) { ERROR("Failed to write star kdtree.\n"); return -1; } if (startree_has_tagalong(treein)) { logmsg("Permuting tag-along table...\n"); tagin = startree_get_tagalong(treein); if (tagin) { tagout = fitstable_open_for_appending(skdtoutfn); tagout->table = fits_copy_table(tagin->table); tagout->table->nr = 0; if (unpermute_stars_tagalong(treein, tagout)) { ERROR("Failed to permute tag-along table"); return -1; } if (fitstable_close(tagout)) { ERROR("Failed to close tag-along data"); return -1; } } } quadfile_close(qfin); startree_close(treein); free(treeout->sweep); free(treeout->tree); treeout->tree = NULL; startree_close(treeout); return 0; }