计算化学公社

标题: 统计某种离子一定范围内的水分子个数 [打印本页]

作者
Author:
ruanyang    时间: 2015-5-19 09:30
标题: 统计某种离子一定范围内的水分子个数
大家好,我想请教一个VMD脚本的问题!我想利用此脚本得到LI离子3.5埃距离内的水分子的个数!我写了一个脚本,但是不能输出个数,只能输出被选择的原子的serial,我的目的是输出每一帧中被选中的水分子个数!同时我不确定我的脚本是不是按照帧数更新的,特地在这请教各位,谢谢!
  1. set numFrame [molinfo top get numframes]
  2. molinfo top set frame 0
  3. set out [open ry.txt w]
  4. for {set i 0} {$i < $numFrame} {incr i} {
  5. set hnumber [atomselect top "same resid as (resname SOL and within 3.5 of resname LI)"]
  6. set a [$hnumber get serial]
  7. puts $out $a
  8. $hnumber frame $i
  9. $a frame $i
  10. }   
  11. close $out
复制代码



作者
Author:
fhh2626    时间: 2015-5-19 10:20
set hnumber [atomselect top "noh and (same resid as (resname SOL and within 3.5 of resname LI))"]
set a [$hnumber num]

这样就行了
作者
Author:
ruanyang    时间: 2015-5-19 10:42
谢谢您的回复,你在atomselect top 中的 noh 指的是只选中水中的氧原子是吧!
作者
Author:
ruanyang    时间: 2015-5-19 10:56
很感激你的帮助,虽然解决了个数的问题,我一共是5002,但是这个脚本没有循环起来!只得到第一帧的数据
作者
Author:
fhh2626    时间: 2015-5-19 11:46
ruanyang 发表于 2015-5-19 10:56
很感激你的帮助,虽然解决了个数的问题,我一共是5002,但是这个脚本没有循环起来!只得到第一帧的数据

set hnumber [atomselect top "noh and (same resid as (resname SOL and within 3.5 of resname LI)) frame $i"]
这样试试

如果不行的话加上hnumnber $update
作者
Author:
ruanyang    时间: 2015-5-19 14:18
您好,我将脚本进行了修改,现在能输出5002个数据了,但是输出的数据都是第0帧的数44,我不清楚那个地方还需要修改
  1. set numFrame [molinfo top get numframes]
  2. set out [open ry.txt w ]
  3. for {set i 0} {$i < $numFrame} {incr i} {
  4. set hnumber [atomselect top "(noh same resid as (resname SOL and within 3.5 of resname LI))"]
  5. $hnumber update
  6. set a [$hnumber num]
  7. puts $out $a
  8. }   
  9. close $out
复制代码


作者
Author:
sobereva    时间: 2015-5-19 16:44
ruanyang 发表于 2015-5-19 14:18
您好,我将脚本进行了修改,现在能输出5002个数据了,但是输出的数据都是第0帧的数44,我不清楚那个地方还 ...


应该写set hnumber [atomselect top "(noh same resid as (resname SOL and within 3.5 of resname LI))" frame $i]
此时就不需要$hnumber update了

或者,每次循环用
$hnumber frame $i
$hnumber update
这样set hnumber [atomselect...只需要最初做一次即可,不用每个循环重做一遍

作者
Author:
ruanyang    时间: 2015-5-19 18:17
谢谢Sob老师和 fhh2626的解答,问题完美解决,附上正确的脚本!
  1. set numFrame [molinfo top get numframes]
  2. set out [open ry.txt w ]
  3. for {set i 0} {$i < $numFrame} {incr i} {
  4. set hnumber [atomselect top "(noh same resid as (resname SOL and within 3.5 of resname LI))"]
  5. $hnumber frame $i
  6. $hnumber update
  7. set a [$hnumber num]
  8. puts $out $a
  9. }   
  10. close $out
复制代码






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