|
本帖最后由 ene 于 2020-3-2 12:13 编辑
2020.03.02更新:sasa-dmp-v1.1.tcl,可在6楼下载。无特殊情况请使用最新版。
楼主最近在研究中用到了溶剂可及表面积(SASA)来对分子特征进行一些表征,但同时也发现,利用自写的Tcl脚本结合VMD计算SASA时,只能做串行计算,体系稍微大一些或者轨迹稍微长一些时计算起来简直是龟速……因此楼主开始考虑能不能把Tcl脚本中的计算过程做并行化。因为普通的Tcl解释器只能利用一个cpu核心进行计算,所以如果需要解释器进行并行计算,必须借助Tcl扩展包进行实现,例如使用Thread库:https://wiki.tcl-lang.org/page/Tcl+and+threads。但是使用这个库有前提,也就是Tcl解释器在进行编译时必须打开多线程支持(在configure时加入--enable-threads选项)。不巧的是VMD内置的Tcl解释器并没有启动这一选项,导致VMD根本没法使用Thread库(没尝试直接源码编译VMD,或许通过改源码的方式可以实现启动多线程支持)。(楼主千辛万苦编译好Thread库,在VMD console里面输入package require Thread时却只得到一条报错:Tcl core wasn't compiled for threading。f**k VMD)
无奈之下楼主又在VMD mail list中搜索了相关信息,结果发现了一封邮件里面提到可以在后台启动多个VMD进行来实现并行化计算:https://www.ks.uiuc.edu/Research/vmd/mailing_list/vmd-l/19665.html。这种方法很脏,看起来也比较难做线程间的通信,但是由于SASA计算的特点是每计算一个结构时,并不依赖上一个结构的结果,所以这种方法可能正合用。
然后楼主就写出了sasa-dmp.tcl脚本,可以在这里下载。需要注意的是楼主没在windows下面测试过,linux系统下可用:
sasa-dmp.tar.xz
(1.49 KB, 下载次数 Times of downloads: 95)
脚本的思路很简单:首先根据要使用的核心数量,将模拟轨迹切割成相应多的小片段,再在后台启动相应多的VMD进程,每个进程计算一段轨迹的SASA,最后汇总各个进程的结果。这样就实现了并行化的计算。脚本中的参数分别如下:
- vmdexec:你的vmd可执行文件名称,也就是在终端输入这个命令,可以启动VMD。(VMD安装好后的默认命令貌似是run_vmd_tmp)
- dcdfile:轨迹文件
- psffile:结构文件
- nproc:并行使用的核心数
- outfile:输出文件名
- select1:要计算SASA的结构,而且必须是完整的,例如all and protein
- select2:应该被定义为由select1选中的结构的一部分,在计算中会只计算这部分的SASA
- srad:探针半径(建议使用默认值1.4)
- freq:每间隔多少帧计算一次
复制代码
关于select1和select2的关系可以参考sob老师的ppt,select2就是-restrict后面的部分:
最后附上用于串行计算SASA的普通脚本sasa.tcl:
sasa.tcl
(516 Bytes, 下载次数 Times of downloads: 141)
|
评分 Rate
-
查看全部评分 View all ratings
|