feat: Add OPD method support to Zernike visualization with Standard/OPD toggle

Major improvements to Zernike WFE visualization:

- Add ZernikeDashboardInsight: Unified dashboard with all orientations (40°, 60°, 90°)
  on one page with light theme and executive summary
- Add OPD method toggle: Switch between Standard (Z-only) and OPD (X,Y,Z) methods
  in ZernikeWFEInsight with interactive buttons
- Add lateral displacement maps: Visualize X,Y displacement for each orientation
- Add displacement component views: Toggle between WFE, ΔX, ΔY, ΔZ in relative views
- Add metrics comparison table showing both methods side-by-side

New extractors:
- extract_zernike_figure.py: ZernikeOPDExtractor using BDF geometry interpolation
- extract_zernike_opd.py: Parabola-based OPD with focal length

Key finding: OPD method gives 8-11% higher WFE values than Standard method
(more conservative/accurate for surfaces with lateral displacement under gravity)

Documentation updates:
- SYS_12: Added E22 ZernikeOPD as recommended method
- SYS_16: Added ZernikeDashboard, updated ZernikeWFE with OPD features
- Cheatsheet: Added Zernike method comparison table

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-22 21:03:19 -05:00
parent d089003ced
commit d19fc39a2a
19 changed files with 8117 additions and 396 deletions

View File

@@ -103,6 +103,55 @@ study_info = introspect_study(study_dir)
---
## README Hierarchy (Parent-Child Documentation)
Studies use a **two-level documentation system**:
### Parent README (Geometry-Level)
Location: `studies/{geometry_type}/README.md`
Contains project-wide context that ALL sub-studies share:
- Project overview (what is this component?)
- Physical system specs (material, mass, loading)
- Domain-specific specs (optical prescription for mirrors, structural limits for brackets)
- Complete design variables catalog with ranges
- Complete objectives catalog with formulas
- Campaign history (evolution across sub-studies)
- Sub-studies index with links and status
**Example**: `studies/M1_Mirror/README.md`
### Child README (Study-Level)
Location: `studies/{geometry_type}/{study_name}/README.md`
Contains study-specific details, references parent for context:
```markdown
# Study Name
> **Parent Documentation**: See [../README.md](../README.md) for project overview and specifications.
## Study Focus
What THIS study specifically optimizes...
```
Contents:
- Parent reference banner (MANDATORY first line)
- Study focus (what differentiates this study)
- Active variables (which params enabled)
- Algorithm config (sampler, trials, settings)
- Baseline/seeding (starting point)
- Results summary
### When Creating a Study
1. **First study for geometry type** → Create BOTH parent and child READMEs
2. **Subsequent studies** → Create child README, update parent's sub-studies index
3. **New geometry type** → Create new `studies/{type}/` folder with parent README
---
## PR.3 NXSolver Interface
**Module**: `optimization_engine.nx_solver`