Как найти центр в структуре. код Python

Я новичок в программировании на питоне.

Я работаю над структурными координатами.

У меня есть структура pdb из 1000 атомов, которые имеют информацию о координатах xyz.

Моя структура может иметь любую форму.

Я изо всех сил пытаюсь найти центральную точку внутри структуры. Из центральной точки я хочу нарисовать сферу радиусом 20 см.

                                 X        Y      Z
ATOM      1  N   SER A   1      27.130   7.770  34.390    
ATOM      2  1H  SER A   1      27.990   7.760  34.930     
ATOM      3  2H  SER A   1      27.160   6.960  33.790    
ATOM      4  3H  SER A   1      27.170   8.580  33.790    
ATOM      5  CA  SER A   1      25.940   7.780  35.250    
ATOM      6  CB  SER A   1      25.980   9.090  36.020    
ATOM      7  OG  SER A   1      26.740  10.100  35.320    
ATOM      8  HG  SER A   1      26.750  10.940  35.860    
ATOM      9  C   SER A   1      24.640   7.790  34.460    
ATOM     10  O   SER A   1      24.530   8.510  33.500    
ATOM     11  N   CYS A   2      23.590   7.070  34.760    
ATOM     12  H   CYS A   2      23.590   6.550  35.610    
ATOM     13  CA  CYS A   2      22.420   7.010  33.900    
ATOM     14  CB  CYS A   2      21.620   5.760  34.270    
ATOM     15  SG  CYS A   2      22.480   4.210  33.970    
ATOM     16  C   CYS A   2      21.590   8.220  34.040    
ATOM     17  O   CYS A   2      21.370   8.690  35.160   

я пробую это

from __future__ import division
import math as mean
import numpy as nx
from string import*


infile = open('file.pdb', 'r')           #open my file
text1 = infile.read().split('\n')
infile.close()

text = []
for i in text1:
if i != '':
    text.append(i)

for j in text:
x1 = eval(replace(j[30:38], ' ', ''))         #extract x-coordinate
y1 = eval(replace(j[38:46], ' ', ''))         #extract y-coordinate
z1 = eval(replace(j[46:54], ' ', ''))         #extract z-coordinate

idcord = []
idcord.append(x1); idcord.append(y1); idcord.append(z1)

cenpoint = nx.mean(idcord)   # center point
print cenpoint

person awanit    schedule 10.09.2013    source источник


Ответы (2)



Вероятно, вы захотите создать список значений для каждой оси, а затем получить среднее значение для каждого такого списка.
Давайте начнем с чтения файла. Способ чтения файла следующий:

xval = []
yval = []
zval = []
with open('file.pdb') as fin:
    for line in fin:
        if line.startswith('ATOM'):
            line_vals = line.strip().split()
            xval.append(line_vals[6])
            yval.append(line_vals[7])
            zval.append(line_vals[8])

Затем продолжайте и вычислите среднее значение каждого списка, используя math.mean

person asafpr    schedule 10.09.2013