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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rdkit Recap、BRICS分子片段拆分与合成

發(fā)布時間:2023/12/31 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rdkit Recap、BRICS分子片段拆分与合成 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

參考:https://zhuanlan.zhihu.com/p/142885672
https://www.jianshu.com/p/199e697981ef

1、BRICS分子片段拆分與合成

1)BRICS分子片段拆分

from rdkit import Chem from rdkit.Chem import BRICS aspirin= Chem.MolFromSmiles('CC(=O)OC1=CC=CC=C1C(O)=O') fragments=BRICS.BRICSDecompose(aspirin,allNodes=None, minFragmentSize=1, onlyUseReactions=None, silent=True, keepNonLeafNodes=False, singlePass=False, returnMols=False)from rdkit.Chem import AllChem, DrawDraw.MolsToGridImage([Chem.MolFromSmiles(i) for i in sorted(fragments)],subImgSize=(300,300), molsPerRow=2)

這種拆分帶數(shù)字,合成那種也必須是這種帶數(shù)字的才能再合成


多個分子片段庫構(gòu)建:

allfrag=set() #創(chuàng)建一個集合,命名為allfrag for i in smi:single=BRICS.BRICSDecompose(i)allfrag.update(single)
合成
fragms = [Chem.MolFromSmiles(x) for x in sorted(fragments)] ms = BRICS.BRICSBuild(fragms) # print(ms) prods = [next(ms) for x in range(3)] [prod.UpdatePropertyCache(strict=False) for prod in prods] #糾正不正確的化學鍵 Chem.Draw.MolsToGridImage(prods, molsPerRow=4, subImgSize=(200, 200))

拆分端不帶數(shù)字或者自定義

主要是這個函數(shù)Chem.FragmentOnBonds 的拆分實現(xiàn),dummyLabels=[(0, 0)] 第一個0表示前面替換,后一個對應后端;這里元組只能是數(shù)字

from rdkit import Chem from rdkit.Chem import BRICS import numpy as npdef fragment_recursive(mol, frags):try:bonds = list(BRICS.FindBRICSBonds(mol))if len(bonds) == 0:frags.append(Chem.MolToSmiles(mol))return fragsidxs, labs = list(zip(*bonds))# print(bonds)# print(idxs, labs)bond_idxs = []for a1, a2 in idxs:bond = mol.GetBondBetweenAtoms(a1, a2)bond_idxs.append(bond.GetIdx())order = np.argsort(bond_idxs).tolist()bond_idxs = [bond_idxs[i] for i in order]broken = Chem.FragmentOnBonds(mol,bondIndices=[bond_idxs[0]],dummyLabels=[(0, 0)])head, tail = Chem.GetMolFrags(broken, asMols=True)#print(mol_to_smiles(head), mol_to_smiles(tail))frags.append(Chem.MolToSmiles(head))return fragment_recursive(tail, frags)except Exception as e:print (e)passaspirin= Chem.MolFromSmiles('CC(=O)OC1=CC=CC=C1C(O)=O') fragments=fragment_recursive(aspirin, []) print (fragments)


再可以替型號去掉

這里輸入的是上面dummyLabels=[(0, 0)] 都為0,結(jié)果只有*星號

def remove_dummy(smiles):try:stripped_smi=smiles.replace('*','[H]')mol=Chem.MolFromSmiles(stripped_smi)return Chem.MolToSmiles(mol)except Exception as e:print (e)return Noneclean_fragments=[remove_dummy(smi) for smi in fragments] print (clean_fragments)

2、Recap拆分

Recap可以模仿實驗室中的正向合成過程來進行逆向操作,對分子進行一系列的轉(zhuǎn)換與分解,最終得到一組合理的分子片段

from rdkit.Chem import Recap from rdkit.Chem import AllChem as Chemm = Chem.MolFromSmiles('c1ccccc1OCCOC(=O)CC') hierarch = Recap.RecapDecompose(m) #葉子節(jié)點函數(shù):hierarch.GetLeaves() print(hierarch.GetLeaves().keys())#子孫節(jié)點函數(shù):hierarch.GetAllChildren() print(hierarch.GetAllChildren().keys())#祖先節(jié)點函數(shù),返回列表:getUltimateParents() print(hierarch.getUltimateParents()[0].smiles)


拆分的片段

leaves = list(hierarch.GetLeaves().values()) Chem.Draw.MolsToGridImage([x.mol for x in leaves], molsPerRow=4, subImgSize=(200, 200))

總結(jié)

以上是生活随笔為你收集整理的rdkit Recap、BRICS分子片段拆分与合成的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。