Astrometry.net code structure¶
This is meant to be an introduction to what parts of the codebase run during a solve.
solver/solve-field.c¶
solver/augment-xylist.c¶
A field to solve is encapsulated in an “axy” file, which is a FITS binary table containing X,Y star positions, and well as FITS header cards that describe the command-line arguments and other information we have about the image. “axy” is short for “augmented x,y list”, and we often abbreviate “x,y list” to “xylist”. augment-xylist.c creates these “axy” files.
run image2pnm.py to uncompress and convert images to PNM.
for non-FITS images, run ppmtopgm and an-pnmtofits to produce FITS
run image2xy (or SourceExtractor) to generate list of (x,y) star coordinates (xylist)
run removelines.py to remove lines of sources from the xylist
run resort_xylist() to sort by a combination of brightness and background
run uniformize.py to select a spatially uniform subset of stars
add headers to xylist to create axy file
solver/engine-main.c¶
This is the astrometry-engine executable.
reads astrometry.cfg file
finds index files
reads axy file
runs engine_run_job() to actually do the solve
solver/engine.c¶
engine_run_job()
parses axy file
based on range of image scales, selects index files to use
calls onefield_run()
solver/onefield.c¶
onefield_run()
Runs a set of fields with a set of index files.
reads xylist
runs any WCS headers to verify (solve-field –verify)
depending on whether running with inparallel or not, loads one or all index files and calls solve_fields()
records good matches that are found (writes WCS, rdls, match, corr files)
solve_fields()
calls solver_preprocess_field()
calls solver_run()
solver/solver.c¶
Runs a single field with a set of index files.
solver_run()
load index files
compute scale ranges of field and index files
looks at pairs of stars A,B forming the “backbone” of the quadrangle, precomputing geometry and deciding which stars can be C,D
adds one star at a time, forming all quadrangles where that star is A,B or C,D, and for each index, calls add_stars()
add_stars()
select stars that will form the quadrangle (or triangle or pentagon)
calls TRY_ALL_CODES() = try_all_codes()
try_all_codes()
tests permutations of the C,D stars that are valid (satisfy Cx<Dx constraints), with different parities
calls try_all_codes_2
try_all_codes_2()
tries different permutations of A,B stars
calls try_permutations()
try_permutations()
recursive
tries different permutations of C,D stars, checking for cx <= dx constraint
searches code KD-tree for matches, calls resolve_matches() if found
resolve_matches()
given a code match between a field quadrangle and the index,
looks up the index star numbers forming that quadrangle (in the quadfile)
retrieves the index star RA,Dec positions for these stars (in the star KD-tree)
fits a TAN projection to the matched quadrangle
calls solver_handle_hit()
solver_handle_hit()
calls verify_hit() to confirm the match
if matched, calls solver_tweak2() to compute SIP coefficients
solver/verify.c¶
verify_hit()
searches for stars within the field in the star KD-tree
calls real_verify_star_lists() to do the model comparison between true match and false match.