首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图通过VMD找出包埋在脂质双层中的AQP蛋白的各孔中的渗透事件

试图通过VMD找出包埋在脂质双层中的AQP蛋白的各孔中的渗透事件
EN

Stack Overflow用户
提问于 2020-07-02 23:50:50
回答 1查看 71关注 0票数 0

我的项目是基于MD模拟分析一个包含水盒和含有水通道蛋白的脂质双层的体系。在该系统上进行了150 ns时间步长的模拟,以研究水在脂质双层中的渗透和流动分析。我的工作分析之一要求计算通过这种嵌入蛋白的每个通道的水渗透事件(这种蛋白质包含形成四个水通道的四个单体)。我正在使用VMD执行我的分析。

我从网上拿到这个脚本https://www.ks.uiuc.edu/Training/Tutorials/science/nanotubes/files/permeation.tcl冲浪。但是这个脚本没有根据我的要求给出结果。

因为我想找出分别通过每个孔/水通道发生的渗透事件,所以这个脚本只计算整个AQP层的水渗透事件。我没有那么多的专业知识,以改变这个脚本根据我的要求。

EN

回答 1

Stack Overflow用户

发布于 2020-07-03 00:58:36

当然,第一个问题是,模拟是否具有您需要的信息。毕竟,如果我们不能发现这一点,那么我们就有问题了!

如果我们查看分析代码本身,我们可以看到它实际上所做的只是使用每一帧中水分子的Z坐标,而忽略了其他坐标(这将是估计使用了哪个孔隙所必需的)。它使用每个分子的一个很小的状态机来决定它们发生了什么。相关代码如下(将输入规范化后):

代码语言:javascript
复制
for {set fr 0} {$fr < $numFrame} {incr fr} {
    molinfo top set frame $fr
    set oldList $labelList
    set labelList {}
    foreach z [$wat get z] oldLab $oldList segname $segList resid $ridList {
        if {$z > $upperEnd} {
            set newLab 2
            if {$oldLab == -1} {
                puts "$segname:$resid permeated through the nanotubes along +z direction at frame $fr"
                if {$fr >= $skipFrame} {
                    incr num1
                }
            }
        } elseif {$z < $lowerEnd} {
            set newLab -2
            if {$oldLab == 1} {
                puts "$segname:$resid permeated through the nanotubes along -z direction at frame $fr"
                if {$fr >= $skipFrame} {
                    incr num2
                }
            }
        } elseif {abs($oldLab) > 1} {
            set newLab [expr $oldLab / 2]
        } else {
            set newLab $oldLab
        }
        lappend labelList $newLab
    }
}

也许一个开始是在凌日事件之后立即收集分子的X和Y坐标,并绘制这些坐标?我不知道这会不会有帮助,但也许吧?

代码语言:javascript
复制
for {set fr 0} {$fr < $numFrame} {incr fr} {
    molinfo top set frame $fr
    set oldList $labelList
    set labelList {}
    foreach x [$wat get x] y [$wat get y] z [$wat get z] oldLab $oldList segname $segList resid $ridList {
        if {$z > $upperEnd} {
            set newLab 2
            if {$oldLab == -1} {
                puts "$segname:$resid permeated through the nanotubes along +z direction at frame $fr"
                if {$fr >= $skipFrame} {
                    incr num1
                }
                # Remember event for later
                lappend permeateUpwards $x $y
            }
        } elseif {$z < $lowerEnd} {
            set newLab -2
            if {$oldLab == 1} {
                puts "$segname:$resid permeated through the nanotubes along -z direction at frame $fr"
                if {$fr >= $skipFrame} {
                    incr num2
                }
                # Remember event for later
                lappend permeateDownwards $x $y
            }
        } elseif {abs($oldLab) > 1} {
            set newLab [expr $oldLab / 2]
        } else {
            set newLab $oldLab
        }
        lappend labelList $newLab
    }
}

现在我们有了这些列表,我们可以尝试将它们打印到一个文件中,以便您可以绘制它们:

代码语言:javascript
复制
set f [open "downwards.csv" w]
foreach {x y} $permeateDownwards {
    puts $f "$x,$y"
}
close $f

set f [open "upwards.csv" w]
foreach {x y} $permeateUpwards {
    puts $f "$x,$y"
}
close $f

有很多工具可以绘制CSV中的一系列点,您可以查看这些工具,看看您所获得的是否至少是合理的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62700308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档