<?xml version=”1.0” encoding=”utf-8”?>

Jerkwin2024-01-20T10:40:28+00:00 Jerkwin
dssp数据绘图脚本dssp2gp2024-01-14T00:00:00+00:00 Jerkwin https://jerkwin.github.io/2024/01/14/dssp数据绘图脚本dssp2gp <![CDATA[
  • 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绘制模式只适用于少量关键蛋白的二级结构分析, 因为数目过多时无法区分.

二级结构含量

]]>
使用gnuplot绘制散点密度图2023-08-16T00:00:00+00:00 Jerkwin https://jerkwin.github.io/2023/08/16/使用gnuplot绘制散点密度图 <![CDATA[
  • 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).

如果观察所得的图形, 可以发现另一问题, 那就是有些点的颜色仍然会有重叠, 导致疏密和颜色的对应并不明显. 简单的解决方法是先获得每个点周围其他点的个数, 再根据疏密进行排序, 绘制时先绘制密度低的点再绘制密度高的点, 这样颜色与疏密的对应看起来更合理.

既然我们可以分格子, 那么直接计算每个格子中点的个数, 处于同一格子中的点使用同一数据进行绘制即可. 这样虽然失去了点的具体位置信息, 但速度会有巨大提升.

当然, 我们也可以根据分格子后的数据绘制成二维密度图

]]>

访问人次(2015年7月 9日起): | 最后更新: 2024-01-20 10:40:28 UTC | 版权所有 © 2008 - 2024 Jerkwin