Переделанный файл:
for line in open('et.top', encoding='utf-8').readlines():
print(line.strip())
Я запустила все bash-скрипты. С помощью trjconv конвертировала результаты в pdb и посмотрела в PyMol. Динамика у всех моделей была разная и примерно может быть описана так:
import numpy as np
import matplotlib.pyplot as plt
algs = {'be': 'Berendsen', 'vr': 'Velocity-rescale', 'nh':'Nooze-Hoover', 'an':'Anderson', 'sd':'Stochastic MD'}
fig, axs = plt.subplots(5, figsize=(10, 20))
for i, d in enumerate(algs.keys()):
energy = np.loadtxt(f'et_{d}.en.xvg')
t = energy[:,0]
e_pot = energy[:,1]
e_kin = energy[:,2]
axs[i].plot(t, e_pot, c='teal', alpha=0.7, label='Potential energy')
axs[i].plot(t, e_kin, c='indianred', alpha=0.7, label='Kinetic energy')
axs[i].legend()
axs[i].set_title(algs[d])
plt.show()
В методах Velocity-rescale, Anderson, Stochastic MD обе энергии флуктуируют, а в Berendsen и Nooze-Hoover стабилизируются.
fig, axs = plt.subplots(5, figsize=(10, 18))
for i, d in enumerate(algs.keys()):
x = np.loadtxt(f'bond_{d}.xvg')
axs[i].bar(x[:,0], x[:,1], width=0.0005, color='teal')
axs[i].set_title(algs[d])
axs[i].set_xlim(0.145, 0.1625)
plt.show()
Распределение для Anderson какое-то вообще не реалистичное, у Stochastic MD и Velocity-rescale, наверное, дисперсия великовата, Berendsen и Nooze-Hoover, пожалуй, самые реалистичные.
fig, axs = plt.subplots(5, figsize=(10, 18))
for i, d in enumerate(algs.keys()):
energy = np.loadtxt(f'et_{d}.en.xvg')
t = energy[:,0]
e_pot = energy[:,1]
e_kin = energy[:,2]
axs[i].hist(e_pot + e_kin, bins=100, color='indianred')
axs[i].set_title(algs[d])
plt.show()
На распределение Больцмана больше всего похоже распределение Nooze-Hoover. Учитывая все показатели, я бы назвала распределение Nooze-Hoover самым реалистичным.