【发布时间】:2020-06-16 21:55:39
【问题描述】:
我正在尝试制作一个包含来自 dcd 文件的水分子时间序列数据的文件。是否可以使用任何 MDAnalysis 模块或函数生成此数据?或者有没有python脚本可以生成这个文件?
我需要使用 DCD 文件作为输入来生成包含两列的文件(一列是水分子的 z 坐标,第二列是各自的时间步长)。
【问题讨论】:
标签: python bioinformatics protein-database molecule mdanalysis
我正在尝试制作一个包含来自 dcd 文件的水分子时间序列数据的文件。是否可以使用任何 MDAnalysis 模块或函数生成此数据?或者有没有python脚本可以生成这个文件?
我需要使用 DCD 文件作为输入来生成包含两列的文件(一列是水分子的 z 坐标,第二列是各自的时间步长)。
【问题讨论】:
标签: python bioinformatics protein-database molecule mdanalysis
您可以通过多种方式获得 (z, t) 时间序列,但我在这里展示的是最基本的一种。我假设除了 DCD 轨迹文件之外,您还有一个 PSF 拓扑文件(但实际上,任何拓扑和轨迹文件格式都可以在 MDAnalysis 中使用)。我还假设水的氧原子被命名为“OW”。
我实际上并不清楚你希望你的“z,t”数据结构是什么样子。如果您有N 水分子,那么每个时间步您将拥有N z 坐标,所以我不知道这对于“两列”有何意义,假设您希望每个“行”都是不同的时间步。相反,我将使用以下数据结构:最终输出将是一个形状为(T, N+1) 的数组,其中T 是轨迹中的时间步数,N 是水域数。数组的每一行都包含[t, z1, z2, ..., zN],即水i的时间和z坐标。
import numpy as np
import MDAnalysis as mda
u = mda.Universe(PSF, DCD)
water_oxygens = u.select_atoms("name OW")
# pre-allocate the array for the data
data = np.zeros((u.trajectory.n_frames, water_oxygens.n_atoms + 1))
for i, ts in enumerate(u.trajectory):
data[i, 0] = ts.time # store current time
data[i, 1:] = water_oxygens.positions[:, 2] # extract all z-coordinates
# now data contains your timeseries and you can work with it
# (or export it using np.savetxt()
有关 MDAnalysis 的介绍,请参阅 User Guide,其中还有一个 quickstart guide,用于解释选择和轨迹迭代。
如需更多问题,请在MDAnalysis Google group 上提问,您通常会得到最快的答复。
【讨论】:
ts.time 显示什么都是 MDAnalysis 从您的 DCD 文件中得到的。什么代码生成了 DCD 文件?你也可以循环浏览你的轨迹和print(ts.frame, ts.time),看看你有什么。如果您没有得到您期望的结果,请在github.com/MDAnalysis/mdanalysis/issues 提出问题