Вы можете получить (z, t) временной ряд различными способами, но я показываю самый базовый c здесь. Я предполагаю, что у вас также есть файл топологии PSF в дополнение к файлу траектории DCD (но на самом деле любой формат файла топологии и траектории будет работать в MDAnalysis). Я также предполагаю, что атомы кислорода в воде названы "OW".
Мне на самом деле не ясно, как вы хотите, чтобы ваша структура данных "z, t" выглядела. Если у вас есть N
молекул воды, то у вас будет N
z-координаты на шаг по времени, поэтому я не знаю, как это имеет смысл как "две колонки", предполагая, что вы хотите, чтобы каждая "строка" была разной шаг времени. Вместо этого я буду использовать следующую структуру данных: конечный результат будет массивом с формой (T, N+1)
, где T
- это количество временных шагов в траектории, а N
- это количество вод. Каждая строка массива содержит [t, z1, z2, ..., zN]
, то есть время и z-координату воды i.
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 Google group , где вы обычно получаете самые быстрые ответы.