<?xml version=”1.0” encoding=”utf-8”?>
- 2024-01-14 21:00:16
蛋白二级结构随时间的演化可用于表征蛋白折叠是否稳定. GROMACS 2023用于计算蛋白二级结构的工具为dssp
. 这个工具内置了计算二级结构的代码, 无须再借助外部工具, 并且使用了新版本DSSP算法, 可以识别PPII螺旋. 为此, GROMACS 2019中的do_dssp
工具已经废弃.
由于这个工具是新增的, 功能还不完善, 有些do_dssp
具有的功能尚未实现. 工具目前只能给出二级结构的数据, 而无法直接给出以前的xpm
图. 所以我们需要借助其他程序或脚本来绘制二级结构演化图.
我以前写过一个脚本xpm2all
, 可以将xpm
二级结构数据转换为gnuplot绘图脚本, 但它没有办法直接处理dssp
的输出数据. 为此, 我修改了一下原脚本, 使支持直接读取dssp
所给的数据文件, 并转换为gnuplot绘图脚本. 此外, 还更新了一下绘制模式, 加了几种颜色方案. 由于改动较大, 我将其从xpm2all
中抽离出来, 成为单独的一个工具, 称为dssp2gp
, 与xpm2all
并列放在一起.
选项
>>>>>>>>>>>>>>>> dssp2gp <<<<<<<<<<<<<<<<
>>>>>>>>>>>>>>>> Jicun Li <<<<<<<<<<<<<<<<
>>>>>>>>>> 2024-01-11 23:12:11 <<<<<<<<<
Usage: dssp2gp <file.dat|file.xpm> [-DRAW] [-COLOR] [RANGE]
[-t0 t0] [-dt dt] [-tu tu]
Default: dssp2gp dssp.dat -xyz -pdb 1:1E9:1 -t0 0 -dt 1 -tu ps
option: DRAW:
-xyz: xyz data
-box: plain box
-fancy: fancy helix and beta sheet
COLOR: gmx, vmd, pdb, rcsb, taylor, p1, p2, p3, p4
RANGE: [minRes:maxRes:ystart]
minRes: start from #residue
maxRes: end with #residue
ystart: y value of minRes
-t0: starting time
-dt: timestep
-tu: unit of time, fs, ps, ns
--------------------------------------------------------------------------------"
- 时间选项则是与
dssp
的时间选项类似. - 绘制和颜色选项直接指定, 后面无须参数, 如绘制模式选项
-xyz
,-box
,-fancy
, 颜色方案选项-gmx
,-vmd
等. - 残基范围选项
起始残基:终止残基:起始编号
涉及残基编号在各个工具间的转换, 较麻烦, 要考虑多种情况.dssp
输出的数据没有残基编号信息, 可以认为是1:残基数
.起始残基:终止残基
的指定基于dssp
的编号系统, 因而其可取范围为1:残基数
. 但计算所用蛋白中的残基编号可能不是从1开始的, 原因可能在于计算时只选择了整个蛋白的一部分, 或者原始蛋白PDB中的编号就不是从1开始的. 如果存在这种不一致, 那就可以设置绘制时的起始编号.
设想有个蛋白共100残基:
- 若蛋白晶体PDB中原始编号为
1:100
,pdb2gmx
时默认会使用原始编号, 则所得拓扑文件中的残基编号同样为1:100
.
dssp分析蛋白时重新编号为
1:100,
dssp2gp`转换时选择所有残基且使用原始编号绘图, 所有编号都一致, 所以无须设置范围选项. -
若蛋白晶体PDB中原始编号
13:112
,pdb2gmx
时未重新编号,dssp
分析蛋白时只选取了其中的30个残基, 其原始编号为20:49
.dssp
分析时将其重新编号1:30
,dssp2gp
转换时只使用其中的10个残基,11:20
, 但绘制时希望使用原始PDB中的编号, 则范围选项应设为11:20:30
.#: 1 2 ... 8 9 ... 18 19 ... 26 27 ... 36 37 ... 99 100 PDB: 13 14 ... [20 21 ... 30 31 ... 38 39 ... 48 49] ... 111 112 pdb2gmx: 13 14 ... [20 21 ... 30 31 ... 38 39 ... 48 49] ... 111 112 dssp: [ 1 2 ... 11 12 ... 19 20 ... 29 30] dssp2gp: [11 12 ... 19 20]
结果
几种不同的颜色方案的对比
-fancy
绘制模式只适用于少量关键蛋白的二级结构分析, 因为数目过多时无法区分.
二级结构含量
]]>- 2023-08-16 23:17:29
这篇文章来源于看到的一个回答Gnuplot: Scatter plot and density. 因为我需要绘制类似的图, 就花时间研究了一下链接中所提供的方法, 并进行了一点改进, 记在这里供需要的人参考.
首先明确一下问题: 有一组二维点, (xi, yi), i=1, 2, 3, …, n. 这些点之间存在较大程度的重叠, 我们将其绘制在平面上时想尽量直观地给出点分布的疏密情况.
下面以一个具体示例展开讨论. 我们分别以 (0, 0) 和 (2, 2) 为中心生成两组服从标准正态分布的点, 每组1000点, 共2000点.
直接绘制如下
可以看到, 直接绘制时很多点会重叠在一起, 导致无法直观地感受到数据点分布的疏密.
一种稍好点的绘制方式是使用透明度, 这样点密的位置, 看起来颜色会更深一些.
这种做法存在的问题是透明度数值的选取. 虽然也有一些方法可以估算最佳透明度, 但还是麻烦.
更好的做法是根据每个点周围其他点的密度来进行着色(或设置透明度), 一开始的链接所提供的方法就是这样. 为此, 我们先统计好每个点周围一定半径内分布的点数, 然后利用其作为点的着色变量.
我们设定统计半径为 0.1, 然后统计绘制
这个方法, 简单粗暴, 但就是慢. 因为要计算每个点到周围其他点的距离, 时间复杂度为o(N^2), 对上面测试的2000个点, 需要计算4百万次距离. 对其他脚本语言来说, 这可能不算什么, 但对gnuplot而言已经慢得有点无法接受了.
当然, 我们可以优化下距离的计算方法, 如避免使用平方根, 先进行简单判断等, 但这些都无法改进时间复杂度, 改进效果不大.
要进一步提供计算速度, 容易想到的是, 在统计每个点周围一定半径内的其他点时, 距离过大的点实际是不需要计算的, 这样的话, 我们可以先将每个点划分到一定的格子中, 在数算时只统计相邻格子中的点即可. 这种方法其实就是MD中常用的邻区搜索, 利用它可以将复杂度降低为o(N).
如果观察所得的图形, 可以发现另一问题, 那就是有些点的颜色仍然会有重叠, 导致疏密和颜色的对应并不明显. 简单的解决方法是先获得每个点周围其他点的个数, 再根据疏密进行排序, 绘制时先绘制密度低的点再绘制密度高的点, 这样颜色与疏密的对应看起来更合理.
既然我们可以分格子, 那么直接计算每个格子中点的个数, 处于同一格子中的点使用同一数据进行绘制即可. 这样虽然失去了点的具体位置信息, 但速度会有巨大提升.
当然, 我们也可以根据分格子后的数据绘制成二维密度图
]]>个