Mapa de contados de uma estrutura no formato PDB

Esse é um exemplo grosseiro de como podemos utilizar o módulo biopython, no caso mais específico o módulo Bio.PDB, para criar um mapa de possíveis contatos entre todos os atomos de uma estrutura em formato PDB. Esse exemplo é ainda um rascunho, perdoem os erros de escrita. Entretanto o script deve funcionar. Tentei comentar o código em português e ingles simultaneamente.

#importa o modulo PDB do biopython
#import PDB module from biopython 
from Bio.PDB import * 

#import rpy, just to make use of R plotting system. Another plotting module, like matplotlib, can be used
# importa o modulo RPy simplesmente para usar seu sistema de plotagem. Poderia ser utilizado outro modulo
from rpy import * 

#Dado uma lista contendo atomos na estrutura do Bio.PDB, remove todos os heteroatomos
#Just a simple function to remove heteroatoms from a list of Bio.PDB atoms
def filter_heteroatoms(list_of_atoms): 
    filtered = []
    for atom in list_of_atoms:
        if len(atom.get_full_id()[3][0].strip()) == 0:
            filtered.append(atom)
    return filtered

#PDBParser é um classe que permite carregar os dados de uma estrutura PDB. Como é uma classe, necessita ser instanciada
# PDBParser is a class, so, you need to create an instance of it 
parser = PDBParser()  

#Carrega os dados da estrutura em pdb_filename.pdb
#parse data from pdb_filename.pdb
structure = parser.get_structure("structure_name", "pdb_filename.pdb") 

#Uma vez carregada a estrutura, crie uma lista com todos os atomos da estrutura 
# get all atoms from the structure and put them in a list
list_atoms = Selection.unfold_entities(structure, "A") 

#Entao remova os heteroatomos da lista de atomos
#Then, remove heteroatoms from the list of atoms
filtered_atoms = filter_heteroatoms(list_atoms) 

#Uma vez que os atomos estao acessiveis, vamos checar sobre possiveis interacoes entre eles
# Esse eh apenas um exemplo simples, para contatos confiaveis um maior refinamento do algoritimo se faz necessario

#Well, now we will look for possibles contacts between atoms from the structure
#This is a very simplistic example, for _reliable_ contact maps improvements are necessary

atoms_contact = []
x_axis = []
y_axis = []
#Os proximos dois lacos farao a comparacao de todos os contatos possiveis
#the next two "for" will iterate over all possible contacts
for x in range(len(filtered_atoms)): 
    for y in range(len(filtered_atoms)):
        ax, ay = filtered_atoms[x], filtered_atoms[y] 
    # if both atoms (ax and ay) are, at least, 6 residues far from each other
        # se  ambos os atomos (ax e ay) estao em residuos distantes entre si de, pelo menos, 6 residuos
        if ax.get_full_id()[3][1] - ay.get_full_id()[3][1] >= 6: 
        # and are distant no more than 2.5A
    # e ambos estao distantes entre si de nao mais que 2.5 A
          if ax-ay <= 2.5: 
                x_axis.append(ax.get_full_id()[3][1]) 
                y_axis.append(ay.get_full_id()[3][1])

# the contact map plot will be save at contact_map.png
# o mapa de contato sera salvo em contact_map.png
r.png("contact_map.png") 
# plotting the possible contacts 
# plota os possiveis contatos
r.plot(y= y_axis, x = x_axis, ylab="Contact", xlab="Contact") 
r.dev_off()
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License