isofit.surface.surface_multicomp

Classes

MultiComponentSurface

A model of the surface based on a collection of multivariate

Module Contents

class MultiComponentSurface(full_config: Config)[source]

Bases: isofit.surface.surface.Surface

A model of the surface based on a collection of multivariate Gaussians, with one or more equiprobable components and full covariance matrices.

To evaluate the probability of a new spectrum, we calculate the Mahalanobis distance to each component cluster, and use that as our Multivariate Gaussian surface model.

components[source]
n_comp[source]
wl[source]
n_wl[source]
normalize[source]
selection_metric[source]
select_on_init[source]
refwl[source]
idx_ref[source]
statevec_names[source]
idx_surface[source]
analytical_iv_idx[source]
bounds[source]
scale[source]
init[source]
idx_lamb[source]
n_state[source]
full_glint = False[source]
component(x, geom)[source]

We pick a surface model component using the Mahalanobis distance.

This always uses the Lambertian (non-specular) version of the surface reflectance. If the forward model initialize via heuristic (i.e. algebraic inversion), the component is only calculated once based on that first solution. That state is preserved in the geometry object.

xa(x_surface, geom)[source]

Mean of prior distribution, calculated at state x. We find the covariance in a normalized space (normalizing by z) and then un- normalize the result for the calling function. This always uses the Lambertian (non-specular) version of the surface reflectance.

Sa(x_surface, geom)[source]

Covariance of prior distribution, calculated at state x. We find the covariance in a normalized space (normalizing by z) and then un- normalize the result for the calling function.

fit_params(rfl_meas, geom, *args)[source]

Given a reflectance estimate, fit a state vector.

calc_rfl(x_surface, geom)[source]

Non-Lambertian reflectance.

Inputs: x_surface : np.ndarray

Surface portion of the statevector element

geomGeometry

Isofit geometry object

Outputs: rho_dir_dir : np.ndarray

Reflectance quantity for downward direct photon paths

rho_dif_dirnp.ndarray

Reflectance quantity for downward diffuse photon paths

Note

We do not handle direct and diffuse photon path reflectance quantities differently for the multicomponent surface model. This is why we return the same quantity for both outputs.

calc_lamb(x_surface, geom)[source]

Lambertian reflectance.

drfl_dsurface(x_surface, geom)[source]

Partial derivative of reflectance with respect to state vector, calculated at x_surface.

dlamb_dsurface(x_surface, geom)[source]

Partial derivative of Lambertian reflectance with respect to state vector, calculated at x_surface.

drdn_drfl(L_tot, s_alb, rho_dif_dir)[source]

Partial derivative of radiance with respect to surface reflectance

calc_Ls(x_surface, geom)[source]

Emission of surface, as a radiance.

dLs_dsurface(x_surface, geom)[source]

Partial derivative of surface emission with respect to state vector, calculated at x_surface.

drdn_dLs(t_total_up)[source]

Partial derivative of radiance with respect to surface emission

drdn_dsurface(rho_dif_dir, drfl_dsurface, dLs_dsurface, s_alb, t_total_up, L_tot, L_down_dir)[source]

Derivative of radiance with respect to full surface vector

analytical_model(background, L_down_dir, L_down_dif, L_tot, geom, L_dir_dir=None, L_dir_dif=None, L_dif_dir=None, L_dif_dif=None)[source]

Linearization of the surface reflectance terms to use in the AOE inner loop (see Susiluoto, 2025). We set the quadratic spherical albedo term to a constant background, which simplifies the linearization background = s * rho_bg

summarize(x_surface, geom)[source]

Summary of state vector.