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.
Files changed (63) hide show
  1. {exoiris-0.19.2 → exoiris-0.21.0}/CHANGELOG.md +22 -2
  2. exoiris-0.21.0/ExoIris.egg-info/PKG-INFO +118 -0
  3. {exoiris-0.19.2 → exoiris-0.21.0}/ExoIris.egg-info/SOURCES.txt +2 -0
  4. exoiris-0.21.0/PKG-INFO +118 -0
  5. exoiris-0.21.0/README.md +85 -0
  6. exoiris-0.21.0/doc/source/examples/e01/03_increasing_data_resolution.ipynb +589 -0
  7. exoiris-0.21.0/doc/source/examples/e01/example1.png +0 -0
  8. exoiris-0.21.0/doc/source/examples/e01/plot_1.ipynb +165 -0
  9. {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/exoiris.py +125 -13
  10. exoiris-0.21.0/exoiris/loglikelihood.py +144 -0
  11. exoiris-0.21.0/exoiris/spotmodel.py +176 -0
  12. {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/tsdata.py +3 -3
  13. {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/tslpf.py +59 -5
  14. {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/util.py +46 -3
  15. exoiris-0.19.2/ExoIris.egg-info/PKG-INFO +0 -81
  16. exoiris-0.19.2/PKG-INFO +0 -81
  17. exoiris-0.19.2/README.md +0 -48
  18. exoiris-0.19.2/doc/source/examples/e01/03_increasing_data_resolution.ipynb +0 -585
  19. exoiris-0.19.2/doc/source/examples/e01/example1.png +0 -0
  20. exoiris-0.19.2/doc/source/examples/e01/plot_1.ipynb +0 -424
  21. {exoiris-0.19.2 → exoiris-0.21.0}/.github/workflows/python-package.yml +0 -0
  22. {exoiris-0.19.2 → exoiris-0.21.0}/.gitignore +0 -0
  23. {exoiris-0.19.2 → exoiris-0.21.0}/.readthedocs.yaml +0 -0
  24. {exoiris-0.19.2 → exoiris-0.21.0}/CODE_OF_CONDUCT.md +0 -0
  25. {exoiris-0.19.2 → exoiris-0.21.0}/ExoIris.egg-info/dependency_links.txt +0 -0
  26. {exoiris-0.19.2 → exoiris-0.21.0}/ExoIris.egg-info/requires.txt +0 -0
  27. {exoiris-0.19.2 → exoiris-0.21.0}/ExoIris.egg-info/top_level.txt +0 -0
  28. {exoiris-0.19.2 → exoiris-0.21.0}/LICENSE +0 -0
  29. {exoiris-0.19.2 → exoiris-0.21.0}/doc/Makefile +0 -0
  30. {exoiris-0.19.2 → exoiris-0.21.0}/doc/make.bat +0 -0
  31. {exoiris-0.19.2 → exoiris-0.21.0}/doc/requirements.txt +0 -0
  32. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/_static/css/custom.css +0 -0
  33. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/api/binning.rst +0 -0
  34. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/api/exoiris.rst +0 -0
  35. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/api/tsdata.rst +0 -0
  36. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/conf.py +0 -0
  37. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/01a_not_so_short_intro.ipynb +0 -0
  38. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/01b_short_intro.ipynb +0 -0
  39. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/02_increasing_knot_resolution.ipynb +0 -0
  40. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/04_gaussian_processes.ipynb +0 -0
  41. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/05a_ldtkldm.ipynb +0 -0
  42. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/A2_full_data_resolution.ipynb +0 -0
  43. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/appendix_1_data_preparation.ipynb +0 -0
  44. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/data/README.txt +0 -0
  45. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/data/nirHiss_order_1.h5 +0 -0
  46. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/e01/data/nirHiss_order_2.h5 +0 -0
  47. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/figures.ipynb +0 -0
  48. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/friendly_introduction.ipynb +0 -0
  49. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/index.rst +0 -0
  50. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/k_knot_example.svg +0 -0
  51. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/examples/setup_multiprocessing.py +0 -0
  52. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/index.rst +0 -0
  53. {exoiris-0.19.2 → exoiris-0.21.0}/doc/source/install.rst +0 -0
  54. {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/__init__.py +0 -0
  55. {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/binning.py +0 -0
  56. {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/ephemeris.py +0 -0
  57. {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/ldtkld.py +0 -0
  58. {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/tsmodel.py +0 -0
  59. {exoiris-0.19.2 → exoiris-0.21.0}/exoiris/wlpf.py +0 -0
  60. {exoiris-0.19.2 → exoiris-0.21.0}/pyproject.toml +0 -0
  61. {exoiris-0.19.2 → exoiris-0.21.0}/requirements.txt +0 -0
  62. {exoiris-0.19.2 → exoiris-0.21.0}/setup.cfg +0 -0
  63. {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
- ## [Unreleased]
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 support with GP noise model.
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
+ [![Docs](https://readthedocs.org/projects/exoiris/badge/)](https://exoiris.readthedocs.io)
37
+ ![Python package](https://github.com/hpparvi/ExoIris/actions/workflows/python-package.yml/badge.svg)
38
+ [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.0-4baaaa.svg)](CODE_OF_CONDUCT.md)
39
+ [![Licence](http://img.shields.io/badge/license-GPLv3-blue.svg?style=flat)](http://www.gnu.org/licenses/gpl-3.0.html)
40
+ [![PyPI version](https://badge.fury.io/py/exoiris.svg)](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
+ ![](doc/source/examples/e01/example1.png)
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
@@ -45,6 +45,8 @@ exoiris/binning.py
45
45
  exoiris/ephemeris.py
46
46
  exoiris/exoiris.py
47
47
  exoiris/ldtkld.py
48
+ exoiris/loglikelihood.py
49
+ exoiris/spotmodel.py
48
50
  exoiris/tsdata.py
49
51
  exoiris/tslpf.py
50
52
  exoiris/tsmodel.py
@@ -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
+ [![Docs](https://readthedocs.org/projects/exoiris/badge/)](https://exoiris.readthedocs.io)
37
+ ![Python package](https://github.com/hpparvi/ExoIris/actions/workflows/python-package.yml/badge.svg)
38
+ [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.0-4baaaa.svg)](CODE_OF_CONDUCT.md)
39
+ [![Licence](http://img.shields.io/badge/license-GPLv3-blue.svg?style=flat)](http://www.gnu.org/licenses/gpl-3.0.html)
40
+ [![PyPI version](https://badge.fury.io/py/exoiris.svg)](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
+ ![](doc/source/examples/e01/example1.png)
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
@@ -0,0 +1,85 @@
1
+ # ExoIris: Fast and Flexible Transmission Spectroscopy in Python
2
+
3
+ [![Docs](https://readthedocs.org/projects/exoiris/badge/)](https://exoiris.readthedocs.io)
4
+ ![Python package](https://github.com/hpparvi/ExoIris/actions/workflows/python-package.yml/badge.svg)
5
+ [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.0-4baaaa.svg)](CODE_OF_CONDUCT.md)
6
+ [![Licence](http://img.shields.io/badge/license-GPLv3-blue.svg?style=flat)](http://www.gnu.org/licenses/gpl-3.0.html)
7
+ [![PyPI version](https://badge.fury.io/py/exoiris.svg)](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
+ ![](doc/source/examples/e01/example1.png)
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