[PYTHON] Il est temps d'arrêter de générer des SMILES avec RDKit

Aperçu

Si vous ne comprenez pas les options par défaut et que vous utilisez Chem.MolToSmiles, il est temps de passer votre diplôme. Une note résumée par cela.

environnement

RDkit 2020.03.5

Description de l'option

option La description
iosomericSmiles Incluez des informations sur la chimie stérique dans SMILES. La valeur par défaut est true
kekuleSmiles Utilisez le format Kekule (pas de liaison aromatique) avec SMILES. Le défaut est faux
rootedAtAtom Si ce n'est pas négatif, cela force SMILES à commencer à un atome particulier. La valeur par défaut est-1
canonical Si faux, il ne sera pas normalisé. La valeur par défaut est true.
allBondsExplicit Si true, tous les ordres de jointure sont explicitement imprimés dans la sortie SMILES. Le défaut est faux.
allHsExplicit Si vrai, tous les comptages H sont explicitement sortis dans la sortie SMILES. Le défaut est faux.

essayons

Créez une telle méthode pour vérifier l'opération autre que rootedAtAtom.

def generate_smiles(old_smiles, isometric=True, kekule=False, allBondsExplicit=False, allHsExplicit=False, canonical=True):
    print(f"\n\ngenerate smiles {old_smiles}")
    print(f"prev smiles = {old_smiles}")
    old_mol = Chem.MolFromSmiles(old_smiles)
    new_smiles = Chem.MolToSmiles(old_mol, isomericSmiles=isometric, kekuleSmiles=kekule,
                                 allBondsExplicit=allBondsExplicit, allHsExplicit=allHsExplicit, canonical=canonical)

    print(f"new smiles = {new_smiles}")

SMILES à tester

Vérifions avec ce gars qui a des informations en trois dimensions et des informations sur les anneaux aromatiques.

C[C@H]1COC2=C1C(=O)C(=O)c1c2ccc2c1CCCC2(C)C

Lors du changement de sourires isométriques de la valeur par défaut true à flase

CC1COC2=C1C(=O)C(=O)c1c2ccc2c1CCCC2(C)C

Oh, les informations tridimensionnelles ont disparu.

Lorsque canonical est changé de la valeur par défaut true à flaz

C[C@H]1COC2=C1C(=O)C(=O)c1c2ccc2c1CCCC2(C)C

Pas de changement. Il est possible que le SMILES original soit canonique.

Lors du changement de kekureSmiles de la valeur par défaut false à true

C[C@H]1COC2=C1C(=O)C(=O)C1:C2:C:C:C2:C:1CCCC2(C)C

c est devenu une majuscule et le nombre de deux points a augmenté. -Et = alternatif, n'est-ce pas un modèle?

Lorsque allBondsExplicit passe de la valeur par défaut false à true

C-[C@H]1-C-O-C2=C-1-C(=O)-C(=O)-c1:c-2:c:c:c2:c:1-C-C-C-C-2(-C)-C

La liaison simple est également sortie correctement. Eh bien, c'est bruyant (rires).

Lorsque allHsExplicit passe de la valeur par défaut false à true

[CH3][C@H]1[CH2][O][C]2=[C]1[C](=[O])[C](=[O])[c]1[c]2[cH][cH][c]2[c]1[CH2][CH2][CH2][C]2([CH3])[CH3]

L'hydrogène implicite a été révélé. Encore plus bruyant (rires)

Enfin, définissez allBondsExplicit et allHsExplicit sur true en même temps (bonus)

 [CH3]-[C@H]1-[CH2]-[O]-[C]2=[C]-1-[C](=[O])-[C](=[O])-[c]1:[c]-2:[cH]:[cH]:[c]2:[c]:1-[CH2]-[CH2]-[CH2]-[C]-2(-[CH3])-[CH3]

Pour les personnes qui ne savent pas lire entre les lignes.

référence

https://www.rdkit.org/docs/source/rdkit.Chem.rdmolfiles.html

Recommended Posts

Il est temps d'arrêter de générer des SMILES avec RDKit
Il est maintenant temps d'installer DB avec Docker! Installation de la base de données pour les débutants sur Docker
Comment implémenter le traitement du temps d'attente avec wxpython
Comment mesurer le temps d'exécution avec Python Partie 1
Comment mesurer le temps d'exécution avec Python, partie 2
Arrêter EC2 pendant l'heure spécifiée + démarrer avec Lambda (python)
[Introduction à WordCloud] Il est facile à utiliser même avec Jetson-nano ♬
Comment mesurer le temps de lecture d'un fichier mp3 avec python
Pour éviter de passer du temps à colorier des personnages dessinés avec du python
Il est trop difficile d'afficher le japonais avec le python3 de Vim.