Files
Atomizer/studies/M1_Mirror
Anto01 ea437d360e docs: Major documentation overhaul - restructure folders, update tagline, add Getting Started guide
- Restructure docs/ folder (remove numeric prefixes):
  - 04_USER_GUIDES -> guides/
  - 05_API_REFERENCE -> api/
  - 06_PHYSICS -> physics/
  - 07_DEVELOPMENT -> development/
  - 08_ARCHIVE -> archive/
  - 09_DIAGRAMS -> diagrams/

- Replace tagline 'Talk, don't click' with 'LLM-driven optimization framework' in 9 files

- Create comprehensive docs/GETTING_STARTED.md:
  - Prerequisites and quick setup
  - Project structure overview
  - First study tutorial (Claude or manual)
  - Dashboard usage guide
  - Neural acceleration introduction

- Rewrite docs/00_INDEX.md with correct paths and modern structure

- Archive obsolete files:
  - 01_PROTOCOLS.md -> archive/historical/01_PROTOCOLS_legacy.md
  - 03_GETTING_STARTED.md -> archive/historical/
  - ATOMIZER_PODCAST_BRIEFING.md -> archive/marketing/

- Update timestamps to 2026-01-20 across all key files

- Update .gitignore to exclude docs/generated/

- Version bump: ATOMIZER_CONTEXT v1.8 -> v2.0
2026-01-20 10:03:45 -05:00
..

M1 Mirror - Telescope Primary Mirror Optimization

Project Type: Telescope Primary Mirror Support Structure Optimization Material: Zerodur Class 2 Glass Ceramic Analysis: NX Nastran SOL 101 (Linear Static, 4 Subcases) Status: Active Optimization Campaign


1. Project Overview

The M1 Mirror project optimizes the support structure of a telescope primary mirror to minimize wavefront error (WFE) across operational elevation angles while managing mass and manufacturing constraints.

1.1 What We're Optimizing

The mirror itself is a fixed optical prescription. We optimize how it's supported:

  • Whiffle-tree axial support (18 contact points) - distributes gravity load evenly
  • Lateral support (3 contact points) - prevents sideways motion at different elevations
  • Mirror blank geometry - backface angle, rib structure affecting mass

1.2 Why This Matters

At different telescope elevation angles, gravity acts on the mirror differently:

  • 90° (zenith): Gravity purely axial - whiffle-tree handles load
  • 20-60° (operational): Mixed axial + lateral gravity component
  • Polishing (horizontal): Different deformation than operational use

Poor support design causes:

  • Tracking errors (WFE change between elevations)
  • Manufacturing difficulty (optician must polish out gravity sag)
  • Excessive mass (over-designed structure)

2. Optical Prescription

Source: Validated optical design specification (2025-12-22)

Parameter Value Tolerance Units
Radius of Curvature (R) 2890 ± 3 mm
Conic Constant (K) -0.987 ± 0.001 -
Clear Aperture (Ø) 1202.00 - mm
Central Bore (Ø) 271.56 - mm
Focal Length 1445 - mm
f-number (f/D) f/1.20 - -
Surface Type Near-Parabolic - -

Notes:

  • Surface is concave (front surface)
  • Conic constant K = -0.987 indicates near-parabolic (K = -1 is pure parabola)
  • Focal length derived: f = R/2 = 1445 mm
  • FEA mesh (1300 mm) includes lateral support nodes beyond the 1202 mm optical clear aperture

2.1 Usage in OPD Extractor

For rigorous WFE analysis (especially lateral support optimization), use explicit focal length:

from optimization_engine.extractors import ZernikeOPDExtractor

extractor = ZernikeOPDExtractor(
    op2_file,
    focal_length=1445.0,  # mm - from optical prescription R/2
    concave=True
)

2.2 Mesh vs Optical Aperture

Geometry Mesh Value Optical Value Reason
Diameter 1300 mm 1202 mm Mesh includes lateral support structure
Central hole 135 mm 271.56 mm Mesh underestimates bore size

When analyzing WFE, filter nodes to clear aperture (r < 601 mm) or use the optical aperture radius in post-processing.


3. Physical System

3.1 Mirror Blank

Property Value Notes
Material Zerodur Class 2 E=91 GPa, ρ=2.53 g/cm³, CTE≈0
Mass Target < 105 kg Hard constraint
Current Best ~94-95 kg Achieved in V8/V9

3.2 Support Structure

System Points Purpose
Whiffle-tree (axial) 18 Distribute gravity load uniformly
Lateral supports 3 Prevent lateral motion at elevation
Vertical support skeleton - Structural frame

3.3 Loading

Subcase Elevation Gravity Direction Purpose
1 90° Pure -Z (axial) Manufacturing/polishing reference
2 20° Mixed Reference for tracking
3 40° Mixed Operational tracking
4 60° Mixed Operational tracking

4. Optimization Objectives

4.1 WFE Metrics (Zernike-based)

Objective Formula Weight Target Description
40-20 Tracking RMS_filt(Z₄₀ - Z₂₀) 5.0 4 nm WFE change from 20° to 40°
60-20 Tracking RMS_filt(Z₆₀ - Z₂₀) 5.0 10 nm WFE change from 20° to 60°
Manufacturing RMS_J1-J3(Z₉₀ - Z₂₀) 3.0 20 nm Optician workload

Where:

  • RMS_filt = RMS after removing J1-J4 (piston, tip, tilt, defocus)
  • RMS_J1-J3 = RMS after removing only J1-J3 (keeps defocus for optician)

4.2 Mass

Objective Weight Target
M1_Blank mass 1.0 Minimize (< 105 kg hard limit)

4.3 Weighted Sum Formula

WS = 5×(40-20 nm) + 5×(60-20 nm) + 3×(MFG nm) + 1×(mass kg)

5. Design Variables

5.1 Whiffle Tree Parameters

Variable Range Units Description
whiffle_min 30-72 mm Minimum whiffle extent
whiffle_outer_to_vertical 70-85 deg Outer arm to vertical angle
whiffle_triangle_closeness 65-120 mm Triangle spacing
blank_backface_angle 4.2-4.5 deg Mirror blank taper (affects mass)

5.2 Lateral Support Parameters

Variable Range Units Description
lateral_inner_angle 25-32 deg Inner lateral angle
lateral_outer_angle 9-17 deg Outer lateral angle
lateral_outer_pivot 9-12 deg Outer pivot position
lateral_inner_pivot 5-12 deg Inner pivot position
lateral_middle_pivot 15-27 deg Middle pivot position
lateral_closeness 7-12 deg Lateral support closeness

5.3 Structural Parameters

Variable Range Units Description
inner_circular_rib_dia 480-620 mm Inner rib diameter
Pocket_Radius Fixed 10.05 mm Lightweighting pocket size

6. Optimization Campaign History

6.1 Campaign Phases

Phase 1: Initial Exploration (V11-V15)
─────────────────────────────────────
V11 (GNN + TuRBO)  →  V12 (GNN extended)  →  V13 (TPE validation)
    107 trials          ~5000 surrogate        291 trials
    WS = 129.33         WS = 129.33            WS = 129.33
                              ↓
V14 (TPE intensive)  →  V15 (NSGA-II)
    785 trials             126 trials
    WS = 121.72 ✓          WS = 121.72 (confirmed)

Phase 2: Cost Reduction (V6-V9)
─────────────────────────────────
V6 (TPE)  →  V7 (CMA-ES whiffle)  →  V8 (CMA-ES lateral)  →  V9 (CMA-ES combined)
281.82        268.75 (-4.6%)          266.02 (-5.6%)          In progress

6.2 Best Results Summary

Campaign Best WS 40-20 nm 60-20 nm MFG nm Mass kg
V11-V15 (adaptive) 121.72 5.99 13.10 26.28 91.02
V6-V9 (cost reduction) 266.02* 6.03 12.81 25.73 94.66

*Different weighting scheme - not directly comparable


7. Sub-Studies Index

Study Focus Algorithm Trials Best WS Status
m1_mirror_adaptive_V11 Initial GNN + TuRBO GNN+TuRBO 107 129.33 Complete
m1_mirror_adaptive_V12 Extended surrogate GNN+TuRBO ~5000 129.33 Complete
m1_mirror_adaptive_V13 TPE validation TPE 291 129.33 Complete
m1_mirror_adaptive_V14 Intensive TPE TPE 785 121.72 Complete
m1_mirror_adaptive_V15 NSGA-II Pareto NSGA-II 126 121.72 Complete
m1_mirror_cost_reduction Mass reduction baseline TPE 150 - Complete
m1_mirror_cost_reduction_V7 Whiffle refinement CMA-ES 200 268.75 Complete
m1_mirror_cost_reduction_V8 Lateral optimization (Z-only) CMA-ES 200 266.02 Complete
m1_mirror_cost_reduction_V9 Combined fine-tuning CMA-ES 200 - Complete
m1_mirror_cost_reduction_V10 Lateral + OPD (corrupted) CMA-ES - - Abandoned
m1_mirror_cost_reduction_V11 Lateral + OPD + extract_relative CMA-ES 200 284.19 Complete
m1_mirror_cost_reduction_V12 Combined Whiffle + Lateral (10 vars) CMA-ES 200 TBD Active
m1_mirror_surrogate_turbo GNN surrogate + turbo optimization GNN+FEA ~1000 TBD Setup Complete

Flat Back Studies (Cost Reduction Option C)

Study Focus Algorithm Trials Best WS Status
m1_mirror_cost_reduction_flat_back_V3 Initial exploration TPE ~297 - Complete
m1_mirror_cost_reduction_flat_back_V4 Continued exploration TPE ~19 - Complete
m1_mirror_cost_reduction_flat_back_V5 MLP Surrogate + L-BFGS Surrogate 45 290.18 Complete (Failed)
m1_mirror_cost_reduction_flat_back_V6 Pure TPE baseline TPE 196 225.41 Complete
m1_mirror_cost_reduction_flat_back_V7 Self-Aware Turbo SAT 200 TBD Ready

Flat Back Notes:

  • blank_backface_angle = 0 (flat backface eliminates custom jig during machining)
  • Mass constraint: ≤ 120 kg
  • Weighted sum: 6*wfe_40_20 + 5*wfe_60_20 + 3*mfg_90
  • V5 failure: MLP surrogate led L-BFGS to "fake optima" (OOD extrapolation)
  • V7 fix: EnsembleSurrogate with uncertainty quantification + OOD detection

8. Technical Notes

8.1 Zernike Analysis

  • Standard method: Uses Z-displacement only at original (x,y) coordinates
  • OPD method: Accounts for lateral (X,Y) displacement - critical for lateral support optimization
  • extract_relative() method (V11+): Correct relative WFE computation:
    1. Compute WFE at each node for both subcases
    2. Compute node-by-node difference: WFE_rel[i] = WFE_target[i] - WFE_ref[i]
    3. Fit Zernike to the difference field
    4. Compute RMS of filtered difference

Important

: abs(RMS_target - RMS_ref) is WRONG. Always use extract_relative() for relative metrics.

See: docs/physics/ZERNIKE_OPD_METHOD.md

8.2 WFE Convention

WFE = 2 × surface_error    (reflection doubles path length)

All WFE values in nanometers (nm).

8.3 Coordinate System

  • Z-axis: Optical axis (positive toward sky)
  • Origin: Mirror vertex
  • Concave mirror: Surface curves toward -Z

9. File Structure

studies/M1_Mirror/
├── README.md                          # This file (master documentation)
├── m1_mirror_adaptive_V11/            # Sub-studies...
├── m1_mirror_adaptive_V12/
├── ...
├── m1_mirror_cost_reduction_V9/
│   ├── 1_setup/
│   │   ├── optimization_config.json   # Study configuration
│   │   └── model/                     # NX model files
│   ├── 2_iterations/                  # FEA iteration folders
│   ├── 3_results/                     # Optuna DB, logs, archives
│   ├── run_optimization.py            # Main entry point
│   └── README.md                      # Study-specific docs

10. Quick Reference

Run Optimization

cd studies/M1_Mirror/m1_mirror_cost_reduction_V9
conda activate atomizer
python run_optimization.py --start

Check Progress

python -c "
import optuna
study = optuna.load_study(study_name='m1_mirror_cost_reduction_V9',
                          storage='sqlite:///3_results/study.db')
print(f'Trials: {len(study.trials)}')
print(f'Best: {study.best_value:.2f}')
"

Generate Insights

python -m optimization_engine.insights generate . --type zernike_wfe
python -m optimization_engine.insights generate . --type zernike_opd_comparison

Document Description
M1_MIRROR_CAMPAIGN_SUMMARY.md V11-V15 campaign analysis
docs/physics/ZERNIKE_FUNDAMENTALS.md Zernike analysis basics
docs/physics/ZERNIKE_OPD_METHOD.md OPD method for lateral supports
.claude/skills/modules/extractors-catalog.md Extractor quick reference

M1 Mirror Optimization Project Atomizer Framework Last Updated: 2026-01-20