nirs4all.data.synthetic.measurement_modes module
Measurement mode simulation for synthetic NIRS data generation.
This module provides simulation of different NIR measurement geometries and their associated physics. The relationship between absorption coefficients and observed signal varies significantly with measurement mode.
- Supported Measurement Modes:
Transmittance: Beer-Lambert law, direct transmission
Diffuse Reflectance: Kubelka-Munk theory for scattering samples
Transflectance: Double-pass transmission with mirror backing
ATR: Attenuated Total Reflectance with wavelength-dependent penetration
References
Kubelka, P. (1948). New contributions to the optics of intensely light-scattering materials. Part I. JOSA, 38(5), 448-457.
Burns, D. A., & Ciurczak, E. W. (2007). Handbook of Near-Infrared Analysis. CRC Press.
Harrick, N. J. (1967). Internal Reflection Spectroscopy. Wiley.
Dahm, D. J., & Dahm, K. D. (2007). Interpreting Diffuse Reflectance and Transmittance. NIR Publications.
- class nirs4all.data.synthetic.measurement_modes.ATRConfig(crystal_material: str = 'diamond', crystal_refractive_index: float = 2.4, incidence_angle: float = 45.0, n_reflections: int = 1, sample_refractive_index: float = 1.5)[source]
Bases:
objectConfiguration for Attenuated Total Reflectance mode.
ATR uses internal reflection within a high-refractive-index crystal. The evanescent wave penetrates into the sample, with penetration depth depending on wavelength.
- class nirs4all.data.synthetic.measurement_modes.MeasurementMode(value)[source]
-
Types of NIR measurement geometries.
- ATR = 'atr'
- FIBER_OPTIC = 'fiber_optic'
- INTERACTANCE = 'interactance'
- REFLECTANCE = 'reflectance'
- TRANSFLECTANCE = 'transflectance'
- TRANSMITTANCE = 'transmittance'
- class nirs4all.data.synthetic.measurement_modes.MeasurementModeConfig(mode: ~nirs4all.data.synthetic.measurement_modes.MeasurementMode = MeasurementMode.TRANSMITTANCE, transmittance: ~nirs4all.data.synthetic.measurement_modes.TransmittanceConfig = <factory>, reflectance: ~nirs4all.data.synthetic.measurement_modes.ReflectanceConfig = <factory>, transflectance: ~nirs4all.data.synthetic.measurement_modes.TransflectanceConfig = <factory>, atr: ~nirs4all.data.synthetic.measurement_modes.ATRConfig = <factory>, scattering: ~nirs4all.data.synthetic.measurement_modes.ScatteringConfig = <factory>, add_specular: bool = False, specular_fraction: float = 0.04)[source]
Bases:
objectComplete configuration for measurement mode simulation.
Combines all mode-specific configurations into a single object.
- mode
The measurement mode to simulate.
- transmittance
Config for transmittance mode.
- reflectance
Config for reflectance mode.
- transflectance
Config for transflectance mode.
- atr
Config for ATR mode.
- scattering
Scattering coefficient configuration.
- mode: MeasurementMode = 'transmittance'
- reflectance: ReflectanceConfig
- scattering: ScatteringConfig
- transflectance: TransflectanceConfig
- transmittance: TransmittanceConfig
- class nirs4all.data.synthetic.measurement_modes.MeasurementModeSimulator(config: MeasurementModeConfig | None = None, random_state: int | None = None)[source]
Bases:
objectSimulate different NIR measurement modes.
Converts absorption coefficients to measured signal (absorbance, reflectance, etc.) based on the physics of different measurement geometries.
- config
Measurement mode configuration.
- rng
Random number generator for reproducibility.
Example
>>> config = MeasurementModeConfig(mode=MeasurementMode.REFLECTANCE) >>> simulator = MeasurementModeSimulator(config, random_state=42) >>> reflectance = simulator.apply(absorption_coefficients, wavelengths)
- absorbance_to_reflectance(absorbance: ndarray) ndarray[source]
Convert apparent absorbance to reflectance.
R = 10^(-A)
- Parameters:
absorbance – Apparent absorbance values.
- Returns:
Reflectance values (0-1).
- apply(absorption: ndarray, wavelengths: ndarray, scattering: ndarray | None = None) ndarray[source]
Apply measurement mode transformation.
Converts absorption coefficients (K) to measured signal based on the configured measurement mode.
- Parameters:
absorption – Absorption coefficient array (n_samples, n_wavelengths).
wavelengths – Wavelength array in nm.
scattering – Optional scattering coefficient array (n_samples, n_wavelengths). If None and needed, will be generated automatically.
- Returns:
Measured signal (absorbance, reflectance, etc.) depending on mode.
- generate_scattering_coefficients(shape: Tuple[int, int], wavelengths: ndarray) ndarray[source]
Generate realistic scattering coefficients.
Scattering coefficient follows approximate relationship: S(λ) ∝ λ^(-α) * (particle_size)^β
- Parameters:
shape – Output shape (n_samples, n_wavelengths).
wavelengths – Wavelength array in nm.
- Returns:
Scattering coefficient array.
- inverse_kubelka_munk(ks_ratio: ndarray) ndarray[source]
Inverse Kubelka-Munk transformation.
Given K/S, solve for R∞: R∞ = 1 + K/S - sqrt((K/S)² + 2*K/S)
- Parameters:
ks_ratio – K/S ratio values.
- Returns:
Reflectance values.
- class nirs4all.data.synthetic.measurement_modes.ReflectanceConfig(geometry: str = 'integrating_sphere', reference_material: str = 'spectralon', reference_reflectance: float = 0.99, illumination_angle: float = 0.0, collection_angle: float = 45.0, sample_presentation: str = 'powder')[source]
Bases:
objectConfiguration for diffuse reflectance measurement mode.
Implements Kubelka-Munk theory: f(R) = (1-R)² / 2R = K/S where R is reflectance, K is absorption coefficient, S is scattering.
- class nirs4all.data.synthetic.measurement_modes.ScatteringConfig(baseline_scattering: float = 1.0, wavelength_exponent: float = 1.0, particle_size_um: float = 50.0, particle_size_variation: float = 0.2, sample_to_sample_variation: float = 0.15)[source]
Bases:
objectConfiguration for scattering coefficient generation.
Controls how scattering coefficients are generated for samples, which is essential for Kubelka-Munk reflectance simulation.
- wavelength_exponent
Exponent for wavelength dependence (Rayleigh-like). S(λ) ∝ λ^(-exponent), typically 0.5-2.0
- Type:
- class nirs4all.data.synthetic.measurement_modes.TransflectanceConfig(path_length_mm: float = 0.5, reflector_type: str = 'gold', reflector_reflectance: float = 0.95, spacer_thickness_mm: float = 0.5)[source]
Bases:
objectConfiguration for transflectance measurement mode.
Light passes through sample, reflects off a mirror/diffuser, and passes through sample again (double-pass).
- class nirs4all.data.synthetic.measurement_modes.TransmittanceConfig(path_length_mm: float = 1.0, path_length_variation: float = 0.02, cuvette_material: str = 'quartz', reference_type: str = 'air')[source]
Bases:
objectConfiguration for transmittance measurement mode.
Implements Beer-Lambert law: A = εcl where A is absorbance, ε is molar absorptivity, c is concentration, and l is path length.
- nirs4all.data.synthetic.measurement_modes.create_atr_simulator(crystal_material: str = 'diamond', incidence_angle: float = 45.0, n_reflections: int = 1, random_state: int | None = None) MeasurementModeSimulator[source]
Create an ATR mode simulator.
- Parameters:
crystal_material – ATR crystal material.
incidence_angle – Incidence angle in degrees.
n_reflections – Number of internal reflections.
random_state – Random seed.
- Returns:
Configured MeasurementModeSimulator.
- nirs4all.data.synthetic.measurement_modes.create_reflectance_simulator(geometry: str = 'integrating_sphere', particle_size_um: float = 50.0, random_state: int | None = None) MeasurementModeSimulator[source]
Create a diffuse reflectance mode simulator.
- Parameters:
geometry – Measurement geometry.
particle_size_um – Mean particle size.
random_state – Random seed.
- Returns:
Configured MeasurementModeSimulator.
- nirs4all.data.synthetic.measurement_modes.create_transmittance_simulator(path_length_mm: float = 1.0, random_state: int | None = None) MeasurementModeSimulator[source]
Create a transmittance mode simulator.
- Parameters:
path_length_mm – Optical path length in mm.
random_state – Random seed.
- Returns:
Configured MeasurementModeSimulator.