ExoIris 0.19.2__tar.gz → 0.21.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {exoiris-0.19.2 → exoiris-0.21.0}/CHANGELOG.md +22 -2
- exoiris-0.21.0/ExoIris.egg-info/PKG-INFO +118 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/ExoIris.egg-info/SOURCES.txt +2 -0
- exoiris-0.21.0/PKG-INFO +118 -0
- exoiris-0.21.0/README.md +85 -0
- exoiris-0.21.0/doc/source/examples/e01/03_increasing_data_resolution.ipynb +589 -0
- exoiris-0.21.0/doc/source/examples/e01/example1.png +0 -0
- exoiris-0.21.0/doc/source/examples/e01/plot_1.ipynb +165 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/exoiris.py +125 -13
- exoiris-0.21.0/exoiris/loglikelihood.py +144 -0
- exoiris-0.21.0/exoiris/spotmodel.py +176 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/tsdata.py +3 -3
- {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/tslpf.py +59 -5
- {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/util.py +46 -3
- exoiris-0.19.2/ExoIris.egg-info/PKG-INFO +0 -81
- exoiris-0.19.2/PKG-INFO +0 -81
- exoiris-0.19.2/README.md +0 -48
- exoiris-0.19.2/doc/source/examples/e01/03_increasing_data_resolution.ipynb +0 -585
- exoiris-0.19.2/doc/source/examples/e01/example1.png +0 -0
- exoiris-0.19.2/doc/source/examples/e01/plot_1.ipynb +0 -424
- {exoiris-0.19.2 → exoiris-0.21.0}/.github/workflows/python-package.yml +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/.gitignore +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/.readthedocs.yaml +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/CODE_OF_CONDUCT.md +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/ExoIris.egg-info/dependency_links.txt +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/ExoIris.egg-info/requires.txt +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/ExoIris.egg-info/top_level.txt +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/LICENSE +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/Makefile +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/make.bat +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/requirements.txt +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/_static/css/custom.css +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/api/binning.rst +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/api/exoiris.rst +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/api/tsdata.rst +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/conf.py +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/01a_not_so_short_intro.ipynb +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/01b_short_intro.ipynb +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/02_increasing_knot_resolution.ipynb +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/04_gaussian_processes.ipynb +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/05a_ldtkldm.ipynb +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/A2_full_data_resolution.ipynb +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/appendix_1_data_preparation.ipynb +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/data/README.txt +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/data/nirHiss_order_1.h5 +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/data/nirHiss_order_2.h5 +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/figures.ipynb +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/friendly_introduction.ipynb +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/index.rst +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/k_knot_example.svg +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/setup_multiprocessing.py +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/index.rst +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/install.rst +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/__init__.py +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/binning.py +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/ephemeris.py +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/ldtkld.py +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/tsmodel.py +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/wlpf.py +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/pyproject.toml +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/requirements.txt +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/setup.cfg +0 -0
- {exoiris-0.19.2 → exoiris-0.21.0}/tests/test_binning.py +0 -0
|
@@ -5,7 +5,27 @@ All notable changes to ExoIris will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
-
## [
|
|
8
|
+
## [0.21.0] - 2025-11-24
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Added a `loglikelihood.LogLikelihood` class for reduced-rank Gaussian log-likelihood calculation.
|
|
12
|
+
- Added `ExoIris.create_loglikelihood_function` method to generate log-likelihood instances for atmospheric retrieval.
|
|
13
|
+
- Added `ExoIris.radius_ratio_spectrum` and `ExoIris.area_ratio_spectrum` methods to compute posterior transmission
|
|
14
|
+
spectrum distributions for given wavelengths.
|
|
15
|
+
- Added `exoiris.util.create_mock_model` utility function for generating mock transmission spectra.
|
|
16
|
+
|
|
17
|
+
## [0.20.0] - 2025-11-19
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
- Added the ability to model star spot crossings. The spots are modeled as generalized Gaussians parameterized by their
|
|
21
|
+
center time, amplitude in a given reference wavelength, full width at half maximum (FWHM), spot temperature in Kelvin,
|
|
22
|
+
and spot shape. The spot amplitude along the wavelength is modeled using the theoretical BT-Settl spectra, the stellar
|
|
23
|
+
effective temperature, the spot temperature, and the reference wavelength in which the spot amplitude is measured.
|
|
24
|
+
- Added the ability to model the contamination from unocculted spots and faculae (**the transit light source effect**,
|
|
25
|
+
or TLSE). This is modeled also using BT-Settl spectra following the formalism described by Rackham et al. (2018).
|
|
26
|
+
- Included two new radius ratio interpolation options: "nearest" and "linear".
|
|
27
|
+
|
|
28
|
+
## [0.19.2] - 2025-09-12
|
|
9
29
|
|
|
10
30
|
### Added
|
|
11
31
|
|
|
@@ -38,7 +58,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
38
58
|
|
|
39
59
|
### Added
|
|
40
60
|
|
|
41
|
-
- Added support for masked data
|
|
61
|
+
- Added support for masked data with GP noise model.
|
|
42
62
|
- Added an option to set the GP hyperparameters for an individual data set.
|
|
43
63
|
- Added `white_times`, `white_fluxes`, `white_models`, and `white_errors` properties to `ExoIris` to access white ligth curve data.
|
|
44
64
|
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ExoIris
|
|
3
|
+
Version: 0.21.0
|
|
4
|
+
Summary: Easy and robust exoplanet transmission spectroscopy.
|
|
5
|
+
Author-email: Hannu Parviainen <hannu@iac.es>
|
|
6
|
+
License: GPLv3
|
|
7
|
+
Project-URL: homepage, https://github.com/hpparvi/ExoIris
|
|
8
|
+
Keywords: astronomy,astrophysics,exoplanets
|
|
9
|
+
Classifier: Topic :: Scientific/Engineering
|
|
10
|
+
Classifier: Intended Audience :: Science/Research
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
13
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python
|
|
16
|
+
Requires-Python: >=3.10
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
License-File: LICENSE
|
|
19
|
+
Requires-Dist: pytransit>=2.6.15
|
|
20
|
+
Requires-Dist: ldtk>=1.8.5
|
|
21
|
+
Requires-Dist: numpy
|
|
22
|
+
Requires-Dist: scipy
|
|
23
|
+
Requires-Dist: numba
|
|
24
|
+
Requires-Dist: emcee
|
|
25
|
+
Requires-Dist: matplotlib
|
|
26
|
+
Requires-Dist: celerite2
|
|
27
|
+
Requires-Dist: pandas
|
|
28
|
+
Requires-Dist: xarray
|
|
29
|
+
Requires-Dist: seaborn
|
|
30
|
+
Requires-Dist: astropy
|
|
31
|
+
Requires-Dist: uncertainties
|
|
32
|
+
Dynamic: license-file
|
|
33
|
+
|
|
34
|
+
# ExoIris: Fast and Flexible Transmission Spectroscopy in Python
|
|
35
|
+
|
|
36
|
+
[](https://exoiris.readthedocs.io)
|
|
37
|
+

|
|
38
|
+
[](CODE_OF_CONDUCT.md)
|
|
39
|
+
[](http://www.gnu.org/licenses/gpl-3.0.html)
|
|
40
|
+
[](https://pypi.org/project/ExoIris/)
|
|
41
|
+
|
|
42
|
+
**ExoIris** is a Python package for modeling exoplanet transmission spectroscopy. ExoIris removes the typical
|
|
43
|
+
limitations of the two-step workflow by modeling the full two-dimensional spectroscopic transit time series *directly*.
|
|
44
|
+
It supports combining transmission spectroscopy datasets from multiple instruments observed in different epochs, yielding
|
|
45
|
+
self-consistent wavelength-independent and wavelength-dependent parameters, simplifying joint analyses, and delivering
|
|
46
|
+
results quickly.
|
|
47
|
+
|
|
48
|
+

|
|
49
|
+
|
|
50
|
+
## Why ExoIris?
|
|
51
|
+
|
|
52
|
+
Transmission spectroscopy is often done following a **two-step workflow**: (1) fit a white light curve to infer
|
|
53
|
+
wavelength-independent parameters; (2) fit each spectroscopic light curve independently, constrained by the white-light
|
|
54
|
+
solution. This split can introduce approximations and inconsistencies.
|
|
55
|
+
|
|
56
|
+
**ExoIris takes a different approach.** It models spectrophotometric time series *end-to-end*, enabling:
|
|
57
|
+
|
|
58
|
+
- Self-consistent inference of shared (wavelength-independent) and spectral (wavelength-dependent) parameters.
|
|
59
|
+
- **Joint** modeling of multiple datasets from different instruments and epochs.
|
|
60
|
+
- Accounting for **transit timing variations** and dataset-dependent offsets within a unified framework.
|
|
61
|
+
|
|
62
|
+
This design is a natural fit for **JWST-class** data, where correlated noise, multi-epoch observations, and
|
|
63
|
+
cross-instrument combinations are the norm.
|
|
64
|
+
|
|
65
|
+
## Documentation
|
|
66
|
+
|
|
67
|
+
Full documentation and tutorials: <https://exoiris.readthedocs.io>
|
|
68
|
+
|
|
69
|
+
## Installation
|
|
70
|
+
|
|
71
|
+
Install from PyPI:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
pip install exoiris
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Latest development version:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
git clone https://github.com/hpparvi/ExoIris.git
|
|
81
|
+
cd ExoIris
|
|
82
|
+
pip install -e .
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
ExoIris supports Python 3.9+. See the docs for dependency details and optional extras.
|
|
86
|
+
|
|
87
|
+
## Key Features
|
|
88
|
+
|
|
89
|
+
- **Direct modelling of spectroscopic transit time series**
|
|
90
|
+
Built on PyTransit’s `TSModel`, optimised for transmission spectroscopy; scales to hundreds–thousands of light curves simultaneously.
|
|
91
|
+
|
|
92
|
+
- **Flexible limb darkening**
|
|
93
|
+
Use standard analytical laws (quadratic, power-2, non-linear), numerical intensity profiles from stellar atmosphere models, or user-defined radially symmetric functions.
|
|
94
|
+
|
|
95
|
+
- **Robust noise treatment**
|
|
96
|
+
Choose white noise or **time-correlated** noise via a Gaussian Process likelihood, without changing the overall workflow.
|
|
97
|
+
|
|
98
|
+
- **Full control of spectral resolution**
|
|
99
|
+
The transmission spectrum is represented as a cubic spline with user-defined knots, allowing variable resolution across wavelength.
|
|
100
|
+
|
|
101
|
+
- **Reproducible, incremental workflows**
|
|
102
|
+
Save and reload models to refine a low-resolution run into a high-resolution analysis seamlessly.
|
|
103
|
+
|
|
104
|
+
- **Joint multi-dataset analyses**
|
|
105
|
+
Combine instruments and epochs in one fit, with support for transit timing variations and dataset-specific systematics and offsets.
|
|
106
|
+
|
|
107
|
+
## Performance
|
|
108
|
+
|
|
109
|
+
ExoIris is designed for speed and stability:
|
|
110
|
+
|
|
111
|
+
- A transmission spectroscopy analysis of a single JWST/NIRISS dataset at **R ≈ 100** typically runs in **3–5 minutes**
|
|
112
|
+
assuming white noise, or **5–15 minutes** with a GP noise model, on a standard desktop CPU.
|
|
113
|
+
- A high-resolution analysis of the JWST/NIRISS **WASP-39 b** dataset (~3800 spectroscopic light curves; see Feinstein
|
|
114
|
+
et al. 2023) can be optimised and sampled in about **1.5 hours** on an AMD Ryzen 7 5800X (8 cores, ~3-year-old desktop).
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
© 2025 Hannu Parviainen
|
exoiris-0.21.0/PKG-INFO
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ExoIris
|
|
3
|
+
Version: 0.21.0
|
|
4
|
+
Summary: Easy and robust exoplanet transmission spectroscopy.
|
|
5
|
+
Author-email: Hannu Parviainen <hannu@iac.es>
|
|
6
|
+
License: GPLv3
|
|
7
|
+
Project-URL: homepage, https://github.com/hpparvi/ExoIris
|
|
8
|
+
Keywords: astronomy,astrophysics,exoplanets
|
|
9
|
+
Classifier: Topic :: Scientific/Engineering
|
|
10
|
+
Classifier: Intended Audience :: Science/Research
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
13
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python
|
|
16
|
+
Requires-Python: >=3.10
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
License-File: LICENSE
|
|
19
|
+
Requires-Dist: pytransit>=2.6.15
|
|
20
|
+
Requires-Dist: ldtk>=1.8.5
|
|
21
|
+
Requires-Dist: numpy
|
|
22
|
+
Requires-Dist: scipy
|
|
23
|
+
Requires-Dist: numba
|
|
24
|
+
Requires-Dist: emcee
|
|
25
|
+
Requires-Dist: matplotlib
|
|
26
|
+
Requires-Dist: celerite2
|
|
27
|
+
Requires-Dist: pandas
|
|
28
|
+
Requires-Dist: xarray
|
|
29
|
+
Requires-Dist: seaborn
|
|
30
|
+
Requires-Dist: astropy
|
|
31
|
+
Requires-Dist: uncertainties
|
|
32
|
+
Dynamic: license-file
|
|
33
|
+
|
|
34
|
+
# ExoIris: Fast and Flexible Transmission Spectroscopy in Python
|
|
35
|
+
|
|
36
|
+
[](https://exoiris.readthedocs.io)
|
|
37
|
+

|
|
38
|
+
[](CODE_OF_CONDUCT.md)
|
|
39
|
+
[](http://www.gnu.org/licenses/gpl-3.0.html)
|
|
40
|
+
[](https://pypi.org/project/ExoIris/)
|
|
41
|
+
|
|
42
|
+
**ExoIris** is a Python package for modeling exoplanet transmission spectroscopy. ExoIris removes the typical
|
|
43
|
+
limitations of the two-step workflow by modeling the full two-dimensional spectroscopic transit time series *directly*.
|
|
44
|
+
It supports combining transmission spectroscopy datasets from multiple instruments observed in different epochs, yielding
|
|
45
|
+
self-consistent wavelength-independent and wavelength-dependent parameters, simplifying joint analyses, and delivering
|
|
46
|
+
results quickly.
|
|
47
|
+
|
|
48
|
+

|
|
49
|
+
|
|
50
|
+
## Why ExoIris?
|
|
51
|
+
|
|
52
|
+
Transmission spectroscopy is often done following a **two-step workflow**: (1) fit a white light curve to infer
|
|
53
|
+
wavelength-independent parameters; (2) fit each spectroscopic light curve independently, constrained by the white-light
|
|
54
|
+
solution. This split can introduce approximations and inconsistencies.
|
|
55
|
+
|
|
56
|
+
**ExoIris takes a different approach.** It models spectrophotometric time series *end-to-end*, enabling:
|
|
57
|
+
|
|
58
|
+
- Self-consistent inference of shared (wavelength-independent) and spectral (wavelength-dependent) parameters.
|
|
59
|
+
- **Joint** modeling of multiple datasets from different instruments and epochs.
|
|
60
|
+
- Accounting for **transit timing variations** and dataset-dependent offsets within a unified framework.
|
|
61
|
+
|
|
62
|
+
This design is a natural fit for **JWST-class** data, where correlated noise, multi-epoch observations, and
|
|
63
|
+
cross-instrument combinations are the norm.
|
|
64
|
+
|
|
65
|
+
## Documentation
|
|
66
|
+
|
|
67
|
+
Full documentation and tutorials: <https://exoiris.readthedocs.io>
|
|
68
|
+
|
|
69
|
+
## Installation
|
|
70
|
+
|
|
71
|
+
Install from PyPI:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
pip install exoiris
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Latest development version:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
git clone https://github.com/hpparvi/ExoIris.git
|
|
81
|
+
cd ExoIris
|
|
82
|
+
pip install -e .
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
ExoIris supports Python 3.9+. See the docs for dependency details and optional extras.
|
|
86
|
+
|
|
87
|
+
## Key Features
|
|
88
|
+
|
|
89
|
+
- **Direct modelling of spectroscopic transit time series**
|
|
90
|
+
Built on PyTransit’s `TSModel`, optimised for transmission spectroscopy; scales to hundreds–thousands of light curves simultaneously.
|
|
91
|
+
|
|
92
|
+
- **Flexible limb darkening**
|
|
93
|
+
Use standard analytical laws (quadratic, power-2, non-linear), numerical intensity profiles from stellar atmosphere models, or user-defined radially symmetric functions.
|
|
94
|
+
|
|
95
|
+
- **Robust noise treatment**
|
|
96
|
+
Choose white noise or **time-correlated** noise via a Gaussian Process likelihood, without changing the overall workflow.
|
|
97
|
+
|
|
98
|
+
- **Full control of spectral resolution**
|
|
99
|
+
The transmission spectrum is represented as a cubic spline with user-defined knots, allowing variable resolution across wavelength.
|
|
100
|
+
|
|
101
|
+
- **Reproducible, incremental workflows**
|
|
102
|
+
Save and reload models to refine a low-resolution run into a high-resolution analysis seamlessly.
|
|
103
|
+
|
|
104
|
+
- **Joint multi-dataset analyses**
|
|
105
|
+
Combine instruments and epochs in one fit, with support for transit timing variations and dataset-specific systematics and offsets.
|
|
106
|
+
|
|
107
|
+
## Performance
|
|
108
|
+
|
|
109
|
+
ExoIris is designed for speed and stability:
|
|
110
|
+
|
|
111
|
+
- A transmission spectroscopy analysis of a single JWST/NIRISS dataset at **R ≈ 100** typically runs in **3–5 minutes**
|
|
112
|
+
assuming white noise, or **5–15 minutes** with a GP noise model, on a standard desktop CPU.
|
|
113
|
+
- A high-resolution analysis of the JWST/NIRISS **WASP-39 b** dataset (~3800 spectroscopic light curves; see Feinstein
|
|
114
|
+
et al. 2023) can be optimised and sampled in about **1.5 hours** on an AMD Ryzen 7 5800X (8 cores, ~3-year-old desktop).
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
© 2025 Hannu Parviainen
|
exoiris-0.21.0/README.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# ExoIris: Fast and Flexible Transmission Spectroscopy in Python
|
|
2
|
+
|
|
3
|
+
[](https://exoiris.readthedocs.io)
|
|
4
|
+

|
|
5
|
+
[](CODE_OF_CONDUCT.md)
|
|
6
|
+
[](http://www.gnu.org/licenses/gpl-3.0.html)
|
|
7
|
+
[](https://pypi.org/project/ExoIris/)
|
|
8
|
+
|
|
9
|
+
**ExoIris** is a Python package for modeling exoplanet transmission spectroscopy. ExoIris removes the typical
|
|
10
|
+
limitations of the two-step workflow by modeling the full two-dimensional spectroscopic transit time series *directly*.
|
|
11
|
+
It supports combining transmission spectroscopy datasets from multiple instruments observed in different epochs, yielding
|
|
12
|
+
self-consistent wavelength-independent and wavelength-dependent parameters, simplifying joint analyses, and delivering
|
|
13
|
+
results quickly.
|
|
14
|
+
|
|
15
|
+

|
|
16
|
+
|
|
17
|
+
## Why ExoIris?
|
|
18
|
+
|
|
19
|
+
Transmission spectroscopy is often done following a **two-step workflow**: (1) fit a white light curve to infer
|
|
20
|
+
wavelength-independent parameters; (2) fit each spectroscopic light curve independently, constrained by the white-light
|
|
21
|
+
solution. This split can introduce approximations and inconsistencies.
|
|
22
|
+
|
|
23
|
+
**ExoIris takes a different approach.** It models spectrophotometric time series *end-to-end*, enabling:
|
|
24
|
+
|
|
25
|
+
- Self-consistent inference of shared (wavelength-independent) and spectral (wavelength-dependent) parameters.
|
|
26
|
+
- **Joint** modeling of multiple datasets from different instruments and epochs.
|
|
27
|
+
- Accounting for **transit timing variations** and dataset-dependent offsets within a unified framework.
|
|
28
|
+
|
|
29
|
+
This design is a natural fit for **JWST-class** data, where correlated noise, multi-epoch observations, and
|
|
30
|
+
cross-instrument combinations are the norm.
|
|
31
|
+
|
|
32
|
+
## Documentation
|
|
33
|
+
|
|
34
|
+
Full documentation and tutorials: <https://exoiris.readthedocs.io>
|
|
35
|
+
|
|
36
|
+
## Installation
|
|
37
|
+
|
|
38
|
+
Install from PyPI:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
pip install exoiris
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Latest development version:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
git clone https://github.com/hpparvi/ExoIris.git
|
|
48
|
+
cd ExoIris
|
|
49
|
+
pip install -e .
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
ExoIris supports Python 3.9+. See the docs for dependency details and optional extras.
|
|
53
|
+
|
|
54
|
+
## Key Features
|
|
55
|
+
|
|
56
|
+
- **Direct modelling of spectroscopic transit time series**
|
|
57
|
+
Built on PyTransit’s `TSModel`, optimised for transmission spectroscopy; scales to hundreds–thousands of light curves simultaneously.
|
|
58
|
+
|
|
59
|
+
- **Flexible limb darkening**
|
|
60
|
+
Use standard analytical laws (quadratic, power-2, non-linear), numerical intensity profiles from stellar atmosphere models, or user-defined radially symmetric functions.
|
|
61
|
+
|
|
62
|
+
- **Robust noise treatment**
|
|
63
|
+
Choose white noise or **time-correlated** noise via a Gaussian Process likelihood, without changing the overall workflow.
|
|
64
|
+
|
|
65
|
+
- **Full control of spectral resolution**
|
|
66
|
+
The transmission spectrum is represented as a cubic spline with user-defined knots, allowing variable resolution across wavelength.
|
|
67
|
+
|
|
68
|
+
- **Reproducible, incremental workflows**
|
|
69
|
+
Save and reload models to refine a low-resolution run into a high-resolution analysis seamlessly.
|
|
70
|
+
|
|
71
|
+
- **Joint multi-dataset analyses**
|
|
72
|
+
Combine instruments and epochs in one fit, with support for transit timing variations and dataset-specific systematics and offsets.
|
|
73
|
+
|
|
74
|
+
## Performance
|
|
75
|
+
|
|
76
|
+
ExoIris is designed for speed and stability:
|
|
77
|
+
|
|
78
|
+
- A transmission spectroscopy analysis of a single JWST/NIRISS dataset at **R ≈ 100** typically runs in **3–5 minutes**
|
|
79
|
+
assuming white noise, or **5–15 minutes** with a GP noise model, on a standard desktop CPU.
|
|
80
|
+
- A high-resolution analysis of the JWST/NIRISS **WASP-39 b** dataset (~3800 spectroscopic light curves; see Feinstein
|
|
81
|
+
et al. 2023) can be optimised and sampled in about **1.5 hours** on an AMD Ryzen 7 5800X (8 cores, ~3-year-old desktop).
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
© 2025 Hannu Parviainen
|