Skip to content

Results

results

Solver results: plain, JSON-serialisable, with provenance.

NearFieldData

Bases: BaseModel

Total field on a plane. Arrays are indexed [axis1][axis2] (and [component] first for E).

wavelength_nm instance-attribute

wavelength_nm: float

plane instance-attribute

plane: str

offset_nm instance-attribute

offset_nm: float

axis1_nm instance-attribute

axis1_nm: list[float]

axis2_nm instance-attribute

axis2_nm: list[float]

enhancement class-attribute instance-attribute

enhancement: list[list[float]] = Field(description='|E|^2 / |E_inc|^2; NaN where undefined (e.g. inside a dipole voxel).')

e_real class-attribute instance-attribute

e_real: list[list[list[float]]] | None = None

e_imag class-attribute instance-attribute

e_imag: list[list[list[float]]] | None = None

FarFieldData

Bases: BaseModel

wavelength_nm instance-attribute

wavelength_nm: float

theta_deg instance-attribute

theta_deg: list[float]

phi_deg instance-attribute

phi_deg: list[float]

dcsca_domega_nm2 class-attribute instance-attribute

dcsca_domega_nm2: list[list[float]] = Field(description='dC_sca/dOmega in nm^2/sr, indexed [theta][phi].')

Result

Bases: BaseModel

Cross sections of a scattering problem.

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='forbid')

kind class-attribute instance-attribute

kind: Literal['cross_sections'] = 'cross_sections'

method class-attribute instance-attribute

method: str = Field(description="Numerical method, e.g. 'mie', 'dda'.")

backend class-attribute instance-attribute

backend: str = Field(description='Implementation that produced the numbers.')

wavelengths_nm instance-attribute

wavelengths_nm: list[float]

c_ext_nm2 instance-attribute

c_ext_nm2: list[float]

c_sca_nm2 instance-attribute

c_sca_nm2: list[float]

c_abs_nm2 instance-attribute

c_abs_nm2: list[float]

equivalent_radius_nm instance-attribute

equivalent_radius_nm: float

near_field class-attribute instance-attribute

near_field: list[NearFieldData] | None = None

far_field class-attribute instance-attribute

far_field: list[FarFieldData] | None = None

provenance class-attribute instance-attribute

provenance: dict[str, Any] = Field(default_factory=dict)

warnings class-attribute instance-attribute

warnings: list[str] = Field(default_factory=list)

q_ext property

q_ext: ndarray

q_sca property

q_sca: ndarray

q_abs property

q_abs: ndarray

from_arrays classmethod

from_arrays(*, method, backend, wavelengths_nm, c_ext, c_sca, c_abs, r_eq, **kw) -> 'Result'

summary

summary() -> dict[str, Any]

Compact digest: peak extinction and where it is.

to_xarray

to_xarray()

DiffractionOrder

Bases: BaseModel

order instance-attribute

order: tuple[int, int]

r class-attribute instance-attribute

r: dict[str, list[list[float]]] = Field(description='Reflected power fraction per polarization, [angle][wavelength].')

t instance-attribute

t: dict[str, list[list[float]]]

SpectrumResult

Bases: _ResultBase

Power reflection/transmission/absorption of layer stacks and periodic structures.

kind class-attribute instance-attribute

kind: Literal['spectrum'] = 'spectrum'

wavelengths_nm instance-attribute

wavelengths_nm: list[float]

angles_deg instance-attribute

angles_deg: list[float]

polarizations instance-attribute

polarizations: list[str]

r class-attribute instance-attribute

r: dict[str, list[list[float]]] = Field(description='Total reflectance per polarization, [angle][wavelength].')

t instance-attribute

t: dict[str, list[list[float]]]

a instance-attribute

a: dict[str, list[list[float]]]

orders class-attribute instance-attribute

orders: list[DiffractionOrder] | None = None

r_amplitude class-attribute instance-attribute

r_amplitude: dict[str, list[list[tuple[float, float]]]] | None = Field(None, description='Complex zeroth-order reflection amplitude (re, im), when available.')

t_amplitude class-attribute instance-attribute

t_amplitude: dict[str, list[list[tuple[float, float]]]] | None = None

difference

difference(other: 'SpectrumResult') -> dict[str, dict[str, float]]

Max and RMS absolute difference of r, t, a per polarization (same grids required).

ModeField

Bases: BaseModel

x_nm instance-attribute

x_nm: list[float]

y_nm instance-attribute

y_nm: list[float]

components class-attribute instance-attribute

components: dict[str, tuple[list[list[float]], list[list[float]]]] = Field(description="'Ex'...'Hz' -> (real, imag), each indexed [x][y].")

ModeData

Bases: BaseModel

neff_real instance-attribute

neff_real: float

neff_imag instance-attribute

neff_imag: float

ng class-attribute instance-attribute

ng: float | None = None

te_fraction class-attribute instance-attribute

te_fraction: float | None = Field(None, description='Fraction of transverse E energy in Ex.')

loss_db_per_cm class-attribute instance-attribute

loss_db_per_cm: float | None = None

effective_area_um2 class-attribute instance-attribute

effective_area_um2: float | None = None

field class-attribute instance-attribute

field: ModeField | None = None

ModeResult

Bases: _ResultBase

kind class-attribute instance-attribute

kind: Literal['modes'] = 'modes'

wavelengths_nm instance-attribute

wavelengths_nm: list[float]

modes class-attribute instance-attribute

modes: list[list[ModeData]] = Field(description='[wavelength][mode], sorted by decreasing neff_real (by overlap with the previous wavelength when the solver option track_modes=True).')

SParameterResult

Bases: _ResultBase

kind class-attribute instance-attribute

kind: Literal['sparameters'] = 'sparameters'

wavelengths_nm instance-attribute

wavelengths_nm: list[float]

ports class-attribute instance-attribute

ports: list[str] = Field(description="Port names, with '@<mode>' suffix for multimode ports, e.g. 'o1@0'.")

s_real class-attribute instance-attribute

s_real: list[list[list[float]]] = Field(description='[wavelength][out][in].')

s_imag instance-attribute

s_imag: list[list[list[float]]]

s

s() -> ndarray

BandResult

Bases: _ResultBase

kind class-attribute instance-attribute

kind: Literal['bands'] = 'bands'

k_reduced instance-attribute

k_reduced: list[tuple[float, float, float]]

k_distance class-attribute instance-attribute

k_distance: list[float] = Field(description='Cumulative path length (for plotting).')

k_labels class-attribute instance-attribute

k_labels: dict[int, str] = Field(description="Index into k_reduced -> label, e.g. {0: 'Γ'}.")

frequencies class-attribute instance-attribute

frequencies: dict[str, list[list[float]]] = Field(description="Polarization ('te'/'tm'/'all') -> normalised frequency a/λ, [k][band].")

relative_difference

relative_difference(a: Result, b: Result, quantity: str = 'c_ext_nm2') -> dict[str, float]

Max and RMS relative difference of quantity between two results on the same wavelengths.