Wie kann ich eine PDB-Datei in Python so reduzieren, dass sie nur bestimmte Reste enthält?

Ich versuche, ein Skript zu erstellen, das eine MTZ-Datei (Reflexionen) aufnimmt, sie in eine CCP4-Karte konvertiert und diese Karte dann so reduziert, dass sie nur einen gewünschten Bereich umfasst, um die Größe meiner PyMol-Sitzungsdateien zu verringern, damit sie ' E-Mail-fähig (auch bekannt als nicht 200 MB) und entlasten meinen POS-Computer.

Ich habe derzeit ein Python-Skript, mit dem fft(CCP4) die Karte erstellt und mapmaskProbleme mit der Kachelung von Einheitszellen behoben werden können. Was ich jetzt hinzufügen möchte, ist etwas, das eine PDB-Datei nehmen und das meiste davon entfernen kann, außer zum Beispiel Reste innerhalb von 10 Å von # 123.

Ich habe mir ProDy angesehen , bin mir aber nicht ganz sicher, wo ich anfangen soll. Ich wäre auch offen dafür, etwas aus dem CCP4-Toolkit zu verwenden.

Ich bin auch neugierig auf das PDB-Format. Wenn Sie bereits eine PDB-Dateiausgabe haben, können Sie versuchen, alle Informationen außer den ATOM-Zeilen zu entfernen, und außerdem alle ATOM-Zeilen entfernen, die Atome von Resten außerhalb des Bereichs einer Teilmenge Ihrer Struktur auflisten. Wenn Sie es in PyMol anzeigen könnten, ist das vielleicht gut genug?
@leonardo Eine Art manueller Hack wie dieser kann funktionieren (da mapmasksich sowieso ein wenig zu erweitern scheint), scheint aber nicht so optimal zu sein. Ich werde eine Weile darauf herumschlagen und Sie wissen lassen, was ich herausgefunden habe.
Ist es möglich, ein PDB-Anzeigeprogramm zu verwenden, um einen Unterbereich einer einzelnen Kette auszuwählen und eine neue PDB zu speichern? Wenn ja, möchten Sie vielleicht die Quelldatei mit der Unterregionsdatei vergleichen und sehen, ob es tatsächlich so einfach ist, und sich dann eine Lösung hacken.
Pymol hat einen Auswahloperator, der alles in einem bestimmten Abstand um ein Atom herum abgleicht, es sollte möglich sein, das für diesen Zweck zu verwenden.
@MadScientist aus einem Skript heraus, das außerhalb von PyMol läuft?
Ich habe manuell im Programm nachgedacht, aber wenn Sie es automatisieren müssen, können Sie meiner Meinung nach die Pymol-Bibliothek von jedem Python-Skript aus verwenden.
Besser geeignet für scicomp.se?
@David, der mit dieser Seite nicht vertraut ist, wenn Sie der Meinung sind, dass es dort besser ist, können Sie gerne einen Mod als herunter markieren.

Antworten (2)

Mit dem Programm RasMol kann man, wie Mad Scientist es für PyMol erklärt hat, alles in einem bestimmten Abstand um ein Atom selektieren. RasMol kann mithilfe eines Skripts (mit der Option -script unter UNIX) von der Befehlszeile aus ausgeführt werden.

ProDy funktioniert recht gut, insbesondere innerhalb eines vorhandenen Python-Skripts.

Der folgende Code nimmt eine vorhandene PDB-Datei, führt eine Auswahlabfrage dafür durch und speichert sie dann in einer anderen Datei.

import prody

def pdbsubset(inpdb, outpdb, selection):
    with open(inpdb) as protf:
        prot = prody.parsePDBStream(protf)
    atoms = prot.select(selection)
    prody.writePDB(outpdb, atoms)

Ein Beispiel für den Builder für Auswahlabfragen

  • residuesist eine Liste zB ['A12', 'A39'] mit jedem Element in der Form <chain><residue number>. Sie wurden über die Befehlszeile mit argparsewith erfasst

        parser.add_argument('-i', '--residues', nargs='+')
    
    • so würden Sie angeben -i A12 A39oder was auch immer.
  • pdbund outpdbsind Dateipfade
  • radiusist der Abstand in Angström, um den die Auswahl erweitert werden soll.
reslist = ["(chid {0} and resid {1})".format(res[0], res[1:]) for res in residues]
selector = 'within {0} of ({1})'.format(radius, ' or '.join(reslist))

# and running it:
pdbsubset(pdb, outpdb, selector)

Die Dokumentation zu ProDy-Auswahlabfragen ist nicht die einfachste, aber ziemlich analog zu PyMol, also machbar.