我正在处理蛋白质结构的蒙特卡洛模拟脚本。在蒙特卡洛脚本编写之前,我从未做过。我将大规模扩展该计划。根据蛋白质 xyz 坐标,我必须定义盒子大小。这个盒子将被分成大小为 0.5 A 的网格。根据距离和角度标准,我必须根据玻尔兹曼概率分布分配点。
我的程序应该通过 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 的网格。如何检查框中的每个点。
任何帮助都将是可观的。