[PYTHON] Essayez de ne faire réagir que le carbone en bout de chaîne avec SMARTS

introduction

Dans Définir le modèle de réaction avec SMARTS avec RDKit et générer un réactif, la réaction avec SMARTS est effectuée avec RDKit en utilisant la réaction d'hydroxylation des atomes de carbone comme exemple. vu. Cependant, il n'est pas réaliste de vouloir hydroxyler tous les atomes de carbone. Donc, cette fois, j'ai essayé de spécifier des conditions plus détaillées avec SAMRTS. Plus précisément, j'ai spécifié le groupe méthyle à la fin de la chaîne et essayé de ne hydroxyler que cela.

Méthode

La dernière fois, j'ai écrit les SMARTS suivants.

[C:1]>>[C:1][OH]

Cependant, cela réagira avec n'importe quel atome de carbone. Cette fois, je souhaite oxyder uniquement le groupe méthyle en bout de chaîne. Le groupe méthyle terminal doit avoir 3 atomes d'hydrogène, alors essayez de changer les règles comme suit.

'[CH3:1]>>[CH2:1]-[OH]'

essayons. Cette fois, nous testerons le même composé que la dernière fois. La dernière fois, quatre réactifs ont été produits, mais cette fois, seuls deux groupes méthyle terminaux devraient être produits.

reactant.png

Quand je l'ai essayé, deux réactifs ont été produits. Voyons voir.

Le premier. Le groupe méthyle terminal réagit. metablite_0.png

La deuxième. L'autre groupe méthyle terminal réagit. Comme prévu.

metablite_1.png

À propos, SMARTS qui ne réagit que deux atomes de carbone dans lesquels deux atomes d'hydrogène au milieu de la chaîne sont liés est le suivant.

'[CH2:1]>>[CH1:1]-[OH]'

La source

Enfin, je publierai l'intégralité de la source, y compris la génération d'images.

from rdkit.Chem import AllChem
from rdkit.Chem.Draw import rdMolDraw2D
from io import BytesIO
from cairosvg import svg2png
from IPython.display import SVG
from rdkit import Chem

#référence(rdkit-smarts)https://magattaca.hatenablog.com/entry/2019/02/10/194853
#référence(smarts) https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5515729/table/Tab1/?report=objectonly
# https://sourceforge.net/p/rdkit/mailman/message/36294482/

def generate_image(mol, size, path, name):
    image_data = BytesIO()
    view = rdMolDraw2D.MolDraw2DSVG(size[0], size[1])
    tm = rdMolDraw2D.PrepareMolForDrawing(mol)
    view.DrawMolecule(tm)
    view.FinishDrawing()
    svg = view.GetDrawingText()
    SVG(svg.replace('svg:', ''))
    print(path + "/" + name)
    try:
        svg2png(bytestring=svg, write_to=path + "/" + name + ".png ")
    except:
        print("errro")
        pass


def main():
    reactant_1 = Chem.MolFromSmiles('COc2ccc1cccc(CCNC(C)=O)c1c2')
    generate_image(reactant_1, (300, 300), "./tmp", "reactant")

    #reaction_pattern = '[CH3:1]>>[CH2:1]-[OH]'
    reaction_pattern = '[CH3:1]>>[CH2:1]-[OH]'
    rxn = AllChem.ReactionFromSmarts(reaction_pattern)
    x = rxn.RunReactants([reactant_1])
    for i, mol in enumerate(x):
        print(mol[0])
        try:
            Chem.SanitizeMol(mol[0])
            generate_image(mol[0], (300, 300), "./tmp", "metablite_{0}".format(i))
        except:
            print("Error")
            print(Chem.MolToMolBlock(mol[0]))

if __name__ == "__main__":
    main()

en conclusion

――Strictement parlant, vous devrez peut-être tenir compte de l'accusation et ainsi de suite. Je ne suis pas sûr car c'est chimiquement un shiroto. ――Comme une tâche future, lorsque le site de réaction est connu, je souhaite réagir uniquement à ce site. Aussi, bien que cela puisse ne pas être lié à SMARTS, je voudrais évaluer la sensibilité à la réaction.

Recommended Posts

Essayez de ne faire réagir que le carbone en bout de chaîne avec SMARTS
python> print> Est-il redirigé uniquement à la fin du processus?> Exécuter avec -u
Essayez d'obtenir le contenu de Word avec Golang
Essayez d'automatiser le fonctionnement des périphériques réseau avec Python
Essayez d'extraire les caractéristiques des données de capteur avec CNN
Comment insérer un processus spécifique au début et à la fin de l'araignée avec la tremblante
Essayez de résoudre le problème N Queen avec SA de PyQUBO
Cours de base Python (à la fin de 15)
Essayez d'imaginer les données d'élévation du National Land Research Institute avec Python
Essayez de séparer l'arrière-plan et l'objet en mouvement de la vidéo avec OpenCV
Automatisation de la création du tableau des heures de travail en fin de mois avec Selenium
Essayez de résoudre le problème du fizzbuzz avec Keras
Essayez d'installer uniquement la partie principale d'Ubuntu
Je t'ai fait exprimer la fin de l'adresse IP avec L Chika
Essayez de résoudre le diagramme homme-machine avec Python
Comment essayer l'algorithme des amis d'amis avec pyfof
Spécifiez les positions de début et de fin des fichiers à inclure avec qiitap
Envoyer Gmail à la fin du processus [Python]
[Vérification] Essayez d'aligner le groupe de points avec la fonction d'optimisation de pytorch Partie 1
Supprimer une chaîne spécifique à la fin de python
Essayez de simuler le mouvement du système solaire
Comment démarrer avec Visual Studio Online ~ La fin de l'ère de la construction d'environnement ~
C'est Noël, donc je vais essayer de dessiner la généalogie de Jésus-Christ avec Cabocha
Coordonnées les plus à droite de l'étiquette faite avec tkinter
Ajoutez des informations au bas de la figure avec Matplotlib
Essayez de résoudre les problèmes / problèmes du "programmeur matriciel" (Chapitre 1)
Visualisons la pièce avec tarte aux râpes, partie 1
Essayez de résoudre le problème d'affectation du médecin de formation avec Python
Essayez d'estimer le nombre de likes sur Twitter
[Neo4J] ④ Essayez de gérer la structure du graphe avec Cypher
J'ai essayé de publier automatiquement sur ChatWork au moment du déploiement avec Fabric et ChatWork Api
[Introduction au modèle SIR] Prédire l'heure de fin de chaque pays avec l'ajustement des données COVID-19 ♬
Créez un tableau à deux dimensions en ajoutant une ligne à la fin d'un tableau vide avec numpy
Essayez d'importer dans la base de données en manipulant ShapeFile d'informations numériques sur les terres nationales avec Python
Essayez de visualiser les nutriments des flocons de maïs que le champion de M-1 Milkboy a dit avec Python
J'ai essayé de trouver l'entropie de l'image avec python
Essayez de gratter les données COVID-19 Tokyo avec Python
Essayez d'obtenir la liste des fonctions du paquet Python> os
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
Essayez de jouer avec l'uprobe qui prend directement en charge Systemtap
Obtenez UNIXTIME au début d'aujourd'hui avec une commande
Je souhaite améliorer l'efficacité avec Python même dans le système expérimental (5) Je souhaite envoyer une notification à la fin de l'expérience avec l'API slack
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
Je souhaite utiliser uniquement le traitement de normalisation SudachiPy
Décorateur qui affiche "Nom de la méthode FIN" à la fin de la méthode
Essayez d'améliorer la précision de l'estimation du nombre de Twitter
Essayez de résoudre les problèmes / problèmes du "programmeur matriciel" (fonction du chapitre 0)
L'histoire de l'affichage d'images avec OpenCV ou PIL (uniquement)
Essayez de déchiffrer les caractères déformés dans le nom du fichier joint avec Python
Récupérez la source de la page à charger indéfiniment avec python.
Essayez de calculer la position de l'émetteur à partir du modèle de propagation des ondes radio avec python [Wi-Fi, Beacon]
Essayez de défier le sol par récursif
L'histoire de ne pas pouvoir exécuter pygame avec pycharm
Enregistrez le résultat de l'exploration avec Scrapy dans Google Data Store
[Note] Essayons de prédire la quantité d'électricité utilisée! (Partie 1)
Familiarisez-vous avec (voulez être) autour du pipeline de spaCy
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
Comment obtenir l'ID de Type2Tag NXP NTAG213 avec nfcpy