Python 蛋白质结构和网格的蒙特卡罗模拟

Python 蛋白质结构和网格的蒙特卡罗模拟,python,numpy,simulation,montecarlo,chemistry,Python,Numpy,Simulation,Montecarlo,Chemistry,我正在研究蛋白质结构的蒙特卡罗模拟脚本。我以前从未做过蒙特卡洛脚本。我将大规模推广这个项目。 根据蛋白质xyz坐标,我必须定义盒子的大小。此框将被划分为大小为0.5 a的网格。根据距离和角度标准,我必须根据Boltzmann概率分布分配点 我的程序应该以0.5 A的网格向每个方向移动,生成随机点,并检查距离和角度的条件。如果满足条件,则将该点放在那里,否则根据玻尔兹曼概率分布丢弃该点 这是我生成随机点的代码 from __future__ import division import

我正在研究蛋白质结构的蒙特卡罗模拟脚本。我以前从未做过蒙特卡洛脚本。我将大规模推广这个项目。 根据蛋白质xyz坐标,我必须定义盒子的大小。此框将被划分为大小为0.5 a的网格。根据距离和角度标准,我必须根据Boltzmann概率分布分配点

我的程序应该以0.5 A的网格向每个方向移动,生成随机点,并检查距离和角度的条件。如果满足条件,则将该点放在那里,否则根据玻尔兹曼概率分布丢弃该点

这是我生成随机点的代码

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的网格。如何检查框中的每个点。
任何帮助都是值得的

我喜欢你的主题、问题和方法。我不知道它会在这里呆多久

矩形空间中的三维网格在有限元分析和所有其他分析物理问题的技术中都很常见。看看网格是如何生成的

通常有两部分:空间中(x,y,z)点的网格和连接它们的方框。包含两个元素的简单二维网格如下所示:

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)
因此,一种可能的方法是迭代所有框,检查质心的位置,并相应地进行调整

我将从代码中外部化网格定义,并从文件中读取它。这样,您可以使用相同的代码处理不同的网格

如果我理解正确,网格将在空间中保持固定。你试图使蛋白质本身的运动随机化。这就像一个流体问题,一个欧拉方法:你在跟踪物质相对于固定控制体积的运动。只是它是一种蛋白质而不是液体

所以你也会对空间中蛋白质的初始条件有一个单独的定义。你计划及时增加它,看看蛋白质是如何按照你的规则折叠的


我接近吗?

< P>你是否考虑使用PyReleta?它更易于使用,因为您需要的许多功能已经内置。您可以在PyMol中实时可视化输出。我用PyRosetta编写了一个类似的脚本,非常容易编写和修改,它完成了它应该做的事情。

我的代码是为蛋白质折叠应用程序编写的,但总体思路是相同的。它从特定温度开始,逐步降低温度,蛋白质(或在您的情况下“点”)随机移动,如果新位置/结构的能量分数低于前一个,则可接受,否则将根据Metropolis分布评估姿势。您必须定义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!'
kT_下限=0.1
kT_上限=100
ktemp=kT_上
最大迭代次数=15000次
i=-1
#创建随机起点
姿势=创建_姿势()
#评估起点
开始得分=得分功能(姿势)

而我却在等待达菲莫。我不是在研究蛋白质的运动,而是试图在蛋白质附近指定一组点,这些点与蛋白质原子形成相互作用。我是用随机点生成的,但是每次我得到新的结果时都用这个程序。所以我想到了这个方法。我知道派罗塞塔。我正在做一个大项目,正在开发一个程序。所以我不能使用这样的可用程序。如果可能的话,你可以提供你的脚本给我或给我一些想法如何生成框和定义网格。谢谢。所以,你有一堆3D点,你想生成一个包含所有点的盒子吗?顺便说一句,我真诚地希望你知道你在做什么:蛋白质折叠通常具有多个极小值,而天真的MC模拟往往会卡住。定义盒子和网格大小,我将生成点,然后进行进一步计算。如何定义长方体和栅格不知道???????我的循环将如何从各个方向移动?????出于好奇,你为什么不使用当前的、免费的、支持GPU的MC程序?我用过的那些会以任何你想要的方式随机化起点。你看过吗?虽然是用C语言编写的,但我相信您会对实现有一些了解,这将有助于您编写python代码。从外观和声音上看,这都是使用模拟退火进行优化的结果。这是模拟退火,或者至少是我对模拟退火概念的理解。你好,Ashafix。我又卡住了。你能给我你的电子邮件地址,这样我就可以接受你的帮助,而不会在这个网站上发垃圾邮件。我有同样的疑问。我有这个想法,但在实施过程中遇到了困难。嗨,阿瓦尼特,我很乐意帮忙。只需查看我的个人资料,并通过其他个人资料页面向我发送消息。