Prétraitement complet du composé Python

introduction

J'ai essayé d'organiser le prétraitement de composés souvent utilisés en Python.

environnement

Cette fois, j'ai utilisé la bibliothèque suivante. Voir Ressources pour les instructions d'installation. MolVS est une bibliothèque spécialisée dans le prétraitement de composés, mais il semble qu'elle soit également incorporée dans RDKit.

Prétraitement terminé

RDKit : SanitizeMol La formation de Kekure, la confirmation de la valence, la fixation de l'aromaticité, la conjugaison, l'hybridation, etc. sont effectuées. référence: http://rdkit.org/docs/source/rdkit.Chem.rdmolops.html

Si vous créez un objet mol à partir de Smiles depuis RDKit, il semble que cela soit fait par défaut. Envie d'utiliser après avoir édité l'objet mol par vous-même?

MolVS : Normarize référence: https://molvs.readthedocs.io/en/latest/guide/standardize.html

Une série de conversions pour corriger les erreurs de dessin courantes et normaliser les groupes d'objets. Est-ce une correction de charge?

Essayons-le pour le moment.

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)

Ci-dessus, le processus de normalisation défini dans "Sulfone to S (= O) (= O)" est exécuté de manière sélective. Le résultat est le suivant, et les charges de l'atome de soufre et de l'atome d'oxygène ont changé. Si vous générez un normalisateur sans arguments, tous les processus de normalisation définis dans MolVS à l'avance seront exécutés.

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

MolVS : TautomerCanonicalizer Référence: https://molvs.readthedocs.io/en/latest/guide/tautomer.html Il semble que Tautomer soit un ensemble de molécules qui s'échangent facilement les unes avec les autres grâce au mouvement des atomes d'hydrogène. Un exemple typique est le phénol. (Exemple de phénol) https://en.wikipedia.org/wiki/File:Phenol_tautomers.svg

essayons.

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))

Ci-dessus, le procédé Tautoemer défini par la règle «1,7 hétéroatome aromatique H shift r» est exécuté sélectivement par le phénol Tautomer. En conséquence, le phénol est produit comme suit. Si TautomerCanonicalizer est généré sans aucun argument, tous les processus Tautoemer définis dans MolVS à l'avance seront exécutés.

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

MolVS : LargestFragmentChooser Référence: https://molvs.readthedocs.io/en/latest/api.html#molvs-fragment En gros, lorsque plusieurs molécules sont incluses, la plus grosse molécule est renvoyée.

essayons

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))

Dans la partie supérieure, LargestFragmentChooser est appliqué à la liaison ionique de l'ion brome et d'une autre molécule, mais celle dans laquelle l'ion brome est éliminé est générée comme indiqué dans la partie inférieure.

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: Uncharger

Référence: https://molvs.readthedocs.io/en/latest/api.html#molvs-charge

Il tente de neutraliser les acides ionisés et les bases de la molécule. essayons.

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))

Le sommet est une molécule contenant des acides et des bases ionisés, mais lorsque Uncharger est appliqué, il est neutralisé comme indiqué ci-dessous.

prev:c1cc[nH+]cc1
after:c1ccncc1

en conclusion

Certaines des choses qui n'ont pas pu être introduites cette fois étaient des traitements tels que "MolVS: réionisation" et "MolVS: Déconnecter les métaux", mais l'explication est omise car le composé cible n'a pas pu être imaginé. Voir les références pour plus de détails.

Les références

Recommended Posts

Prétraitement complet du composé Python
Python
[Python] Mémo de prétraitement complet tel quel