Smithsonian / Smithsonian/layup

IOD candidates are screened on seq[0] alone and never retried on the full data

Open
#556 4 comments 0 reactions 0 assignees View on GitHub

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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.