physicaloptix
Physical optics -- PSFs and diffraction -- for the HWO direct-imaging simulation suite.
What physicaloptix is
physicaloptix turns an optixstuff
hardware description into point-spread functions by wave-optics propagation.
It is a downstream consumer of optixstuff -- parallel to
coronagraphoto (2D image
simulation) and jaxEDITH
(exposure-time and yield calculations) -- so optixstuff itself stays free of
diffraction code.
The propagation core is owned: a
plane-aware Field/Grid data model, the continuous-FT MFT pair, the
multi-scale vortex, and the OpticalPath fold with construction-time
sampling gates, validated against the HWO Coronagraph Design Survey
(cds_pipeline) EAC-1 AAVC to an on-axis null of 3.05e-11 (0.2 percent of the
reference; the acceptance gates live in tests/validation/).
The key piece is PathCoronagraph, which implements optixstuff's
AbstractCoronagraph: build an OpticalPath (entrance pupil to Lyot plane),
wrap it, and hand it to any downstream tool. Its IWA and scalar performance
curves are derived from the propagated PSFs at construction, never declared.
import physicaloptix as po
coro = po.PathCoronagraph.from_path(
core_path, pupil_field, diameter_m=6.0, owa_lod=32.0
)
psf = coro.on_axis_psf(600.0, pixel_scale_rad, npix) # unit-flux PSF out
eta = coro.throughput(6.0, 600.0) # derived, not declared
What physicaloptix is not
- Not a hardware model. The telescope / coronagraph / detector description lives in optixstuff; physicaloptix consumes it.
- Not a PSF interpolator. That is yippy's
job (a sampled YIP table). physicaloptix is its functional sibling -- live
propagation -- and both back the same
AbstractCoronagraphslot. - Not a scene model. Stars, planets, disks, and zodi live in skyscapes.
Architecture
Built on JAX and
Equinox, physicaloptix provides:
- The owned core (
physicaloptix.core) --Grid(all-static, half-pixel offset, continuous-FT weights),PlaneKind-taggedFieldpytrees, andSpectrumfor chromatic fields. - Propagators (
physicaloptix.transforms) -- the validatedcmft_fwd/cmft_bwdcontinuous-FT MFT pair and the plane-awareFraunhoferwrapper, with sampling diagnostics evaluated at construction time. - Elements (
physicaloptix.elements) -- grid-stampedSampledOpticfor ingested masks and theMultiScaleVortexladder (hcipy port; reaches the cds EAC-1 on-axis null). - The optical path (
physicaloptix.path) --OpticalPath, named plane-checked stages folded once, with static taps for free instrumented propagation. - The speckle layer --
SpeckleProcess/AnalyticSpeckleField, the linear speckle generator (E_nom, G) behind optixstuff'sAbstractSpeckleField. - Interop (
physicaloptix.interop) --PathCoronagraph, the optixstuffAbstractCoronagraphadapter: cached-Lyot image interface and scalar curves (throughput, core area/intensity, occulter transmission) derived from a build-time separation sweep.
Ecosystem position
flowchart TB
optix["<b>optixstuff</b><br/>Telescope · Coronagraph · Detector · OpticalPath"]
physopt["<b>physicaloptix</b><br/>Owned propagation core / diffraction<br/>OpticalPath · PathCoronagraph"]
yippy["<b>yippy</b><br/>Sampled-YIP PSF interpolation"]
corono["<b>coronagraphoto</b><br/>2D image simulation"]
jaxedith["<b>jaxEDITH</b><br/>Exposure-time / yield"]
optix --> physopt
optix --> yippy
physopt -- AbstractCoronagraph --> corono
physopt -- AbstractCoronagraph --> jaxedith
yippy -- AbstractCoronagraph --> corono
Installation
pip install physicaloptix
Status
Early development. The owned core propagates a full apodized vortex
coronagraph chain (see tests/validation/), and PathCoronagraph serves it
through the optixstuff interface with derived performance curves. The optical
model is scalar; the chain propagates broadband on a fixed angular grid, and
the yield-input-package emitter freezes it to tables.
Verification and validation
The propagation core is verified against closed-form physics in tests that
run everywhere (the Airy pattern absolutely, the Mawet ideal-null theorem at
the 1e-11 contrast regime, Talbot and Gaussian-beam laws, gradient
correctness against finite differences) and validated against the HWO
Coronagraph Design Survey EAC-1 reference to a 0.2 percent on-axis null
agreement at 3e-11 contrast. The evidence, tolerances, and how to reproduce
them are documented on the
validation page.
The deep-contrast path requires float64 (jax_enable_x64).
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file physicaloptix-1.0.1.tar.gz.
File metadata
- Download URL: physicaloptix-1.0.1.tar.gz
- Upload date:
- Size: 70.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33879cc7b98981b307e5716addccdc5422ec18fc5754ce4ea2659cb58d800c93
|
|
| MD5 |
63490a945f4d7a7aada764d9bc1e56dd
|
|
| BLAKE2b-256 |
18285de4e1d6a7c02ff9318d79f01c727d99769f5fe82ca4b2f10ba431fb2f23
|
Provenance
The following attestation bundles were made for physicaloptix-1.0.1.tar.gz:
Publisher:
publish-to-pypi.yml on CoreySpohn/physicaloptix
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
physicaloptix-1.0.1.tar.gz -
Subject digest:
33879cc7b98981b307e5716addccdc5422ec18fc5754ce4ea2659cb58d800c93 - Sigstore transparency entry: 2219978730
- Sigstore integration time:
-
Permalink:
CoreySpohn/physicaloptix@16de6c956eba22f86597a86c0eab2171fabe1f1a -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/CoreySpohn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@16de6c956eba22f86597a86c0eab2171fabe1f1a -
Trigger Event:
push
-
Statement type:
File details
Details for the file physicaloptix-1.0.1-py3-none-any.whl.
File metadata
- Download URL: physicaloptix-1.0.1-py3-none-any.whl
- Upload date:
- Size: 78.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb0c4a4af7152a881f0e5830462d8a645febb2281e8a9a1cd04f534cff80c2cd
|
|
| MD5 |
19489007598168c8170462fada0322a3
|
|
| BLAKE2b-256 |
dcabb48ac79bc84214956cdc21867337a2df58d7004f0d146b1e27de83699bc1
|
Provenance
The following attestation bundles were made for physicaloptix-1.0.1-py3-none-any.whl:
Publisher:
publish-to-pypi.yml on CoreySpohn/physicaloptix
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
physicaloptix-1.0.1-py3-none-any.whl -
Subject digest:
eb0c4a4af7152a881f0e5830462d8a645febb2281e8a9a1cd04f534cff80c2cd - Sigstore transparency entry: 2219979010
- Sigstore integration time:
-
Permalink:
CoreySpohn/physicaloptix@16de6c956eba22f86597a86c0eab2171fabe1f1a -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/CoreySpohn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@16de6c956eba22f86597a86c0eab2171fabe1f1a -
Trigger Event:
push
-
Statement type: