【问题标题】:Time series data for water molecules from its dcd file来自其 dcd 文件的水分子的时间序列数据
【发布时间】:2020-06-16 21:55:39
【问题描述】:

我正在尝试制作一个包含来自 dcd 文件的水分子时间序列数据的文件。是否可以使用任何 MDAnalysis 模块或函数生成此数据?或者有没有python脚本可以生成这个文件?

我需要使用 DCD 文件作为输入来生成包含两列的文件(一列是水分子的 z 坐标,第二列是各自的时间步长)。

【问题讨论】:

    标签: python bioinformatics protein-database molecule mdanalysis


    【解决方案1】:

    您可以通过多种方式获得 (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 上提问,您通常会得到最快的答复。

    【讨论】:

    • 非常感谢 orbeckst 的详细回答。但我需要相应地更改您发送的 mdanalysis 脚本。因为我已经使用 msanalysis 从整个系统中提取了水 pdb 和 dcd 文件。并将 dcd 和 pdb 文件加载到 Universe 并得到我的输出。这是我使用的完整脚本:
    • 从 MDAnalysis.analysis 导入 MDAnalysis 作为 mda 从 MDAnalysis.analysis.hole 导入 HOLEtraj 导入 numpy 作为 np u= mda.Universe("ho.pdb","ho.dcd") #water #molecules pdd 和 trjaectory 数据 #loaded 到 Universe data= np.zeros((u.trajectory.n_frames, len(u.residues)+1)) ts1=u.trajectory.ts for i, ts in enumerate(u.轨迹): data[i,0]= ts.time data[i,1:]= ts1.positions[:, 2]
    • data[0:3][0:5] #这里是提取的输出:array([[ 0. , 24.3392067 , 23.94203758, ..., 40.12068939, 21.93716621, -30.37293243], [ 1.00000003,24.3392067,23.94203758,......,40.12068939,21.93716621,21.937293243],23.937293243,23.94203758,...,40.12068939,20.12068939,20.12068939,20.12068939,20.12068939,20.12068939,20.12068939,20.12068939,20.12068939,20.12068939,20.12068939,30.93716621,21.93716621,21.937293243]])现在我实际上对时间戳的数据感到困惑。在第一列中,它显示的是帧数,而不是 ps(皮秒)的时间步长。时间步长和帧数没有区别吗?
    • 您希望看到的时间步长是多少?您的输出似乎表明它是 1 ps。无论ts.time 显示什么都是 MDAnalysis 从您的 DCD 文件中得到的。什么代码生成了 DCD 文件?你也可以循环浏览你的轨迹和print(ts.frame, ts.time),看看你有什么。如果您没有得到您期望的结果,请在github.com/MDAnalysis/mdanalysis/issues 提出问题
    • Dcd 文件是使用 NAMD 从模拟结果中生成的。我不知道我的仿真时间步长是 2fs,仿真时间是 150 ns。但是此脚本生成的 ps 中的时间步长与帧号相同。这就是为什么我要问这是我们需要自己计算的东西吗?
    猜你喜欢
    • 1970-01-01
    • 2013-03-24
    • 2017-09-29
    • 2014-02-11
    • 2016-02-01
    • 1970-01-01
    • 2012-08-20
    • 2020-08-10
    • 1970-01-01
    相关资源
    最近更新 更多