2017-01-11 14 views
3

Я пытаюсь найти, будут ли два атома, принадлежащие двум различным цепям, рассматриваться как «связанные» или нет. Это основано на том, что если расстояние (эвклидово, которое можно найти через заданные координаты x, y, z) короче ван-дер-ваальса двух атомов плюс 0,5 А, то оно считается связанным. Проблема в том, что я не понял, как вычислить ван дер Ваальса для каждого атома. Поскольку в PDB имена атомов похожи на CB1, CA и т. Д., А не на один атом. Я знаю, что радиусы Валса для N, например. Я могу написать код для вычисления атомного расстояния между атомами, но мне не удалось выполнить ван-дер-ваальсовскую часть, что существенно. Вот код, который я написал, чтобы извлечь информацию из двух цепочек и ссылку на PDB:Поиск связывания аминокислоты, база данных белка

http://www.rcsb.org/pdb/explore.do?structureId=3KUD

a = open('3kud.pdb', 'r') # opening the PDB file 
b = a.readlines() # reading the file line by line 
c = [x.strip('\n') for x in b] # extracting '\n' from each line 
d = [] 
# Creating a function that extract information from the given PDB list(only the ATOM parts) 
def pdbread(): 
    global C# calling c in order to define d based on c. 
    global d # empty list that contains all the atoms in the list 
    for i in range(len(c)): 
     if c[i].startswith('ATOM'): 
      d.append(c[i]) 
     else: 
      continue 
    return d 
print 'The atom part of the given PDB file', pdbread() 

w = [] # I, then, splitted the given whole atom list part so that each column could be read on the file. 
for i in range(len(d)): 
    line = d[i].split() 
    w.append(line) 
    Chain_A = [] 
    Chain_B = [] 
    for z in w: 
     if z[4] == 'A': 
      Chain_A.append(z) 
     if z[4] == 'B': 
      Chain_B.append(z) 

print 'Splitted form of the atom part of the PDB file', w 
print 'Chain A :', Chain_A 
print 'Chain B:', Chain_B 

Я могу создать цикл между этими двумя цепями и сравнить расстояния до тех пор, Я получаю, как вычислять радиусы Ван-дер-Ваальса между двумя атомами, которые могут взаимодействовать друг с другом.

EDIT: Я решил двигаться вперед, предполагая, что каждый атом является первой буквой, такой, что CB, OG1, являются углеродом и кислородом соответственно и будут принимать значение Ван-дер-Ваальса. Тем не менее, я до сих пор изо всех сил, чтобы написать код, чтобы создать цикл между двумя цепями и рассчитать расстояние в виде , если «vanderWaalsOfatomOfChainA + vanderWaalsOfatomOfChainB + 0,5»> «Их расстояние основано на евклидовой формуле»: и т.д.

EDIT: Мне удалось добавить ван-дер-Ваальса радиус каждого списка в Chain_A и Chain_B вот код:

for z in w: 
    if z[2][0] == 'N': 
     z.append(1.55) 
    if z[2][0] == 'O': 
     z.append(1.52) 
    if z[2][0] == 'C': 
     z.append(1.7) 
    if z[2][0] == 'S': 
     z.append(1.8) 
    if z[2][0] == 'H': 
     z.append(1.2) 

Но все, что мне нужно, чтобы узнать, как создать цикл для обоих цепей. Я имею в виду, что мне приходится сравнивать все атомы A и B. 12. Слот в каждом списке дает радиус Ван-дер-Ваальса, и мне нужно вычислить 12-й из каждого списка A плюс 12-й из каждого списка B плюс 0,5 и сравнить его с формула евклидова!

ОКОНЧАТЕЛЬНЫЙ РЕДАКТОР: Написал этот код, но он не работает! Основываясь на этой идее, я должен сравнить каждый элемент Chain_A с Chain_B.

A_binding = [] 
B_binding = [] 
for x,y in zip(Chain_A, Chain_B): 
    if x[12] + y[12] + 0.5 > sqrt((float(x[6])-float(y[6]))**2 + (float(x[7])-float(y[7]))**2 + (float(x[8])-float(y[8]))**2): 
     A_binding.append(x) 
     B_binding.append(y) 
print A_binding 
print B_binding 
+0

Почему вы не используете какую-либо библиотеку информатики для тяжелой атлетики? – Hristo

+0

, потому что я должен написать сценарий. Я собираюсь сделать больше EDIT сейчас с фактическим кодом, я что-то сделал, и это может сработать. – aleatha

ответ

0

Может быть, это может помочь вам:

Atoms force field values

часть, которая вас интересует это epsilon_vdw_PDB() [0]. Он дает вам все значения атомов van der waalz. Этот файл исходит из недавнего проекта, который я сделал, и был предоставлен моими преподавателями.

Кстати, почему бы вам не сделать 2 для петель? Один для цепи A, а другой для цепи B. Я не пробовал ваш код, но длина A может отличаться от B. Когда вы используете zip(), длина двух объектов внутри() должна быть равна Я думаю (не проверял).

 Смежные вопросы

  • Нет связанных вопросов^_^