<?xml version=”1.0” encoding=”utf-8”?>
- 2025-04-17 08:18:55
运行gmx分析命令没有必要并行, 因为大部分分析命令都不支持并行, 而且分析耗时也不大. 如果有些分析确实需要运行很长时间, 可以将整个分析脚本作为作业提交.
如果只需要简单地分析一下每个水分子的氢键, 而不关心每个水分子的其他性质, 因为每个水分子的索引号是固定的, 不需要使用gmx select
重选, 提前做好 index.ndx
文件即可. 如果还需要每个水分子的其他信息, 方便后面对氢键数作图, 就需要借助gmx select
.
gmx select
的选区语句需要放在引号中, 但需要注意bash脚本中单引号和双引号的区别. 单引号中的内容都是字面值, 不会进行变量替换, 所以 $i
还是 $i
; 双引号中内容会进行变量替换, 还要注意内容中的双引号要转义, 否则出错. 当然, 更保险的作法是将选区语句放到一个文本文件中使用 gmx -select -sf sel.txt
.
下面让我们来分析一下每个水分子与其他水分子形成的氢键数目随时间的变化.
先假定我们只处理一帧轨迹. 体系中有 216 个水分子, 我们每次选择一个水分子作为选中组, 其余水分子作为非选中组, 创建相应的索引文件, 然后调用hbond
计算两个组之间的氢键, 然后对得到的数据进行整理, 输出到需要的文件.
hb.bsh | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | for i in {1..216}; do
gmx select -quiet -s -on index.ndx &>/dev/null \
-select "Wsel = resnr $i; Wexc = not Wsel;\"Wsel\" Wsel; \"Wexc\" Wexc"
echo 0 1 | gmx hbond -quiet -f traj.xtc -s -n -num hbnum~$i.xvg &>/dev/null
rm -f index.ndx
done
awk '/^ *[0-9]/ {print $1, $2}' hbnum~1.xvg > hb~num.xvg
for i in {2..216}; do
awk '/^ *[0-9]/ {print $2}' hbnum~$i.xvg >_tmp.xvg
paste hb~num.xvg _tmp.xvg >_num.xvg
mv _num.xvg hb~num.xvg
done
rm -f _tmp.xvg |
获得了数据之后, 我们就可以考虑如何绘制数据了.
根据自己熟悉的程序与软件, 绘制成相应的图.
- 2025-04-17 08:23:20
gnuplot是一个功能强大的开源绘图工具. 对于一个程序而言, 它自身的历史足够长了. 我使用它也有不少年了, 博文中有不少是相关的. gnuplot命令简单, 一行代码就可以绘制数据, 熟悉后可以快速地查看数据效果, 生成出版质量的图片, 分析实际数据也不在话下. gnuplot足够简单, 却也很灵活, 支持的各种语法组合起来, 基本可以视为一种完备的语言, 虽然处理速度不佳.
与Linux理念类似, gnuplot整体偏向命令行使用, 因此很大一部分功能来源于能够脚本化, 但也因此学习曲线稍陡, 对于没有命令行使用经验的新用户, 更是如此.
对于简单的数据分析与绘图, 或是演示, 使用gnuplot命令行都稍显麻烦, 如果在浏览器中运行可能更方便. 这就需要我们想办法将gnuplot移植到浏览器中, 做成在线版.
目前见到的在线版gnuplot并不多, 有已经失效的老版本, 有使用WebAssembly重新编译的gnuplot-in-the-browser, gnuplot-wasm, 还有一个node版.
gnuplot在线版支持的终端比较简单, 因为支持png之类的图形终端会大大增加其文件大小, 而且比较困难, 实际上也不大必要. 综合考虑, 只需要支持svg和canvas终端就可以了. 再考虑到只有svg终端可以使用浏览器支持的字体, 所以要精简的话, 可以只支持svg终端.
gnuplot默认的绘图设置并不美观, 为了避免每次绘图都设置一大堆选项, 可以将自己偏好的设置作为初始化文件载入, 这样也可以保证每次的绘图设置类似, 形成自己的风格. 因此, 我曾花费了不少时间仔细调整了各种选项, 尽量保证绘制的图可以直接作为论文配图.
除绘制函数与数据外, gnuplot还支持非线性拟合, 几行代码就可以将数据拟合为任何函数形式, 默认的非线性最小二乘拟合算法为Marquardt-Levenberg, 而且拟合时也可以包含x, y的误差.
尽管容易使用, gnuplot的拟合效果却很好. 以NIST非线性回归数据集为例, 对其中的所有示例, gnuplot几乎都能给出预期结果, 差异在百分之几以内. 只有几个测试失败, 与预期结果有显著差异的更多一些. 这些测试中有一些非常困难的, 因此, 得到这样的结果并不意外. 具体的测试结果可以参考Gnuplot Online上的代码与测试结果.
]]>