Files
Atomizer/optimization_engine/extractors/__init__.py
Anto01 d19fc39a2a 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>
2025-12-22 21:03:19 -05:00

174 lines
5.6 KiB
Python

"""Core extractor library for Atomizer.
Available extractors:
- Displacement: extract_displacement
- Stress: extract_solid_stress (von Mises), extract_principal_stress
- Frequency: extract_frequency
- Mass (BDF): extract_mass_from_bdf
- Mass (Expression): extract_mass_from_expression
- Mass (Part): extract_part_mass_material, extract_part_mass, PartMassExtractor
- Strain Energy: extract_strain_energy, extract_total_strain_energy
- SPC Forces: extract_spc_forces, extract_total_reaction_force
- Zernike: extract_zernike_from_op2, ZernikeExtractor (telescope mirrors)
- Part Introspection: introspect_part (comprehensive NX .prt analysis)
Phase 2 Extractors (2025-12-06):
- Principal stress extraction (sigma1, sigma2, sigma3)
- Strain energy extraction (element strain energy)
- SPC forces extraction (reaction forces at boundary conditions)
Phase 3 Extractors (2025-12-06):
- Temperature extraction (thermal analysis: SOL 153/159)
- Thermal gradient extraction
- Heat flux extraction
- Modal mass extraction (modal effective mass from F06)
Phase 4 Extractors (2025-12-19):
- Part Introspection (E12): Comprehensive .prt analysis (expressions, mass, materials, attributes, groups, features)
"""
# Zernike extractor for telescope mirror optimization (standard Z-only method)
from optimization_engine.extractors.extract_zernike import (
ZernikeExtractor,
extract_zernike_from_op2,
extract_zernike_filtered_rms,
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,
extract_part_mass,
extract_part_material,
PartMassExtractor,
)
# Von Mises stress extraction
from optimization_engine.extractors.extract_von_mises_stress import (
extract_solid_stress,
)
# Principal stress extraction (Phase 2)
from optimization_engine.extractors.extract_principal_stress import (
extract_principal_stress,
extract_max_principal_stress,
extract_min_principal_stress,
)
# Strain energy extraction (Phase 2)
from optimization_engine.extractors.extract_strain_energy import (
extract_strain_energy,
extract_total_strain_energy,
extract_strain_energy_density,
)
# SPC forces / reaction forces extraction (Phase 2)
from optimization_engine.extractors.extract_spc_forces import (
extract_spc_forces,
extract_total_reaction_force,
extract_reaction_component,
check_force_equilibrium,
)
# Temperature extraction (Phase 3)
from optimization_engine.extractors.extract_temperature import (
extract_temperature,
extract_temperature_gradient,
extract_heat_flux,
get_max_temperature,
)
# Modal mass extraction (Phase 3)
from optimization_engine.extractors.extract_modal_mass import (
extract_modal_mass,
extract_frequencies,
get_first_frequency,
get_modal_mass_ratio,
)
# Part introspection (Phase 4) - comprehensive .prt analysis
from optimization_engine.extractors.introspect_part import (
introspect_part,
get_expressions_dict,
get_expression_value,
print_introspection_summary,
)
__all__ = [
# Part mass & material (from .prt)
'extract_part_mass_material',
'extract_part_mass',
'extract_part_material',
'PartMassExtractor',
# Stress extractors
'extract_solid_stress',
'extract_principal_stress',
'extract_max_principal_stress',
'extract_min_principal_stress',
# Strain energy
'extract_strain_energy',
'extract_total_strain_energy',
'extract_strain_energy_density',
# SPC forces / reactions
'extract_spc_forces',
'extract_total_reaction_force',
'extract_reaction_component',
'check_force_equilibrium',
# 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',
'extract_heat_flux',
'get_max_temperature',
# Modal mass (Phase 3 - dynamics)
'extract_modal_mass',
'extract_frequencies',
'get_first_frequency',
'get_modal_mass_ratio',
# Part introspection (Phase 4)
'introspect_part',
'get_expressions_dict',
'get_expression_value',
'print_introspection_summary',
]