End-to-end analytical wavefront propagation model for the Large Interferometer For Exoplanets (LIFE) nulling combiner. This code traces photon throughput and null depth through every optical surface of the LIFE modified Mach–Zehnder (MMZ) beam combiner across the 6–16 µm mid-infrared science band.
Companion paper:
V. Huarcaya, "Analytical Throughput, Null Depth, and Surface Tolerance Budget for the LIFE Nulling Interferometer Combiner,” TBD (2026, in preparation).
Top-hat beam coupling into a single-mode fiber peaks at η = 81.5% for optimal β = 1.121 — an 18.5% penalty compared to Gaussian illumination that sets the throughput floor for all flat-top collector designs.
Surface-by-surface cumulative throughput through the 24-element LIFE optical train at λ = 10 µm. The largest single loss is the 50/50 nulling beamsplitter; fiber coupling and detection losses bring the final PCE to ~7%.
Photon conversion efficiency across 2–20 µm for different combiner configurations. The model predicts 7.0–8.0% PCE within the 6–16 µm science band, validated against the NICE testbed measurement at 3.6 µm (red square).
Null depth probability distributions at 6, 10, and 16 µm from the full end-to-end Monte Carlo. Vertical lines show the mean (black), requirement (red), and analytical Module 3 prediction (purple). The gap between the MC mean and the requirement quantifies the technology challenge at each wavelength.
LIFE is a proposed large-class space mission consisting of five formation-flying spacecraft at L2 that would use nulling interferometry to detect and characterise the thermal emission of temperate exoplanets around Sun-like stars. The LIFE concept study (Quanz et al. 2022; Glauser et al. 2024) identified the need for a full end-to-end wavefront propagation model to assess diffraction and wavefront error propagation through the instrument optical train.
This codebase provides that model — a Phase I warm-bench, pre-optimisation analytical baseline that assumes:
- 300 K surface quality specifications (no cryogenic improvement)
- No adaptive nulling correction
- Statistically independent surface errors (worst-case)
The model establishes quantitative performance floors that the NICE (Nulling Interferometry Cryogenic Experiment) cryogenic testbed at ETH Zürich will improve upon.
- Photon conversion efficiency: 7.0–8.0% across 6–16 µm (within the 3.5–10% design range)
- Surface WFE dominates null depth — not beamsplitter chromaticity — due to quartic σ⁴/λ⁴ fiber-filtered scaling accumulated across ~20 optical surfaces
- Technology gap: 140× at 6 µm, 6–20× at 10 µm (warm-bench), requiring surface improvements of only 2.1–3.4× thanks to the same quartic scaling
- Validated against NICE warm-bench testbed measurements (Birbacher et al. 2026)
This is a Phase I analytical baseline — not a full physical optics simulation. The model operates under the following assumptions:
- Maréchal small-aberration regime: coupling loss approximated as exp(−(2πσ/λ)²), valid for σ/λ ≲ 0.1
- Gaussian fiber mode: LP₀₁ mode approximated via Marcuse formula; no higher-order mode coupling
- Independent surface residuals: WFE on each optical surface drawn independently (worst-case; no correlated fabrication errors)
- Zernike decomposition ≤ Z₁₁: low-order aberrations only; no high spatial frequency scattering
- Warm-bench (300 K) specifications: no cryogenic surface improvement assumed
- No adaptive nulling correction: performance floors represent the uncompensated case
- Scalar diffraction: no full vector electromagnetic treatment; polarisation handled via Jones matrix splitting
These define the valid operating domain. Phase II (Zemax POP validation) will address diffraction clipping, ghost beams, and polarisation ray tracing.
The model consists of 4 analysis modules, 2 supporting libraries, and 1 integration engine:
material_properties.py fiber_modes.py
(optical constants) (Gaussian modes)
│ │
├────────────┬────────────────┤
│ │ │
▼ ▼ ▼
m2_throughput m3_null_error m1_fiber_coupling
_chain.py _propagation.py .py
│
▼
m4_surface
_sensitivity.py
material_properties ──┬──► monte_carlo.py
m3_null_error_prop ───┘ (10⁵-realisation MC)
| Module | Lines | Description |
|---|---|---|
material_properties.py |
1,143 | Canonical library: Au reflectivity (Ordal/Palik), CaF₂ & ZnSe Sellmeier models, AR/BS coatings, Si:As BIB detector QE. 30 public functions. |
fiber_modes.py |
882 | Single-mode fiber optics: V-parameter, Gaussian mode field radius w_f(λ), coupling integrals for Gaussian and top-hat illumination. |
| Module | Lines | Paper Section | Description |
|---|---|---|---|
m1_fiber_coupling.py |
1,475 | §3.1 | Fiber coupling efficiency vs beam profile, Zernike aberration sensitivity, optimal β parameter. |
m2_throughput_chain.py |
1,194 | §3.2 | Surface-by-surface throughput waterfall for 24-element LIFE optical train. NICE testbed validation. |
m3_null_error_propagation.py |
1,368 | §3.3 | Null depth error budget: OPD, intensity mismatch, beamsplitter chromaticity, polarisation. Per-polarisation exact computation. |
m4_surface_sensitivity.py |
1,076 | §3.4 | Surface-by-surface WFE sensitivity ranking with Maréchal coupling and common-mode rejection. 20-surface catalogue. |
| Module | Lines | Paper Section | Description |
|---|---|---|---|
monte_carlo.py |
1,169 | §3.5 | Full end-to-end 10⁵-realisation Monte Carlo combining Modules 1–4. Null depth distributions, CDF analysis, technology gap assessment. |
Two conventions coexist by design, with documented boundary wrappers:
- µm group (libraries + MC):
material_properties,fiber_modes,m2_throughput_chain,monte_carlo - SI metres group (physics modules):
m1_fiber_coupling,m3_null_error_propagation,m4_surface_sensitivity
git clone https://github.com/vhuarcaya/life-e2e-model.git
cd life-e2e-model
pip install -r requirements.txtRun the full analysis pipeline and generate all figures:
python -m life_e2e # Full run (10⁵ MC realisations, ~2 min)
python -m life_e2e --quick # Quick run (10³ realisations, ~5 s)
python -m life_e2e --output-dir results/ # Custom output directoryOr open the demo notebook for an interactive walkthrough:
pip install jupyter
jupyter notebook notebooks/demo_quick.ipynbOr install as a package:
pip install .- Python ≥ 3.10
- NumPy, SciPy, Matplotlib (no other dependencies)
Each module is self-contained and can be run independently:
# Run individual analysis modules
python src/life_e2e/m1_fiber_coupling.py
python src/life_e2e/m2_throughput_chain.py
python src/life_e2e/m3_null_error_propagation.py
python src/life_e2e/m4_surface_sensitivity.py
# Run the full Monte Carlo (10⁵ realisations, ~2 min)
python src/life_e2e/monte_carlo.pyEach module generates its paper figures in the working directory and prints summary tables to stdout.
To regenerate all figures and tables from the paper, run all modules in sequence:
python src/life_e2e/m1_fiber_coupling.py
python src/life_e2e/m2_throughput_chain.py
python src/life_e2e/m3_null_error_propagation.py
python src/life_e2e/m4_surface_sensitivity.py
python src/life_e2e/monte_carlo.pyKey numerical results to verify:
| Quantity | Value | Module |
|---|---|---|
| Top-hat coupling η₀ | 81.45% | M1 |
| PCE at 10 µm | ~7.1% | M2 |
| BS chromatic null (6 µm) | 2.0 × 10⁻⁵ | M3 |
| MC mean null (6 µm) | 1.4 × 10⁻³ | MC |
| MC mean null (10 µm) | 1.9 × 10⁻⁴ | MC |
| Technology gap (6 µm) | 140× | MC |
The test suite includes 33 regression checks across all 7 modules:
pip install pytest
pytest tests/test_regression.py -vTests cover material properties against published values, fiber coupling optima, null depth wavelength ordering, Monte Carlo reproducibility, and cross-module consistency. CI runs automatically on Python 3.10–3.12 via GitHub Actions.
life-e2e-model/
├── README.md
├── LICENSE # GPL-3.0
├── CITATION.cff # Machine-readable citation
├── CHANGELOG.md # Version history
├── pyproject.toml # Package configuration
├── requirements.txt
├── .gitignore
├── .github/
│ └── workflows/
│ └── tests.yml # CI: Python 3.10–3.12
├── src/
│ └── life_e2e/
│ ├── __init__.py
│ ├── __main__.py # python -m life_e2e entry point
│ ├── material_properties.py # Optical constants library
│ ├── fiber_modes.py # Fiber mode library
│ ├── m1_fiber_coupling.py # Module 1: Coupling
│ ├── m2_throughput_chain.py # Module 2: Throughput
│ ├── m3_null_error_propagation.py # Module 3: Null depth
│ ├── m4_surface_sensitivity.py # Module 4: Surface WFE
│ └── monte_carlo.py # Monte Carlo integration
├── notebooks/
│ └── demo_quick.ipynb # Interactive walkthrough (~30 s)
├── figures/ # Generated paper figures
├── tests/
│ ├── conftest.py
│ └── test_regression.py # 33 regression checks
└── docs/
If you use this code in your research, please cite both the paper and the software:
@article{huarcaya2026_life_e2e,
author = {Huarcaya, Victor},
title = {Analytical Throughput, Null Depth, and Surface Tolerance Budget
for the {LIFE} Nulling Interferometer Combiner},
journal = {TBD},
year = {2026},
note = {in preparation}
}
@software{huarcaya2026_life_e2e_code,
author = {Huarcaya, Victor},
title = {{LIFE} E2E Nulling Interferometer Analytical Model},
year = {2026},
publisher = {GitHub},
url = {https://github.com/vhuarcaya/life-e2e-model},
doi = {10.5281/zenodo.18716470}
}This model builds on and connects to:
- LIFE mission: life-space-mission.com — Quanz et al. (2022), Dannert et al. (2022), Glauser et al. (2024)
- NICE testbed: Nulling Interferometry Cryogenic Experiment at ETH Zürich — Gheorghe et al. (2020), Birbacher et al. (2026)
- LIFEsim: LIFE detection yield simulator — Dannert et al. (2022), available at github.com/fdannert/LIFEsim
- Nulling theory: Bracewell (1978), Mennesson & Mariotti (1997), Angel & Woolf (1997)
- Kernel nulling: Hansen et al. (2022), Guyon (2013)
This project is licensed under the GNU General Public License v3.0 — see LICENSE for details.
Victor Huarcaya
Physikalisches Institut, University of Bern
Sidlerstrasse 5, CH-3012 Bern, Switzerland
victor.huarcaya@unibe.ch



