Carregando agora

Como ler um arquivo mmCIF

Compartilhe:

Resumo: usando Python 

Macromolecular Crystallographic Information File (mmCIF), também conhecido como PDBx, é o novo formato usado para armazenamento de estruturas de proteínas e outras macromoléculas, que surgiu para substituir o formato PDB.

Similar aos arquivos PDB, os átomos são armazenados em linhas iniciadas com a palavra ATOM.

Observe um exemplo a seguir no formato mmCIF (ID: 1BGA):

ATOM   1     N N   . THR A 1 1   ? 61.990  84.851  70.908 1.00 32.14 ? 2   THR A N   1 
ATOM   2     C CA  . THR A 1 1   ? 62.828  85.531  69.934 1.00 20.14 ? 2   THR A CA  1 
ATOM   3     C C   . THR A 1 1   ? 62.799  85.087  68.476 1.00 17.99 ? 2   THR A C   1 
ATOM   4     O O   . THR A 1 1   ? 62.825  83.895  68.164 1.00 18.99 ? 2   THR A O   1 
ATOM   5     C CB  . THR A 1 1   ? 64.279  85.578  70.437 1.00 17.25 ? 2   THR A CB  1 
ATOM   6     O OG1 . THR A 1 1   ? 64.266  85.699  71.855 1.00 15.05 ? 2   THR A OG1 1 
ATOM   7     C CG2 . THR A 1 1   ? 65.017  86.785  69.894 1.00 15.54 ? 2   THR A CG2 1 
ATOM   8     N N   . ILE A 1 2   ? 62.751  86.085  67.597 1.00 13.43 ? 3   ILE A N   1 
ATOM   9     C CA  . ILE A 1 2   ? 62.752  85.907  66.153 1.00 15.97 ? 3   ILE A CA  1 
ATOM   10    C C   . ILE A 1 2   ? 64.130  86.302  65.611 1.00 15.81 ? 3   ILE A C   1 

Veja o mesmo conteúdo no formato PDB (ID: 1BGA):

ATOM      1  N   THR A   2      61.990  84.851  70.908  1.00 32.14           N  
ATOM      2  CA  THR A   2      62.828  85.531  69.934  1.00 20.14           C  
ATOM      3  C   THR A   2      62.799  85.087  68.476  1.00 17.99           C  
ATOM      4  O   THR A   2      62.825  83.895  68.164  1.00 18.99           O  
ATOM      5  CB  THR A   2      64.279  85.578  70.437  1.00 17.25           C  
ATOM      6  OG1 THR A   2      64.266  85.699  71.855  1.00 15.05           O  
ATOM      7  CG2 THR A   2      65.017  86.785  69.894  1.00 15.54           C  
ATOM      8  N   ILE A   3      62.751  86.085  67.597  1.00 13.43           N  
ATOM      9  CA  ILE A   3      62.752  85.907  66.153  1.00 15.97           C  
ATOM     10  C   ILE A   3      64.130  86.302  65.611  1.00 15.81           C  

No formato PDB, as informações estão em posições específicas, conforme pode ser visto na figura a seguir:

Formato PDB.

No formato PDBx (mmCIF), as posições das informações nas colunas podem variar de acordo com o arquivo de entrada. Para descobrir quais posições correspondem, você deve analisar as linhas iniciadas em _atom.site. que precedem as linhas iniciadas em ATOM .

No arquivo 2LZM.cif , as linhas de átomos armazenam 21 diferentes informações. A ordem de cada atributo indicará em que posição da linha ATOM ele estará. Observe o exemplo a seguir:

# loop_
# _atom_site.group_PDB            ATOM
# _atom_site.id                   2
# _atom_site.type_symbol          C
# _atom_site.label_atom_id        CA
# _atom_site.label_alt_id         .
# _atom_site.label_comp_id        MET
# _atom_site.label_asym_id        A
# _atom_site.label_entity_id      1
# _atom_site.label_seq_id         1
# _atom_site.pdbx_PDB_ins_code    ?
# _atom_site.Cartn_x              43.783 
# _atom_site.Cartn_y              -1.951 
# _atom_site.Cartn_z              8.984
# _atom_site.occupancy            1.00
# _atom_site.B_iso_or_equiv       29.12
# _atom_site.pdbx_formal_charge   ? 
# _atom_site.auth_seq_id          1
# _atom_site.auth_comp_id         MET
# _atom_site.auth_asym_id         A
# _atom_site.auth_atom_id         CA
# _atom_site.pdbx_PDB_model_num   1
# ATOM [...]

Ao final de cada linha foi adicionado um exemplo de dado que o campo em questão corresponde (o formato original não possui esse exemplo).

Note que o atributo _atom_site.id é o segundo item da lista, logo em cada linha de átomo, o id será o segundo valor exibido (os valores podem ser separados por um número variado de espaços).

Observe como podemos ler um arquivo PDBx usando Python:

# Lendo arquivo mmCIF
entrada = "2lzm.cif"
# obter as linhas
with open(entrada) as f:
linhas = f.readlines()
col = []    # colunas dos átomos no formato mmcif
atoms = []  # lista de átomos
# Obtendo as informações de colunas
for linha in linhas:
if linha.startswith("_atom_site."):
col.append(linha[11:].strip())
# Colunas indicam a ordem das informações nas linhas ATOM
x_index = col.index('Cartn_x')
y_index = col.index('Cartn_y')
z_index = col.index('Cartn_z')
cadeia_index = col.index('label_asym_id')
resn_index = col.index('label_comp_id')
resid_index = col.index('label_seq_id')
atom_name_index = col.index('label_atom_id')
atom_id_index = col.index('id')
# Coletando os átomos
for linha in linhas:
if linha.startswith("ATOM"):
linha = linha.split()
x = linha[x_index]
y = linha[y_index]
z = linha[z_index]
cadeia = linha[cadeia_index]
resn = linha[resn_index]
resid = linha[resid_index]
atom_name = linha[atom_name_index]
atom_id = linha[atom_id_index]
atoms.append({
"x":x, 
"y":y, 
"z":z,
"cadeia":cadeia,
"resn":resn,
"resid":resid,
"atom_name":atom_name,
"atom_id":atom_id
})
aa = {'ALA':'A','ARG':'R','ASN':'N','ASP':'D','CYS':'C','GLU':'E','GLN':'Q','GLY':'G','HIS':'H',
'ILE':'I','LEU':'L','LYS':'K','MET':'M','PHE':'F','PRO':'P','SER':'S','THR':'T','TRP':'W',
'TYR':'Y','VAL':'V','SEC':'U','PYL':'O','HYP':'O','MSE':'M','PCA':'Q','HID':'H','HIP':'H'}
# print(atoms)
for i in atoms:
if i['atom_name'] == 'CA':
# AMINOÁCIDO_ID : CADEIA
print(aa[i['resn']]+i['resid']+":"+i["cadeia"])

Ao executar este código, você cada aminoácido, seu número e a cadeia:

M1:A
N2:A
I3:A
F4:A
E5:A
[...]

URL Original da postagem: Read More

Compartilhe:

Deixe uma resposta

Postagens

Charles Corrêa Blog