Skip to main content

Auto-differentiable line-by-line spectral modeling of exoplanets/brown dwarfs using JAX.

Project description

ExoJAX

License Docs arxiv paper

Auto-differentiable line-by-line spectral modeling of exoplanets/brown dwarfs/M dwarfs using JAX. Read the docs 🐕. In a nutshell, ExoJAX enables you to do a HMC-NUTS fitting using the latest database.

ExoJAX is compatible at least with

Functions

Voigt Profile :heavy_check_mark:
from exojax.spec import voigt
nu=numpy.linspace(-10,10,100)
voigt(nu,1.0,2.0) #sigma_D=1.0, gamma_L=2.0
Cross Section using HITRAN/HITEMP/ExoMol :heavy_check_mark:
from exojax.spec import AutoXS
nus=numpy.linspace(1900.0,2300.0,200000,dtype=numpy.float64) #wavenumber (cm-1)
autoxs=AutoXS(nus,"ExoMol","CO") #using ExoMol CO (12C-16O). HITRAN and HITEMP are also supported.  
xsv=autoxs.xsection(1000.0,1.0) #cross section for 1000K, 1bar (cm2)
Do you just want to plot the line strength?
ls=autoxs.linest(1000.0) #line strength for T=1000K
plt.plot(autoxs.mdb.nu_lines,ls,".")

autoxs.mdb is the moldb.MdbExomol class for molecular database. Here is a entrance to a deeper level. exojax is more flexible in the way it calculates the molecular lines. 🐈 Go to the docs for the deeper level.

Emission Spectrum :heavy_check_mark:
from exojax.spec.rtransfer import nugrid
from exojax.spec import AutoRT
nus,wav,res=nugrid(1900.0,2300.0,200000,"cm-1")
Parr=numpy.logspace(-8,2,100) #100 layers from 10^-8 bar to 10^2 bar
Tarr = 500.*(Parr/Parr[-1])**0.02    
autort=AutoRT(nus,1.e5,2.33,Tarr,Parr) #g=1.e5 cm/s2, mmw=2.33
autort.addcia("H2-H2",0.74,0.74)       #CIA, mmr(H)=0.74
autort.addcia("H2-He",0.74,0.25)       #CIA, mmr(He)=0.25
autort.addmol("ExoMol","CO",0.01)      #CO line, mmr(CO)=0.01
F=autort.rtrun()
Are you an observer?
nusobs=numpy.linspace(1900.0,2300.0,10000,dtype=numpy.float64) #observation wavenumber bin (cm-1)
F=autort.spectrum(nusobs,100000.0,20.0,0.0) #R=100000, vsini=10km/s, RV=0km/s

If you want to customize the model, see here.

HMC-NUTS of Emission Spectra :heavy_check_mark:

To fit a spectrum model to real data, you need to know a little more about exojax. See here.

🥥 HMC-NUTS modeling of a brown dwarf, Luhman 16 A using exojax. See here for an example of the Bayes inference using the real spectrum.

Clouds :white_check_mark: Only for brave users.
HMC-NUTS of Transmission Spectra :x: Not supported yet.

Installation

pip install exojax

or

python setup.py install
Note on installation w/ GPU support

:books: You need to install CUDA, NumPyro, JAX w/ NVIDIA GPU support, and cuDNN.

  • NumPyro

ExoJAX supports NumPyro >=0.7.0. Please check the required JAX version by NumPyro. In May 2021, it seems the recent version of NumPyro requires jaxlib>=0.1.62 (see setup.py of NumPyro for instance).

  • JAX

Check you cuda version:

nvcc -V

Install such as

sudo dpkg -i cudnn-local-repo-ubuntu2004-8.3.1.22_1.0-1_amd64.deb
pip uninstall jax
pip install "jax[cuda11_cudnn82]" -f https://storage.googleapis.com/jax-releases/jax_releases.html

Please visit here for details.

Note that cuDNN is used for to compute the astronomical/instrumental response for the large number of wave number grid (exojax.spec.response). Otherwise, we won't use it.

References

paper

  • Paper I: Kawahara, Kawashima, Masuda, Crossfield, Pannier, van den Bekerom, ApJS 258, 31 (2022)

License

🐈 Copyright 2020-2022 ExoJAX contributors. exojax is publicly available under the MIT license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

exojax-1.1.3-py3.8.egg (1.1 MB view hashes)

Uploaded Source

exojax-1.1.3-py2.py3-none-any.whl (553.4 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page