SMARTS로 체인 끝에 있는 탄소만 반응시켜주세요.

개시하다


RDKit로 반응 모드를 정의하여 반응물을 생성하다에서는 탄소원자의 수산화 반응의 경우 RDKit로 SMARTS 반응을 했다.하지만 모든 탄소 원자를 수소화하려는 것은 현실적이지 않다.그래서 이번에 우리는 SAMRTS를 이용하여 더욱 상세한 조건을 지정하려고 했다.구체적으로 쇠사슬 끝부분의 메틸기를 지정해 수산화제만 진행했다.

메서드


마지막으로 다음과 같은 SMARTS를 썼습니다.
[C:1]>>[C:1][OH]
하지만 이렇게 되면 임의의 탄소 원자에 반응을 일으킨다.이번에는 체인 끝부분의 메틸을 산화시키려고 합니다.말단의 메틸기는 수소 원자가 3개가 있어야 하기 때문에 아래처럼 규칙을 바꾸어 보자.
'[CH3:1]>>[CH2:1]-[OH]'
해봐.이번에 테스트한 것은 지난번과 같은 화합물이다.지난번에는 4개의 반응물이 생성됐는데, 이번에는 2개의 말단에 메틸기만 있는 반응물이 생성될 것으로 보인다.

해보면 반응물 2개가 생성된다.봐봐.
첫번째말단의 메틸기는 반응이 있다.

두 번째.또 다른 말단의 메틸기가 반응하고 있다.예상대로

그나저나 쇠사슬 중간에 수소 원자 두 개만 결합한 두 개의 탄소 원자가 반응하는 SMARTS는 다음과 같다.
'[CH2:1]>>[CH1:1]-[OH]'

출처


마지막으로 그림이 생성된 모든 원본을 게재합니다.
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

# 参考(rdkit-smarts)https://magattaca.hatenablog.com/entry/2019/02/10/194853
# 参考(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()

끝말

  • 전하 등을 엄격히 고려해야 할 수도 있다.화학적으로 시럽이라 잘 모르겠어요.
  • 향후 과제로 반응 부위를 알았을 때 반응만 하게 하려는 것이다.또 SMARTS와 무관할 수 있지만 반응성이 높다고 평가하고 싶다.
  • 응용으로 SMARTS에서 반응 템플릿 그룹을 정의하고 그 중에서 생성된 반응물https://www.frontiersin.org/articles/10.3389/fphar.2019.01586/full을 사용한다.
    이처럼 딥레어닝의 반응에 따른 예측도 흥미롭다.
  • 좋은 웹페이지 즐겨찾기