假设我有两个 PDB 文件(其中一个如下)
ATOM 1 N MET A 1 66.104 56.583 -35.505
ATOM 2 CA MET A 1 66.953 57.259 -36.531
ATOM 3 C MET A 1 67.370 56.262 -37.627
ATOM 4 O MET A 1 67.105 55.079 -37.531
ATOM 5 CB MET A 1 68.227 57.852 -35.867
ATOM 6 CG MET A 1 67.848 58.995 -34.899
ATOM 7 SD MET A 1 66.880 58.593 -33.421
.... . .. ... . . ...... ...... ......
.... . .. ... . . ...... ...... ......
可以使用以下脚本在 python 中读取此文件。
import sys
x=[];y=[];z=[]
res=[]
Nr=0
for fn in sys.argv[1:]:
f=open(fn,'r')
while 1:
line=f.readline()
if not line: break
if line[0:6]=='ATOM ' :
rx=float(line[30:38]);ry=float(line[38:46]);rz=float(line[46:54])
if line[21]=='A' :
x.append(rx); y.append(ry); z.append(rz)
Nr=Nr+1
res.append(line[17:20])
for i in range(1,Nr-1):
print fn, i, res[i], x[i], y[i], z[i]
f.close
现在我想生成N*N*N
维度网格并旋转和平移网格上的分子。旋转和平移可以通过使用 FFT(快速傅里叶变换)来完成。
我试着写如下
import numpy as np
import fftw as fft
class Grid3D(object):
def __init__(self, grid_dimension):
x = y = z = grid_dimension
self.grid = np.zeros([x, y, z], dtype=float)
这一切实际上是为了使用 3d 网格和 FFT 对两个分子进行对接。我想知道如何进一步或更好的方法?