日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python化学模拟_rdkit 化学反应高级功能

發布時間:2023/12/20 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python化学模拟_rdkit 化学反应高级功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、引入所需庫

#! /usr/bin/python

# coding: utf-8

from rdkit import Chem

from rdkit.Chem import AllChem

from rdkit.Chem import Draw

from rdkit.Chem import Recap

from rdkit.Chem import BRICS

二、保護原子

以酰胺反應為例 , 反應物分子1中含有一個 - COOH , 另一個分子中含有兩個 - NH 。 之后定義反應模板 , 然后讓其反應 。

acid = Chem.MolFromSmiles('CC(=O)O')

base = Chem.MolFromSmiles('CC(=O)NCCN')

mols = [acid, base]

img = Draw.MolsToGridImage(

mols,

molsPerRow=2,

subImgSize=(200, 200),

legends=['acid', 'base']

)

img.save('/Users/zeoy/st/drug_development/st_rdcit/img/mol33.jpg')

反應物如下圖所示:

rxn = AllChem.ReactionFromSmarts('')

rxn = AllChem.ReactionFromRxnFile(

'/Users/zeoy/st/drug_development/st_rdcit/2d.rxn')

ps = rxn.RunReactants(acid, base)

print('the num of reactions', len(ps))

for reaction in ps:

reactions_smi = Chem.MolToSimiles(reaction)

print('this reaction is', reactions_smi)

三、把分子切成片段

3.1 Recap方法

Recap方法通過模擬實驗室中常用的化學反應,將反應分子分解成功合理的片段

Recap 方法返回的是類似于node tree結構的數據。

注:分子片段的Smiles前面通常會加一個* 如 ‘*c1ccccc1’

m = Chem.MolFromSmiles('c1ccccc1OCCOC(=O)CC')

hierarch = Recap.RecapDecompose(m)

type(hierarch)

# 層次結構的原始分子

print('smi=', hierarch.smiles) # smi= CCC(=O)OCCOc1ccccc1

# 每個節點使用smiles鍵控的字典跟蹤其子節點

ks = hierarch.children.keys()

print(sorted(ks))

# ['*C(=O)CC', '*CCOC(=O)CC', '*CCOc1ccccc1', '*OCCOc1ccccc1', '*c1ccccc1']

3.2 BRICS方法

RDKit 還提供了另一種把分子切成片段的方法——BRICS方法。 BRICS方法主要是根據可合成的的鍵對分子進行切斷,因此其返回的數據結構是來自于該分子的不同分子片段, 虛擬原子(*)是告訴我們是如何切斷的。

對下圖中的分子進行BRICS分解

smi = 'C=CC(=O)N1CCC(CC1)C2CCNC3=C(C(=NN23)C4=CC=C(C=C4)OC5=CC=CC=C5)C(=O)N'

m = Chem.MolFromSmiles(smi)

Draw.MolToImageFile(

m,

"/Users/zeoy/st/drug_development/st_rdcit/img/mol34.jpg",

size=(600, 400),

legend='zanubrutinib(C=CC(=O)N1CCC(CC1)C2CCNC3=C(C(=NN23)C4=CC=C(C=C4)OC5=CC=CC=C5)C(=O)N)'

)

frags = (BRICS.BRICSDecompose(m))

print(frags)

mols = []

for fsmi in frags:

mols.append(Chem.MolFromSmiles(fsmi))

img = Draw.MolsToGridImage(

mols,

molsPerRow=3,

subImgSize=(200, 200),

legends=['' for x in mols]

)

img.save('/Users/zeoy/st/drug_development/st_rdcit/img/mol35.jpg')

四、組合分子片段–BRICS方法

以上述片段進行BRICS組合產生分子

newms = BRICS.BRICSBuild(mols)

newms = list(newms)

print('新分子數:', len(newms)) # 新分子數: 76(含少量化學結構不合理的結構)

mols = [newms[0], newms[1], newms[2]]

img = Draw.MolsToGridImage(

mols,

molsPerRow=3,

subImgSize=(200, 200),

legends=['' for x in mols]

)

可視化前3個結構

img.save('/Users/zeoy/st/drug_development/st_rdcit/img/mol36.jpg')

五、自定義片段生成方法

除了上面提到的自動片段分解方法,RDKit提供了更靈活的函數可根據用戶定義的鍵進行切斷產生片段。

比如對所有環上的原子和非環上的原子組成的鍵進行進行切斷。

smi = 'C=CC(=O)N1CCC(CC1)C2CCNC3=C(C(=NN23)C4=CC=C(C=C4)OC5=CC=CC=C5)C(=O)N'

m = Chem.MolFromSmiles(smi)

submol = m.GetSubstructMatches(Chem.MolFromSmarts('[!R][R]'))

print(submol) # ((2, 4), (25, 22), (25, 26), (32, 15))

bonds_id = [m.GetBondBetweenAtoms(x, y).GetIdx() for x, y in submol]

frags = Chem.FragmentOnBonds(m, bonds_id)

print('type=', type(frags)) # type=

Draw.MolToImageFile(

m,

"/Users/zeoy/st/drug_development/st_rdcit/img/mol36.jpg",

)

smis = Chem.MolToSmiles(frags)

smis = smis.split('.')

mols = []

for smi in smis:

mols.append(Chem.MolFromSmiles(smi))

img = Draw.MolsToGridImage(

mols,

molsPerRow=3,

subImgSize=(200, 200),

legends=['' for x in mols]

)

img.save("/Users/zeoy/st/drug_development/st_rdcit/img/mol37.jpg")

原文鏈接:https://blog.csdn.net/qq_36801966/article/details/107053474

總結

以上是生活随笔為你收集整理的python化学模拟_rdkit 化学反应高级功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。