Smithsonian / Smithsonian/layup
IOD candidates are screened on seq[0] alone and never retried on the full data
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 10
- Forks
- 2
- Avg merge
- 1d 43m
- Merged PRs (30d)
- 58
Description
do_fit fits each initial-orbit candidate against the primary segment seq[0], accepts one only if it comes back flag 0, and otherwise returns FLAG_NO_ROOT_CONVERGED -- without ever fitting the full observation set. The converged path does attempt the full data (orbitfit.py:1200); the rejecting path does not.
seq[0] can be short. On ~0OrY it is 8 of the 60 observations, so the screen fits six parameters against ndof = 10 and converges to a spurious minimum (flag 2, reduced chi-square 3020). The same candidate fits all 60 observations in three iterations at reduced chi-square 0.095, giving a = 2.744 against JPL's 2.75.
Measured on 168 numbered main-belt objects: 17 of the 21 flag-3 outcomes (81%) fit the full data, with reduced chi-square 0.03-0.2 and semimajor axis matching JPL to three decimals. That is 10% of the sample discarded with a good orbit one step away.
Suggested fix: on the give-up path, run _run_fit on observations with the best candidate before returning flag 3. The cost is one extra fit on objects that are currently reported as failures. This is not specific to any one IOD method -- the screen sits in do_fit, so Gauss, Herget and BK all pay it.
Related to #493: a flag 3 that is really a good orbit is also a reporting problem.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in orbitfit.py at do_fit and the _run_fit call near line 1200. Reproduce the ~0OrY case or inspect the numbered-object results, then trace the give-up path and its use of seq[0]. Done means the best candidate is fit against observations before flag 3 is returned, with recoverable cases producing the full-data fit described in the issue.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- data
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 74/100