Hi all,
I’m an undergrad physics student in Mexico, and I’ve been working on AsteroidPipeline.jl, a Julia package for asteroid search campaigns. It’s MIT licensed and in the General registry, so Pkg.add("AsteroidPipeline") works.
You give it a short sequence of images of one field. It refits the astrometry against Gaia DR3, finds what moves, checks each candidate against known asteroids (MPC orbit file and SkyBoT), and writes the report for the Minor Planet Center. I started it for the IASC citizen-science campaigns, which use Pan-STARRS1 images, and it also runs on ZTF images with no changes.
Some numbers so far:
- On one unknown object, my positions agree with an independent Astrometrica reduction to 0.12–0.17″.
- Fitting the frames of a set jointly, instead of one by one, removed 60 false positives across 8 campaign sets, and no known asteroid was lost. The cause was that each frame fit its own handful of reference stars fine but drifted relative to the others.
- With synthetic asteroids injected into real images, 82% were recovered down to V = 21.5.
- 441 tests, about 92% coverage.
The limits are clear. It works on one night of four exposures, so there is no orbit determination, and nearly all the validation is on a single telescope.
I can’t post links yet with a new account. The code is on GitHub as Richard7987/AsteroidPipeline.jl, and the docs are linked from the README.
Now my actual question. I want to add photometry for a moving asteroid, measured at its predicted position in every image, so I can get rotation periods. Right now the package only does light curves and Lomb-Scargle periods at fixed sky positions (variable stars).
I looked at the JuliaAstro comparison-with-Astropy page and didn’t find anything for small bodies, so I’m not sure what people use. These are the options I’ve found:
- HORIZONS.jl: ask JPL Horizons for the position at each image epoch. Simple, but it needs network access and ignores the MPC orbit I already have.
- NEOs.jl: propagate the orbit myself from MPC data.
- Astrometry.jl or SOFA.jl: add light-time and aberration on top of my own propagation.
For a campaign workflow with a known asteroid, which would you pick to get the position seen from the observatory (MPC code) at each frame’s epoch? And for asteroids with poorly known orbits, how do you make sure the aperture still lands on the object?
Feedback on the API or the code is welcome. And if anyone would be willing to mentor a student on this, I’d be glad to hear from you.
Thanks!