Mit RDKit möchte ich mit SMARTS ein Reaktionsmuster definieren und aus dem Reaktanten basierend auf diesem Muster ein Produkt erzeugen.
Bitte beachten Sie die Referenzen.
Dieses Mal möchte ich die Hydroxylierungsreaktion von Kohlenstoffatomen ausprobieren. Das SMARTS-Muster ist wie folgt.
[C:1]>>[C:1][OH]
Die folgenden Verbindungen wurden als Reaktionsprodukt ausprobiert.
Die Quelle ist wie folgt. Ich habe versucht, alle Produkte auszugeben, die durch die Reaktion auf ein Bild entstanden sind.
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
#Bildausgabe
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:
pass
def main():
reactant_1 = Chem.MolFromSmiles('COc2ccc1cccc(CCNC(C)=O)c1c2')
reaction_pattern = '[C:1]>>[C: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()
Es wurden vier Produkte erhalten. Einer war ein Fehler aufgrund der Gebühr beim Desinfizieren. Lassen Sie uns das Ergebnis mit einem Bild überprüfen.