RDKit|骨架分解與側(cè)鏈分離

  • 一鳞仙、骨架分解
    • 1.Murcko Scaffold
    • 2.Generic Framework
  • 二、側(cè)鏈分離
    • 1.rdRGroupDecomposition
    • 2.ReplaceCore

一横腿、骨架分解

1.Murcko Scaffold

Murcko骨架由Murcko等人設(shè)計并用藥物的形狀、結(jié)構(gòu)分析斤寂。他們將藥物分子拆解成四種單元:環(huán)系結(jié)構(gòu)(ring system)耿焊、接頭(linker)、骨架(scaffold)遍搞、側(cè)鏈(side chain)罗侯,其中scaffold又由ring system和linker組成;scaffold和side chain又組成了藥物分子溪猿。這么分解可以提供以下幾點好處:

  1. Scaffold可以為藥物的整體設(shè)計提供參考
  2. Ring system和linker可以為藥化提供合成單元
  3. 可以通過形狀的分析钩杰,評價分子庫的類藥程度

Rdkit中也提供了一些用于骨架和側(cè)鏈分析的工具

  • 獲取Murcko骨架:GetScaffoldForMol()
>>> from rdkit import Chem
>>> from rdkit.Chem import Draw
>>> from rdkit.Chem.Scaffolds import MurckoScaffold
>>> m = Chem.MolFromSmiles('O=C(NCc1cc(OC)c(O)cc1)Cc1cocc1CC')
>>> core = MurckoScaffold.GetScaffoldForMol(m)
>>> m_core = [m, core]
>>> Draw.MolsToGridImage(m_core, subImgSize=(250, 250))
1
  • 直接獲取smiles的murcko骨架,并輸出smiles:MurckoScaffoldSmilesFromSmiles(smiles, mol, includeChirality)
  • 同MurckoScaffoldSmiles()
>>> MurckoScaffold.MurckoScaffoldSmilesFromSmiles('O=C(NCc1cc(OC)c(O)cc1)Cc1cocc1CC')
'O=C(Cc1ccoc1)NCc1ccccc1'

2.Generic Framework

將分子以圖的形式表示诊县,對結(jié)構(gòu)進(jìn)行抽象讲弄,即所有的原子作為頂點,所有的鍵作為邊依痊,主要反映了原子間的連接屬性避除。

  • 產(chǎn)生generic骨架:MakeScaffoldGeneric()
    所有重原子都以碳來代替,所有的鍵都以單鍵代替
gen_mcore = map(MurckoScaffold.MakeScaffoldGeneric, m_core)
Draw.MolsToGridImage(list(gen_mcore), subImgSize=(250, 250))
2

二、側(cè)鏈分離

1.rdRGroupDecomposition

  • 先讀進(jìn)來一組分子
  • 定義一個母核驹饺,并指定側(cè)鏈位置钳枕。
  • 也可以不標(biāo)注側(cè)鏈的序號,系統(tǒng)會自動生成序號
>>> from rdkit.Chem import rdRGroupDecomposition as rdRGD
>>> suppl = Chem.SmilesMolSupplier('F:\\Anaconda3_2019_10\\Library\\share\\RDKit\\Docs\\Book\\data\\s1p_chembldoc89753.txt', delimiter=",", smilesColumn=9, nameColumn=10)
>>> ms = [x for x in suppl if x]
>>> core = Chem.MolFromSmarts('[*:1]c1nc([*:2])on1')
>>> core
3
  • 分離側(cè)鏈:rdRGD.RGroupDecompose(cores, mols, asSmiles , ...)
    cores:母核
    mols:要拆解的分子
    asSmiles:返回smiles還是mol對象
  • 變量unmatched用來存放沒有匹配上母核的分子
  • 變量res是一個字典的列表赏壹,每個字典對應(yīng)一個分子匹配上的母核和的側(cè)鏈鱼炒。
>>> res, unmatched = rdRGD.RGroupDecompose([core], ms, asSmiles=True)
>>> print(len(res), len(unmatched))
>>> res[0]
40 0
{'Core': 'n1oc([*:2])nc1[*:1]',
 'R1': 'O=C(O)CCCC1NCCOc2c1cccc2[*:1]',
 'R2': 'CC(C)Oc1ccc([*:2])cc1Cl'}
  • 查看結(jié)果
>>> Chem.Draw.MolsToGridImage([ms[0], Chem.MolFromSmiles(res[0]['R1']), Chem.MolFromSmiles(res[0]['R2'])], molsPerRow=3, subImgSize=(300, 300))
4
  • 還可以直接將res結(jié)果轉(zhuǎn)換成dataframe
>>> import pandas as pd
>>> df = pd.DataFrame(res)
>>> df.head()
    Core    R1  R2
0   n1oc([*:2])nc1[*:1] O=C(O)CCCC1NCCOc2c1cccc2[*:1]   CC(C)Oc1ccc([*:2])cc1Cl
1   n1oc([*:2])nc1[*:1] O=C(O)CCC1NCCOc2c1cccc2[*:1]    CC(C)Oc1ccc([*:2])cc1Cl
2   n1oc([*:2])nc1[*:1] O=C(O)CCC1COc2ccc([*:1])cc2CN1  CC(C)Oc1ccc([*:2])cc1Cl
3   n1oc([*:2])nc1[*:1] O=C(O)CCCC1NCCOc2c1cccc2[*:1]   CC(C)Oc1ncc([*:2])cc1Cl
4   n1oc([*:2])nc1[*:1] O=C(O)CCCC1NCCOc2c1cccc2[*:1]   CC(C)Oc1ncc([*:2])cc1Cl

2.ReplaceCore

除了上述方法,還可以通過Chem.ReplaceCore分離側(cè)鏈

  • 先定義一個母核
  • 查看分子是否包含母核:HasSubstructMatch(core)
core = Chem.MolFromSmiles('n1cnoc1')
ms[0].HasSubstructMatch(core)
True
  • 去除母核蝌借,得到側(cè)鏈:Chem.ReplaceCore()
rs = Chem.ReplaceCore(ms[0], core)
Chem.MolToSmiles(rs)
'[1*]c1cccc2c1OCCNC2CCCC(=O)O.[2*]c1ccc(OC(C)C)c(Cl)c1'
  • 根據(jù)分子中原子序號對側(cè)鏈進(jìn)行編號
rs = Chem.ReplaceCore(ms[0], core, labelByIndex=True)
Chem.MolToSmiles(rs)
'[1*]c1cccc2c1OCCNC2CCCC(=O)O.[4*]c1ccc(OC(C)C)c(Cl)c1'
  • 獲取分離的側(cè)鏈:Chem.GetMolFrags()
res = Chem.GetMolFrags(rs, asMols=True)
Chem.MolToSmiles(res[0])
'[4*]c1ccc(OC(C)C)c(Cl)c1'

本文參考自rdkit官方文檔菩佑。
代碼及源文件在這里自晰。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市稍坯,隨后出現(xiàn)的幾起案子酬荞,更是在濱河造成了極大的恐慌,老刑警劉巖瞧哟,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件混巧,死亡現(xiàn)場離奇詭異,居然都是意外死亡勤揩,警方通過查閱死者的電腦和手機(jī)咧党,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陨亡,“玉大人傍衡,你說我怎么就攤上這事「喝洌” “怎么了蛙埂?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長遮糖。 經(jīng)常有香客問我箱残,道長,這世上最難降的妖魔是什么止吁? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮燎悍,結(jié)果婚禮上敬惦,老公的妹妹穿的比我還像新娘。我一直安慰自己谈山,他們只是感情好俄删,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般畴椰。 火紅的嫁衣襯著肌膚如雪臊诊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天斜脂,我揣著相機(jī)與錄音抓艳,去河邊找鬼。 笑死帚戳,一個胖子當(dāng)著我的面吹牛玷或,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播片任,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼偏友,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了对供?” 一聲冷哼從身側(cè)響起位他,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎产场,沒想到半個月后鹅髓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡涝动,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年迈勋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片醋粟。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡靡菇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出米愿,到底是詐尸還是另有隱情厦凤,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布育苟,位于F島的核電站较鼓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏违柏。R本人自食惡果不足惜博烂,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漱竖。 院中可真熱鬧禽篱,春花似錦、人聲如沸馍惹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至悼吱,卻和暖如春慎框,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背后添。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工笨枯, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吕朵。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓猎醇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親努溃。 傳聞我的和親對象是個殘疾皇子硫嘶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容