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.
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.
Quand je l'ai essayé, deux réactifs ont été produits. Voyons voir.
Le premier. Le groupe méthyle terminal réagit.
La deuxième. L'autre groupe méthyle terminal réagit. Comme prévu.
À 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]'
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()
――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