计算化学公社

标题: 求助统计聚合物间距离小于一定距离的原子数和对应帧数 [打印本页]

作者
Author:
凉才快    时间: 2024-11-14 20:18
标题: 求助统计聚合物间距离小于一定距离的原子数和对应帧数
在VMD中输入source distance.tcl能直接运行 (, 下载次数 Times of downloads: 0) 。输出结果如图:
(, 下载次数 Times of downloads: 0)
试了下计算1.6万个原子和900个原子间的原子数,CPU只能跑10%左右,算一帧要1分钟,不知道能不能优化一下,一次多算几帧。红字部分数字依次对应统计起始帧数、统计截至帧数、聚合物1原子序号、聚合物2原子序号、两者距离(nm)。

# 遍历每一帧
for {set ifps 1} {$ifps <= 20000} {incr ifps} {
    # 使用 atomselect 命令根据原子索引创建选择集
    set sel1 [atomselect top "index 0 to 16699" frame $ifps]
    set sel2 [atomselect top "index 16700 to 17607" frame $ifps]

    # 初始化计数器
    set count 0

    # 遍历第二个区域中的所有原子
    foreach j [$sel2 list] {
        # 遍历第一个区域中的所有原子
        foreach i [$sel1 list] {
            # 提取两个区域的原子序号
            set atom1 $i
            set atom2 $j
            # 计算两个原子之间的距离
            set tmpd [measure bond "$i $j" frame $ifps]
            # 如果距离小于3nm,则增加计数器
            if {$tmpd < 3.0} {
                incr count
            }
        }
    }





作者
Author:
lyj714    时间: 2024-11-14 22:11
考虑用vmd的within选择语法去做,而不是这种暴力遍历,纯纯浪费时间。另外tcl要并行比较难,可能要轨迹分割或者其他,也麻烦。
作者
Author:
凉才快    时间: 2024-11-14 23:17
lyj714 发表于 2024-11-14 22:11
考虑用vmd的within选择语法去做,而不是这种暴力遍历,纯纯浪费时间。另外tcl要并行比较难,可能要轨迹分割 ...

好的,谢谢老师
作者
Author:
sobereva    时间: 2024-11-15 12:38
如果GROMACS的mindist能实现你的目的,尽量用mindist,远比tcl脚本快得多得多

参考北京科音分子动力学与GROMACS培训班(http://www.keinsci.com/KGMX)的ppt:
(, 下载次数 Times of downloads: 0)

(, 下载次数 Times of downloads: 1)

作者
Author:
凉才快    时间: 2024-11-15 20:06
sobereva 发表于 2024-11-15 12:38
如果GROMACS的mindist能实现你的目的,尽量用mindist,远比tcl脚本快得多得多

参考北京科音分子动力学与 ...

好的,谢谢sob老师




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3