Source code for sasktran2.mie.wrappers
from __future__ import annotations
import numpy as np
from sasktran2._core_rust import PyMie, PyMieOutput
class MieValueAccessor:
def __init__(self, owner):
self._owner = owner
def __getattr__(self, name):
# Called when accessing "a.value.X"
return getattr(self._owner, name)
[docs]
class MieOutput:
_mie_output: PyMieOutput
[docs]
def __init__(self, mie_output: PyMieOutput):
self._mie_output = mie_output
@property
def values(self) -> MieValueAccessor:
return MieValueAccessor(self)
@property
def cos_angles(self) -> np.ndarray:
return self._mie_output.cos_angles
@property
def size_parameter(self) -> np.ndarray:
return self._mie_output.size_param
@property
def Qsca(self) -> np.ndarray:
return self._mie_output.Qsca
@property
def Qext(self) -> np.ndarray:
return self._mie_output.Qext
@property
def S1(self) -> np.ndarray:
return self._mie_output.S1
@property
def S2(self) -> np.ndarray:
return self._mie_output.S2
[docs]
class LinearizedMie:
_mie: PyMie
[docs]
def __init__(self, num_threads: int = 1): # noqa: ARG002
self._mie = PyMie()
def calculate(
self,
size_param: np.ndarray,
refractive_index,
cos_angles,
calculate_derivatives=False,
):
res = self._mie.calculate(
np.atleast_1d(size_param).astype(np.float64),
complex(refractive_index),
np.atleast_1d(cos_angles).astype(np.float64),
calculate_derivatives,
)
return MieOutput(res)