Dependency Plan¶
Goal¶
This document captures the intended dependency strategy for reproducing the canonical raw IDL AIA benchmark in Python without requiring users to install SolarSoft.
Guiding rule¶
pyEUVTools should treat SSW/IDL as a scientific reference for reverse
engineering and validation, not as a runtime dependency for end users.
Benchmark target¶
The scientific target is the vendored raw no-correction AIA benchmark artifact at:
benchmark-data/aia/20251126T153431/aia_raw_response_20251126T153431_raw.sav
Its metadata records the benchmark provenance, including:
evenorm=0chiantifix=0- effective-area and emissivity source files
- CHIANTI version, abundance file, and ionization-equilibrium file
- correction-applied flags
Planned Python dependency split¶
1. AIA correction and degradation path¶
Planned source:
aiapy
Why:
aiapyalready exposes AIA correction-table machinery and wavelength-response helpers.- This is the most natural Python-native place to source the AIA effective-area
and time-dependent correction behavior associated with the
evenormside of the benchmark.
Current status:
- already used for the shipped wavelength-response layer
- available without SSW
2. CHIANTI database and emissivity path¶
Candidate Python-native backends:
fiascoChiantiPy
Why this layer is needed:
- the raw IDL benchmark records CHIANTI-side provenance through
EMISSINFO chiantifixand the/temperatureresponse path depend on emissivity and ionization data that are not covered byaiapyalone
3. Validation target¶
Validation should always compare Python output against the vendored raw IDL benchmark artifact, not use the benchmark as a runtime data dependency for the algorithm itself.
Assessment of candidate CHIANTI backends¶
fiasco¶
Strengths:
- Python-native CHIANTI database download path
- supports multiple CHIANTI versions
- avoids any SSW requirement for users
Risks:
- the exact benchmark uses CHIANTI
9.0.1, so version matching must be checked - we still need to verify whether the necessary emissivity-side behavior for the AIA temperature-response reconstruction is available at the right abstraction level
Current verified prototype result:
pyEUVToolsnow has a prototype helper that can askfiascoto provision its configured database paths.- In the current development environment, that helper successfully provisioned a
usable local database and reported CHIANTI
11.0.2. - This confirms that Python-native provisioning is feasible, but it also makes
the version-alignment problem explicit because the canonical raw AIA benchmark
metadata records CHIANTI
9.0.1.
ChiantiPy¶
Strengths:
- established Python interface to CHIANTI
- uses the standard CHIANTI directory tree and
XUVTOP
Risks:
- database installation is less self-managed than
fiasco - still requires the user or installer to provision the CHIANTI database tree
What SSW tells us¶
The SSW tree indicates that the CHIANTI database is not fundamentally IDL-only. SSW configures file locations and environment variables around a database tree.
Relevant evidence:
packages/chianti/setup/IDL_STARTUPpoints CHIANTI at a filesystem locationfor_checkabundance.proand related Forward routines resolve abundance and ionization files by pathssw_upgrade,/chiantiandsswdb_upgrade,/chiantidistinguish package code from database content
Recommended runtime direction¶
For end-user installation, prefer a Python-native CHIANTI path and avoid making SSW mandatory.
Current recommendation:
- keep
aiapyfor AIA-side correction behavior - investigate
fiascofirst for CHIANTI database provisioning and access - add an explicit CHIANTI version-selection strategy so benchmark-parity work is not silently performed against a newer database than the canonical reference
- use the raw benchmark to determine whether
fiascois sufficient or whether additional reconstruction work is needed forchiantifix
Remaining reverse-engineering tasks¶
The following still need to be traced from the SSW implementation:
- the exact computational path behind
aia_get_response(..., /temperature, /dn, /evenorm, /chiantifix) - the exact meaning and effect of
chiantifix - which data products are inputs versus derived intermediates
- whether the Python-native CHIANTI backend can represent the required inputs directly or whether additional preprocessing is needed
Near-term implementation plan¶
- Confirm the
aiapyside against the benchmark metadata and raw response shapes. - Prototype CHIANTI access with a Python-native backend, preferably
fiasco. - Inspect the relevant SSW routines to isolate the
chiantifixlogic. - Build the Python temperature-response path against the vendored benchmark.
- Only add GX-style compatibility layers after raw benchmark parity is achieved.