Python dcd文件中的水分子时间序列数据

Python dcd文件中的水分子时间序列数据,python,bioinformatics,protein-database,molecule,mdanalysis,Python,Bioinformatics,Protein Database,Molecule,Mdanalysis,我试图制作一个包含dcd文件中水分子时间序列数据的文件。是否可以使用任何MDAnalysis模块或函数生成此数据?或者是否有任何python脚本生成此文件 我需要使用DCD文件作为输入来生成包含两列的文件(一列带有水分子的z坐标,第二列带有各自的时间步长)。您可以通过多种方式获得(z,t)时间序列,但我在这里展示的是最基本的一列。我假设除了DCD轨迹文件之外,您还有一个PSF拓扑文件(但实际上,任何拓扑和轨迹文件格式都可以在MDAnalysis中使用)。我还假设水的氧原子被命名为“OW” 我实际

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

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

您可以通过多种方式获得(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的介绍,请参见,其中还有一个解释选择和轨迹迭代的

如需更多问题,请询问您通常在哪里获得最快答案

你可以通过多种方式获得(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的介绍,请参见,其中还有一个解释选择和轨迹迭代的


如需更多问题,请询问您通常在哪里获得最快答案

非常感谢您的详细回答。但我需要相应地更改您发送的mdanalysis脚本。因为我已经使用msanalysis从整个系统中提取了水pdb和dcd文件。并将dcd和pdb文件加载到universe,得到了我的输出。这是我使用的完整脚本:从MDAnalysis.analysis导入MDAnalysis作为mda从MDAnalysis.analysis.hole导入HOLEtraj导入numpy作为np u=mda.Universe(“ho.pdb”、“ho.dcd”)#水分子pdd和trjaectory数据加载到Universe数据=np.zeros((u.tract.n#frames,len(u.resids)+)+1))ts1=u.traction.ts for I,枚举中的ts(u.轨迹):数据[i,0]=ts.时间数据[i,1:]=ts1.位置[:,2]数据[0:3][0:5]#这里是提取的输出:数组([0,24.3392067,23.94203758,…,40.12068939,21.93716621,-30.37293243],[1.00000003,24.3392067,23.94203758,…,40.12068939,21.93716621,-30.37293243],[2.00000007,24.3392067,23.94203758,…,40.12068939,21.93716621,-30.37293243])现在我对时间步数据感到困惑。在第一列中,它显示的是帧编号,而不是ps中的时间步(皮秒)。时间步和帧之间没有任何区别吗?您希望看到的时间步是什么?您的输出似乎表明它是1ps。MDAnalysis从您的DCD文件中得到的是
ts.time
显示的内容。是什么代码生成了DCD文件?您还可以在轨迹中循环并
打印(ts帧,ts时间)
看看你有什么。如果你没有得到你想要的,文件Dcd文件中的一个问题是使用NAMD从模拟结果中产生的。我不知道我的模拟时间步长是2fs,模拟时间是150 ns。但是这个脚本生成的时间步长(以ps为单位)与帧数相同。这就是为什么我问我们需要计算它的原因e我们自己?非常感谢orbeckst提供的详细答案。但我需要相应地更改您发送的mdanalysis脚本。因为我已经使用msanalysis从整个系统中提取了water pdb和dcd文件。并将dcd和pdb文件加载到universe并获得了我的输出。以下是我使用的完整脚本:从mdanalysis中将mdanalysis作为mda导入s、 分析从MDAnalysis.analysis.hole导入HOLEtraj导入numpy作为np u=mda.Universe(“ho.pdb”、“ho.dcd”)#水#分子pdd和trjaectory数据#加载到Universe data=np.zero((u.traction.n#u帧,len(u.resids)+1))ts1=u.traction.ts for i,ts in enumerate(u.tract):数据[i,0]=ts.time数据[i,1:]=ts1.positions[:,2]data[0:3][0:5]#这里是提取的输出:数组([0,24.3392067,23.94203758,…,40.12068939,21.93716621,-30.37293243],[1.00000003,24.3392067,23.94203758,…,40.12068939,21.93716621,-30.37293243],[2.00000007,24.3392067,23.94203758,…,40.12068939,21.93716621,-30.37293243]])现在我对时间步长数据感到困惑。在第一列中,它显示的是帧编号,而不是ps(皮秒)中的时间步长。有什么区别吗