Монте-Карло моделирование структуры и сетки белка

Я работаю над сценарием моделирования Монте-Карло над структурой белка. Я никогда раньше не писал скриптов в Монте-Карло. Я буду масштабно расширять эту программу. По координатам белка xyz я должен определить размер коробки. Это поле будет разделено на сетку размером 0,5 А. На основании критериев расстояния и угла я должен назначить точку на основе распределения вероятностей Больцмана.

Структура белка в трехмерном блоке, показывающая сетку

Моя программа должна двигаться в каждом направлении, беря сетку 0,5 А, генерировать случайную точку и проверять условие расстояния и угла. Если выполнено условие, поставьте точку, в противном случае отбросьте эту точку на основе распределения вероятностей Больцмана.

Вот мой код для генерации случайных точек

from __future__ import division    
import math as mean    
from numpy import *   
import numpy as np   
from string import *    
from random import *    

def euDist(cd1, cd2):# calculate distance
    d2 = ((cd1[0]-cd2[0])**2 + (cd1[1]-cd2[1])**2 + (cd1[2]-cd2[2])**2)
    d1 = d2 ** 0.5
    return round(d1, 2)

def euvector(c2,c1):# generate vector
    x_vec = (c2[0] - c1[0])
    y_vec = (c2[1] - c1[1])
    z_vec = (c2[2] - c1[2])
    return (x_vec, y_vec, z_vec)


 for arang in range(1000):  # generate random point
        arang = arang + 1
        x,y,z = uacoord
        #print x,y,z

        x1,y1,z1 = (uniform(x-3.5,x+3.5), uniform(y-3.5,y+3.5), uniform(z-3.5,z+5))
        pacord = [x1,y1,z1]                 # random point coordinates
        print pacord

Я совершенно поражен, как сгенерировать размер блока из координат xyz структуры белка и как определить сетку размером 0,5. Как проверить каждую точку в поле.
Любая помощь будет заметна.


person awanit    schedule 19.09.2013    source источник
comment
Итак, у вас есть набор точек в 3D, и вы хотите создать блок, содержащий их все?   -  person ev-br    schedule 19.09.2013
comment
В стороне, я искренне надеюсь, что вы знаете, что делаете: сворачивание белка обычно имеет несколько минимумов, а наивное моделирование MC имеет тенденцию застревать.   -  person ev-br    schedule 19.09.2013
comment
определяя размер прямоугольника и сетки, я сгенерирую точку, а затем выполнит дальнейшие вычисления. Как определить бокс и сетку не знаю ??????? как моя петля будет двигаться в каждом направлении ?????   -  person awanit    schedule 19.09.2013
comment
Из любопытства, почему вы не используете одну из текущих бесплатных программ MC с поддержкой графического процессора? Те, которые я использовал, будут рандомизировать начальные точки любым способом, который вы пожелаете.   -  person Daniel    schedule 19.09.2013
comment
Вы смотрели github.com/ndexter/Aeolotopic- Моделирование методом Монте-Карло / blob /? Хотя он написан на C, вы получите некоторое представление о реализации, и я считаю, что это поможет вам в написании кода Python.   -  person Nehal Dattani    schedule 18.10.2013
comment
Чем ты закончил?   -  person 0x90    schedule 03.03.2018


Ответы (3)


Мне нравится ваша тема, вопрос и подход. Не знаю, как долго он здесь продержится.

Трехмерная сетка в прямоугольном пространстве широко используется в анализе методом конечных элементов и во всех других методах анализа физических задач. Посмотрите, как создаются сетки.

Обычно есть две части: сетка из (x, y, z) точек в пространстве и блоки, которые их соединяют. Простая 2D-сетка с двумя элементами будет выглядеть так:

D               E               F
o (1, 0) ------ o (1, 1) ------ o (1, 2)
+               +               +
+               +               +
+               +               +
o (0, 0) -------+ (0, 1) -------+ (0, 2)
A               B               C

В этой сетке шесть точек:

A (0, 0)
B (0, 1)
C (0, 2)
D (1, 0)
E (1, 1)
F (1, 2)

и два ящика:

1 - (A, B, E, D)
2 - (B, C, F, E)

Таким образом, одним из возможных подходов было бы перебрать все поля, проверить положение в центроиде и соответствующим образом отрегулировать.

Я бы вынес определение сетки из вашего кода и прочитал его из файла. Таким образом, вы можете обрабатывать разные сетки одним и тем же кодом.

Если я вас правильно понял, сетка останется неподвижной в пространстве. Вы пытаетесь рандомизировать движение самого белка. Это похоже на проблему с жидкостями, подход Эйлера: вы отслеживаете движение материала относительно фиксированного контрольного объема. За исключением того, что это белок, а не жидкость.

Так что у вас также будет отдельное определение начального состояния белка в космосе. Вы планируете постепенно увеличивать его, чтобы увидеть, как белок сворачивается в соответствии с вашими правилами.

Я близко?

person duffymo    schedule 19.09.2013
comment
Спасибо, duffymo. Я не наблюдаю за движением белка, но пытаюсь назначить набор точек, которые находятся в непосредственной близости от белка и образуют взаимодействие с атомами белка. Я делал это с генерацией случайных точек, но с этой программой каждый раз получал новый результат. Вот я и подумал об этом подходе. - person awanit; 19.09.2013

Вы рассматривали возможность использования PyRosetta? Его намного проще использовать, поскольку многие нужные вам функции уже встроены. Вы можете визуализировать свой вывод в реальном времени в PyMol. Я написал аналогичный сценарий на PyRosetta, довольно простой в написании и изменении, и он делал то, что должен был делать.

person Maximilian Peters    schedule 19.09.2013
comment
Я знаю PyRosetta. Я работаю над большим проектом и разрабатываю программу. Так что я не могу использовать такую ​​доступную программу. Если возможно, вы можете предоставить мне свой сценарий или дать мне некоторое представление о том, как сгенерировать блок и определить сетку. Спасибо. - person awanit; 19.09.2013

Мой код был написан для приложения для сворачивания белков, но общая идея осталась прежней. Он начинается с определенной температуры и постепенно понижается, белок (или, в вашем случае, точка) перемещается случайным образом, если оценка энергии новой позиции / структуры ниже, чем предыдущая, она принимается, если нет поза будет оцениваться в соответствии с раздачей Метрополиса. Вы должны определить свою функцию scorefunction (), функцию для определения случайной начальной позиции и движок, который перемещает вашу точку из ее исходного положения. Приведенный ниже код изменен из моего исходного сценария, чтобы дать вам общее представление.

kT_lower=0.1
kT_upper=100
ktemp=kT_upper

max_iterations=15000

i=-1

#create random start point
pose=create_pose()

#evaluate start point
starting_score=scorefunction(pose)

while i<max_iterations:
    i=i+1
    new_pose=random_move(pose)
    if scorefunction(new_pose)<scorefunction(pose):
        pose=new_pose
    else:
        #linear decrease of kT
        ktemp=kT_upper-i*(kT_upper-kT_lower)/max_iterations
        #exponentatial decrease of kT
        #ktemp=math.exp(float(i)/float(max_iterations)*float(-5))*kT_upper+kT_lower

        try:
            p=math.exp(DeltaE/ktemp)
        except OverflowError:
            p=-1

        if random.random()<p:
            pose=new_pose
            print str(i)+'; accept new pose, metropolis'
        else:
            print str(i)+'; reject new pose!'
person Maximilian Peters    schedule 20.09.2013
comment
Внешний вид и звук очень напоминают оптимизацию с имитацией отжига. - person duffymo; 01.10.2013
comment
Это имитация отжига, или, по крайней мере, как я понял концепцию имитации отжига. - person Maximilian Peters; 03.10.2013
comment
Привет, Ashafix. Я снова застрял. Можете ли вы предоставить мне свой адрес электронной почты, чтобы я мог принять вашу помощь без спама на этом сайте. У меня такой же запрос. Идея пришла в голову, но реализовать ее не удалось. - person awanit; 16.10.2013
comment
Привет, Аванит, буду рад помочь. Просто проверьте мой профиль и отправьте мне сообщение через другую страницу профиля. - person Maximilian Peters; 23.10.2013