Skip to main content

Python package for RADEX grid calculation

Project description

ndRADEX

Travis License DOI

:zap: Python package for RADEX grid calculation

TL;DR

ndRADEX is a Python package which can run RADEX, non-LTE molecular radiative transfer code, with parameters of multiple values (i.e., RADEX with grid parameters). The output will be multi-dimensional arrays, which may be useful for parameter search of physical conditions in comparison with observed values.

Features

  • Grid calculation: ndRADEX has a simple run() function, where all parameters of RADEX can be griddable (i.e., they can be list-like with length of more than one).
  • Builtin RADEX: ndRADEX provides builtin RADEX binaries in the package, which are automatically downloaded and built during the package installation. You don't need any additional setups.
  • Multiprocessing: ndRADEX supports multiprocessing RADEX run by default. At least twice speedup is expected compared to single processing.
  • Handy I/O: The output of ndRADEX is a xarray's Dataset, a standard multi-dimensional data structure as well as pandas. You can handle it in the same manner as NumPy and pandas (i.e., element-wise operation, save/load data, plotting, etc).

Requirements

  • Python 3.6 or 3.7
  • gfortran (necessary to build RADEX)

Installation

You can install ndRADEX with pip:

$ pip install ndradex

Please make sure that all requirements are met before the installation.

Usages

Within Python, import the package like:

>>> import ndradex

Single RADEX run

The main funtion of ndRADEX is ndradex.run(). For example, to get RADEX results of CO(1-0) with kinetic temperature of 100 K, CO column density of 1e15 cm^-2, and H2 density of 1e3 cm^-3:

>>> ds = ndradex.run('co.dat', '1-0', 100, 1e15, 1e3)

where 'co.dat' is a name of LAMDA datafile and '1-0' is a name of transition. The available values are listed in List of available LAMDA datafiles and transitions. Note that you don't need to any download datafiles: ndRADEX automatically manage this.

In this case, other parameters like line width, background temperature are default values defined in the function. The geometry of escape probability is uniform ('uni') by default. You can change these values with custom config (see customizations below).

The output is a xarray's Dataset with no dimension:

>>> print(ds)
<xarray.Dataset>
Dimensions:      ()
Coordinates:
    QN_ul        <U3 '1-0'
    T_kin        int64 100
    N_mol        float64 1e+15
    n_H2         float64 1e+03
    T_bg         float64 2.73
    dv           float64 1.0
    geom         <U3 'uni'
    description  <U9 'LAMDA(CO)'
Data variables:
    E_u          float64 5.5
    freq         float64 115.3
    wavel        float64 2.601e+03
    T_ex         float64 132.5
    tau          float64 0.009966
    T_r          float64 1.278
    pop_u        float64 0.4934
    pop_l        float64 0.1715
    I            float64 1.36
    F            float64 2.684e-08

You can access each result value like:

>>> flux = ds['F'].values

Grid RADEX run

As a natural extension, you can run grid RADEX calculation like:

>>> ds = ndradex.run('co.dat', ['1-0', '2-1'], T_kin=[100, 200, 300],
                     N_mol=1e15, n_H2=[1e3, 1e4, 1e5, 1e6, 1e7])

There are 13 parameters which can be griddable: QN_ul (transition name), T_kin (kinetic temeperature), N_mol (column density), n_H2 (H2 density), n_pH2 (para-H2 density), n_oH2 (ortho-H2 density), n_e (electron density), n_H (atomic hydrogen density), n_He (Helium density), n_Hp (ionized hydrogen density), T_bg (background temperature), dv (line width), and geom (photon escape geometry).

The output of this example is a xarray's Dataset with three dimensions of (QN_ul, T_kin, n_H2):

>>> print(ds)
<xarray.Dataset>
Dimensions:      (QN_ul: 2, T_kin: 3, n_H2: 5)
Coordinates:
  * QN_ul        (QN_ul) <U3 '1-0' '2-1'
  * T_kin        (T_kin) int64 100 200 300
    N_mol        float64 1e+15
  * n_H2         (n_H2) float64 1e+03 1e+04 1e+05 1e+06 1e+07
    T_bg         float64 2.73
    dv           float64 1.0
    geom         <U3 'uni'
    description  <U9 'LAMDA(CO)'
Data variables:
    E_u          (QN_ul, T_kin, n_H2) float64 5.5 5.5 5.5 5.5 ... 16.6 16.6 16.6
    freq         (QN_ul, T_kin, n_H2) float64 115.3 115.3 115.3 ... 230.5 230.5
    wavel        (QN_ul, T_kin, n_H2) float64 2.601e+03 2.601e+03 ... 1.3e+03
    T_ex         (QN_ul, T_kin, n_H2) float64 132.5 -86.52 127.6 ... 316.6 301.6
    tau          (QN_ul, T_kin, n_H2) float64 0.009966 -0.005898 ... 0.0009394
    T_r          (QN_ul, T_kin, n_H2) float64 1.278 0.5333 ... 0.3121 0.2778
    pop_u        (QN_ul, T_kin, n_H2) float64 0.4934 0.201 ... 0.04972 0.04426
    pop_l        (QN_ul, T_kin, n_H2) float64 0.1715 0.06286 ... 0.03089 0.02755
    I            (QN_ul, T_kin, n_H2) float64 1.36 0.5677 ... 0.3322 0.2957
    F            (QN_ul, T_kin, n_H2) float64 2.684e-08 1.12e-08 ... 4.666e-08

For more information, run help(ndradex.run) to see the docstrings.

Save/load results

You can save and load the dataset like:

# save results to a netCDF file
>>> ndradex.save_dataset(ds, 'results.nc')

# load results from a netCDF file
>>> ds = ndradex.load_dataset('results.nc')

Customizations

For the first time you import ndRADEX, the custom configuration file is created as ~/.config/ndradex/config.toml. By editing this, you can customize the following two settings of ndRADEX. Note that you can change the path of configuration file by setting an environment variable, NDRADEX_PATH.

Changing default values

As mentioned above, you can change the default values of the run() function like:

# config.toml

[grid]
T_bg = 10 # change default background temp to 10 K
geom = "lvg" # change default geometry to LVG
timeout = 30
n_procs = 2

You can also change the number of multiprocesses (n_procs) and timeout (timeout) here.

Setting datafile aliases

Sometimes datafile names are not intuitive (for example, name of CS datafile is cs@lique.dat). For convenience, you can define aliases of datafile names like:

# config.toml

[lamda]
CO = "co.dat"
CS = "cs@lique.dat"
H13CN = "https://home.strw.leidenuniv.nl/~moldata/datafiles/h13cn@xpol.dat"

As shown in the third example, you can also specify URL or local file path on the right hand. After the customization, you can use these aliases in the run() function:

>>> ds = ndradex.run('CS', '1-0', ...) # equiv to cs@lique.dat

References

Project details


Download files

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

Files for ndradex, version 0.2.0
Filename, size File type Python version Upload date Hashes
Filename, size ndradex-0.2.0.tar.gz (16.1 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page