Source code for sasktran2.geometry
from __future__ import annotations
import numpy as np
from sasktran2._core_rust import GeometryType, InterpolationMethod, PyGeometry1D
[docs]
class Geometry1D:
_geometry: PyGeometry1D
[docs]
def __init__(
self,
cos_sza: float,
solar_azimuth: float,
earth_radius_m: float,
altitude_grid_m: np.ndarray,
interpolation_method: InterpolationMethod = InterpolationMethod.LinearInterpolation,
geometry_type: GeometryType = GeometryType.Spherical,
):
"""
A geometry object that depends only on altitude.
Parameters
----------
cos_sza : float
Cosine of the solar zenith angle at the "reference point". This should be thought of as the point in the atmosphere
where the radiative transfer calculation is most accurate.
solar_azimuth : float
Solar azimuth angle at the "reference point". Most of the time you want to set this to 0.0 and only use the
azimuth angle in the line of sight declaration.
earth_radius_m : float
Radius of the Earth in meters. This is used for spherical ray-tracing.
altitude_grid_m : np.ndarray
Altitude grid in [m] above the surface of the Earth.
interpolation_method : InterpolationMethod, optional
The interpolation method to use inbetween the grid points, by default InterpolationMethod.LinearInterpolation
geometry_type : GeometryType, optional
The type of geometry to use in the calculation, i.e. Spherical, PlaneParallel, by default GeometryType.Spherical
"""
self._geometry = PyGeometry1D(
cos_sza,
solar_azimuth,
earth_radius_m,
np.atleast_1d(altitude_grid_m).astype(np.float64),
interpolation_method,
geometry_type,
)
def altitudes(self) -> np.ndarray:
return self._geometry.altitudes()
@property
def refractive_index(self) -> np.ndarray:
return self._geometry.refractive_index
@refractive_index.setter
def refractive_index(self, value: np.ndarray) -> None:
self._geometry.refractive_index = value