"""Single entry point: regenerates every table, number and figure of the study. python3 run_all.py # use cached catalogue snapshots / astrometry (40-50 min on # one core; the first run also downloads ~2,600 small NEOCC files) python3 run_all.py --skip-fisher # reuse data/fisher_results.csv (about 15 min) python3 run_all.py --refresh # re-download everything from JPL and the MPC (hours; the # catalogues change daily, so numbers will drift slightly) Steps 1. s01_download : JPL SBDB snapshots, radar astrometry, MPC observatory codes, MPC astrometry (bulk file for unnumbered NEOs + API), JPL Horizons state vectors 2. s02_census : classification of every asteroid-designated object with fitted A1/A2/A3 3. s03_fisher : covariance forecast of sigma(A1) for the NEO catalogue from real astrometry epochs, and a direct linearised measurement of A1 from the real residuals (numerical model) 6. s06_neocc : ESA NEOCC catalogue of fitted non-gravitational parameters; measurement of A1 on multi-apparition arcs from ESA's post-fit residuals (runs before step 4) 4. s04_limits : validation, forecast completeness, measured search, recast fit-quality criterion, 95% limits, vetting tables, figures 5. s05_injection: injection-recovery tests (noiseless linearity test of the forecast; noisy end-to-end test of the measurement; two-body partials on multi-year arcs) """ import sys import time import s01_download import s02_census import s03_fisher import s04_limits import s05_injection import s06_neocc def main(): t0 = time.time() refresh = "--refresh" in sys.argv s01_download.main(refresh=refresh) s02_census.main() if "--skip-fisher" not in sys.argv: s03_fisher.main() s06_neocc.main(refresh=refresh) s04_limits.main() s05_injection.main() s05_injection.main_measurement() s05_injection.main_twobody() print("done in %.1f min" % ((time.time() - t0) / 60.0)) if __name__ == "__main__": main()