from IPython.display import Image
Визуализируем отдельно взятый липид:
Image(filename="dppc.png", width=500, height=500)
И ячейку с 64 липидами:
Image(filename="b_64.png", width=500, height=500)
В ходе оптимизации геометрии системы начальное значение максимальной силы было равно 4.3797e+05, а конечное 6.16887e+02.
Добавим в систему воду и сравним результаты при разных подходах к "утряске" воды.
Image(filename="b_pr.png", width=500, height=500)
Image(filename="b_s.png", width=500, height=500)
Особой разницы не видно.
Запускаем моделирование на суперкомпьтере.
Визуализируем движение липидов:
from IPython.display import HTML
from base64 import b64encode
video = open('movie.mp4', 'rb').read()
video_encoded = b64encode(video)
video_tag = '<video controls alt="PyMol Movie" src="data:video/mp4;base64,{0}" type="video/mp4">'.format(video_encoded)
HTML(data=video_tag)
Образование билипидного слоя происходит приблизительно на 60-ой итерации, что соответствует моменту времени t = 24500.
Если из файла b_pbc_1.pdb вывести координаты только первого атома для каждого липида, то будет видно, что координата x у них почти не варьируется в отличие от координат y и z, откуда следует, что билипидный слой перпендикулярен оси X.
Выведем зависимость площади средней площади проекции одного липида на плоскость YoZ от времени.
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
table = np.loadtxt('box_1.xvg', skiprows=24)
plt.figure(1)
plt.plot(table[:,0], table[:,2])
plt.title('Y Axis Projection')
plt.xlabel('Time')
plt.ylabel('Y Projection')
plt.figure(2)
plt.plot(table[:,0], table[:,3])
plt.title('Z Axis Projection')
plt.xlabel('Time')
plt.ylabel('Z Projection')
plt.figure(3)
plt.plot(table[:,0], table[:,2] * table[:,3] / 32.)
plt.title('YoZ Area Projection')
plt.xlabel('Time')
plt.ylabel('YoZ Area')
Построим зависимость изменения гидрофобной и гидрофильной поверхностей доступных растворителю от времени:
import matplotlib.patches as mpatches
table = np.loadtxt('sas_b.xvg', skiprows=22)
plt.plot(table[:,0], table[:,1], 'r', table[:,0], table[:,2], 'g')
plt.xlabel('Time')
plt.ylabel('Solvent Available Area')
plt.title('Solvent Available Area')
red_patch = mpatches.Patch(color='red', label='Hydrophobic')
green_patch = mpatches.Patch(color='green', label='Hydrophilic')
plt.legend(handles=[red_patch, green_patch])
Видно, что уменьшается и гидрофильная и гидрофобная поверхности. За счет этого уменьшается энергия системы, что приводит к сборке фосфолипидного бислоя.
Визуализируем меру порядка для начала и конца траектории:
table = np.loadtxt('ord_start.xvg', skiprows=12)
plt.figure(1)
plt.title('Trajectory Start')
plt.plot(table[:,0], table[:,1])
table = np.loadtxt('ord_end.xvg', skiprows=12)
plt.figure(2)
plt.title('Trajectory End')
plt.plot(table[:,0], table[:,1])
Графики меры порядка для начала и конца траектории очень похожи.