Skip to content

Prototype joint phase and scalar command-response calibration - #2

Draft
salma2vec wants to merge 1 commit into
mainfrom
work/joint-command-gain-calibration-20261031
Draft

salma2vec wants to merge 1 commit into
mainfrom
work/joint-command-gain-calibration-20261031

Conversation

@salma2vec

Copy link
Copy Markdown
Member

Purpose

The scalar-response development study changes physical command gain while the existing estimator assumes unit response. This draft adds a narrowly scoped alternative: estimate the six phase coefficients and one positive scalar command gain jointly, then compensate the final nominal command.

This is actuator command-response calibration, not pyramid-WFS optical-gain detection. It does not resolve the separate Noether AO detector failure or establish runtime safety, RL superiority or a new scientific method.

Changes

  • NominalObservation: immutable copied camera data, expected photons and nominal commands; no evaluator truth fields.
  • Exact existing Poisson-Gaussian likelihood with analytic seven-parameter gradients.
  • Bounded multistart joint phase/gain estimator and gain-compensated command conversion.
  • Focused tests and explicit development-only qualification notes.

Existing policies, defaults, frozen results and reserved evaluation cohorts are unchanged.

Executed verification

16 focused tests passed locally using byte-verified upstream optics.py, likelihood.py and estimation.py at base 9406f5b5b04f9692cd194599277109423a2dbee6. Tests cover every gradient coordinate, the unit-gain reduction to the nominal objective, immutable observations, rejection of unchanging commands, compensation algebra and a bright synthetic recovery fixture.

The full repository suite, CI, supported-version matrix and hardware were not run in that local environment. The complete separate development acquisition packet is retained outside this PR; this code-only PR does not publish or promote a benchmark result.

Before promotion

  1. Port and independently review the full prospective acquisition/audit harness and retained artifacts.
  2. Run the full repository test suite and supported Python versions.
  3. Use a new admitted cohort and stronger nuisance-model tests, including flux uncertainty, mode-dependent response, registration error and within-episode drift.
  4. Add identifiability/uncertainty checks and explicit withholding before considering any controller authority.

The nominal estimator can remain better at unit gain. Three optimizer starts, bounded gain and passing unit tests are not global identifiability or deployment guarantees.

Add explicit nominal observations, analytic seven-parameter likelihood gradients,
and focused regression tests. Development-only, offline calibration; no changes
to frozen evidence, existing policies or the reserved evaluation cohort.

Copy link
Copy Markdown
Member Author

Executed local development comparison — 31 October 2026

The focused prototype at 629185cf4a39c16ec4a9e62f311971d83ac98b2a has now been exercised on a fixed, prospective local development cohort. This is not the repository's reserved evaluation and is not a hardware or state-of-the-art claim. Existing main/frozen evidence is unchanged.

Physical command gain Existing fixed nominal WFE (nm) Existing adaptive nominal WFE (nm) Joint fixed WFE (nm)
0.9 5.3679 3.3116 1.7177
1.0 1.5238 1.8840 1.6428
1.1 5.5253 3.5204 1.6515

At gains 0.9/1.1, mean reductions are 68.00%/70.11% against fixed and 48.13%/53.09% against adaptive. At unit gain, the joint estimator is 0.1190 nm (7.81%) worse than fixed. Individual regressions are retained. This corrects a specified model misspecification, not a novel algorithm or proof of universal controller superiority.

Design: 24 independent base wavefronts (eight in each of three RMS strata), reused across three gains; 72 base/gain cases and 216 method outcomes. Seven exposures, 14,000 expected photons per method. Joint and fixed use exactly the same camera arrays. Adaptive has the same photon/exposure budget, not the same computation budget. Six-mode, static, matched pupil/camera model apart from constant scalar command response. Known flux/read noise. Final correction is evaluator-scored without an additional camera image.

The mismatch contrasts pass paired Bonferroni simultaneous 95% intervals across six contrasts, plus a pre-acquisition point-reduction screen of at least 20%. The nominal screen used a provisional, non-customer-approved 0.5 nm margin. All 576 selected fits reported successful finite optimization. Three local starts are not proof of global optimality. Fresh RNG roots have not been admitted through the upstream exclusion ledger.

Verification: 16 focused tests actually executed and passed in 0.61 s. A separate audit implementation, importing neither ProbeBench nor the acquisition harness, used direct Fourier matrices to reproduce all 1,008 retained signed camera arrays exactly and all physical WFE values exactly; maximum Strehl difference 1.23e-15. This is an independent implementation by the same assistant, not third-party replication, optimizer refitting, cross-simulator or instrument validation.

Timing boundary: median joint offline fit time was 1.960 s on this local concurrently used CPU. Not a real-time claim. Baseline timings include simulated acquisition whereas joint starts from retained fixed observations, so these are not controlled end-to-end speed comparisons.

The complete local source/data packet is supplied to the repository owner in the current ChatGPT conversation as Noether_Validation_Sprint_2026-10-31.zip; it is not uploaded into this PR. Before promotion, port/review the acquisition harness and artifacts, run the full suite and supported Python versions, and test stronger gain-aware baselines plus unknown flux, mode-dependent response and geometric mismatch. Current local runtime: Python 3.13.5, NumPy 2.3.5, SciPy 1.17.0, pytest 9.0.2. Full repository suite/CI/hardware not run here.

Evidence bindings (SHA-256):

  • Protocol: e4d495425c41c3cd0a714b8885e2332485b5dd1abbdb39645f4f4d2602fb9a11
  • Acquisition manifest: 8a9f679047c3f5f69e05aa87f63a4491108d24efab46ca2d11865f9e6880d7ba
  • Analysis: 4d8005cb83ec2ead0957985d03957fdafa3265759a6f430ac2cbc2f2c32163f6
  • Independent audit receipt: 60403b8cfa617823487c6f45af74b7c68ec79249d6d9e6a8b67772261ca9d344
  • Acquisition source: b913249c5c0be0a1228a35ae3c13078ede4b17cb1359acf67b2212ddfe43ae99
  • Audit source: 40ae6a0ad42919a0ef7e610670e170232fc72ea889c81c7139287b67e98fa8c5

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant