ECLIPSE: Emission Calculation and Line Prediction for SOLAR-C EUVST
Project description
ECLIPSE: Emission Calculation and Line Prediction for SOLAR-C EUVST
The ECLIPSE code (Emission Calculation and Line Prediction for SOLAR-C EUVST) is used to forward model the performance of the EUV spectrograph EUVST onboard the SOLAR-C spacecraft.
Contact: James McKevitt (jm2@mssl.ucl.ac.uk). License: Contact for permission to use.
The instrument response generated by this code will be updated during instrument development, testing, and commissioning.
Installation
From PyPI (recommended)
pip install solarc-eclipse
From source
pip install git+https://github.com/jamesmckevitt/eclipse.git
Quick Start
Command Line Interface
After installation, you can run ECLIPSE from the command line:
# Run synthesis script (convert 3D MHD data to synthetic spectra)
synthesise-spectra --data-dir ./data/atmosphere --goft-file ./data/gofnt.sav --output-dir ./run/input
# Run instrument response simulation
eclipse --config ./run/input/config.yaml
# Help can be accessed with
synthesise-spectra --help
eclipse --help
Python API
You can also use ECLIPSE as a Python library:
import astropy.units as u
import euvst_response
from euvst_response import AluminiumFilter, Detector_SWC, Telescope_EUVST
telescope = Telescope_EUVST()
detector = Detector_SWC()
print(f"Telescope collecting area: {telescope.collecting_area:.4f}")
print(f"Detector QE (EUV): {detector.qe_euv:.2f}")
# Calculate effective area at Fe XII 195.119 Å
fe12_wl = 195.119 * u.AA
effective_area = telescope.collecting_area * telescope.throughput(fe12_wl) * detector.qe_euv
# Get breakdown of throughput by component
pm_eff = telescope.primary_mirror_efficiency(fe12_wl)
grating_eff = telescope.grating_efficiency(fe12_wl)
micro_eff = telescope.microroughness_efficiency(fe12_wl)
filter_eff = telescope.filter.total_throughput(fe12_wl)
Analysis Tutorial
For analyzing simulation results, see the included Jupyter notebook analysis_tutorial.ipynb which demonstrates how to:
- Load simulation results
- Explore parameter combinations
- Analyze fit statistics and compute velocity/line width errors
- Create SunPy maps for visualization
The analysis functions are available directly from the package:
from euvst_response import (
load_instrument_response_results,
get_results_for_combination,
analyse_fit_statistics,
create_sunpy_maps_from_combo,
summary_table
)
# Load results
results = load_instrument_response_results("run/result/my_run.pkl")
# Print a summary table (auto-discovers all parameters and shows git commit)
summary_table(results)
# Retrieve a specific combination using full section.attribute names
combo = get_results_for_combination(results, **{"simulation.expos": 40*u.s, "simulation.psf": True})
Detailed instructions
1. Generate contribution functions for the desired emission lines
Edit make_gofnt.pro to specify the desired emission lines and the location of the CHIANTI files. You can use CHIANTI to identify the required lines.
Run the following command:
idl -e "make_goft"
2. Run the line synthesis
The synthesis script converts 3D MHD simulation data into synthetic solar spectra. It can be run directly from the command line with extensive configuration options.
Basic Usage
# Example using all available command line options
synthesise-spectra \
--data-dir ./data/atmosphere \
--goft-file ./data/gofnt.sav \
--output-dir ./run/input \
--output-name synthesised_spectra.pkl \
--temp-file temp/eosT.0270000 \
--rho-file rho/result_prim_0.0270000 \
--vx-file vx/result_prim_1.0270000 \
--vy-file vy/result_prim_3.0270000 \
--vz-file vz/result_prim_2.0270000 \
--cube-shape 512 768 256 \
--voxel-dx "0.192 Mm" \
--voxel-dy "0.192 Mm" \
--voxel-dz "0.064 Mm" \
--vel-res "5.0 km/s" \
--vel-lim "300.0 km/s" \
--integration-axis z \
--crop-x "-50 Mm" "50 Mm" \
--crop-y "-50 Mm" "50 Mm" \
--crop-z "0 Mm" "20 Mm" \
--downsample 1 \
--precision float64 \
--mean-mol-wt 1.29 \
--limit-lines Fe12_195.1190
# Show all available options
synthesise-spectra --help
Command Line Options
Input/Output Paths:
--data-dir: Directory containing simulation data (default:data/atmosphere)--goft-file: Path to CHIANTI G(T,N) save file (default:./data/gofnt.sav)--output-dir: Output directory for results (default:./run/input)--output-name: Output filename (default:synthesised_spectra.pkl)
Simulation Files:
--temp-file: Temperature file relative to data-dir (default:temp/eosT.0270000)--rho-file: Density file relative to data-dir (default:rho/result_prim_0.0270000)--vx-file: X-velocity file (required if--integration-axis x)--vy-file: Y-velocity file (required if--integration-axis y)--vz-file: Z-velocity file (required if--integration-axis z)
Grid Parameters:
--cube-shape: Cube dimensions as three integers (default:512 768 256)--voxel-dx,--voxel-dy,--voxel-dz: Voxel sizes with units (default:"0.192 Mm","0.192 Mm","0.064 Mm")
Velocity Grid:
--vel-res: Velocity resolution with units (default:"5.0 km/s")--vel-lim: Velocity limit +-km/s with units (default:"300.0 km/s")
Integration and Viewing:
--integration-axis: Integration axis:x,y, orz(default:z)z: Standard top-down view (integrates through height)x: Side view from the left (integrates left-to-right)y: Side view from the front (integrates front-to-back)
Spatial Cropping (Heliocentric coordinates with units):
--crop-x: X-range to crop with units, e.g.,--crop-x "-50 Mm" "50 Mm"(optional)--crop-y: Y-range to crop with units, e.g.,--crop-y "-50 Mm" "50 Mm"(optional)--crop-z: Z-range to crop with units, e.g.,--crop-z "0 Mm" "20 Mm"(optional)- Omit any crop option to use the full range in that dimension
Processing Options:
--downsample: Downsampling factor (default:1= no downsampling)--precision: Numerical precisionfloat32orfloat64(default:float64)--mean-mol-wt: Mean molecular weight (default:1.29)
Line Selection:
--limit-lines: Limit to specific lines, e.g.,--limit-lines Fe12_195.1190 Fe12_195.1790
Dynamic Mode (Time-varying Atmospheres)
For simulating raster scans over evolving atmospheres, use dynamic mode which combines MHD timesteps based on instrument scanning:
synthesise-spectra \
--data-dir ./data/atmosphere \
--goft-file ./data/gofnt.sav \
--output-dir ./run/input \
--slit-rest-time "40 s" \
--slit-width "0.2 arcsec" \
--temp-dir temp \
--temp-filename eosT \
--rho-dir rho \
--rho-filename result_prim_0 \
--vz-dir vz \
--vz-filename result_prim_2 \
--time-dir time \
--time-filename tau_slice_0.100 \
--cube-shape 512 768 256 \
--voxel-dx "0.192 Mm" \
--voxel-dy "0.192 Mm" \
--voxel-dz "0.064 Mm" \
--vel-res "5.0 km/s" \
--vel-lim "300.0 km/s" \
--integration-axis z
Dynamic Mode Options:
--slit-rest-time: Slit rest time per position - enables dynamic mode--slit-width: Slit width--temp-dir,--rho-dir,--vx-dir,--vy-dir,--vz-dir,--time-dir: Directories containing timestep files--temp-filename,--rho-filename,--vx-filename,--vy-filename,--vz-filename,--time-filename: Filename prefix before timestep suffix
Output
The synthesis produces a pickle file containing:
line_cubes: Individual NDCube objects for each spectral line with proper WCSconfig: Runtime configuration for reproducibility- Additional technical data for internal use
Performance Tips
- Use
--downsample 2or--downsample 4for initial testing - Use
--precision float32to reduce memory usage (may affect accuracy) - Use
--limit-linesto synthesise only specific lines for development - Use spatial cropping to focus on regions of interest and reduce computation time
- Monitor memory usage - full resolution synthesis can require 50+ GB RAM
- Side views (
--integration-axis xory) may require different velocity files
Working with Synthesis Results
The synthesis results can be loaded and analyzed using the package API:
import euvst_response
# Load synthesis results - this sums all line cubes into a single cube
# By default uses Fe XII 195.119 Å as reference for wavelength grid
cube = euvst_response.load_atmosphere("./run/input/synthesised_spectra.pkl")
print(f"Combined cube shape: {cube.data.shape}")
# Access individual line cubes if needed
import pickle
with open("./run/input/synthesised_spectra.pkl", "rb") as f:
data = pickle.load(f)
# Access individual line cubes
fe12_195 = data["line_cubes"]["Fe12_195.1190"]
print(f"Fe XII 195.119 cube shape: {fe12_195.data.shape}")
print(f"Rest wavelength: {fe12_195.meta['rest_wav']}")
# List all available lines
print(f"Available spectral lines: {list(data['line_cubes'].keys())}")
Pre-computed Atmospheres
This step can require a lot of memory at full resolution. A fully synthesised atmosphere using the Cheung et al. (2018) atmosphere (doi:10.1038/s41550-018-0629-3) for the Fe XII 195.119 and 195.179 lines, including 5 background lines from each side, can be downloaded here: https://liveuclac-my.sharepoint.com/:f:/g/personal/ucasjem_ucl_ac_uk/Es-ts6rwXIlInAweGI7hmdMB5BoGqv9uSpIXOvMkzhS3cw?e=54si7R
Important: You can place the synthesised atmosphere file anywhere and specify its location using the synthesis_file parameter in your YAML configuration file. The default location is ./run/input/synthesised_spectra.pkl.
3. Simulate the instrument response
Configuration File
ECLIPSE uses YAML configuration files to specify simulation parameters.
Parameters are organised into four sections - simulation, detector, telescope, and filter - each corresponding directly to a configuration class in config.py.
Any field of those classes can be set here.
Any parameter that is given as a list is automatically swept over and the
simulation runs every combination (cartesian product).
Top-level keys (not sections):
instrument:SWC(EUVST Short Wavelength) orEIS(Hinode/EIS)synthesis_file: path to the synthesised spectra pickle filereference_line: spectral line used as the wavelength-grid reference (defaultFe12_195.1190)n_iter: number of Monte Carlo iterationsncpu: CPU cores to use (-1= all available)pinhole_sizes,pinhole_positions: fixed paired lists for pinhole diffraction tests (SWC only)uniform_intensity,rest_wavelength,thermal_width: uniform-intensity mode (alternative to synthesis file)
Here's a complete example configuration file:
# Input
instrument: SWC
synthesis_file: ./run/input/synthesised_spectra.pkl
reference_line: Fe12_195.1190
# Global settings (apply to all combinations)
n_iter: 500
ncpu: -1
# Simulation parameters
# Any field listed as a list is swept over; all combinations are run.
simulation:
slit_width: [0.2 arcsec, 0.4 arcsec] # sweep over two slit widths
expos: [5 s, 10 s, 20 s, 40 s, 80 s] # sweep over five exposure times
psf: True
vis_sl: 0 photon / (s * cm^2)
enable_pinholes: False
# Detector parameters
detector:
ccd_temperature: -60 Celsius # used to compute dark current via the CCD model
# Telescope parameters
telescope:
microroughness_sigma: 0.3 nm # RMS surface roughness
# Aluminium filter parameters (SWC only)
filter:
al_thickness: 1485 angstrom
oxide_thickness: 95 angstrom
c_thickness: 40 angstrom
mesh_throughput: 0.8
Any parameter from the Detector_SWC, Telescope_EUVST, or AluminiumFilter
dataclasses in config.py can be added to the corresponding section. For
example, to sweep over detector quantum efficiency:
detector:
ccd_temperature: -60 Celsius
qe_euv: [0.5, 0.65, 0.76] # sweep over three QE values
For guidance on recommended values, see McKevitt et al. (2025) (in prep.).
If you synthesised data in dynamic mode, your configuration must specify:
- Exactly one slit width matching the synthesis slit width
- Exactly one exposure time matching the synthesis exposure time
Running Simulations
Run the instrument response function using:
eclipse --config ./run/input/config.yaml
Command-line options:
--config: Path to YAML configuration file (required)--debug: Enable debug mode with IPython breakpoints on errors (optional)
Output
Results are saved as pickle files in the run/result/ directory with the same base name as the configuration file. The output includes:
- Simulated detector signals (DN and photon counts)
- Fitted spectral line parameters (intensity, velocity, width)
- Statistical analysis of velocity precision vs. exposure time
- Ground truth comparisons
- Full config objects (
Detector,Telescope,Simulation) for each parameter combination - The git commit ID and software version used to produce the results
Use summary_table(results) after loading to see all parameter combinations and the run metadata.
Acknowledgements
The SOLAR-C/EUVST-SW instrument is an ESA-funded contribution to the JAXA-led SOLAR-C mission. The EUVST-LW (long wavelength) instrument is contributed by NASA. The ECLIPSE code is developed and maintained at Mullard Space Science Laboratory (UCL), and was made using Austrian Super Computing (ASC) infrastructure in collaboration with the University of Vienna.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file solarc_eclipse-0.6.2.tar.gz.
File metadata
- Download URL: solarc_eclipse-0.6.2.tar.gz
- Upload date:
- Size: 73.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79874f08b510362b4e7d88be65fc0e1b10a9db41036e13a58c47da72ae9c54c9
|
|
| MD5 |
4c2c9a0a2ac093edbf678e88ee296e09
|
|
| BLAKE2b-256 |
d9944fd7e6c2efc66dfcea4b885d2c1ddc347f7ddfccf2473dc6f3adc2a03360
|
File details
Details for the file solarc_eclipse-0.6.2-py3-none-any.whl.
File metadata
- Download URL: solarc_eclipse-0.6.2-py3-none-any.whl
- Upload date:
- Size: 73.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f97d5ca9ab40fe0d72a527fb50db4045e157f7aae2de9f643266b06e539c4f8
|
|
| MD5 |
5cdd93671e269e84673eaf7765e97daf
|
|
| BLAKE2b-256 |
7f08ffe3ef3c0f159eb030203754211a443d843852510930aa8108b19bda4392
|