未知
项目描述
#银河分析工具包
收集了我论文研究中使用的脚本和分析工具。
这还包括两篇尚未发表的论文的文本和版本历史,这些论文是代码的主要研究结果。
代码分为两部分。名为“galanyl”的“库”位于“galanyl”目录中,而“helper_scripts”包含了一些脚本,这些脚本利用“yt”和“galanyl”处理模拟数据。
#使用这些脚本
首先,您必须下载要分析的数据。目前,辅助脚本编写的方式是期望完整的模拟数据集存在,但如果您只想查看一个或几个模拟输出,则应易于修改或适应。
第一篇论文的数据可在https://hub.yt/data/goldbaum2015a/找到
第二篇论文的数据可在https://hub.yt/data/goldbaum2016a找到
##生成均匀分辨率网格层
注意:如果您想下载处理后的数据,则可以跳过此步骤。这仅适用于您想要从原始模拟输出生成处理后的数据。
例如,如果您想重新生成nofeedback_20pc模拟的处理后数据,您需要下载一个或多个模拟输出,解压tarball,并将模拟输出放置在名为nofeedback_20pc的目录中。
下载完要分析的计算输出后,您需要分两步创建所需的相关数据
` $ python generate_covering_grids.py nofeedback_20pc `
此脚本使用yt将原始模拟输出转换为后续分析脚本所需的标准分辨率的“覆盖网格”。这将只为模拟输出中存在的字段生成覆盖网格数据。要生成引力势覆盖网格,您需要做以下操作
运行以下命令:`python generate_gravitational_covering_grid.py nofeedback_20pc`
此脚本需要一份 Enzo 可执行文件的副本(有关编译 Enzo 代码的信息,请参阅[此处](https://enzo.readthedocs.org/en/latest/tutorials/building_enzo.html)),因为脚本使用 Enzo 可执行文件的 -g 选项来解决泊松方程。
最后,您可以使用 validate_covering_grid.py 脚本在数据写入磁盘后验证覆盖网格数据的完整性。此脚本仅检查所有 hdf5 文件是否具有相同的内部结构,因此不要完全依赖它来防止所有可能的数据损坏。我最初创建它是为了避免在生成脚本崩溃或文件系统挂起时创建不完整的覆盖网格文件后出现的错误。
请注意,如果您正在对整个模拟数据集进行操作,即使您在多个核心上运行,也会花费很长时间。请注意,generate_covering_grids.py 和 generate_gravitational_covering_grid.py 都已并行化,因此您可以使用例如 mpirun 在多个核心上并行化跨多个数据集的分析。请注意,除非您在并行文件系统上运行,否则这不会很好地扩展,因为这两个脚本都主要受 I/O 限制。
## 生成最终处理数据
最后,要生成最终处理数据,包括表面密度、速度分散和 Toomre Q 参数的图,您应使用 analyze_data.py 脚本。此脚本使用先前步骤中生成的覆盖网格数据来创建 GalaxyAnalyzer 对象——由星系分析工具包提供的主要分析类。GalaxyAnalyzer 类提供了一些分析选项来处理可用数据的一个子集,但它还提供了一个接口来计算它知道如何计算的推导数据。这是 analyze_data.py 使用的接口。如果不需要所有处理数据,则可以轻松修改脚本以仅计算数据的一个子集。要运行脚本,只需执行以下操作:
` $ python analyze_data.py `
像覆盖网格生成器一样,此脚本也是 MPI-并行化的,因此请使用 mpirun 运行它以加快分析速度。此脚本也主要受 I/O 限制,因此除非您在并行文件系统上运行,否则您可能看不到非常好的扩展性。
请注意,一些昂贵的计算使用 OpenMP 并行化,只要您的操作系统和编译器支持它。目前这意味着您将需要 gcc,尽管据说 LLVM/Clang 也很快会获得 OpenMP 支持。我优化了在单个节点上迭代数据,使用 MPI 并行性迭代数据集,但使用 OpenMP 将处理给定数据集所需的工作分割。作为一个经验法则,我使用了一个具有 16 个核心的节点,并使用了 4 个 MPI 任务,因此每个 MPI 任务在分析中并行化的部分使用了 4 个 OpenMP 线程。
# 加载数据并进行操作
可以使用开源 Python 分析环境访问可用数据。原始模拟数据以 Enzo 的基于 HDF5 的数据格式写入磁盘。处理数据写入包含许多简单 hdf5 文件的目录结构,其中每个文件包含一个数据集。
## 模拟输出
对于原始模拟输出,建议使用 yt 加载它们进行分析和可视化。您需要根据是否已设置 Python 环境以及如何设置环境,使用安装脚本、conda 或 pip 安装 yt。有关详细信息,请参阅http://yt-project.org/doc/installing.html。
安装 yt 后,下载其中一个原始数据集,解压缩它,然后加载它
` $ wget https://hub.yt/data/goldbaum2015b/feedback_20pc/simulation_outputs/DD0600.tar.gz $ tar xzvf DD0600.tar.gz $ python >>> import yt >>> ds = yt.load('DD0600/DD0600') `
您可以将ds对象传递给yt的绘图命令,或通过它访问yt数据对象,以便获取任何磁盘上的或派生字段。
##处理后的数据
处理处理后的数据最简单的方法是通过星系分析工具包。这可以通过pip或从源代码安装。要通过pip安装
$ pip install galanyl
要从源代码安装
` $ hg clone https://bitbucket.org/ngoldbaum/galaxy_analysis $ cd galaxy_analysis $ python setup.py develop `
请注意,后者版本将源代码作为“实时”版本,Python解释器导入,因此对那里的编辑将在您下次导入工具包时立即可用。
要加载示例数据集之一,您需要下载它,解压缩它,然后将其加载到内存中
` $ wget https://hub.yt/data/goldbaum2015b/feedback_20pc/processed_data/DD0600_toomre.tar.gz $ tar xzvf DD0600_toomre.tar.gz $ python >>> from galanyl import GalaxyAnalyzer >>> from matplotlib import pyplot as plt >>> g = GalaxyAnalyzer.from_hdf5_file('DD0600_toomre') >>> print g.gas.surface_density >>> print g.stars.velocity_dispersion >>> plt.imshow(g.gas.total_toome_q) `
所有数据都可通过GalaxyAnalyzer实例的属性获取,如上述示例所示。所有数量都以CGS单位表示。探索这些对象的各种属性的最简单方法是使用IPython中的tab补全或阅读GalaxyAnalyzer源代码。
或者,数据还被拆分成了每个数据集一个hdf5文件,因此任何hdf5读取器都应该能够访问数据,而无需通过GalaxyAnalyzer。
项目详情
galanyl-0.1.7.tar.gz的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | a900ccce35b0535ac9383cfe9cfaa386c38c3e654dc72dd1a1db0aaa18b9137e |
|
MD5 | 2c6343bd2ef07983a50d41397d45a025 |
|
BLAKE2b-256 | aaa6affce9a13753757599ffded4f35998216f1c8bbcd46a89873baac85c718d |