RDKit|通過Recap和BRICS對(duì)分子拆解與合成

文章目錄

  • 1.Recap拆解
  • 2.BRICS拆解
  • 3.BRICS合成

Recap和BRICS對(duì)分子拆解與合成

1.Recap拆解

另一個(gè)與化學(xué)反應(yīng)相關(guān)的功能是Recap劫拗,Recap可以模仿實(shí)驗(yàn)室中的正向合成過程來進(jìn)行逆向操作苟翻,對(duì)分子進(jìn)行一系列的轉(zhuǎn)換與分解,最終得到一組合理的分子片段退个。Recap可以對(duì)拆解過程進(jìn)行追蹤杰妓,并形成類似樹的數(shù)據(jù)結(jié)構(gòu)街氢。原始分子記為根節(jié)點(diǎn)(root)摆昧,被拆解的分子記為父節(jié)點(diǎn)(parent)诚卸,拆解得到的分子記為子節(jié)點(diǎn)(children)界酒,某節(jié)點(diǎn)下的所有分支節(jié)點(diǎn)為子孫節(jié)點(diǎn)(all children)纠屋,某節(jié)點(diǎn)上的所有父節(jié)點(diǎn)為祖先節(jié)點(diǎn)(ultimate parents),無法繼續(xù)拆解分子記為葉子節(jié)點(diǎn)(leaves)盾计。所有英文翻譯對(duì)應(yīng)recap中的屬性或方法名。

  • Recap算法拆解分子:Recap.RecapDecompose(mol)
>>> from rdkit.Chem import Recap
>>> from rdkit import Chem
>>> from rdkit.Chem import AllChem as Chem
>>> m = Chem.MolFromSmiles('c1ccccc1OCCOC(=O)CC')
>>> hierarch = Recap.RecapDecompose(m)

可以從節(jié)點(diǎn)對(duì)象通過函數(shù)獲取其葉子節(jié)點(diǎn)赁遗、子孫節(jié)點(diǎn)署辉,得到的都是字典,鍵為節(jié)點(diǎn)的smiles岩四,值為節(jié)點(diǎn)對(duì)象哭尝。

  • 葉子節(jié)點(diǎn)函數(shù):hierarch.GetLeaves()
  • 子孫節(jié)點(diǎn)函數(shù):hierarch.GetAllChildren()
  • 祖先節(jié)點(diǎn)函數(shù),返回列表:getUltimateParents()
>>> print(hierarch.GetLeaves().keys())
dict_keys(['*C(=O)CC', '*CCO*', '*c1ccccc1', '*CCOc1ccccc1'])
>>> print(hierarch.GetAllChildren().keys())
dict_keys(['*C(=O)CC', '*OCCOc1ccccc1', '*CCO*', '*c1ccccc1', '*CCOC(=O)CC', '*CCOc1ccccc1'])
>>> print(hierarch.getUltimateParents()[0].smiles)
'CCC(=O)OCCOc1ccccc1'

還可以查看節(jié)點(diǎn)的如下屬性:

  • smiles:smiles(字符串)
  • 子節(jié)點(diǎn):children(字典)
  • 父節(jié)點(diǎn):parents(字典)
>>> child = hierarch.children['*OCCOc1ccccc1']
>>> print(child.smiles)
'*OCCOc1ccccc1'
>>> print(child.children.keys())
dict_keys(['*CCO*', '*c1ccccc1'])
>>> print(child.parents.keys())
dict_keys(['CCC(=O)OCCOc1ccccc1'])
  • 查看葉子節(jié)點(diǎn)的分子
leaves = list(hierarch.GetLeaves().values())
Chem.Draw.MolsToGridImage([x.mol for x in leaves], molsPerRow=4, subImgSize=(200, 200))
1

2.BRICS拆解

Rdkit中還有一種BRICS算法剖煌,同樣可以用于拆解分子材鹦。與recap不同,該算法是根據(jù)鍵是否能夠合成來進(jìn)行拆解耕姊。該方法返回一個(gè)經(jīng)過去重的列表桶唐,在原子上的序號(hào)對(duì)應(yīng)一種特定的反應(yīng)類型。

  • BRICS算法拆解分子:BRICS.BRICSDecompose(m)
>>> from rdkit.Chem import BRICS
>>> m = Chem.MolFromSmiles('c1ccccc1OCCOC(=O)CC')
>>> BRICS.BRICSDecompose(m)
{'[1*]C(=O)CC', '[16*]c1ccccc1', '[3*]O[3*]', '[4*]CC[4*]'}
  • 對(duì)一組分子生成片段
>>> import os
>>> from rdkit.Chem import RDConfig
>>> cdk_file = os.path.join(RDConfig.RDDocsDir, 'Book\data\cdk2.sdf')
>>> cdk2mols = Chem.SDMolSupplier(cdk_file)
>>> allfrags = set()
>>> for m in cdk2mols:
>>>     pieces = BRICS.BRICSDecompose(m)
>>>     allfrags.update(pieces)
>>> print(len(allfrags))
90
>>> print(sorted(allfrags)[:3])
['NS(=O)(=O)c1ccc(N/N=C2\\C(=O)Nc3ccc(Br)cc32)cc1', '[1*]C(=O)C(C)C', '[1*]C(=O)NN(C)C']

3.BRICS合成

  • BRICS模塊除了支持拆解分子茉兰,也可以對(duì)一組片段進(jìn)行合成:BRICS.BRICSBuild()
  • 返回一個(gè)生成器尤泽,可以通過next()來獲取元素
  • 生成的分子也是未經(jīng)過核對(duì)的,可以更新一下化合價(jià):UpdatePropertyCache()
>>> fragms = [Chem.MolFromSmiles(x) for x in sorted(allfrags)]
>>> ms = BRICS.BRICSBuild(fragms)
>>> prods = [next(ms) for x in range(4)]
>>> [prod.UpdatePropertyCache(strict=False) for prod in prods]
>>> Chem.Draw.MolsToGridImage(prods, molsPerRow=4, subImgSize=(200, 200))
2

可以通過設(shè)置隨機(jī)種子或設(shè)置scrambleReagents參數(shù)來保證可重復(fù)性

  • 在BRICSBuild執(zhí)行前設(shè)置隨機(jī)種子
>>> import random
>>> random.seed(100)
>>> fragms = [Chem.MolFromSmiles(x) for x in sorted(allfrags)]
>>> ms = BRICS.BRICSBuild(fragms)
>>> prods = [next(ms) for x in range(4)]
>>> [prod.UpdatePropertyCache(strict=False) for prod in prods]
>>> Chem.Draw.MolsToGridImage(prods, molsPerRow=4, subImgSize=(200, 200))
3
  • 設(shè)置scrambleReagents參數(shù)
>>> fragms = [Chem.MolFromSmiles(x) for x in sorted(allfrags)]
>>> ms = BRICS.BRICSBuild(fragms, scrambleReagents=False)
>>> prods = [next(ms) for x in range(4)]
>>> [prod.UpdatePropertyCache(strict=False) for prod in prods]
>>> Chem.Draw.MolsToGridImage(prods, molsPerRow=4, subImgSize=(200, 200))

本文參考自rdkit官方文檔规脸。
代碼及源文件在這里坯约。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市莫鸭,隨后出現(xiàn)的幾起案子闹丐,更是在濱河造成了極大的恐慌,老刑警劉巖被因,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卿拴,死亡現(xiàn)場(chǎng)離奇詭異衫仑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)巍棱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門惑畴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人航徙,你說我怎么就攤上這事如贷。” “怎么了到踏?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵杠袱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我窝稿,道長(zhǎng)楣富,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任伴榔,我火速辦了婚禮纹蝴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘踪少。我一直安慰自己塘安,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布援奢。 她就那樣靜靜地躺著兼犯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪集漾。 梳的紋絲不亂的頭發(fā)上切黔,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音具篇,去河邊找鬼纬霞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛驱显,可吹牛的內(nèi)容都是我干的险领。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼秒紧,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼绢陌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起熔恢,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤脐湾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后叙淌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秤掌,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡愁铺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闻鉴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茵乱。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖孟岛,靈堂內(nèi)的尸體忽然破棺而出瓶竭,到底是詐尸還是另有隱情,我是刑警寧澤渠羞,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布斤贰,位于F島的核電站,受9級(jí)特大地震影響次询,放射性物質(zhì)發(fā)生泄漏荧恍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一屯吊、第九天 我趴在偏房一處隱蔽的房頂上張望送巡。 院中可真熱鬧,春花似錦盒卸、人聲如沸授艰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至糟需,卻和暖如春屉佳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背洲押。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工武花, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人杈帐。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓体箕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親挑童。 傳聞我的和親對(duì)象是個(gè)殘疾皇子累铅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359