PLIP: 如何分析蛋白質(zhì)和配體相互作用?


榴蓮忘返 2014


蛋白質(zhì)和配體之間的相互作用就像一把鑰匙開一把鎖油湖,只有完美契合才能發(fā)揮最佳效果。想要設計出高效的藥物,深入了解這些相互作用至關重要嚣鄙。

今天,我們將以 PD-L1 和幾種小分子配體的共晶結構為例串结,帶你一步步利用 PLIP 和 PLIF 等工具哑子,了解蛋白質(zhì)和配體相互作用。

讀完本文肌割,你將學習到:

  1. 了解 PLIP 和 PLIF 的基本概念及應用卧蜓。
  2. 掌握利用 RDKit 分析 PLIF 數(shù)據(jù)的方法。
  3. 學習如何識別關鍵氨基酸殘基以及它們參與的相互作用類型把敞。

引言


我們希望能夠以某種更直觀的方式利用蛋白和配體結合的信息弥奸。在一番搜索之后,找到了一個可以識別相互作用分析方法:Protein-Ligand Interaction Profiler (PLIP)先巴。

PLIP 的文獻:Adasme, Melissa F., et al. "PLIP 2021: expanding the scope of the protein–ligand interaction profiler to DNA and RNA." Nucleic Acids Res., vol. 49, no. W1, 2 July 2021, pp. W530-W534, doi:10.1093/nar/gkab294.

PLIP 看起來能夠很好地分析蛋白配體相互作用其爵。

PLIP?

首先伸蚯,我們來看一下 PLIP 的網(wǎng)頁界面:

嘗試著將復合體(PDB ID: 5J89)提交到 PLIP 中進行分析摩渺,結果如下:

PLIP 看起來能夠很好地將相互作用分類并列出來。分析結果可以下載下來剂邮,并用 PyMol 進行查看摇幻。真心不錯!

識別交互作用的類型

根據(jù) Supplementary Information,默認情況下绰姻,PLIP 可以識別以下非共價相互作用:

相互作用英文基準變量疏水相互作用Hydrophobic interactions距離 (≤ 4.0?)HYDROPH_DIST_MAX氫鍵Hydrogen Bonds距離 (≤ 4.1?)
角度 (≥ 100°)HBOND_DIST_MAX
HBOND_DON_ANGLE_MINπ-π 堆積Aromatic Stacking距離 (≤ 7.5?)
角度 (T-stacking 90°±30°枉侧, P-stacking 180°±30°)
環(huán)中心距離 (≤ 2.0?)PISTACK_DIST_MAX
PISTACK_ANG_DEV
PISTACK_OFFSET_MAXπ-陽離子相互作用Pi-Cation interactions距離 (≤ 6.0?)
(三級胺需要考慮角度)PICATION_DIST_MAX鹽橋Salt Bridges電荷中心距離 (≤ 5.5?)SALTBRIDGE_DIST_MAX水介導的氫鍵Water-brodged hydrogen bonds水分子位置 (2.5?~4.0?)
角度 (75°<ω<140°, 100°<θ) )WATER_BRIDGE_MINDIST, WATER_BRIDGE_MAXDIST
WATER_BRIDGE_OMEGA_MIN, WATER_BRIDGE_OMEGA_MAX
WATER_BRIDGE_THETA_MIN鹵鍵Halogen bonds距離 (≤ 4.0?)
角度 (Donor 165°±30°, Acceptor 120°±30°)HALOGEN_DIST_MAX,
HALOGEN_DON_ANGLE, HALOGEN_ACC_ANGLE, HALOGEN_ANG_DEV

本地安裝 PLIP

安裝環(huán)境要求

PLIP 可以從命令行使用,趕緊嘗試在我的電腦上安裝它狂芋。

根據(jù) Github 上的說明[1]榨馁,PLIP 使用 OpenBabel 來識別原子屬性,因此需要安裝 OpenBabel(>= 2.3.2)帜矾。此外翼虫,PLIP 還依賴于以下可選軟件包:

  1. PyMOL(>=1.7.x 且支持 Python bindings)
  2. Imagemagick(>=1.7.x)
  3. swig

在 Python 2.7.x 環(huán)境下,可以使用以下命令安裝 PLIP:

pip install plip

但是屡萤,在嘗試使用 pip3 進行安裝時珍剑,遇到了 OpenBabel wheel 文件相關的錯誤。

安裝過程中遇到的問題及解決方法

在運行 PLIP 時遇到了以下錯誤:

File "/usr/local/lib/python3.7/site-packages/plip/modules/supplemental.py", line 388, in read_pdb
resource.setrlimit(resource.RLIMIT_STACK, (min(2 ** 28, maxsize), maxsize))
ValueError: current limit exceeds maximum limit

不太明白錯誤的原因死陆,查看相應的代碼可以發(fā)現(xiàn):

def read_pdb(pdbfname, as_string=False):
"""Reads a given PDB file and returns a Pybel Molecule."""
pybel.ob.obErrorLog.StopLogging()
if os.name != 'nt':
maxsize = resource.getrlimit(resource.RLIMIT_STACK)[-1]
resource.setrlimit(resource.RLIMIT_STACK, (min(2 ** 28, maxsize), maxsize))
sys.setrecursionlimit(10 ** 5)
return readmol(pdbfname, as_string=as_string)

這段代碼是一個讀取 PDB 文件的函數(shù)招拙。根據(jù) Python 資源庫 resource[2] 的說明,報錯的代碼似乎是在限制程序使用的系統(tǒng)資源措译。如果限制的是讀取 PDB 文件的資源别凤,那么應該可以注釋掉這段代碼。

修改后的代碼如下:

def read_pdb(pdbfname, as_string=False):
"""Reads a given PDB file and returns a Pybel Molecule."""
pybel.ob.obErrorLog.StopLogging()

sys.setrecursionlimit(10 ** 5)
return readmol(pdbfname, as_string=as_string)

保存文件后再次運行领虹,程序不再報錯闻妓,并成功輸出了 XML 文件。雖然不確定這樣做是否妥當掠械,但至少程序可以正常運行了由缆。

另外還有一種很好的辦法,那就是使用:docker 猾蒂。它非常簡單均唉,一行命令就能搞定。這里就不再贅述肚菠。

分析共晶體結構數(shù)據(jù)

這次我想要分析的共晶體結構是 PD-L1 和小分子的共晶體結構舔箭。整理小分子的信息如下:

PDB entryResolution (?)ChainPositions配體配體 ID文獻5J892.20A/B/C/D2-134BMS-2026GXOncotarget 2016(7)303235J8O2.30A/B18-134BMS-86GZOncotarget 2016(7)303235N2D2.35A/B/C/D2-134BMS-378J8J. Med. Chem. 2017(60)58575N2F1.70A/B18-134BMS-2008HWJ. Med. Chem. 2017(60)58575NIU2.01A/B/C/D18-134BMS-10018YZOncotarget 2017(8)721675NIX2.20A/B/C/D18-134BMS-11668YQOncotarget 2017(8)72167

運行分析

命令行使用方法

PLIP 可以通過 PDB ID 從 PDB 服務器上獲取數(shù)據(jù)并進行分析,因此在終端中運行以下命令:

alias plip='python ~/pliptool/plip/plipcmd.py'
plip -i 5J89 -x

-i PDBID 用于指定要分析的結構的 ID蚊逢,-x 用于將結果輸出為 XML 報告文件层扶。

RDKit 與 PLIF 計算

PLIF 是什么?

PLIF(Protein-Ligand Interaction Fingerprints)是一種使用指紋描述配體-受體相互作用類型和強度的統(tǒng)計方法烙荷,用于分析多個結合狀態(tài)镜会。

它可以分析對接結果或多個復合物結構中包含的相互作用,以:

  1. 檢測與活性/非活性相關的相互作用
  2. 提取對活性/非活性進行分類的相互作用組合規(guī)則
  3. 檢測符合規(guī)則的活性 pose 共有的藥效團

其他類似方法

除了 PLIF 之外终抽,還有其他類似的方法戳表,例如:

  1. SIFt (JMC2004(47)337[3])
  2. aPLIF
  3. aPLIED
  4. Pharm-IF (JCIM2010(50)170[4])

分析之提取信息

import xml.etree.ElementTree as ET

def generate_plif_lists(report_file, residue_list, lig_ident):

plif_list_all = []
tree = ET.parse(report_file)
root = tree.getroot()

for binding_site in root.findall('bindingsite'):
nest = binding_site.find('identifiers')
lig_code = nest.find('hetid')

if str(lig_code.text) == str(lig_ident):
nest_residue = binding_site.find('bs_residues')
residue_list_tree = nest_residue.findall('bs_residue')
for residue in residue_list_tree:
res_id = residue.text
dict_res_temp = residue.attrib
if res_id not in residue_list:
residue_list.append(res_id)
if dict_res_temp['contact'] == 'True':
if res_id not in plif_list_all:
plif_list_all.append(res_id)
return plif_list_all, residue_list
bs_res_list = []

P_L_dict = {"5J89":"6GX","5J8O":"6GZ","5N2D":"8J8",
"5N2F":"8HW","5NIU":"8YZ","5NIX":"8YQ"}

contact_res_dict = {}
for pdb_id, lig_id in P_L_dict.items():
pl = "conres_" + pdb_id
xml_path = "PLIP_results/" + pdb_id + "/report.xml"
pl, bs_res_list = generate_plif_lists(xml_path, bs_res_list, lig_id)
contact_res_dict[pdb_id] = pl
print(contact_res_dict.keys())

print(contact_res_dict['5J89'])
print(len(bs_res_list))

結果分析:結合位點氨基酸殘基

  1. 代碼首先定義了一個函數(shù)generate_plif_lists桶至,用于從 PLIP 的分析結果(XML 文件)中提取信息。
  2. 然后創(chuàng)建了一個空列表bs_res_list匾旭,用于存儲結合位點的所有氨基酸殘基镣屹,以及一個字典P_L_dict,用于存儲 PDB ID 和配體 ID 的對應關系价涝。
  3. 接下來女蜈,代碼遍歷P_L_dict中的所有鍵值對,并調(diào)用generate_plif_lists函數(shù)色瘩,將結果存儲在contact_res_dict字典中鞭光。
  4. contact_res_dict字典的鍵是 PDB ID,值是與配體接觸的殘基列表泞遗。
  5. 最后,代碼打印了contact_res_dict字典的鍵席覆、contact_res_dict['5J89']的值史辙,以及bs_res_list的長度。

結果顯示佩伤,bs_res_list的長度為 136聊倔,表明結合位點包含 136 個氨基酸殘基。

共晶體結構中的配體似乎以 PD-L1 二聚體為中心對稱排列生巡。如果確實是這種情況耙蔑,那么氨基酸序列的位置就比區(qū)分 CHAIN 更重要。因此孤荣,我們嘗試在不區(qū)分 CHAIN 信息的情況下重新進行分析甸陌。

實際上,這只需要從提取信息中提取的殘基信息中刪除最后一個字母即可盐股。

bs_res_list_num = []
for i in bs_res_list:
# 去除CHAIN信息
j = i[:-1]
bs_res_list_num.append(int(j))

# 去除重復信息并排序
bs_res_list_num_unique = sorted(set(bs_res_list_num))

print(len(bs_res_list_num_unique))
print(bs_res_list_num_unique)

接下來钱豁,我們從相互作用的殘基信息中刪除 CHAIN 信息,并去除重復信息疯汁。

contact_res_dict_num_unique = {}

for k, v in contact_res_dict.items():
tmp_list = []
for i in v:
# 從相互作用殘基中去除CHAIN信息
j = i[:-1]
tmp_list.append(int(j))
tmp_unique = sorted(set(tmp_list))
contact_res_dict_num_unique[k] = tmp_unique

獲取比特列表

直接使用 RDKit 的 BitVect 并將其轉(zhuǎn)換回 numpy 數(shù)組會導致殘基編號信息的丟失牲尺。為了解決這個問題,創(chuàng)建一個新的函數(shù)來生成比特列表幌蚊。

def PLIF_list_generator(bs_residues, contact_residues):
tmp = []
for i in bs_residues:
if i in contact_residues:
tmp.append(1)
else:
tmp.append(0)
return tmp

然后谤碳,我們創(chuàng)建一個 DataFrame,其中行表示 PDB ID溢豆,列表示殘基編號蜒简。

FP_df_num = pd.DataFrame(index=PDB_id_list, columns=bs_res_list_num_unique)

for k, v in contact_res_dict_num_unique.items():
FP_df_num.loc[k] = PLIF_list_generator(bs_res_list_num_unique, v)

結果如下:

為了方便觀察哪些殘基在多個共晶體結構中都參與了相互作用,我們計算每個殘基的比特和漩仙。

FP_df_num.loc['bit_sum']=FP_df_num.sum()

最后臭蚁,使用熱圖可視化結果:

%matplotlib inline
sns.heatmap(FP_df_num)

尋找重要殘基

根據(jù)之前的分析最铁,6 個共晶體結構可以分為 3 組。因此垮兑,bit_sum大于等于5的殘基意味著它至少在 3 組中的每一組中都出現(xiàn)過一次冷尉。

Frequent_residues = list(FP_df_num.T.query('bit_sum >= 5').index)
print(Frequent_residues)

這些殘基具體涉及哪些相互作用呢?我們以包含所有這些殘基的PDB ID: 5NIX (配體: 8YQ)為例系枪,使用 PLIP 網(wǎng)站進行分析雀哨。

5NIX是一個「PD-L1 4: Ligand 2」的復合體,包含兩個配體私爷。分析結果如下表所示:


殘基編號氨基酸距離相互作用
殘基編號氨基酸距離相互作用8YQ








(chain A/B)



8YQ



(chain C/D)54CILE3.89疏水相互作用





56BTYR3.82疏水相互作用
56CTYR3.42/3.62疏水相互作用
115A/BMET3.70/3.80疏水相互作用
115C/DMET3.85/3.82疏水相互作用
121A/BALA3.69/3.75疏水相互作用
121C/DALA3.96/3.57疏水相互作用
123ATYR3.80/3.52/3.85疏水相互作用
123DTYR3.72疏水相互作用

分析結果顯示雾棺,除了預期的與配體芳香環(huán)的 π-π 相互作用外,還觀察到多個與甲硫氨酸和丙氨酸的相互作用衬浑。

接下來捌浩,我們將bit_sum的門檻降低到 4,看看會有什么新的發(fā)現(xiàn)工秩。

Frequent_residues4 = list(FP_df_num.T.query('bit_sum >= 4').index)
print(Frequent_residues4)

結果中新增了殘基66124尸饺,對應如下表所示:


殘基編號氨基酸距離相互作用
殘基編號氨基酸距離相互作用8YQ








(chain A/B)66BGLN3.72疏水相互作用8YQ



(chain C/D)









124ALYS5.03/3.18π-陽離子/鹽橋
124DLys3.70水橋/鹽橋

除了疏水相互作用外,新增了親水性殘基 Lys助币,使相互作用類型更加多樣化浪听。

以下是 PLIP 分析結果的截圖,展示了這些相互作用的具體情況:

總結

本文介紹了蛋白質(zhì)-配體相互作用指紋(PLIF)方法眉菱,該方法結合了蛋白質(zhì)-配體相互作用分析軟件(PLIP)和化學信息學工具包 RDKit迹栓,用于分析蛋白質(zhì)-配體相互作用。

首先俭缓,利用 PLIP 軟件分析了 6 個 PD-L1 共晶體結構克伊,獲得了配體與蛋白質(zhì)殘基之間的相互作用信息。然后华坦,根據(jù) OPIG 博客介紹的方法答毫,利用 RDKit 將 PLIP 的分析結果轉(zhuǎn)換為 PLIF。

為了便于比較不同共晶體結構之間的相互作用模式季春,將 PLIF 表示為位向量洗搂,并使用熱圖可視化。結果表明载弄,根據(jù)位向量的分布耘拇,6 個共晶體結構可以分為 3 組,這與配體的分子量和蛋白質(zhì)鏈的數(shù)量有關宇攻。

為了進一步分析惫叛,去除了蛋白質(zhì)鏈信息,僅根據(jù)殘基編號重新生成了 PLIF逞刷。結果表明嘉涌,殘基 54妻熊、56、115仑最、121扔役、123 在所有 6 個共晶體結構中都參與了相互作用,而殘基 66 和 124 在至少 4 個結構中參與了相互作用警医。

通過分析 PLIP 的交互圖亿胸,發(fā)現(xiàn)這些殘基主要參與了疏水相互作用、π-陽離子相互作用预皇、鹽橋和水橋等相互作用侈玄。

PLIF 方法可以用于分析多個共晶體結構,識別關鍵的蛋白質(zhì)-配體相互作用殘基吟温,并為藥物設計提供指導序仙。未來可以進一步探索 PLIF 在以下方面的應用:

  1. 結合虛擬篩選結果,優(yōu)化化合物庫的設計和篩選策略鲁豪。
  2. 建立定量構效關系模型潘悼,預測化合物的活性。
  3. 分析蛋白質(zhì)-蛋白質(zhì)相互作用呈昔,研究蛋白質(zhì)的功能和調(diào)控機制。

你一般是如何識別關鍵殘基? 歡迎大家在評論區(qū)留言友绝,分享您的想法和經(jīng)驗堤尾!

— 完 —

對相關內(nèi)容感興趣的讀者,可以添加小編微信加入讀者實名交流互助群迁客。添加時請主動注明姓名-企業(yè)-職位/崗位 姓名-學校-職務/研究方向郭宝。


參考資料

[1]

Github 上的說明: https://github.com/ssalentin/plip

[2]

resource: https://docs.python.org/ja/3.8/library/resource.html

[3]

JMC2004(47)337: https://pubs.acs.org/doi/abs/10.1021/jm030331x

[4]

JCIM2010(50)170: https://pubs.acs.org/doi/abs/10.1021/ci900382e


?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市掷漱,隨后出現(xiàn)的幾起案子粘室,更是在濱河造成了極大的恐慌,老刑警劉巖卜范,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衔统,死亡現(xiàn)場離奇詭異,居然都是意外死亡海雪,警方通過查閱死者的電腦和手機锦爵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奥裸,“玉大人险掀,你說我怎么就攤上這事⊥逯妫” “怎么了樟氢?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵冈绊,是天一觀的道長。 經(jīng)常有香客問我埠啃,道長死宣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任霸妹,我火速辦了婚禮十电,結果婚禮上,老公的妹妹穿的比我還像新娘叹螟。我一直安慰自己鹃骂,他們只是感情好,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布罢绽。 她就那樣靜靜地躺著畏线,像睡著了一般。 火紅的嫁衣襯著肌膚如雪良价。 梳的紋絲不亂的頭發(fā)上寝殴,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音明垢,去河邊找鬼蚣常。 笑死,一個胖子當著我的面吹牛痊银,可吹牛的內(nèi)容都是我干的抵蚊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼溯革,長吁一口氣:“原來是場噩夢啊……” “哼贞绳!你這毒婦竟也來了?” 一聲冷哼從身側響起致稀,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤冈闭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后抖单,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萎攒,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年矛绘,在試婚紗的時候發(fā)現(xiàn)自己被綠了躺酒。 大學時的朋友給我發(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
  • 我被黑心中介騙來泰國打工奉狈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留卤唉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓仁期,卻偏偏與公主長得像桑驱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蟀拷,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

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