int startree_get_tagalong_column_array_size(startree_t* s, int i) { if (!startree_has_tagalong(s)) return -1; return fitstable_get_fits_column_array_size(startree_get_tagalong(s), i); }
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; }
tfits_type startree_get_tagalong_column_fits_type(startree_t* s, int i) { if (!startree_has_tagalong(s)) return TFITS_BIN_TYPE_UNKNOWN; return fitstable_get_fits_column_type(startree_get_tagalong(s), i); }
/** Returns the name of the 'i'th column in the tagalong table. */ const char* startree_get_tagalong_column_name(startree_t* s, int i) { if (!startree_has_tagalong(s)) return NULL; return fitstable_get_fits_column_name(startree_get_tagalong(s), i); }
int startree_get_tagalong_N_columns(startree_t* s) { if (!startree_has_tagalong(s)) return 0; return fitstable_get_N_fits_columns(startree_get_tagalong(s)); }
sl* startree_get_tagalong_column_names(startree_t* s, sl* lst) { if (!startree_has_tagalong(s)) return NULL; return fitstable_get_fits_column_names(startree_get_tagalong(s), lst); }
int merge_index(quadfile* quad, codetree* code, startree_t* star, const char* indexfn) { FILE* fout; fitstable_t* tag = NULL; fout = fopen(indexfn, "wb"); if (!fout) { SYSERROR("Failed to open output file"); return -1; } if (quadfile_write_header_to(quad, fout)) { ERROR("Failed to write quadfile header to index file %s", indexfn); return -1; } if (quadfile_write_all_quads_to(quad, fout)) { ERROR("Failed to write quads to index file %s", indexfn); return -1; } if (fits_pad_file(fout)) { ERROR("Failed to pad index file %s", indexfn); return -1; } if (codetree_append_to(code, fout)) { ERROR("Failed to write code kdtree to index file %s", indexfn); return -1; } if (fits_pad_file(fout)) { ERROR("Failed to pad index file %s", indexfn); return -1; } if (startree_append_to(star, fout)) { ERROR("Failed to write star kdtree to index file %s", indexfn); return -1; } if (fits_pad_file(fout)) { ERROR("Failed to pad index file %s", indexfn); return -1; } if (startree_has_tagalong(star)) tag = startree_get_tagalong(star); if (tag) { if (fitstable_append_to(tag, fout)) { ERROR("Failed to write star kdtree tag-along data to index file %s", indexfn); return -1; } if (fits_pad_file(fout)) { ERROR("Failed to pad index file %s", indexfn); return -1; } } if (fclose(fout)) { SYSERROR("Failed to close index file %s", indexfn); return -1; } return 0; }