nirs4all.synthesis.reconstruction.environmental module

Environmental effects model for physical signal-chain reconstruction.

Implements temperature, moisture, and scattering effects as fittable parameters. These effects are applied to the absorption spectrum in canonical space, before domain transform and instrument effects.

Uses literature-based parameters from the augmentation module.

class nirs4all.synthesis.reconstruction.environmental.EnvironmentalEffectsModel(temperature_delta: float = 0.0, water_activity: float = 0.5, scattering_power: float = 1.5, scattering_amplitude: float = 0.0, enabled: bool = True, reference_wavelength: float = 1500.0, _region_masks: Dict[str, ndarray] | None = None, _cached_wavelengths: ndarray | None = None)[source]

Bases: object

Environmental effects on the canonical absorption spectrum.

Applied to absorption in canonical space before domain transform and instrument effects. Implements region-specific temperature and moisture effects based on literature parameters.

temperature_delta

Temperature deviation from reference (25°C).

Type:

float

water_activity

Effective water activity (0-1 scale).

Type:

float

scattering_power

Wavelength-dependent scattering exponent (λ^-n).

Type:

float

scattering_amplitude

Amplitude of scattering baseline.

Type:

float

enabled

Whether to apply environmental effects.

Type:

bool

reference_wavelength

Reference wavelength for scattering normalization (nm).

Type:

float

apply(absorption: ndarray, wavelengths: ndarray) ndarray[source]

Apply environmental effects to absorption spectrum.

Effects are applied in order: 1. Temperature effects (region-specific shifts, intensity changes) 2. Moisture effects (water band shifts based on water activity) 3. Scattering baseline (wavelength-dependent λ^-n)

Parameters:
  • absorption – Absorption coefficient on canonical grid.

  • wavelengths – Wavelength grid (nm).

Returns:

Modified absorption spectrum with environmental effects.

copy() EnvironmentalEffectsModel[source]

Create a copy of this model.

enabled: bool = True
classmethod from_dict(d: Dict[str, Any]) EnvironmentalEffectsModel[source]

Create from dictionary.

get_jacobian_wrt_scattering_amplitude(absorption: ndarray, wavelengths: ndarray, eps: float = 0.001) ndarray[source]

Numerical Jacobian w.r.t. scattering_amplitude.

get_jacobian_wrt_scattering_power(absorption: ndarray, wavelengths: ndarray, eps: float = 0.05) ndarray[source]

Numerical Jacobian w.r.t. scattering_power.

get_jacobian_wrt_temperature(absorption: ndarray, wavelengths: ndarray, eps: float = 0.1) ndarray[source]

Numerical Jacobian w.r.t. temperature_delta.

get_jacobian_wrt_water_activity(absorption: ndarray, wavelengths: ndarray, eps: float = 0.01) ndarray[source]

Numerical Jacobian w.r.t. water_activity.

reference_wavelength: float = 1500.0
scattering_amplitude: float = 0.0
scattering_power: float = 1.5
temperature_delta: float = 0.0
to_dict() Dict[str, Any][source]

Convert to dictionary.

water_activity: float = 0.5
class nirs4all.synthesis.reconstruction.environmental.EnvironmentalParameterConfig(temperature_bounds: Tuple[float, float] = (-15.0, 15.0), temperature_prior_mean: float = 0.0, temperature_prior_std: float = 5.0, water_activity_bounds: Tuple[float, float] = (0.1, 0.9), water_activity_prior_alpha: float = 2.0, water_activity_prior_beta: float = 2.0, scattering_power_bounds: Tuple[float, float] = (0.5, 3.0), scattering_power_prior_mean: float = 1.5, scattering_power_prior_std: float = 0.5, scattering_amplitude_bounds: Tuple[float, float] = (0.0, 0.2), scattering_amplitude_prior_scale: float = 0.02)[source]

Bases: object

Configuration for environmental parameter fitting.

Defines bounds and prior distributions for each parameter.

compute_prior_penalty(temperature_delta: float, water_activity: float, scattering_power: float, scattering_amplitude: float) float[source]

Compute prior penalty for regularization.

Returns negative log-prior (to be added to objective function).

get_bounds_list() List[Tuple[float, float]][source]

Get list of bounds for all 4 environmental parameters.

scattering_amplitude_bounds: Tuple[float, float] = (0.0, 0.2)
scattering_amplitude_prior_scale: float = 0.02
scattering_power_bounds: Tuple[float, float] = (0.5, 3.0)
scattering_power_prior_mean: float = 1.5
scattering_power_prior_std: float = 0.5
temperature_bounds: Tuple[float, float] = (-15.0, 15.0)
temperature_prior_mean: float = 0.0
temperature_prior_std: float = 5.0
water_activity_bounds: Tuple[float, float] = (0.1, 0.9)
water_activity_prior_alpha: float = 2.0
water_activity_prior_beta: float = 2.0