static void check_scale(quadbuilder_t* qb, pquad_t* pq) { double *sA, *sB; double s2; double Bx=0, By=0; double invscale; double ABx, ABy; Unused anbool ok; if (!(qb->check_scale_low || qb->check_scale_high)) return; sA = qb->starxyz + pq->iA * 3; sB = qb->starxyz + pq->iB * 3; // s2: squared AB dist s2 = distsq(sA, sB, 3); pq->scale_ok = TRUE; if (qb->check_scale_low && s2 < qb->quadd2_low) pq->scale_ok = FALSE; if (pq->scale_ok && qb->check_scale_high && s2 > qb->quadd2_high) pq->scale_ok = FALSE; if (!pq->scale_ok) { qb->nbadscale++; return; } star_midpoint(pq->midAB, sA, sB); pq->scale_ok = TRUE; pq->staridA = qb->starinds[pq->iA]; pq->staridB = qb->starinds[pq->iB]; ok = star_coords(sA, pq->midAB, TRUE, &pq->Ay, &pq->Ax); assert(ok); ok = star_coords(sB, pq->midAB, TRUE, &By, &Bx); assert(ok); ABx = Bx - pq->Ax; ABy = By - pq->Ay; invscale = 1.0 / (ABx*ABx + ABy*ABy); pq->costheta = (ABy + ABx) * invscale; pq->sintheta = (ABy - ABx) * invscale; //nabok++; }
int main(int argc, char** args) { int argchar; char* basename; char* outfn = NULL; index_t* index; quadfile* qf; rdlist_t* rdls; startree_t* skdt = NULL; anbool addradius = FALSE; int i; int radcolumn = -1; while ((argchar = getopt (argc, args, OPTIONS)) != -1) switch (argchar) { case 'R': addradius = TRUE; break; case 'r': outfn = optarg; break; case 'h': print_help(args[0]); exit(0); } if (!outfn || (optind == argc)) { print_help(args[0]); exit(-1); } rdls = rdlist_open_for_writing(outfn); if (!rdls) { fprintf(stderr, "Failed to open RDLS file %s for output.\n", outfn); exit(-1); } if (rdlist_write_primary_header(rdls)) { fprintf(stderr, "Failed to write RDLS header.\n"); exit(-1); } if (addradius) { radcolumn = rdlist_add_tagalong_column(rdls, fitscolumn_double_type(), 1, fitscolumn_double_type(), "QUADRADIUS", "deg"); } for (; optind<argc; optind++) { //int Nstars; int dimquads; basename = args[optind]; printf("Reading files with basename %s\n", basename); index = index_load(basename, 0, NULL); if (!index) { fprintf(stderr, "Failed to read index with base name \"%s\"\n", basename); exit(-1); } qf = index->quads; skdt = index->starkd; //Nstars = startree_N(skdt); if (rdlist_write_header(rdls)) { fprintf(stderr, "Failed to write new RDLS field header.\n"); exit(-1); } dimquads = quadfile_dimquads(qf); printf("Reading quads...\n"); for (i=0; i<qf->numquads; i++) { unsigned int stars[dimquads]; double axyz[3], bxyz[3]; double midab[3]; double radec[2]; if (!(i % 200000)) { printf("."); fflush(stdout); } quadfile_get_stars(qf, i, stars); startree_get(skdt, stars[0], axyz); startree_get(skdt, stars[1], bxyz); star_midpoint(midab, axyz, bxyz); xyzarr2radecdegarr(midab, radec); if (rdlist_write_one_radec(rdls, radec[0], radec[1])) { fprintf(stderr, "Failed to write a RA,Dec entry.\n"); exit(-1); } if (addradius) { double rad = arcsec2deg(distsq2arcsec(distsq(midab, axyz, 3))); if (rdlist_write_tagalong_column(rdls, radcolumn, i, 1, &rad, 0)) { fprintf(stderr, "Failed to write quad radius.\n"); exit(-1); } } } printf("\n"); index_close(index); if (rdlist_fix_header(rdls)) { fprintf(stderr, "Failed to fix RDLS field header.\n"); exit(-1); } rdlist_next_field(rdls); } if (rdlist_fix_primary_header(rdls) || rdlist_close(rdls)) { fprintf(stderr, "Failed to close RDLS file.\n"); exit(-1); } return 0; }