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:
@@ -27,7 +27,7 @@ Phase 4 Extractors (2025-12-19):
|
||||
- Part Introspection (E12): Comprehensive .prt analysis (expressions, mass, materials, attributes, groups, features)
|
||||
"""
|
||||
|
||||
# Zernike extractor for telescope mirror optimization
|
||||
# Zernike extractor for telescope mirror optimization (standard Z-only method)
|
||||
from optimization_engine.extractors.extract_zernike import (
|
||||
ZernikeExtractor,
|
||||
extract_zernike_from_op2,
|
||||
@@ -35,6 +35,29 @@ from optimization_engine.extractors.extract_zernike import (
|
||||
extract_zernike_relative_rms,
|
||||
)
|
||||
|
||||
# Analytic (parabola-based) Zernike extractor (accounts for lateral X/Y displacement)
|
||||
# Uses parabola formula - requires knowing focal length
|
||||
from optimization_engine.extractors.extract_zernike_opd import (
|
||||
ZernikeAnalyticExtractor,
|
||||
extract_zernike_analytic,
|
||||
extract_zernike_analytic_filtered_rms,
|
||||
compare_zernike_methods,
|
||||
# Backwards compatibility (deprecated)
|
||||
ZernikeOPDExtractor as _ZernikeOPDExtractor_deprecated,
|
||||
)
|
||||
|
||||
# OPD-based Zernike extractor (uses actual mesh geometry, no shape assumption)
|
||||
# MOST RIGOROUS method - RECOMMENDED for telescope mirror optimization
|
||||
from optimization_engine.extractors.extract_zernike_figure import (
|
||||
ZernikeOPDExtractor,
|
||||
extract_zernike_opd,
|
||||
extract_zernike_opd_filtered_rms,
|
||||
# Backwards compatibility (deprecated)
|
||||
ZernikeFigureExtractor,
|
||||
extract_zernike_figure,
|
||||
extract_zernike_figure_rms,
|
||||
)
|
||||
|
||||
# Part mass and material extractor (from NX .prt files)
|
||||
from optimization_engine.extractors.extract_part_mass_material import (
|
||||
extract_part_mass_material,
|
||||
@@ -114,11 +137,24 @@ __all__ = [
|
||||
'extract_total_reaction_force',
|
||||
'extract_reaction_component',
|
||||
'check_force_equilibrium',
|
||||
# Zernike (telescope mirrors)
|
||||
# Zernike (telescope mirrors) - Standard Z-only method
|
||||
'ZernikeExtractor',
|
||||
'extract_zernike_from_op2',
|
||||
'extract_zernike_filtered_rms',
|
||||
'extract_zernike_relative_rms',
|
||||
# Zernike OPD (RECOMMENDED - uses actual geometry, no shape assumption)
|
||||
'ZernikeOPDExtractor',
|
||||
'extract_zernike_opd',
|
||||
'extract_zernike_opd_filtered_rms',
|
||||
# Zernike Analytic (parabola-based with lateral displacement correction)
|
||||
'ZernikeAnalyticExtractor',
|
||||
'extract_zernike_analytic',
|
||||
'extract_zernike_analytic_filtered_rms',
|
||||
'compare_zernike_methods',
|
||||
# Backwards compatibility (deprecated)
|
||||
'ZernikeFigureExtractor',
|
||||
'extract_zernike_figure',
|
||||
'extract_zernike_figure_rms',
|
||||
# Temperature (Phase 3 - thermal)
|
||||
'extract_temperature',
|
||||
'extract_temperature_gradient',
|
||||
|
||||
Reference in New Issue
Block a user