Auto-differentiable line-by-line spectral modeling of exoplanets/brown dwarfs using JAX.
Project description
exojax
Auto-differentiable line-by-line spectral modeling of exoplanets/brown dwarfs using JAX. Read the docs 🐕.
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,40000,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,1.0) #line strength for 1000K, 1bar (cm)
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,40000,"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.
HMC-NUTS of Transmission Spectra :x:
Not supported yet.Cloud modeling :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.5.0, which enables the forward differentiation of HMC-NUTS. 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
pip install --upgrade jax jaxlib==0.1.62+cuda112 -f https://storage.googleapis.com/jax-releases/jax_releases.html
In this case, jaxlib version is 0.1.62 and cuda version is 11.2. You can check which cuda version is avaiable at here
Visit here for the details.
- cuDNN
For instance, get .deb from NVIDIA and install such as
sudo dpkg -i libcudnn8_8.2.0.53-1+cuda11.3_amd64.deb
cuDNN is used for to compute the astronomical/instrumental response for the large number of wave number grid (exojax.spec.response). Otherwise, we do not use it.
References
- Kawahara, Kawashima, Masuda, and Crossfield (2021) under review: arXiv:2105.14782
License
🐈 Copyright 2020-2021 Hajime Kawahara. exojax is publicly available under the MIT license. Under development since Dec. 2020.
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 Distributions
Built Distributions
Hashes for exojax-0.5.5-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2de3d6056c9fc687e93c7702246fecb7e6f5e8838cb79b6ccdf969f22d3d001d |
|
MD5 | f53932c836e3eb97ef226f77911f29e0 |
|
BLAKE2b-256 | 3df951ba65fcc62b03d718f713ad803fdca00ef44dbee8a2980472005b7e4290 |