首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蛋白质结构和网格的蒙特卡罗模拟

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

Stack Overflow用户
提问于 2013-09-19 17:50:37
回答 3查看 1.8K关注 0票数 12

我正在研究蛋白质结构的蒙特卡罗模拟脚本。我以前从来没有做过蒙特卡洛脚本。我将大规模地扩展这个项目。根据蛋白质xyz坐标,我必须定义盒子的大小。这个方框将被分成一个大小为0.5A的网格,基于距离和角度标准,我必须基于玻尔兹曼概率分布来分配点。

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

下面是我生成随机点的代码

代码语言:javascript
复制
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的网格。如何检查方框中的每个点。

任何帮助都是值得欣赏的。

EN

回答 3

Stack Overflow用户

发布于 2013-09-19 18:00:18

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

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

通常有两部分:空间中(x,y,z)点的网格和连接它们的长方体。具有两个元素的简单2D网格将如下所示:

代码语言:javascript
复制
D               E               F
o (1, 0) ------ o (1, 1) ------ o (1, 2)
+               +               +
+               +               +
+               +               +
o (0, 0) -------+ (0, 1) -------+ (0, 2)
A               B               C

此网格中有六个点:

代码语言:javascript
复制
A (0, 0)
B (0, 1)
C (0, 2)
D (1, 0)
E (1, 1)
F (1, 2)

和两个盒子:

代码语言:javascript
复制
1 - (A, B, E, D)
2 - (B, C, F, E)

因此,一种可能的方法是迭代所有的框,检查质心的位置,并进行相应的调整。

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

如果我没理解错的话,网格在空间里是固定的。你试图使蛋白质本身的运动随机化。这就像一个流体问题,一种欧拉方法:你在追踪材料相对于固定控制体积的运动。只不过它是蛋白质而不是液体。

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

我说得对吗?

票数 3
EN

Stack Overflow用户

发布于 2013-09-19 18:19:45

你有没有考虑过使用PyRosetta?它更容易使用,因为你需要的很多功能已经内置了。您可以在PyMol中实时可视化您的输出。我用PyRosetta写了一个类似的脚本,很容易写和修改,它做了它应该做的事情。

票数 3
EN

Stack Overflow用户

发布于 2013-09-21 03:49:25

我的代码是为蛋白质折叠应用程序编写的,但总体思想是相同的。它从一定的温度开始,逐步降低温度,蛋白质(或者在你的例子中是‘点’)被随机移动,如果新位置/结构的能量分数低于之前的位置/结构,它就会被接受,如果不是,姿势将根据Metropolis分布进行评估。你必须定义你的scorefunction(),一个定义随机开始位置的函数和一个从原始位置移动你的点的mover。下面的代码是从我的原始脚本修改的,只是为了给你一个大致的概念。

代码语言:javascript
复制
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!'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18891472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档