Software configuration file#
ECSS-E-ST-40C Rev.1. This SCF records the as-built configuration of s2_msi_raw_generator, the SW config
item that runs S2B L1B backwards through the exact inverse of the operational L0→L1B
radiometric chain to reconstruct L1A → L0plus → Synthetic L0.
Introduction#
The Software Configuration File documents the inventory, baseline, build means and known issues of the
s2_msi_raw_generator software configuration item, so that the delivered package can be rebuilt and run
reproducibly. The item inverts the operational radiometric chain step by step (invert offset,
relative-response/PRNU, dark, un-bin, SWIR re-stage, defective, crosstalk, on-board-eq); MTF-deconvolution
is OFF, so PSF and noise are not re-applied. Success is the Synthetic L0 ‘img’ matching the reference ESA L0
(10/20 m bands ≤ ~4 DN).
Software configuration item overview#
Field |
Value |
|---|---|
Name |
Sentinel-2 MSI L1B → L1A/L0plus/Synthetic L0 reverse reconstruction |
Package |
|
Version |
|
Repository |
|
License |
Apache-2.0 |
Language / runtime |
Python ≥ 3.11 |
Build backend |
|
Inventory of materials#
Source modules (
s2_msi_raw_generator/):sensor.py,adf.py,gipp.py,forward_radiometric_atbd.py,reverse.py,calibration.py,isp.py,io.py,l0product.py,__init__.py.Packaged data (
s2_msi_raw_generator/data/psf/):S2 PSF matrices, 12 bands × 3 units (S2A/S2B/S2C) CSV (B10 absent by design) +PROVENANCE.md.Scripts (
scripts/):demo_reverse_real.py,demo_build_l0.py,derive_prnu_dark.py, the single pipeline driverrun_pipeline.py(all phases).Tests (
tests/):test_reverse.py,test_esa_adf_data.py,test_calibration.py,test_roundtrip_atbd.py,test_l0product.py,test_gipp.py,test_isp.py,test_integration.py,test_inc3_steps.py; full inventory =tests/test_*.py(21 files, 201 tests at v0.3.0).Documentation (
docs/): ATBD, SRS, SDD, ICD, DPM, V&V, SUM, SRN, CIDL, SCF, SRF, SDP.Project files:
pyproject.toml,.gitlab-ci.yml,README.md,CHANGELOG.md,LICENSE.
Baseline documents#
The baseline is the main branch tip. Applicable standards: ECSS-E-ST-40C Rev.1, ECSS-Q-ST-80C.
Reference data: ATBD (RD 1), Sentinel-2 L1 ATBD, SRF doc COPE-GSEG-EOPG-TN-15-0007, operational GIPP.
Means necessary for the software configuration item#
Means |
Requirement |
|---|---|
Python |
≥ 3.11 |
Runtime dependency |
|
I/O extra ( |
|
Test extra ( |
|
No EOPF CPM and no credentials are required for the referenceized path.
Installation instructions#
pip install -e ".[read]" # numpy + zarr
pytest # 201 tests at v0.3.0
S2 L1B runs additionally need a GIPP folder (S2A_OPER_GIP_*.xml) and EOPF L1A/L1B Zarr; both are
referenced by configurable paths (not bundled), e.g. data/gipp and data/PDI_MSI_S2_L1A.zarr.
Change list#
See CHANGELOG.md. Increments 0–4 delivered the S1–S15 reverse inversion chain, PSF/SRF ADFs and the
Synthetic L0 product assembly; increment 5 aligned the per-step inversion with the operational radiometric chain
(the same chain the reverse chain reruns backwards, with MTF-deconvolution OFF); increment 6 added the
operational-GIPP per-pixel ADFs; increment 7 the L0plus codec round-trip check (decode(L0plus)==L1A,
bit-exact) and L0 ‘img’ validation against the reference ESA L0 (10/20 m ≤ ~4 DN); increment 8 the calibration
sub-set (cal-DB / PRNU-dark derivation); the documentation increment delivered the ECSS DRD set.
Possible problems and known errors#
The operational input is a Sentinel-2B L1B, and the Synthetic L0 ‘img’ is validated against the reference ESA L0 (10/20 m bands ≤ ~4 DN). Where a DN-scaled CPM fixture L1A (
PDI_MSI_S2_L1A) is used instead, it is not physically calibrated radiance — suitable for structure checks and for the L0plus codec round-trip (decode(L0plus)==L1A is bit-exact), not for absolute radiometry.The operational GIPP and L1A are not stored in the repository (size / provenance); supply them via the configurable path arguments / environment variables (
S2_GIPP_DIR,S2_L1A_INPUT).L1C entry + geometry reverse is cancelled (not applicable to an L1A/L1B entry); a few requirements are deferred (see SRS §3.5).