toolsrtm.inform

INFORM forest-stand reflectance (Atzberger 2000; Schlerf & Atzberger 2006): FLIM ground-coverage geometry + fourSAIL understorey/infinite-crown + crown transmittance. Direct port of ToolsRTM/R/inform.R and its internal helpers (foursail.inform.R, foursail.inf.R, foursail_t_s.R, foursail_t_o.R, Compute_BRF.R).

INFORM: the INvertible FOrest Reflectance Model (Atzberger 2000; Schlerf & Atzberger 2006), a FLIM (Rosema et al. 1992) + fourSAIL + PROSPECT combination for forest-stand bidirectional reflectance, 400-2500 nm.

Direct port of ToolsRTM/R/inform.R and its internal helpers (foursail.inform.R, foursail.inf.R, foursail_t_s.R, foursail_t_o.R, Compute_BRF.R), restricted to what inform() itself actually exercises. All 5 leaf models ToolsRTM itself supports (PROSPECT-D/-PRO, Liberty, Fluspect-B/-B-Cx) are wired in via toolsrtm.canopy._leaf_optics(), the same dispatcher toolsrtm.canopy.foursail() uses.

Reproduces the R source’s own behavior exactly, so results match R bit-for-bit – see inline comments at _INFORM_QUIRKY_LIDF and compute_brf.

toolsrtm.inform.compute_brf(rdot, rsot, tts, es=None, ed=None, short_waves=False)[source]

Bidirectional reflectance factor from direct/diffuse light mixing.

Direct port of ToolsRTM::Compute_BRF. That R function has two Es/Ed sourcing paths gated on is.null(data.light): a positional dataSpec_PDB[,11]/[,12] path (columns actually named dry_soil/wet_soil – unused dead code, since no call site in the package ever omits data.light) and a named data.light$ direct_light/data.light$diffuse_light path, which is the one every real call site (foursail.inform, foursail.inf) hits by always passing data.light=ToolsRTM::dataSpec_PDB explicitly. es/ ed here default to those direct_light/diffuse_light columns to match.

es/ed are truncated to len(rdot) directly rather than being gated on short_wavesrdot/rsot are 2101 long for PROSPECT-D/-PRO/Liberty but only 2001 long for Fluspect-B/-B-Cx (its native 400-2400nm domain); a caller who passes mismatched-length rdot/short_waves combinations (e.g. calling this directly on a Fluspect-based foursail() result without also setting short_waves=True) would otherwise hit a hard NumPy broadcasting error. ToolsRTM::Compute_BRF matches Es/Ed to rdot’s length the same way this port does; short_waves is kept only for backward API compatibility and no longer has any effect.

Parameters:
  • tts (float)

  • short_waves (bool)

toolsrtm.inform.foursail_inform(inputLUT, rsoil)[source]

Understorey reflectance (dicotyledoneae defaults), BRF-blended.

Direct port of ToolsRTM::foursail.inform with typeLAI='understorey' – the only typeLAI value inform() itself ever calls it with (the 'Inf-crownTree'/default branches are dead code from the caller’s perspective and are not ported).

Parameters:
Return type:

ndarray

toolsrtm.inform.foursail_inf(inputLUT, rsoil, rleaf, tleaf, short_waves=False)[source]

Infinite (very dense, LAI=15) crown reflectance, BRF-blended.

Direct port of ToolsRTM::foursail.inf as called by inform(). short_waves defaults to False (the non-Fluspect leaf models’ call site omits the argument, so R’s missing() guard resolves it to FALSE – see compute_brf()); inform() passes short_waves=True explicitly for the Fluspect-B/-B-Cx leaf models (matching R’s own foursail.inf(..., short.waves=T) call there). Unlike foursail_inform(), TypeLidf==1 here uses a real dladgen call in the R source (not the hardcoded quirky table), so this reuses toolsrtm.canopy.foursail_core() directly.

Parameters:
Return type:

ndarray

toolsrtm.inform.foursail_t_s(inputLUT, rsoil, rleaf, tleaf)[source]

Crown transmittance in the sun direction. Port of foursail_t_s.R.

Parameters:
Return type:

ndarray

toolsrtm.inform.foursail_t_o(inputLUT, rsoil, rleaf, tleaf)[source]

Crown transmittance in the observation direction. Port of foursail_t_o.R – note the R source passes the viewing zenith angle (tto) in as tts too, so illumination and viewing geometry coincide; reproduced as-is.

Parameters:
Return type:

ndarray

toolsrtm.inform.inform(inputLUT, rsoil, leaf_model='PROSPECT-PRO')[source]

INFORM forest-stand reflectance. Direct port of ToolsRTM::inform, dispatching to any of the 5 leaf models ToolsRTM itself supports (see toolsrtm.canopy._leaf_optics()) – same as toolsrtm.canopy.foursail().

Parameters:
  • inputLUT (dict) – Must contain the fourSAIL keys (LIDFa, LIDFb, TypeLidf, LAI, hspot, tts, tto, psi) plus the leaf-model parameters (see toolsrtm.canopy.foursail() for the full list per leaf model), plus the INFORM-specific canopy keys LAIu (understorey LAI), sd (stem density, ha-1), cd (crown diameter, m), h (tree height, m), and skyl (diffuse-light fraction).

  • rsoil (array_like) – Soil reflectance spectrum, 400-2500 nm (2101 values).

  • leaf_model ({'PROSPECT-D', 'PROSPECT-PRO', 'Liberty', 'Fluspect-B', 'Fluspect-B-Cx'})

Returns:

Forest reflectance spectrum – 2101 values (400-2500 nm) for PROSPECT-D/-PRO/Liberty, 2001 values (400-2400 nm) for the two Fluspect leaf models (matching R’s r_understorey[1:2001] truncation there and foursail.inf(..., short.waves=T)).

Return type:

numpy.ndarray