Ich habe versucht, die Vorbehandlung von Verbindungen zu organisieren, die in Python häufig verwendet werden.
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.
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
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
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.