Skip to main content

EXOTIC (EXOplanet Transit Interpretation Code)

PyPI Caltech NASA ADS Slack Colab Hugging Face

Windows Mac Linux

A Python 3 package for reducing and analyzing photometric data of exoplanetary transits. As an exoplanet passes in front of its host star, the observed brightness of the star drops by a small amount. This drop in brightness is known as a transit. Our software aids in creating lightcurves from images, enabling extraction of planetary parameters (e.g. Rp/Rs, Inclination, Mid-transit, etc.) through fitting astrophysical models to the data.

Light Curve Graph displaying brightness versus time. (NASA Ames) (NASA Ames)

Installation + Setup

To install EXOTIC, you need to have Python 3.10 or lower installed on your computer. You can then install EXOTIC by following these steps:

  1. Install Anaconda or Miniconda (a minimal version of Anaconda) on your computer.

  2. Create a new virtual environment and activate it:

    conda create -n exotic python=3.10
    conda activate exotic
    
  3. Install EXOTIC and its dependencies:

    pip install exotic
    
  4. (Optional) Run EXOTIC's graphical user interface (GUI):

    exotic-gui
    

After installing EXOTIC, you can verify the installation by running the following command in your terminal or command prompt:

python -c "import exotic"

If EXOTIC is installed correctly, you should not see any error messages. You can now start using EXOTIC by following the examples provided in the repository or by using our sample dataset. If you're a new user, we recommend starting with the beginner tutorial in Google Colab and then following our installation instructions for your operating system.

Google Colab Cloud

Google Colab is a free cloud service that allows you to run Python code in a Jupyter notebook environment without having to install any software on your computer. We have a series of tutorials that you can run in Google Colab to learn how to use EXOTIC. You can access these tutorials by clicking on the following links:

If those links are broken check our website for the latest.

New User Tutorials

The user community behind Exoplanet Watch has created extensive documentation to help you get started with EXOTIC. We recommend you start with the following resources:

Sample Data

We recommend you test exotic with a sample dataset consisting of 142 fits files taken by a 6” telescope of the exoplanet HAT-P-32 b (V-mag = 11.44) observed on December 20, 2017. The telescope used to collect this dataset is part of the MicroObservatory Robotic Telescope Network operated by the Harvard-Smithsonian Center for Astrophysics.

A lightcurve from the sample dataset is shown below:

Lightcurve graph showing relative flux versus phase with error bars and interpolated curve.

Exotic will output the final parameters in a text file and a plot of the light curve. The output will look similar to the following:

*********************************************************
FINAL PLANETARY PARAMETERS

          Mid-Transit Time [BJD_TDB]: 2458107.71406 +/- 0.00097
  Radius Ratio (Planet/Star) [Rp/Rs]: 0.1541 +/- 0.0033
           Transit depth [(Rp/Rs)^2]: 2.37 +/- 0.1 [%]
 Semi Major Axis/ Star Radius [a/Rs]: 5.213 +/- 0.061
               Airmass coefficient 1: 1.1626 +/- 0.0037
               Airmass coefficient 2: -0.1184 +/- 0.0024
                    Residual scatter: 0.55 %
                 Best Comparison Star: None
                    Optimal Aperture: 4.09
                     Optimal Annulus: 10.74
              Transit Duration [day]: 0.13 +/- 0.0017
*********************************************************

Initializaton File

Get EXOTIC up and running faster with a json file. Please see the included file (inits.json) meant for the sample data. The initialization file has the following fields:

{
    "user_info": {
            "Directory with FITS files": "sample-data/HatP32Dec202017",
            "Directory to Save Plots": "sample-data/",
            "Directory of Flats": null,
            "Directory of Darks": null,
            "Directory of Biases": null,

            "AAVSO Observer Code (blank if none)": "RTZ",
            "Secondary Observer Codes (blank if none)": "",

            "Observation date": "17-December-2017",
            "Obs. Latitude": "+32.41638889",
            "Obs. Longitude": "-110.73444444",
            "Obs. Elevation (meters)": 2616,
            "Camera Type (CCD or DSLR)": "CCD",
            "Pixel Binning": "1x1",
            "Filter Name (aavso.org/filters)": "V",
            "Observing Notes": "Weather, seeing was nice.",

            "Plate Solution? (y/n)": "y",

            "Target Star X & Y Pixel": [424, 286],
            "Comparison Star(s) X & Y Pixel": [[465, 183], [512, 263], [], [], [], [], [], [], [], []]
    },
    "planetary_parameters": {
            "Target Star RA": "02:04:10",
            "Target Star Dec": "+46:41:23",
            "Planet Name": "HAT-P-32 b",
            "Host Star Name": "HAT-P-32",
            "Orbital Period (days)": 2.1500082,
            "Orbital Period Uncertainty": 1.3e-07,
            "Published Mid-Transit Time (BJD-UTC)": 2455867.402743,
            "Mid-Transit Time Uncertainty": 4.9e-05,
            "Ratio of Planet to Stellar Radius (Rp/Rs)": 0.14886235252742716,
            "Ratio of Planet to Stellar Radius (Rp/Rs) Uncertainty": 0.0005539487393037134,
            "Ratio of Distance to Stellar Radius (a/Rs)": 5.344,
            "Ratio of Distance to Stellar Radius (a/Rs) Uncertainty": 0.039496835316262996,
            "Orbital Inclination (deg)": 88.98,
            "Orbital Inclination (deg) Uncertainty": 0.7602631123499285,
            "Orbital Eccentricity (0 if null)": 0.159,
            "Star Effective Temperature (K)": 6001.0,
            "Star Effective Temperature (+) Uncertainty": 88.0,
            "Star Effective Temperature (-) Uncertainty": -88.0,
            "Star Metallicity ([FE/H])": -0.16,
            "Star Metallicity (+) Uncertainty": 0.08,
            "Star Metallicity (-) Uncertainty": -0.08,
            "Star Surface Gravity (log(g))": 4.22,
            "Star Surface Gravity (+) Uncertainty": 0.04,
            "Star Surface Gravity (-) Uncertainty": -0.04
    },
    "optional_info": {
            "Pre-reduced File:": "/sample-data/NormalizedFlux_HAT-P-32 b_December 17, 2017.txt",
            "Pre-reduced File Time Format (BJD_TDB, JD_UTC, MJD_UTC)": "BJD_TDB",
            "Pre-reduced File Units of Flux (flux, magnitude, millimagnitude)": "flux",

            "Filter Minimum Wavelength (nm)": null,
            "Filter Maximum Wavelength (nm)": null,

            "Pixel Scale (Ex: 5.21 arcsecs/pixel)": null,

            "Exposure Time (s)": 60.0
    }
}

Features and Pipeline Architecture

  • Automatic Plate Solution from http://nova.astrometry.net

  • Resolve targets with NASA Exoplanet Archive + retrieve light curve priors

  • Hot Pixel Masking

  • Image to image alignment for centroid tracking

  • Optimal Aperture Photometry

  • PSF Photometry

HAT-P-32 b Centroid Position Graph, X-Pixel versus Time in Julian Date.

  • Stellar masking in background estimate

  • Multiple comparison star + aperture size optimization

  • Non-linear 4 parameter limb darkening with LDTK. For a list of compatible filters please see: filters.py

  • Light curve parameter optimization with Nested Sampling

Chart showing how Nested Sampling iterations reveal light curve optimization results.

Contributing to EXOTIC

EXOTIC is an open source project that welcomes contributions. Please fork the repository and submit a pull request to the develop branch and join our slack channel to get ahold of our team. We are always looking for new contributors to help us improve the software and documentation.

Citation

If you use any of these algorithms in your work, please cite our 2020 paper: Zellem, Pearson, Blaser, et al. 2020

Please also include the following statement in your paper's Acknowledgements section:

This publication makes use of data products from Exoplanet Watch, a citizen science project managed by NASA’s Jet Propulsion Laboratory on behalf of NASA’s Universe of Learning. This work is supported by NASA under award number NNX16AC65A to the Space Telescope Science Institute.

Exoplanet Watch

Contribute to Exoplanet Watch, a citizen science project that improves the properties of exoplanets and their orbits using observations processed with EXOTIC. Register with AAVSO and input your Observer Code to help track your contributions allowing for proper credit on future publications using those measurements. Ask about our Exoplanet Watch Slack Channel!

Acknowledgements

Exoplanet Watch is a project by NASA's Universe of Learning. NASA's Universe of Learning materials are based upon work supported by NASA under award number NNX16AC65A to the Space Telescope Science Institute, working in partnership with Caltech/IPAC, Center for Astrophysics | Harvard & Smithsonian, and the Jet Propulsion Laboratory.

Metadata

Release files for exotic 4.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for exotic 4.3.1
File Size Uploaded
exotic-4.3.1.zip 27.4 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for exotic 4.3.1
File Interpreter ABI Platform
exotic-4.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 27.6 MB

Release files / exotic-4.3.1.zip

Download URL exotic-4.3.1.zip
Size 27.4 MB
Tags Source
SHA-256 checksum
How to use checksums
13b6868ca88d0dcdfaaa220079bc6dcf5901c0dea5871dcf2cafb308f9afe8a2
BLAKE2b-256 checksum
How to use checksums
18d15f7cc5425058ca012b04da1ef6ad845a602b556de1d4f34861ae2b8f2e0f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 31, 2025.

Transparency log

Release files / exotic-4.3.1-py3-none-any.whl

Download URL exotic-4.3.1-py3-none-any.whl
Size 178.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b938ab4ffea84602b83fe01f8754883f791480dda7156bbcea2f0cafe3ef51b2
BLAKE2b-256 checksum
How to use checksums
57177a3a4415bbe4315904033652123b84b285ca2d2846e7382ea272f1cb18a6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 31, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

4.3.1 This release

2 release files

4.2.3

2 release files

4.2.2

2 release files

4.2.1

2 release files

4.2.0

2 release files

4.1.0

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.3.0

2 release files

3.2.4

2 release files

3.2.3

2 release files

3.2.2

2 release files

3.2.0

2 release files

3.1.0

2 release files

3.0.2

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.10.0

2 release files

2.9.0

2 release files

2.8.0

2 release files

2.7.0

2 release files

2.6.0

2 release files

2.5.1

2 release files

2.5.0

2 release files

2.4.0

2 release files

2.3.0

2 release files

2.2.0

2 release files

2.1.1

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.11.1

2 release files

1.11.0

2 release files

1.10.2

2 release files

1.10.1

2 release files

1.10.0

2 release files

1.9.1

2 release files

1.9.0

2 release files

1.8.4

2 release files

1.8.3

2 release files

1.8.2

2 release files

1.8.1

2 release files

1.8.0

2 release files

1.7.0

2 release files

1.6.2

2 release files

1.6.1

2 release files

1.6.0

2 release files

1.5.0

2 release files

1.4.0

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.47.2

2 release files

0.47.1

2 release files

0.47.0

2 release files

0.46.5

2 release files

0.46.4

2 release files

0.46.3

2 release files

0.46.2

2 release files

0.46.1

2 release files

0.43.0

2 release files

0.42.2

2 release files

0.42.1

2 release files

0.41.1

2 release files

0.41.0

2 release files

0.40.2

2 release files

0.40.0

2 release files

0.38.1

2 release files

0.38.0

2 release files

0.36.0

2 release files

0.35.1

2 release files

0.35.0

2 release files

0.34.0

2 release files

0.32.0

2 release files

0.31.0

2 release files

0.29.0

2 release files

0.26.0

2 release files

0.25.0

2 release files

0.23.2

2 release files

0.23.1

2 release files

0.23.0

2 release files

0.22.0

2 release files

0.20.0

2 release files

0.19.0

2 release files

0.18.2

2 release files

0.17.7

2 release files

0.17.6

2 release files

0.17.5

2 release files

0.17.4

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page