Как выбрать только РНК с гетероатомами из файла pdb с помощью python?

Я пытаюсь отделить РНК от белка в сложном PDB-файле белок / РНК, и мне нужна вся информация о РНК с гетероатомами между основаниями, НО без H2O и т. Д. Короче говоря, я хочу, чтобы РНК-часть файла pdb была без прерывистых линий.

Мне удалось отделить РНК от белка с помощью Bio PDB Select, но он считает гетероатомы аминокислотами, когда я использую is_aa (остаток). Так что гетероатомы не появятся в моем файле «только РНК».

from Bio.PDB import *
from Bio.PDB import PDBParser, PDBIO, Select
import os

class ProtSelect(Select):
    def accept_residue(self, residue):
        return 1 if is_aa(residue) == True else 0

class RNASelect(Select):
    def accept_residue(self, residue):
        return 1 if is_aa(residue) == False and residue.id[0] != "W" else 0

pdb = PDBParser().get_structure("2bh2", "pdb2bh2.ent")
io = PDBIO()
io.set_structure(pdb)
io.save("seqprotest.pdb", ProtSelect())
io.save("seqRNAtest.pdb", RNASelect())

person Raph    schedule 12.07.2019    source источник
comment
возможно, этот вопрос можно было бы перенести на bioinformatics.SE.   -  person marcin    schedule 12.07.2019


Ответы (1)


Вы пытались установить для аргумента standard=True значение is_aa?

Беглый взгляд на результаты следующего кода кажется мне многообещающим:

from Bio.PDB import is_aa
from Bio.PDB import PDBParser, PDBIO, Select


class ProtSelect(Select):
    def accept_residue(self, residue):
        print(f"{residue} -> {is_aa(residue)}")
        return is_aa(residue, standard=True)


class RNASelect(Select):
    def accept_residue(self, residue):
        return (not is_aa(residue, standard=True)) and residue.id[0] != "W"


from Bio import PDB

repo = PDB.PDBList()
repo.retrieve_pdb_file("2bh2", file_format="pdb")

pdb = PDBParser().get_structure("2bh2", "bh/pdb2bh2.ent")
io = PDBIO()
io.set_structure(pdb)
io.save("seqprotest.pdb", ProtSelect())
io.save("seqRNAtest.pdb", RNASelect())

Обратите внимание, что я добавил вызов retrieve_pdb_file, чтобы создать автономный пример из вашего вопроса.

Результат на данный момент:

  • 112 HETATM, которые не являются HOH в pdb2bh2.ent
  • Нет HETATM в seqprotest.pdb
  • 112 HETATM в seqRNAtest.pdb
person Lydia van Dyke    schedule 05.04.2020