Скопировали в рабочую папку все исходные файлы с сервера kodomo.
... и нам нужен файл с топологией. Основываясь на нашей заготовке, доделал файл с указанием недостающих торсионных углов и связей.
Сам я думал изначально на другие типы opls, но с ними ничего не работало. Исправил на эти (139, 140).
Тип для торсионных углов 3.
%cat et.top
Посчитал работу симуляции при разном контроле температуры (вручную)
Сначала:
mdrun
с помощью grompp
.mdrun
.pdb
(trjconv
).g_energy
).b.ndx
([ b ]\n1 2
) для выдачи распределений длины С-С связи за моделирование (g_bond
).Сделав все это, перенес данные на свой компьютер.
import numpy as np
import matplotlib.pyplot as plt
data = ['be', 'an', 'vr', 'nh', 'sd']
text = ['Berendsen', 'Anderson', 'Velocity-rescale', 'Nooze-Hoover', 'Stochastic MD']
Нарисуем энерг. сост. (для потенциальной и кинетической)
plt.subplots(2, 3, figsize=(16, 8))
for i, (d, txt) in enumerate(zip(data, text), 1):
energy = np.loadtxt(f'et_{d}_en.xvg')
t = energy[:,0]
y_pot = energy[:,1]
y_kin = energy[:,2]
plt.subplot(2, 3, i)
plt.plot(t, y_kin + y_pot, c='gray', alpha=0.2)
plt.plot(t, y_pot, c='green', alpha=0.9)
plt.plot(t, y_kin, c='chartreuse', alpha=0.6)
plt.title(txt)
plt.legend(['E (full)', 'E (potential)', 'E (kinetic)'])
plt.show()
Берендсен сходится лучше всех.
Распределение энергии:
plt.subplots(2, 3, figsize=(16, 8))
for i, (d, txt) in enumerate(zip(data, text), 1):
energy = np.loadtxt(f'et_{d}_en.xvg')
e_pot = energy[:,1]
plt.subplot(2, 3, i)
plt.hist(e_pot, bins=100, color='violet')
plt.title(txt)
plt.show()
Мне кажется, на распределение Максвелла больше всего похож стохастический метод и, возможно, V-rescale.
И распределение длины связи (1-2) по времени
plt.subplots(2, 3, figsize=(16, 8))
for i, (d, txt) in enumerate(zip(data, text), 1):
bond = np.loadtxt(f'et_{d}_bond.xvg')
x = bond[:,0]
y = bond[:,1]
plt.subplot(2, 3, i)
plt.bar(x, y, width=0.0002, color='salmon')
plt.title(txt)
plt.show()
Моих мозгов вначале хватило, чтобы сказать себе: "Хы, на ГЗ МГУ похоже".
Ну и посмотрим на все это в pymol
import __main__
__main__.pymol_argv = [ 'pymol', '-x' ]
import pymol
pymol.finish_launching()
from pymol import cmd
for d in data:
cmd.load(f"et_{d}.pdb")
В методах Берендсена и Нуза-Гувера молекула начинает сама по себе бешено крутиться, это мне кажется недостаточно правдоподобным.
В стохастическом же методе молекула смещает свой центр масс без внешней энергии, это тоже, на мой взгляд, нехорошо
В методе Андерсона молекула фактически не меняла конформацию, а вот в методе V-R были некоторые переклики из одной анти-конформации в другую, что больше соответствует реальному поведению.
Такой визуальный анализ, конечно, не несет глубокого смысла, особенно с учетом того, что я мог задать не те параметры на входе =(
Вот, кажется, и все. Я бы предпочел термостат Velocity-rescale остальным, но недаром их столько сделали - применение зависит от задачи.