int hpquads_files(const char* skdtfn, const char* codefn, const char* quadfn, int Nside, double scale_min_arcmin, double scale_max_arcmin, int dimquads, int passes, int Nreuses, int Nloosen, int id, anbool scanoccupied, void* sort_data, int (*sort_func)(const void*, const void*), int sort_size, char** args, int argc) { quadfile_t* quads; codefile_t* codes; startree_t* starkd; int rtn; logmsg("Reading star kdtree %s ...\n", skdtfn); starkd = startree_open(skdtfn); if (!starkd) { ERROR("Failed to open star kdtree %s\n", skdtfn); return -1; } logmsg("Will write to quad file %s and code file %s\n", quadfn, codefn); quads = quadfile_open_for_writing(quadfn); if (!quads) { ERROR("Couldn't open file %s to write quads.\n", quadfn); return -1; } codes = codefile_open_for_writing(codefn); if (!codes) { ERROR("Couldn't open file %s to write codes.\n", codefn); return -1; } rtn = hpquads(starkd, codes, quads, Nside, scale_min_arcmin, scale_max_arcmin, dimquads, passes, Nreuses, Nloosen, id, scanoccupied, sort_data, sort_func, sort_size, args, argc); if (rtn) return rtn; if (quadfile_close(quads)) { ERROR("Couldn't write quad output file"); return -1; } if (codefile_close(codes)) { ERROR("Couldn't write code output file"); return -1; } startree_close(starkd); return rtn; }
int allquads_open_outputs(allquads_t* aq) { int hp, hpnside; qfits_header* hdr; printf("Reading star kdtree %s ...\n", aq->skdtfn); aq->starkd = startree_open(aq->skdtfn); if (!aq->starkd) { ERROR("Failed to open star kdtree %s\n", aq->skdtfn); return -1; } printf("Star tree contains %i objects.\n", startree_N(aq->starkd)); printf("Will write to quad file %s and code file %s\n", aq->quadfn, aq->codefn); aq->quads = quadfile_open_for_writing(aq->quadfn); if (!aq->quads) { ERROR("Couldn't open file %s to write quads.\n", aq->quadfn); return -1; } aq->codes = codefile_open_for_writing(aq->codefn); if (!aq->codes) { ERROR("Couldn't open file %s to write codes.\n", aq->quadfn); return -1; } aq->quads->dimquads = aq->dimquads; aq->codes->dimcodes = aq->dimcodes; if (aq->id) { aq->quads->indexid = aq->id; aq->codes->indexid = aq->id; } // get the "HEALPIX" header from the skdt and put it in the code and quad headers. hp = qfits_header_getint(startree_header(aq->starkd), "HEALPIX", -1); if (hp == -1) { logmsg("Warning: skdt does not contain \"HEALPIX\" header. Code and quad files will not contain this header either.\n"); } aq->quads->healpix = hp; aq->codes->healpix = hp; // likewise "HPNSIDE" hpnside = qfits_header_getint(startree_header(aq->starkd), "HPNSIDE", 1); aq->quads->hpnside = hpnside; aq->codes->hpnside = hpnside; hdr = quadfile_get_header(aq->quads); qfits_header_add(hdr, "CXDX", "T", "All codes have the property cx<=dx.", NULL); qfits_header_add(hdr, "CXDXLT1", "T", "All codes have the property cx+dx<=1.", NULL); qfits_header_add(hdr, "MIDHALF", "T", "All codes have the property cx+dx<=1.", NULL); qfits_header_add(hdr, "CIRCLE", "T", "Codes live in the circle, not the box.", NULL); hdr = codefile_get_header(aq->codes); qfits_header_add(hdr, "CXDX", "T", "All codes have the property cx<=dx.", NULL); qfits_header_add(hdr, "CXDXLT1", "T", "All codes have the property cx+dx<=1.", NULL); qfits_header_add(hdr, "MIDHALF", "T", "All codes have the property cx+dx<=1.", NULL); qfits_header_add(hdr, "CIRCLE", "T", "Codes live in the circle, not the box.", NULL); if (quadfile_write_header(aq->quads)) { ERROR("Couldn't write headers to quads file %s\n", aq->quadfn); return -1; } if (codefile_write_header(aq->codes)) { ERROR("Couldn't write headers to code file %s\n", aq->codefn); return -1; } if (!aq->use_d2_lower) aq->quad_d2_lower = 0.0; if (!aq->use_d2_upper) aq->quad_d2_upper = 10.0; aq->codes->numstars = startree_N(aq->starkd); aq->codes->index_scale_upper = distsq2rad(aq->quad_d2_upper); aq->codes->index_scale_lower = distsq2rad(aq->quad_d2_lower); aq->quads->numstars = aq->codes->numstars; aq->quads->index_scale_upper = aq->codes->index_scale_upper; aq->quads->index_scale_lower = aq->codes->index_scale_lower; return 0; }