快速的莱曼阿尔法辐射传输为每个人!

FLaREON的Python项目详细描述


flareon

在这个宇宙中,一切都是整洁的,甚至是随机的。

莱曼-阿尔法共振散射主要由随机过程控制。

虽然有混乱,但也有秩序。

作者

悉达多·古龙·洛佩兹

阿尔瓦罗·奥西

西尔维娅·博诺利

发布链接:

广告:http://ads abs.harvard.edu/abs/2018arxiv181109630g" rel="nofollow">http://adsabs.harvard.edu/abs/2018arxiv181109630g

arxiv:https://arxiv.org/abs/1811.09630

起源和动机

由于lyman-alpha辐射传输的复杂性,人们对它的理解从单纯的解析研究转向了模拟任意几何气体中lyman-alpha光子的辐射传输monte carlo(rtmc)程序。这些代码提供了有关设法逃逸的光子的分数以及由此产生的莱曼阿尔法线轮廓的有用信息。rtmc方法再现了lae的观测特性。

flareon是一个基于rtmc(orsi et al.2012年)能够以高精度预测大量莱曼α线剖面和逃逸分数。我们设计这段代码是希望它能帮助全世界的研究人员更好地了解宇宙。

flareon快速的简单的

  • 快速:此代码能够在前所未有的短时间内预测Lyman Alpha转义分数和线条轮廓。特别是,在不到一秒钟的计算时间内,可以计算出数千个逸出分数和线轮廓。

  • 简单:此代码是一行。每个人,从训练有素的猴子,经过本科学习,到掌握基本python知识的研究人员,都应该能够使用flareon

尽管flareon是完全开放源码的,而且每个人都可以使用,但是如果您使用这段代码(无论出于什么原因),我们将非常高兴听到您和您如何使用它。只是好奇和效率的问题。或许我们可以帮助您更流畅地体验flareon。如有任何问题或建议,请联系sidgurung@cefca.es。谢谢。

安装

在您的机器中获得flareon的最简单方法是通过pip

pip安装flareon

这应该能起到作用。但是,您也可以安装flareon下载此存储库并运行

PIP安装。

在里面。

为了完成安装并检查一切是否正常,请打开python/ipython终端并执行:

importFLaREONasLyaLya.Test_Installation(Make_Plots=True)

此函数检查pip安装是否下载了所有内容。然后,如果找不到数据文件,它会尝试下载它们。请注意,您的计算机中应该有大约1GB的可用内存,以便安装flareon。还要注意的是,由于需要下载大约1GB的数据,因此可能需要一些时间,具体取决于您的Internet连接。

在检查您的机器中是否有数据之后,flareon将检查每个软件是否正常工作。为此,将计算一些转义分数和线轮廓。操作状态应出现在屏幕上。一切都应该成功!!< /代码>。唯一的例外是

运行:bicone_x_slab analysis-->;错误。人死了。错配!!< /代码>

别担心。之所以会出现此错误,唯一的原因是此算法尚未实现。然后函数将生成一些图。如果你想在不打印的情况下运行测试,只需设置

这应该是安装的全部内容。如果您在使用过程中发现任何问题/错误,请通过sidgurung@cefca.es与我们联系。感谢您的耐心。

交代码。

(假设安装过程中一切顺利…)

恭喜!!您刚刚成为人类历史上为数不多的几个有幸使用flareon的人之一

单位:此代码使用以km/s为单位的速度、以cm^{-2}为单位的列密度和以米为单位的波长。

首先,让我们看看flareon所包含的不同参数的动态范围。为此,我们只需执行以下操作:

importFLaREONasLyaLya.Print_the_grid_edges()

预测数千个莱曼α逃逸分数。

让我们来看看flareon最强大的产品之一:预测大量lymanα逃逸分数。

理论上,对于展开速度(v)为200km/s,柱密度(lognh)为19.5,尘埃光学深度(ta)为0.1的薄壳几何体,只需一条直线即可预测逸出分数:

f_esc_Arr=Lya.RT_f_esc('Thin_Shell',[200],[19.5],[0.1])

这样,f_esc_arr是一个一维长度为1的数组,其中包含此配置的预测转义分数。

然而,flareon实现了几种气体几何结构,并且经过优化,只需一行代码就可以获得大量的逸出分数,所以让我们再进一步扩展一下。如果我们想计算具有{v,lognh,ta},{200,19.5,0.1},{300,20.0,0.01}和{400,20.5,0.001}结构的薄壳外流的逃逸分数,我们可以做

Geometry='Thin Shell'# Other options: 'Galactic Wind' or 'Bicone_X_Slab'V_Arr=[200,300,400]# Expansion velocity array in km/slogNH_Arr=[19.5,20.0,20.5]# Logarithmic of column densities array in cm**-2ta_Arr=[0.1,0.01,0.001]# Dust optical depth Arrayf_esc_Arr=Lya.RT_f_esc(Geometry,V_Arr,logNH_Arr,ta_Arr)

变量f_esc_arr是一个一维、长度为3的数组,包含配置的转义分数。特别是,使用v_arr[i]lognh arr[i]ta_arr[i]计算f_esc_arr[i]

如果用户要更改流出气体的几何结构,则只需这样做

Geometry='Galactic Wind'# Other options: 'Thin Shell' or 'Bicone_X_Slab'f_esc_Arr=Lya.RT_f_esc(Geometry,V_Arr,logNH_Arr,ta_Arr)

请注意,只能同时使用一个几何图形。如果要为不同的配置计算不同的转义分数(或线条轮廓),则需要为每个几何体调用一次flareon

这些例子展示了"薄壳"和"银河风"几何的工作原理。这些几何结构具有球面对称性,因此在输出逃逸分数或线形中不存在视线依赖性。但是,flareon实现了一个非球面对称几何体,即'bicone_x_u slab'几何体(有关详细信息,请参阅演示信)。在这种特殊的几何结构中,逃逸分数(和线形)取决于服务水平。特别是,如果观察到面开(通过双锥流出),则光学深度低于观察到的边开(通过静态致密板)。

为了告诉flareon观察的方向(边上或面上),用户在调用代码时需要提供另一个变量:inside_bicone_arr。如果没有给出这一点,则假定它总是面朝上观察。此变量必须是一个布尔数组,其大小与v_arrlognh_arrotta_arr相同。此外,双光子的孔径角为45度,因此要在双光子几何中生成一组具有随机方向的逃逸分数,您应该使用:

importnumpyasnpGeometry='Bicone_X_Slab'Area_in_bicone=1.-np.cos(np.pi/4.)# the apperture angle is pi/4Inside_Bicone_Arr=np.random.rand(len(V_Arr))<Area_in_biconef_esc_Arr=Lya.RT_f_esc(Geometry,V_Arr,logNH_Arr,ta_Arr,Inside_Bicone_Arr=Inside_Bicone_Arr)

预测逃逸分数的更深入选项。

有许多算法被实现来计算。默认情况下,flareon使用机器学习决策树回归器和逃逸分数的参数方程作为尘埃光学深度的函数(转到flareon演示文稿文件gurung lopez et al.在P代表了解更多信息)。这些设置被选为默认设置,因为它们提供了最佳性能。但是,用户可能希望更改计算算法,因此请在此处留下一个包含所有可用选项的指南。

  • 模式变量是指计算转义分数的模式。有三种方法可以计算这个值。i)'raw'使用来自rtmc的原始数据(orsi等人2012)。ii)"参数化"假设逸出分数和尘埃光学深度之间的参数方程,允许以最高精度将计算扩展到网格之外(在flareon中)。iii)'analytic'使用gurung lopez等人提出的重新校准的分析方程。2018。请注意,在双光子几何体中未启用分析模式,尽管它位于'thin_shel''galactic_wind'

  • 算法varible确定所使用的技术。这可以是i)"intrepation":使用线性插入。ii)"机器学习"使用机器学习。若要确定要使用哪种机器学习算法,请提供变量machine-learning\u algorithm。所实现的机器学习算法有决策树回归器('tree')、随机森林回归器('forest')和kn回归器('kn')。机器学习由sci kit learn实现,请访问他们的网站以获取更多信息(http://scikit learn.org/stable/)。

MODE='Raw'# Other : 'Parametrization' , 'Analytic'Algorithm='Intrepolation'# Other : 'Machine_Learning'Machine_Learning_Algorithm='KN'# Other 'Tree' , 'Forest'f_esc_Arr=Lya.RT_f_esc(Geometry,V_Arr,logNH_Arr,ta_Arr,MODE=MODE)

最后,允许模式算法机器学习算法的任何组合。但是,请注意,如果algorithm='intrepolation',则变量machine\u learning\u algorithm是无用的。

预测数千个莱曼阿尔法线剖面。

在本节中,我们将解释如何快速获得任意数量的lymanα线porfiles。语法与escape fraction函数非常相似。主要区别在于,用户必须提供波长阵列(以米为单位),用于评估线条轮廓。对于膨胀速度(v)为200km/s、柱密度(lognh)为19.5对数、尘埃光学深度(ta)为0.1/20amstrong的薄壳排水口,lyman alpha附近的线剖面计算公式为

wavelength_Arr=np.linspace(1215.68-20,1215.68+20,1000)*1e-10# meters, please!Line_profile_Arr=Lya.RT_Line_Profile('Thin_Shell',wavelength_Arr,[200],[19.5],[0.1])

对于逸出分数,为了同时计算多个线轮廓,只需使

wavelength_Arr=np.linspace(1215.68-20,1215.68+20,1000)*1e-10# meters, please!V_Arr=[200,300,400]# Expansion velocity array in km/slogNH_Arr=[19.5,20.0,20.5]# Logarithmic of column densities array in cm**-2ta_Arr=[0.1,0.01,0.001]# Dust optical depth ArrayLine_profile_Arr=Lya.RT_Line_Profile('Thin_Shell',wavelength_Arr,V_Arr,logNH_Arr,ta_Arr)

在这种情况下,line_profile_arr是一个具有形状(31000)的数组,其中包含计算的行配置文件。尤其是line arr[i,:]是在wavelength arr中计算的行配置文件,用v arr[i]lognh arr[i]ta arr[i]计算。

其他的几何结构("银河风""双光子x_平板")也被实现。特别是,在双锥几何中,也可以选择视线观测。这与转义分数的实现方式相同。

与逸出分数计算相反,线轮廓现在只支持预计算网格之间的线性插值。未来可能会实施机器学习或深度学习。

有力的支持:加入Flareon和Emcee。

emcee(http://dfm.io/emcee/current/" rel="nofollow">http://dfm.io/emcee/current/)是一个流行的python包,包括执行mcmc分析的工具。

example\u mcmc/文件夹中,我们提供了一个基本示例,说明如何包装emceeflareon

mcmc_fitter.py是生成问题行配置文件并运行mcmc分析以检测ermine(柱密度-膨胀速度-尘埃光学深度)组合,最能再现问题线轮廓。您可以找到一个关于代码如何在其中工作的非常详细的解释。

mcmc_fitter.py保存包含所有mcmc信息的文件,并根据所使用的mcmc配置对其命名。

analize_mcmc.py是另一个从保存的文件中提取信息的脚本。可以在代码中设置mcmc参数,也可以将保存文件的名称作为参数传递:

importFLaREONasLyaLya.Test_Installation(Make_Plots=True)
0

其中mcmc_output_galactic…txt是由mcmc_fitter.py保存的文件。

在这种特殊情况下,analize_mcmc.py打印:

importFLaREONasLyaLya.Test_Installation(Make_Plots=True)
1

其中,v_explognhlogta是在mcmc_fitter.py中产生的线轮廓的最佳膨胀速度、柱密度对数和尘埃光学深度对数。

我们注意到,这只是一个简单的脚本,演示如何在emcee中进行有效的总结。用户应该开发他们自己的代码,以便在他们的个人测试中获得更好的结果。但是,我们希望mcmc_fitter.py的结构可以帮助用户。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java中的json IoT模块GET请求   在Java8中,如何使用lambda表达式中的条件?   Java 7中的io,如何通过一个实际示例演示文件之间的差异。存在和文件。不存在?   在Android Studio中使用Java从url获取JSON?   返回k个最小元素的java数组   java如何让我的安卓应用通过facebook登录并获得foursquare等好友列表   java如何在布局中以编程方式生成文本视图   在java中更改系统日期和时间的datetime代码段   java Hibernate和SQLite3,一对多关系映射   java Observable转换成kotlin问题   java在单独的线程中将VBO发送到GPU   属性文件中值的spring Java验证程序注释   java Spring启动:找不到javassist   java SimpleDataFormat时间解析   无法在linux上为Java程序正确设置PATH变量   将文件上载到FTP服务器时发生java异常   基于java TestNG的Selenium测试不能并行运行   java DAO类实例与DAO EJB   tomcat6部署*。使用Java Web Start(JNLP)的war应用程序