In Definieren Sie das Reaktionsmuster mit SMARTS mit RDKit und generieren Sie einen Reaktanten wird die Reaktion mit SMARTS mit RDKit am Beispiel der Hydroxylierungsreaktion von Kohlenstoffatomen durchgeführt. sah. Es ist jedoch nicht realistisch, alle Kohlenstoffatome hydroxylieren zu wollen. Deshalb habe ich diesmal versucht, detailliertere Bedingungen mit SAMRTS festzulegen. Insbesondere habe ich die Methylgruppe am Ende der Kette angegeben und versucht, nur diese zu hydroxylieren.
Letztes Mal habe ich die folgenden SMARTS geschrieben.
[C:1]>>[C:1][OH]
Dies reagiert jedoch mit jedem Kohlenstoffatom. Dieses Mal möchte ich nur die Methylgruppe am Ende der Kette oxidieren. Die terminale Methylgruppe sollte 3 Wasserstoffatome haben. Versuchen Sie daher, die Regeln wie folgt zu ändern.
'[CH3:1]>>[CH2:1]-[OH]'
Lass es uns versuchen. Dieses Mal werden wir die gleiche Verbindung wie beim letzten Mal testen. Letztes Mal wurden vier Reaktanten hergestellt, diesmal sollten jedoch nur zwei terminale Methylgruppen hergestellt werden.
Als ich es versuchte, wurden zwei Reaktanten hergestellt. Mal sehen.
Der erste. Die terminale Methylgruppe reagiert.
Der Zweite. Die andere terminale Methylgruppe reagiert. Wie erwartet.
SMARTS, das nur zwei Kohlenstoffatome reagiert, in denen zwei Wasserstoffatome in der Mitte der Kette gebunden sind, ist übrigens wie folgt.
'[CH2:1]>>[CH1:1]-[OH]'
Schließlich werde ich die gesamte Quelle einschließlich der Bilderzeugung veröffentlichen.
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
#Referenz(rdkit-smarts)https://magattaca.hatenablog.com/entry/2019/02/10/194853
#Referenz(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()
――Streng genommen müssen Sie möglicherweise die Gebühr berücksichtigen und so weiter. Ich bin mir nicht sicher, weil es chemisch ein Shiroto ist. ―― Als zukünftige Aufgabe möchte ich, wenn die Reaktionsstelle bekannt ist, nur diese Stelle reagieren. Auch wenn es möglicherweise nicht mit SMARTS zusammenhängt, möchte ich die Anfälligkeit für Reaktionen bewerten.
Recommended Posts