Schließen Sie die Vorbehandlung der Python-Verbindung ab

Einführung

Ich habe versucht, die Vorbehandlung von Verbindungen zu organisieren, die in Python häufig verwendet werden.

Umgebung

Dieses Mal habe ich die folgende Bibliothek verwendet. Installationsanweisungen finden Sie unter Ressourcen. MolVS ist eine Bibliothek, die sich auf die Vorbehandlung von Verbindungen spezialisiert hat, aber anscheinend auch in RDKit enthalten ist.

Vorbehandlung abgeschlossen

RDKit : SanitizeMol Kekure-Bildung, Valenzbestätigung, Einstellung der Aromatizität, Konjugation, Hybridisierung usw. werden durchgeführt. Referenz: http://rdkit.org/docs/source/rdkit.Chem.rdmolops.html

Wenn Sie ein Mol-Objekt aus Smiles in RDKit erstellen, sieht es so aus, als ob es standardmäßig ausgeführt wird. Möchten Sie es verwenden, nachdem Sie das mol-Objekt selbst bearbeitet haben?

MolVS : Normarize Referenz: https://molvs.readthedocs.io/en/latest/guide/standardize.html

Eine Reihe von Konvertierungen, um häufig auftretende Zeichenfehler zu beheben und Feature-Gruppen zu standardisieren. Ist es eine Ladungskorrektur?

Lass es uns vorerst versuchen.

from rdkit import Chem
from molvs.normalize import Normalizer, Normalization

old_smiles = "[Na]OC(=O)c1ccc(C[S+2]([O-])([O-]))cc1"
print("PREV:" + old_smiles)
old_mol = Chem.MolFromSmiles(old_smiles)
normalizer = Normalizer(normalizations=[Normalization('Sulfone to S(=O)(=O)', '[S+2:1]([O-:2])([O-:3])>>[S+0:1](=[O-0:2])(=[O-0:3])')])
new_mol = normalizer.normalize(old_mol)
new_smiles = Chem.MolToSmiles(new_mol)
print("NEW:" + new_smiles)

Oben wird der in "Sulfon zu S (= O) (= O)" definierte Normalisierungsprozess selektiv ausgeführt. Das Ergebnis ist wie folgt und die Ladungen des Schwefelatoms und des Sauerstoffatoms haben sich geändert. Wenn Sie einen Normalisierer ohne Argumente generieren, werden alle im Voraus in MolVS definierten Normalisierungsprozesse ausgeführt.

PREV:[Na]OC(=O)c1ccc(C[S+2]([O-])([O-]))cc1
NEW: O=C(O[Na])c1ccc(C[S](=O)=O)cc1

MolVS : TautomerCanonicalizer Referenz: https://molvs.readthedocs.io/en/latest/guide/tautomer.html Es scheint, dass Tautomer eine Reihe von Molekülen ist, die sich durch die Bewegung von Wasserstoffatomen leicht miteinander austauschen können. Ein typisches Beispiel ist Phenol. (Beispiel für Phenol) https://en.wikipedia.org/wiki/File:Phenol_tautomers.svg

Lass es uns versuchen.

from rdkit import Chem
from molvs.tautomer import TAUTOMER_TRANSFORMS, TAUTOMER_SCORES, MAX_TAUTOMERS, TautomerCanonicalizer, TautomerEnumerator, TautomerTransform

tautomerCanonicalizer = TautomerCanonicalizer((
    TautomerTransform('1,7 aromatic heteroatom H shift r', '[#7,S,O,Se,Te,CX4;!H0]-[#6,#7X2]=[#6]-[#6,#7X2]=[#6,#7X2]-[#6,#7X2]=[NX2,S,O,Se,Te]'),
    ))

mol = Chem.MolFromSmiles("O=C1CC=CC=C1")
print("prev:" + Chem.MolToSmiles(mol))
mol2 = tautomerCanonicalizer.canonicalize(mol)
print("after: "+ Chem.MolToSmiles(mol2))

Oben wird der Tautoemer-Prozess, der durch die Regel '1,7 aromatische Heteroatom-H-Verschiebung' definiert ist, selektiv vom Phenol-Tautomer ausgeführt. Als Ergebnis wird Phenol wie folgt hergestellt. Wenn TautomerCanonicalizer ohne Argument generiert wird, werden alle im Voraus in MolVS definierten Tautoemer-Prozesse ausgeführt.

prev:O=C1C=CC=CC1
after: Oc1ccccc1

MolVS : LargestFragmentChooser Referenz: https://molvs.readthedocs.io/en/latest/api.html#molvs-fragment Wenn mehrere Moleküle enthalten sind, wird grob gesagt das größte Molekül zurückgegeben.

Lass es uns versuchen

from rdkit import Chem
from molvs.fragment import LargestFragmentChooser

flagmentChooser1 = LargestFragmentChooser()
old_smiles = "O=S(=O)(Cc1[nH]c(-c2ccc(Cl)s2)c[s+]1)c1cccs1.[Br-]"
print("prev:" + old_smiles)
mol = Chem.MolFromSmiles(old_smiles)
mol2 = flagmentChooser1(mol)
print("after:" + Chem.MolToSmiles(mol2))

Im oberen Teil wird LargestFragmentChooser auf die Ionenbindung von Bromionen und einem anderen Molekül angewendet, aber diejenige, in der Bromionen entfernt werden, wird wie im unteren Teil gezeigt erzeugt.

prev:O=S(=O)(Cc1[nH]c(-c2ccc(Cl)s2)c[s+]1)c1cccs1.[Br-]
after:O=S(=O)(Cc1[nH]c(-c2ccc(Cl)s2)c[s+]1)c1cccs1

MolVS: Ladegerät

Referenz: https://molvs.readthedocs.io/en/latest/api.html#molvs-charge

Es versucht, die ionisierten Säuren und Basen auf dem Molekül zu neutralisieren. Lass es uns versuchen.

from molvs.charge import Reionizer, Uncharger

uncharger = Uncharger()
mol = Chem.MolFromSmiles("c1cccc[nH+]1")
print("prev:" + Chem.MolToSmiles(mol))
mol2 = uncharger(mol)
print("after:" + Chem.MolToSmiles(mol2))

Die Oberseite ist ein Molekül, das ionisierte Säuren und Basen enthält, aber wenn Uncharger angewendet wird, wird es wie unten gezeigt neutralisiert.

prev:c1cc[nH+]cc1
after:c1ccncc1

abschließend

Einige der Dinge, die dieses Mal nicht eingeführt werden konnten, waren Verarbeitungsverfahren wie "MolVS: Reionisierung" und "MolVS: Metalle trennen", aber die Erklärung wird weggelassen, da die Zielverbindung nicht vorstellbar war. Einzelheiten finden Sie in den Referenzen.

Verweise

Recommended Posts

Schließen Sie die Vorbehandlung der Python-Verbindung ab
Python
[Python] Schließen Sie das Vorverarbeitungs-Memo so ab, wie es ist