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 #include <stdint.h>
7 
8 #include "nomad.h"
9 #include "an-endian.h"
10 #include "starutil.h"
11 
nomad_parse_entry(nomad_entry * entry,const void * encoded)12 int nomad_parse_entry(nomad_entry* entry, const void* encoded) {
13     const uint32_t* udata = encoded;
14     uint32_t uval;
15     int32_t ival;
16 
17     ival = uval = u32_letoh(udata[0]);
18     entry->ra = arcsec2deg(uval * 0.001);
19 
20     ival = uval = u32_letoh(udata[1]);
21     entry->dec = arcsec2deg(uval * 0.001) - 90.0;
22 
23     ival = uval = u32_letoh(udata[2]);
24     entry->sigma_racosdec = arcsec2deg(uval * 0.001);
25 
26     ival = uval = u32_letoh(udata[3]);
27     entry->sigma_dec = arcsec2deg(uval * 0.001);
28 
29     ival = uval = u32_letoh(udata[4]);
30     entry->pm_racosdec = ival * 0.0001;
31 
32     ival = uval = u32_letoh(udata[5]);
33     entry->pm_dec = ival * 0.0001;
34 
35     ival = uval = u32_letoh(udata[6]);
36     entry->sigma_pm_racosdec = uval * 0.0001;
37 
38     ival = uval = u32_letoh(udata[7]);
39     entry->sigma_pm_dec = uval * 0.0001;
40 
41     ival = uval = u32_letoh(udata[8]);
42     entry->epoch_ra = uval * 0.001;
43 
44     ival = uval = u32_letoh(udata[9]);
45     entry->epoch_dec = uval * 0.001;
46 
47     ival = uval = u32_letoh(udata[10]);
48     entry->mag_B = ival * 0.001;
49 
50     ival = uval = u32_letoh(udata[11]);
51     entry->mag_V = ival * 0.001;
52 
53     ival = uval = u32_letoh(udata[12]);
54     entry->mag_R = ival * 0.001;
55 
56     ival = uval = u32_letoh(udata[13]);
57     entry->mag_J = ival * 0.001;
58 
59     ival = uval = u32_letoh(udata[14]);
60     entry->mag_H = ival * 0.001;
61 
62     ival = uval = u32_letoh(udata[15]);
63     entry->mag_K = ival * 0.001;
64 
65     ival = uval = u32_letoh(udata[16]);
66     entry->usnob_id = uval;
67 
68     ival = uval = u32_letoh(udata[17]);
69     entry->twomass_id = uval;
70 
71     ival = uval = u32_letoh(udata[18]);
72     entry->yb6_id = uval;
73 
74     ival = uval = u32_letoh(udata[19]);
75     entry->ucac2_id = uval;
76 
77     ival = uval = u32_letoh(udata[20]);
78     entry->tycho2_id = uval;
79 
80     ival = uval = u32_letoh(udata[21]);
81     entry->astrometry_src = (uval >> 0) & 0x7;
82     entry->blue_src       = (uval >> 3) & 0x7;
83     entry->visual_src     = (uval >> 6) & 0x7;
84     entry->red_src        = (uval >> 9) & 0x7;
85 
86     entry->usnob_fail       = (uval >> 12) & 0x1;
87     entry->twomass_fail     = (uval >> 13) & 0x1;
88 
89     entry->tycho_astrometry = (uval >> 16) & 0x1;
90     entry->alt_radec        = (uval >> 17) & 0x1;
91     //entry->alt_2mass        = (uval >> 18) & 0x1;
92     entry->alt_ucac         = (uval >> 19) & 0x1;
93     entry->alt_tycho        = (uval >> 20) & 0x1;
94     entry->blue_o           = (uval >> 21) & 0x1;
95     entry->red_e            = (uval >> 22) & 0x1;
96     entry->twomass_only     = (uval >> 23) & 0x1;
97     entry->hipp_astrometry  = (uval >> 24) & 0x1;
98     entry->diffraction      = (uval >> 25) & 0x1;
99     entry->confusion        = (uval >> 26) & 0x1;
100     entry->bright_confusion = (uval >> 27) & 0x1;
101     entry->bright_artifact  = (uval >> 28) & 0x1;
102     entry->standard         = (uval >> 29) & 0x1;
103     //entry->external         = (uval >> 30) & 0x1;
104 
105     return 0;
106 }
107