Tree
- Tree:
c60be756482c7727b48af12578649b8ba91770ae- Date:
- Message:
- Add ADES/MPC export; measure and document photometric_outlier_threshold and build_reference's real performance - New ades_psv: formats an astrometric_calibrate candidate table as an ADES PSV observation table, the format MPC currently requires for astrometric submissions. Deliberately not the legacy 80-column format (see its docstring for why: that needs a real MPC-assigned designation to pack correctly, which this pipeline doesn't have). Each real tracklet's own id becomes ADES's trkSub (base-36 encoded), which is exactly the identifier ADES needs for undesignated objects. julian_date_to_iso8601 (JD -> ISO 8601 UTC, ADES's obsTime format) is verified against two independent, exactly known reference points (J2000.0, the Unix epoch), not just trusted from the algorithm. - photometric_outlier_threshold: measured directly against the one real, confirmed anomaly this project has (the field-451 likely-passing-cloud frame quality_max_std catches) rather than left as "never validated." Real result: that frame's raw-path photometric_scale differs from the field median by only 0.64%, far under any reasonable threshold -- a real negative result showing this check and quality_max_std are sensitive to different failure modes, not redundant safety nets. - build_reference: profiled directly rather than just described as slow. The per-pixel median-combine loop's real cost (a fresh array allocated per pixel) is fixed with a reusable buffer -- a real, measured 2x speedup with byte-identical output. But it was never the actual bottleneck: Reproject.reproject itself is ~24s/frame, two orders of magnitude more than the entire combine step. A multi-threaded reprojection attempt (Threads.@threads across frames, reasoned safe since Reproject.jl itself has no shared state) segfaulted on a real run: WCS.jl's pix_to_world! wraps wcslib via ccall, and concurrent calls into it aren't safe. Reverted, documented directly in build_reference's own docstring so the same mistake isn't repeated. Full narrative and real measured numbers for all three in docs/src/design-refinements.md.
| .envrc | commits | blame |
| .github/ | |
| .gitignore | commits | blame |
| LICENSE | commits | blame |
| Project.toml | commits | blame |
| README.md | commits | blame |
| docs/ | |
| examples/ | |
| flake.lock | commits | blame |
| flake.nix | commits | blame |
| src/ | |
| test/ | |
README.md
# AsteroidPipeline.jl
[](https://github.com/Richard7987/AsteroidPipeline.jl/actions/workflows/Documenter.yml)
[](https://richard7987.github.io/AsteroidPipeline.jl/dev/)
An open-source Julia pipeline for asteroid search campaigns, developed for
use with the [International Astronomical Search Collaboration
(IASC)](https://iasc.cosmosearch.org/). Detects moving and variable
sources across a sequence of FITS frames, optionally via ZOGY difference
imaging, and calibrates and cross-matches the result against known-object
catalogs (SkyBoT, VSX, SIMBAD).
**Full documentation, including project status, real-data validation
results, known limitations, and the complete API reference, is at
<https://richard7987.github.io/AsteroidPipeline.jl/dev/>.**
## Installation
```julia
using Pkg
Pkg.activate(".")
Pkg.instantiate()
```
A reproducible development environment is also provided via Nix
(`flake.nix`):
```
nix develop
```
## Contributing
`docs/make.jl` builds the documentation site
([Documenter.jl](https://github.com/JuliaDocs/Documenter.jl) +
[DocumenterVitepress.jl](https://github.com/LuxDL/DocumenterVitepress.jl));
build it locally with:
```
julia --project=docs docs/make.jl
```
`.github/workflows/Documenter.yml` builds and deploys it to GitHub Pages
on every push to `main` and on tags.
## License
MIT. See `LICENSE`.
