Technical documentation

class sense.surface.dubois95.Dubois95(eps, ks, theta, lam: float)[source]

Bases: SurfaceScatter

Dubois95 model described in Ulaby (2014), Chapter 10.6.

plot()[source]

Plot backscatter vs incidence angle.

class sense.surface.i2em.ExponentialSpectrum(**kwargs)[source]

Bases: Roughness

exponential spectrum.

calc_wm_matrix(rx, ry, nspec)[source]
calc_wn_matrix(rx, ry, nspec)[source]
wn()[source]
class sense.surface.i2em.GaussianSpectrum(**kwargs)[source]

Bases: Roughness

calc_wm_matrix(rx, ry, nspec)[source]
calc_wn_matrix(rx, ry, nspec)[source]
wn()[source]
class sense.surface.i2em.I2EM(f, eps, sig, l, theta, **kwargs)[source]

Bases: SurfaceScatter

I2EM model (see Ulaby (2014), Chapter 10).

I2EM backscattering model for single scale random surfaces. The code originates from ideas obtained from the supplement of Ulaby et al (2014)

Fppupdn(u_d, i_s, Rvi, Rhi)[source]
calc_fpp(Rvi, Rhi)[source]
calc_reflection_coefficients(Rvi, Rhi)[source]
calc_roughness_spectrum(acf_type=None)[source]

Calculate roughness spectrum.

Return wn as an array.

init_model()[source]

Initialize model for calculations.

class sense.surface.i2em.Roughness(**kwargs)[source]

Bases: object

calculate roughness spectrum.

wn()[source]
class sense.surface.oh1992.Oh92(eps, ks, theta)[source]

Bases: SurfaceScatter

Oh et al. (1992) empirical surface backscattering model.

Reference:

Ulaby et al. (2014), Chapter 10.5

plot()[source]
class sense.surface.oh2004.Oh04(mv, ks, theta)[source]

Bases: SurfaceScatter

Oh et al. (2004) empirical surface backscattering model.

Reference:

Ulaby et al. (2014), Chapter 10.5

plot()[source]
class sense.surface.watercloud.WaterCloudSurface(mv, theta, C_hh, C_vv, C_hv, D_hh, D_vv, D_hv)[source]

Bases: SurfaceScatter

Attema and Ulaby (1978): Vegetation modeled as a water cloud.

Only surface part.

plot()[source]
class sense.core.Fresnel0(eps: complex)[source]

Bases: object

Fresnel reflectivity at nadir (Ulaby, 2014, Eq. 10.36).

class sense.core.Reflectivity(eps: complex, theta: float | ndarray)[source]

Bases: object

Calculate reflectivity for H and V polarization.

plot()[source]
class sense.model.CanopyHomoRT(ke_h: float, ke_v: float, ks_h: float, ks_v: float, d: float, theta: float | ndarray, stype: str)[source]

Bases: object

Homogeneous canopy RT model.

Assumes homogeneous vertical distribution of scatterers in that case the Lambert Beer law applies

NOTE that this model is only for BACKSCATTERING GEOMETRY!

Parameters:
  • ke_h (float) – volume extinction coefficient [Np/m]

  • ke_v (float) – volume extinction coefficient [Np/m]

  • d (float) – height of canopy layer [m]

  • theta (float, ndarray) – incidence angle [rad]

d: float
ke_h: float
ke_v: float
ks_h: float
ks_v: float
sigma_c()[source]

Calculate canopy volume contribution only.

Eq. 11.10 + 11.16 as seen in 11.17, Ulaby 2014

sigma_gcg(G_v, G_h)[source]

Calculate ground-canopy-ground interactions (Eq. 11.16, Ulaby 2014).

Parameters:
  • G_v (float) – v-polarized coherent Fresnel reflectivity under rough conditions see eq. 11.11 for explanations. As this depends on the surface model used, these should be provided here explicitely

  • G_h (float) – same as above, but for h-polarization.

stype: str
theta: float | ndarray
class sense.model.Ground(S: object, C: object, RT_s: str, RT_c: str, theta: float | ndarray, freq: float)[source]

Bases: object

Calculate the (attenuated) ground contribution sigma_pq.

p is receive and q is transmit polarization

Parameters:
  • S (object) – descibing the surface properties

  • C (object) – describing the canopy properties

  • RT_s (str) – key describing the surface scattering model

  • RT_c (str) – key specifying the canopy scattering model

  • theta (float/array) – incidence angle [rad]

  • freq (float) – frequency[GHz]

C: object
RT_c: str
RT_s: str
S: object
freq: float
sigma()[source]

Backscattering coefficient (Eq. 11.4, p.463 Ulaby 2014).

sigma_c_g(coherent=None)[source]

Calculate canopy ground scattering coefficient.

This is based on Eq. 11.17 (last term) in Ulaby (2014) and 11.14 in Ulaby (2014)

for co-pol, coherent addition can be made as an option

Parameters:

coherent (bool) – do coherent calculation for co-pol calculations

sigma_g_c_g()[source]

Calculate ground canopy ground scattering coefficient (Ulaby 2014).

theta: float | ndarray
class sense.model.Model(theta: float)[source]

Bases: object

Basic class for scattering modelling.

sigma0(dB: bool = False, pol: List[str] | None = None)[source]

Calculate sigma.

Parameters:
  • dB (bool) – Return results in decibel.

  • pol (list) – List with polarizations pq whereas p=receive, q=transmit p,g can be either H or V

theta: float
class sense.model.RTModel(theta: float, surface: object, canopy: object, models: Dict[str, str], freq: float, coherent: bool = True)[source]

Bases: Model

Radiative Transfer Models.

SSRT Eq. 11.17 (Ulaby and Long 2014) or WCM (Attema and Ulaby 1978).

Parameters:
  • surface (Surface description) – Object describing the surface

  • canopy (Canopy description) – Object describing the canopy

  • models (dict) – Dictionary with configuration of scattering models

canopy: object
coherent: bool = True
freq: float
models: Dict[str, str]
surface: object
class sense.model.WaterCloudCanopy(A_hh: float, B_hh: float, A_vv: float, B_vv: float, A_hv: float, B_hv: float, V1: float, V2: float, theta: float | ndarray)[source]

Bases: object

Water cloud model Attema and Ulaby (1978).

Canopy part

Parameters:
  • A (float) – fitting parameters

  • B (float) – fitting parameters

  • V1 (float) – vegetation descriptor

  • V2 (float) – vegetation descriptor

  • theta (float, ndarray) – incidence angle [rad]

A_hh: float
A_hv: float
A_vv: float
B_hh: float
B_hv: float
B_vv: float
V1: float
V2: float
sigma_c() Dict[str, float | ndarray][source]

Calculate canopy backscatter part.

theta: float | ndarray

Definition of scatter types.

class sense.scatterer.ScatIso(sigma_s_hh: float | ndarray | None = None, sigma_s_vv: float | ndarray | None = None, sigma_s_hv: float | ndarray | None = None)[source]

Bases: Scatterer

Isotropic scatterer definition (see Ulaby 2014, 11.2).

sigma_v_back()[source]

Volume backscattering coefficient for isotropic case.

This corresponds to the volume scattering coefficient ks. Note: This is NOT the scattering cross section of a single particle!

Returns:

Backscattering coefficients for ‘hh’, ‘vv’, ‘hv’.

Return type:

dict

sigma_v_bist()[source]

Bistatic volume backscatter (same as sigma_v_back (Eq. 11.19)).

class sense.scatterer.ScatRayleigh(sigma_s_hh: float | ndarray | None = None, sigma_s_vv: float | ndarray | None = None, sigma_s_hv: float | ndarray | None = None)[source]

Bases: Scatterer

Rayleigh scatterer definition (see Ulaby 2014, 11.2).

sigma_v_back()[source]

Volume backscattering coefficient for Rayleigh scatterers.

Returns:

Backscattering coefficients for ‘hh’, ‘vv’, ‘hv’. Note: ‘hv’ is undefined (np.nan).

Return type:

dict

sigma_v_bist()[source]

Bistatic volume backscatter (same as sigma_v_back (Eq. 11.22)).

class sense.scatterer.Scatterer(sigma_s_hh: float | ndarray | None = None, sigma_s_vv: float | ndarray | None = None, sigma_s_hv: float | ndarray | None = None)[source]

Bases: object

Base class for scatterers.

Parameters:
  • sigma_s_hh (float) – Particle HH scattering cross section [m²].

  • sigma_s_vv (float) – Particle VV scattering cross section [m²].

  • sigma_s_hv (float) – Particle HV scattering cross section [m²].

sigma_s_hh: float | ndarray = None
sigma_s_hv: float | ndarray = None
sigma_s_vv: float | ndarray = None
class sense.soil.Soil(surface: str | None = None, eps: complex | None = None, mv: float | None = None, f: float | None = None, s: float | None = None, l: float | None = None, acl: str | None = None, clay: float | None = None, sand: float | None = None, bulk: float | None = 1.65, debye: float | None = None, dc_model: str = 'Dobson85', C_hh: float | None = None, D_hh: float | None = None, C_vv: float | None = None, D_vv: float | None = None, C_hv: float | None = None, D_hv: float | None = None, V2: float | None = None)[source]

Bases: object

Class specifying a soil.

Parameters:
  • surface (string) – name of used RT-model for surface contribution

  • eps (complex) – relative permitivity, if this is not given, then mv needs to be given

  • s (float) – surface rms height [m]

  • mv (float) – volumetric soil moisture [m**3/m**3]; either eps or mv needs to be given

  • f (float) – frequency [GHz]

  • l (float) – optional: autocorrelation length

  • acl (str) – identifier for shape of autocorrelation function G = Gaussian E = Exponential

  • clay (float) – optional fractional clay content

  • sand (float) – optional fraction sand content

  • bulk (float) – bulk density [g/cm**3]

  • C_hh (float) – empirical parameter (Water Cloud Model)

  • D_hh (float) – empirical parameter (Water Cloud Model)

  • C_vv (float) – empirical parameter (Water Cloud Model)

  • D_vv (float) – empirical parameter (Water Cloud Model)

  • C_hv (float) – empirical parameter (Water Cloud Model)

  • D_hv (float) – empirical parameter (Water Cloud Model)

  • V2 (float) – parameter specifying the vegetation (Water Cloud Model)

C_hh: float | None = None
C_hv: float | None = None
C_vv: float | None = None
D_hh: float | None = None
D_hv: float | None = None
D_vv: float | None = None
V2: float | None = None
acl: str | None = None
bulk: float | None = 1.65
clay: float | None = None
dc_model: str = 'Dobson85'
debye: float | None = None
eps: complex | None = None
f: float | None = None
k: float | None = None
kl: float | None = None
ks: float | None = None
l: float | None = None
mv: float | None = None
s: float | None = None
sand: float | None = None
surface: str | None = None

Module for some utilty functions.

sense.util.f2lam(f)[source]

Given the frequency in GHz, return the wavelength [m].

Specification of canopies.

class sense.canopy.OneLayer(canopy: str, A_hh: float | None = None, B_hh: float | None = None, A_vv: float | None = None, B_vv: float | None = None, A_hv: float | None = None, B_hv: float | None = None, V1: float | None = None, V2: float | None = None, ke_h: float | None = None, ke_v: float | None = None, ks_h: float | None = None, ks_v: float | None = None, d: float | None = None)[source]

Bases: object

Define a homogeneous one layer canopy.

Right now water_cloud and turbid_isotropic/turbid_rayleigh are implemented

A_hh: float | None = None
A_hv: float | None = None
A_vv: float | None = None
B_hh: float | None = None
B_hv: float | None = None
B_vv: float | None = None
V1: float | None = None
V2: float | None = None
canopy: str
d: float | None = None
ke_h: float | None = None
ke_v: float | None = None
ks_h: float | None = None
ks_v: float | None = None
class sense.dielectric.dobson85.Dobson85(clay: float | None = None, sand: float | None = None, mv: float | None = None, freq: float | ndarray | None = None, bulk: float = 1.65, temp: float = 23.0, debye: bool = False, single_debye: bool = False)[source]

Bases: EpsModel

Dielectric mixing model for soils After Dobson et al. (1985).

Coding after Ulaby (2014), Chapter 4

debye: bool = False
single_debye: bool = False
class sense.dielectric.epsmodel.EpsModel(clay: float | None = None, sand: float | None = None, mv: float | None = None, freq: float | ndarray | None = None, bulk: float = 1.65, temp: float = 23.0)[source]

Bases: object

Generic model for dielectric mixing models.

bulk: float = 1.65
clay: float | None = None
freq: float | ndarray | None = None
mv: float | None = None
sand: float | None = None
temp: float = 23.0
class sense.surface.scatter.SurfaceScatter(eps: complex | ndarray | None = None, ks: float | None = None, theta: float | ndarray | None = None, kl: float | None = None, mv: float | ndarray | None = None, C_hh: float | None = None, C_vv: float | None = None, C_hv: float | None = None, D_hh: float | None = None, D_vv: float | None = None, D_hv: float | None = None)[source]

Bases: object

Major surface scatter class.

C_hh: float = None
C_hv: float = None
C_vv: float = None
D_hh: float = None
D_hv: float = None
D_vv: float = None
eps: complex | ndarray = None
kl: float = None
ks: float = None
mv: float | ndarray = None
theta: float | ndarray = None