用于radex网格计算的python包
ndradex的Python项目详细描述
ndradex
:zap:python包用于radex网格计算
tl;dr
ndradex是一个python包,可以运行RADEX,非lte分子辐射传输码,具有多个值的参数(即具有网格参数的radex)。 输出将是多维数组,这可能有助于与观测值比较物理条件的参数搜索。
功能
- grid calculation:ndradex有一个简单的
run()
函数,其中radex的所有参数都可以网格化(即,它们可以是长度大于1的列表)。 - built in radex:ndradex在包中提供内置的radex二进制文件,这些文件在包安装期间自动下载和生成。你不需要任何额外的设置。
- 多处理:ndradex默认支持运行多处理radex。与单次处理相比,至少需要两次加速。
- handy i/o:ndradex的输出是xarray的数据集、标准多维数据结构以及pandas。您可以用与numpy和pandas相同的方式处理它(即,按元素操作、保存/加载数据、打印等)。
要求
- python 3.6或3.7
- gfortran(构建radex所必需的)
安装
您可以使用pip安装ndradex:
$ pip install ndradex
请确保在安装前满足所有要求。
用法
在python中,导入如下包:
>>>importndradex
单Radex运行
ndradex的主要功能是ndradex.run()
。
例如,要获得动力学温度为100k、co柱密度为1e15cm^-2、h2密度为1e3cm^-3的co(1-0)的radex结果:
>>>ds=ndradex.run('co','1-0',100,1e15,1e3)
其中,'co'
是不带扩展名(.dat)的LAMDA数据文件的名称,'1-0'
是转换的名称。
可用值列在List of available LAMDA datafiles and transitions中。
请注意,您不需要下载任何数据文件:
ndradex会自动管理这个。
在这种情况下,其他参数(如线宽、背景温度)是函数中定义的默认值。
逃逸概率的几何结构默认是一致的('uni'
)。
您可以使用自定义配置更改这些值(请参阅下面的自定义设置)。
输出是没有维度的xarray数据集:
>>>print(ds)<xarray.Dataset>Dimensions:()Coordinates:QN_ul<U3'1-0'T_kinint64100N_molfloat641e+15n_H2float641e+03T_bgfloat642.73dvfloat641.0geom<U3'uni'description<U9'LAMDA(CO)'Datavariables:E_ufloat645.5freqfloat64115.3wavelfloat642.601e+03T_exfloat64132.5taufloat640.009966T_rfloat641.278pop_ufloat640.4934pop_lfloat640.1715Ifloat641.36Ffloat642.684e-08
您可以访问每个结果值,如:
>>>flux=ds['F'].values
Grid Radex运行
作为自然扩展,您可以运行Grid Radex计算,如:
>>>ds=ndradex.run('co',['1-0','2-1'],T_kin=[100,200,300],N_mol=1e15,n_H2=[1e3,1e4,1e5,1e6,1e7])
有13个参数可以网格化:
QN_ul
(转变名),T_kin
(动力学温度),N_mol
(柱密度),n_H2
(氢密度),n_pH2
(氢密度),n_oH2
(正氢密度),n_e
(电子密度),n_H
(原子氢密度),n_He
(氦密度),n_Hp
(电离氢密度),n_H
(原子氢密度),n_He
(氦密度),n_Hp
(电离氢密度),T_bg
(背景温度),dv
(温度),dv
(氢密度),^{geom
(光子逃逸几何)。
这个例子的输出是一个xarray的数据集,它具有三个维度(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)int64100200300N_molfloat641e+15*n_H2(n_H2)float641e+031e+041e+051e+061e+07T_bgfloat642.73dvfloat641.0geom<U3'uni'description<U9'LAMDA(CO)'Datavariables:E_u(QN_ul,T_kin,n_H2)float645.55.55.55.5...16.616.616.6freq(QN_ul,T_kin,n_H2)float64115.3115.3115.3...230.5230.5wavel(QN_ul,T_kin,n_H2)float642.601e+032.601e+03...1.3e+03T_ex(QN_ul,T_kin,n_H2)float64132.5-86.52127.6...316.6301.6tau(QN_ul,T_kin,n_H2)float640.009966-0.005898...0.0009394T_r(QN_ul,T_kin,n_H2)float641.2780.5333...0.31210.2778pop_u(QN_ul,T_kin,n_H2)float640.49340.201...0.049720.04426pop_l(QN_ul,T_kin,n_H2)float640.17150.06286...0.030890.02755I(QN_ul,T_kin,n_H2)float641.360.5677...0.33220.2957F(QN_ul,T_kin,n_H2)float642.684e-081.12e-08...4.666e-08
有关详细信息,请运行help(rdradex.run)
查看docstrings。
保存/加载结果
您可以像这样保存和加载数据集:
# save results to a netCDF file>>>ndradex.save_dataset(ds,'results.nc')# load results from a netCDF file>>>ds=ndradex.load_dataset('results.nc')
定制
第一次导入ndradex时,自定义配置文件创建为~/.config/ndradex/config.toml
。
通过编辑,您可以自定义ndradex的以下两个设置。
注意,您可以通过设置环境变量NDRADEX_PATH
来更改配置文件的路径。
更改默认值
如上所述,您可以更改run()
函数的默认值,如:
# config.toml[grid]T_bg=10# change default background temp to 10 Kgeom="lvg"# change default geometry to LVGtimeout=30n_procs=2
您还可以在这里更改多进程数(n_procs
)和超时数(timeout
)。
默认情况下,只分配两个进程。
如果你想的话,最好设置一个更大的值加速计算。
设置数据文件别名
有时数据文件名并不直观(例如,cs数据文件名是cs@lique
)。
为了方便起见,您可以定义数据文件名的别名,如:
# config.toml[lamda]CO="co"CS="cs@lique"H13CN="https://home.strw.leidenuniv.nl/~moldata/datafiles/h13cn@xpol.dat"
如第三个示例所示,您还可以在右侧指定url或本地文件路径。
自定义之后,可以在run()
函数中使用这些别名:
>>>ds=ndradex.run('CS','1-0',...)# equiv to cs@lique