1 /*
2 # This file is part of the Astrometry.net suite.
3 # Licensed under a 3-clause BSD style license - see LICENSE
4 */
5
6 /*
7 Checks the consistency of "quad" and "qidx" files.
8 */
9
10 #include <string.h>
11
12 #include "starutil.h"
13 #include "quadfile.h"
14 #include "qidxfile.h"
15 #include "bl.h"
16 #include "fitsioutils.h"
17
18 #define OPTIONS "hf:"
19 const char HelpString[] =
20 "quadidx -f fname\n";
21
22
main(int argc,char * argv[])23 int main(int argc, char *argv[]) {
24 int argidx, argchar;
25 char *qidxfname = NULL;
26 char *quadfname = NULL;
27 quadfile* quad;
28 qidxfile* qidx;
29 int q, s;
30 int dimquads;
31
32 while ((argchar = getopt (argc, argv, OPTIONS)) != -1)
33 switch (argchar) {
34 case 'f':
35 qidxfname = mk_qidxfn(optarg);
36 quadfname = mk_quadfn(optarg);
37 break;
38 case '?':
39 fprintf(stderr, "Unknown option `-%c'.\n", optopt);
40 case 'h':
41 fprintf(stderr, HelpString);
42 return (HELP_ERR);
43 default:
44 return (OPT_ERR);
45 }
46
47 if (optind < argc) {
48 for (argidx = optind; argidx < argc; argidx++)
49 fprintf (stderr, "Non-option argument %s\n", argv[argidx]);
50 fprintf(stderr, HelpString);
51 return (OPT_ERR);
52 }
53
54 quad = quadfile_open(quadfname, 0);
55 if (!quad) {
56 fprintf(stderr, "Couldn't open quads file %s.\n", quadfname);
57 exit(-1);
58 }
59
60 qidx = qidxfile_open(qidxfname, 0);
61 if (!qidx) {
62 fprintf(stderr, "Couldn't open qidx file %s.\n", qidxfname);
63 exit(-1);
64 }
65
66 if (quad->numquads != qidx->numquads) {
67 fprintf(stderr, "Number of quads does not agree: %i vs %i\n",
68 quad->numquads, qidx->numquads);
69 exit(-1);
70 }
71
72 dimquads = quadfile_dimquads(quad);
73
74 printf("Checking stars...\n");
75 for (s=0; s<qidx->numstars; s++) {
76 uint32_t* quads;
77 int nquads;
78 int j;
79 qidxfile_get_quads(qidx, s, &quads, &nquads);
80 for (j=0; j<nquads; j++) {
81 int star[dimquads];
82 int k, n;
83 quadfile_get_stars(quad, quads[j], star);
84 n = 0;
85 for (k=0; k<dimquads; k++) {
86 if (star[k] == s)
87 n++;
88 }
89 if (n != 1) {
90 fprintf(stderr, "Star %i, quad %i: found %i instances of the quad in the qidx (not 1)\n",
91 s, quads[j], n);
92 fprintf(stderr, " found: ");
93 for (k=0; k<dimquads; k++) {
94 fprintf(stderr, "%i ", star[k]);
95 }
96 fprintf(stderr, "\n");
97 }
98 }
99 }
100
101 printf("Checking quads...\n");
102 for (q=0; q<quad->numquads; q++) {
103 int star[dimquads];
104 uint32_t* quads;
105 int nquads;
106 int j;
107 quadfile_get_stars(quad, q, star);
108 for (j=0; j<dimquads; j++) {
109 int k;
110 int n;
111 qidxfile_get_quads(qidx, star[j], &quads, &nquads);
112 n = 0;
113 for (k=0; k<nquads; k++) {
114 if (quads[k] == q)
115 n++;
116 }
117 if (n != 1) {
118 fprintf(stderr, "Quad %i, star %i: found %i instances of the quad in the qidx (not 1)\n",
119 q, star[j], n);
120 fprintf(stderr, " found: ");
121 for (k=0; k<nquads; k++) {
122 fprintf(stderr, "%i ", quads[k]);
123 }
124 fprintf(stderr, "\n");
125 }
126 }
127 }
128
129 quadfile_close(quad);
130 qidxfile_close(qidx);
131
132 return 0;
133 }
134