Swiss-Model是啥?

来自说明文档的介绍:

SWISS-MODEL is a web-based integrated service dedicated to protein structure homology modelling. It guides the user in building protein homology models at different levels of complexity.

Building a homology model comprises four main steps: (i) identification of structural template(s), (ii) alignment of target sequence and template structure(s), (iii) model-building, and (iv) model quality evaluation. These steps require specialised software and integrate up-to-date protein sequence and structure databases. Each of the above steps can be repeated interactively until a satisfying modelling result is achieved.

使用很简单,Web Sever里贴序列就行:

为什么要写个R包?

上实验课,要使用Swiss-Model进行蛋白质建模,其它的操作都在R里可以搞,但这一步,得到网页上来弄,再把结果下载下来,又回到R。就想问自己一个问题:能不能装逼装全套?于是就着手写一个R包。

安装

一条指令安装

yulab.utils::install_zip_gh("YuLab-SMU/swissmodel")

设置

首先是需要一个API token,注册了在账号里就可以看到:

然后加载swissmodel包,用set_swissmodel_token函数设置即可。

library(swissmodel)
set_swissmodel_token("YOUR_SWISSMODEL_TOKEN")

建模

首先你得有序列吧:

hemoglobin_sequence <- "VLSPADKTNVKAAWAKVGNHAADFGAEALERMFMSFPSTKTYFSHFDLGHNSTQVKGHGKKVADALTKAVGHLDTLPDALSDLSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPGDFTPSVHASLDKFLASVSTVLTSKYR"

然后建模直接是写成一个workflow,所以你只要跑这一句代码就行:

result <- run_automodel_workflow(hemoglobin_sequence)

然后就是等,期间函数打印出来的信息如下:

Starting automodel workflow...
AUTOMODEL task submitted successfully!
Project ID: 25f307
Project status: INITIALISED [Waited: 0 seconds]
Project status: RUNNING [Waited: 32 seconds]
Project status: RUNNING [Waited: 63 seconds]
Project status: RUNNING [Waited: 95 seconds]
Project status: RUNNING [Waited: 127 seconds]
Project status: RUNNING [Waited: 158 seconds]
Project status: RUNNING [Waited: 189 seconds]
Project status: RUNNING [Waited: 220 seconds]
Project status: RUNNING [Waited: 251 seconds]
Project status: RUNNING [Waited: 282 seconds]
Project status: COMPLETED [Waited: 313 seconds]
Modeling completed successfully!
File downloaded successfully: ./modeling_results/25f307_model_1.pdb
File downloaded successfully: ./modeling_results/25f307_model_2.pdb

这个workflow包含了几步:

  1. 创建一个输出的文件夹,默认./modeling_results

  2. 提交序列,得到一个项目ID

  3. 检查这个项目的状态

  4. 当项目完成之后,拿到结果的URL

  5. 下载文件

  6. 返回运行整个workflow的一些相关信息

result里记录了相关的信息,结果如下:

> result
$project_id
[1] "25f307"
 
$status
[1] "COMPLETED"
 
$downloaded_files
$downloaded_files$model_1
[1] "./modeling_results/25f307_model_1.pdb"
 
$downloaded_files$model_2
[1] "./modeling_results/25f307_model_2.pdb"
 
$project_info_file
[1] "./modeling_results/25f307_info.json"

这些信息也会被写入json文件,这样你退出R之后,这些信息都是有保留的。这个json文件的信息很容易读进来:

> jsonlite::fromJSON(result$project_info_file)
$project_id
[1] "25f307"
 
$status
[1] "COMPLETED"
 
$models
  model_id    status gmqe                                               coordinates_url                                                  modelcif_url avg_local_score
1       01 COMPLETED 0.98 https://swissmodel.expasy.org/project/25f307/models/01.pdb.gz https://swissmodel.expasy.org/project/25f307/models/01.cif.gz              NA
2       02 COMPLETED 0.90 https://swissmodel.expasy.org/project/25f307/models/02.pdb.gz https://swissmodel.expasy.org/project/25f307/models/02.cif.gz            0.85
 
$date_created
[1] "2025-11-10T05:54:31.192032Z"
 
$project_title
[1] "R Automodel"
 
$view_url
[1] "https://swissmodel.expasy.org/project/25f307/view"

这个view_url点开之后,也可以到Swiss-Model网站上看结果:

所以一个流程,完事了。建模完成的pdb文件已经下载到了本地,我们可以在R里读取。

这个R包到这里,应该说就完成了开头说的,要在R里用Swiss-Model的使命。演示的这个流程,里面每一步都是可以单独运行的,函数都是分开并且是export的。

蛋白结构初印象

我还继续写了一些简单的函数,可以做一些简单的分析。

首先读取PDB文件,调用了bio3d包的read.pdb:

> pdb = read.pdb(result$downloaded_files[[1]])

然后你可以用summary来看这个对象的一些信息:

> summary(pdb)
 
 Call:  read.pdb(file = result$downloaded_files[[1]])
 
   Total Models#: 1
     Total Atoms#: 1076,  XYZs#: 3228  Chains#: 1  (values: A)
 
     Protein Atoms#: 1076  (residues/Calpha atoms#: 141)
     Nucleic acid Atoms#: 0  (residues/phosphate atoms#: 0)
 
     Non-protein/nucleic Atoms#: 0  (residues: 0)
     Non-protein/nucleic resid values: [ none ]
 
+ attr: atom, xyz, calpha, call

swissmodel包里,也提供了其它一些函数,包括pdb_info():

> pdb_info(pdb)
Protein Structure Information:
  - Atoms: 1076
  - Residues: 141
  - Chains: A
  - Model dimensions (<c3><85>):
    X: 43.88
    Y: 27.32
    Z: 41.17
$atoms
[1] 1076
 
$residues
[1] 141
 
$chains
[1] "A"
 
$dimensions
     x      y      z 
43.883 27.317 41.168 

以及analyze_model_quality():

> analyze_model_quality(pdb)
$atoms
[1] 1076
 
$residues
[1] 141
 
$chains
[1] "A"
 
$resolution
[1] NA
 
$rama_favored
[1] 79.28571
 
$rama_allowed
[1] 9.285714
 
$rama_outliers
[1] 11.42857

它会计算拉式图的一些参数:

  1. Ramachandran Favored(最允许区域):这些区域对应的φ和ψ二面角组合在立体化学上是最允许的,通常对应于蛋白质中常见的二级结构,如α-螺旋和β-折叠。这些区域内的残基构象在能量上是有利的,且没有原子间的空间冲突。

  2. Ramachandran Allowed(允许区域):这些区域对应的φ和ψ二面角组合在立体化学上是允许的,但可能不如最允许区域那么理想。这些区域内的残基构象在能量上可能是可接受的,但可能不如最允许区域稳定。

  3. Ramachandran Outliers(异常区域):这些区域对应的φ和ψ二面角组合在立体化学上是不允许的,因为它们会导致原子间的空间冲突或能量上不利的构象。出现在这些区域的残基可能表示该残基的构象存在问题,例如在蛋白质结构建模或测定中可能出现了错误。

画图

拉式图(Ramachandran图)来评估蛋白质结构中氨基酸残基的构象是否合理。Ramachandran图是根据蛋白质中每个非末端氨基酸残基的φ和ψ二面角绘制的散点图。这些二面角决定了蛋白质主链的构象。

也是一条指令:

plot_ramachandran(pdb)

还可以画一下残基的组成:

plot_residue_composition(pdb)

最后呢,三维结构不画三维怎么行,还是一条指令:

plot_pdb(pdb)

这里调用了以前介绍的R包r3dmol

对于这些结构简单分析和画图函数,也封装成一个流程,只需要跑run_pdb_analysis()一个函数,就会将这些分析全部跑一遍,然后分别写入文件。

参考资料