nirs4all.synthesis.instruments module

Instrument archetype simulation for synthetic NIRS data generation.

This module provides realistic simulation of different NIR instrument types, including their optical characteristics, noise models, and measurement configurations. It also supports multi-sensor systems that stitch together signal chunks from different wavelength ranges, and multi-scan averaging.

Key Features:
  • 20+ instrument archetypes covering benchtop, handheld, process, and embedded

  • Multi-sensor stitching simulation (combining multiple detector ranges)

  • Multi-scan averaging with realistic noise reduction

  • Detector-specific noise models (shot, thermal, 1/f)

  • Wavelength calibration effects

  • Stray light and etalon interference

References

  • Workman Jr, J., & Weyer, L. (2012). Practical Guide and Spectral Atlas for Interpretive Near-Infrared Spectroscopy. CRC Press.

  • Siesler, H. W., Ozaki, Y., Kawata, S., & Heise, H. M. (2002). Near-Infrared Spectroscopy: Principles, Instruments, Applications. Wiley-VCH.

  • ASTM E1944-98(2017): Standard Practice for Describing and Measuring Performance of NIR Instruments.

class nirs4all.synthesis.instruments.DetectorType(value)[source]

Bases: StrEnum

Types of NIR detectors.

INGAAS = 'ingaas'
INGAAS_EXTENDED = 'ingaas_ext'
MCT = 'mct'
MEMS = 'mems'
PBS = 'pbs'
PBSE = 'pbse'
SI = 'si'
class nirs4all.synthesis.instruments.InstrumentCategory(value)[source]

Bases: StrEnum

Categories of NIR instruments.

BENCHTOP = 'benchtop'
DIODE_ARRAY = 'diode_array'
EMBEDDED = 'embedded'
FILTER = 'filter'
FT_NIR = 'ft_nir'
HANDHELD = 'handheld'
PROCESS = 'process'
class nirs4all.synthesis.instruments.MonochromatorType(value)[source]

Bases: StrEnum

Types of wavelength selection mechanisms.

AOTF = 'aotf'
DMD = 'dmd'
FABRY_PEROT = 'fabry_perot'
FILTER_WHEEL = 'filter_wheel'
FT = 'fourier_transform'
GRATING = 'grating'
LVF = 'lvf'
nirs4all.synthesis.instruments.get_instrument_wavelength_info() → dict[str, dict[str, Any]][source]

Get detailed information about all instrument wavelength grids.

Returns:

  • n_wavelengths: Number of wavelength points

  • wavelength_start: Start wavelength (nm)

  • wavelength_end: End wavelength (nm)

  • mean_step: Mean wavelength step (nm)

Return type:

Dictionary mapping instrument names to info dicts containing

Example

>>> info = get_instrument_wavelength_info()
>>> print(info["micronir_onsite"])
{'n_wavelengths': 125, 'wavelength_start': 908.0, ...}
nirs4all.synthesis.instruments.get_instruments_by_category() → dict[str, list[str]][source]

Get all instruments organized by category.

Returns:

Dictionary mapping category name to list of instrument names.

nirs4all.synthesis.instruments.list_instrument_archetypes(category: InstrumentCategory | None = None) → list[str][source]

List available instrument archetype names.

Parameters:

category – Optional filter by category.

Returns:

List of archetype names.

Example

>>> list_instrument_archetypes(InstrumentCategory.HANDHELD)
['viavi_micronir', 'scio', 'tellspec', 'linksquare', 'siware_neoscanner']
nirs4all.synthesis.instruments.list_instrument_wavelength_grids() → list[str][source]

List all available predefined instrument wavelength grids.

Returns:

List of instrument identifiers.

Example

>>> grids = list_instrument_wavelength_grids()
>>> print(grids[:3])
['micronir_onsite', 'scio', 'neospectra_micro']