计算化学公社

 找回密码 Forget password
 注册 Register
Views: 896|回复 Reply: 2
打印 Print 上一主题 Last thread 下一主题 Next thread

[VMD] Tcl统计配体附近5埃内的氨基酸,在200帧内出现的次数

[复制链接 Copy URL]

42

帖子

0

威望

187

eV
积分
229

Level 3 能力者

  1. set sel [atomselect top "same residue as {protein within 5 of resname MOL}"]  
  2. for {set i 0} {$i<200} {incr i} {  
  3.     $sel frame $i
  4.     $sel update  
  5.     set residue_ids [$sel get resid]   
  6.     set unique_residue_ids [lsort -unique $residue_ids]   
  7.     if {[llength $unique_residue_ids] > 0} {  
  8.         puts "Frame: $i   unique residue IDs: $unique_residue_ids"  
  9.     } else {  
  10.         puts "Frame: $i   No residues selected"  
  11.     }   
  12. }
复制代码
这个脚本可以正确统计每帧出现的残基ID如下图

,于是乎我想统计一下每个残基在200帧中出现了几次,每帧只计数一次。
  1. array set residue_counts {}   
  2. set sel [atomselect top "same residue as {protein within 5 of resname MOL}"]  
  3. for {set i 0} {$i<200} {incr i} {  
  4.     $sel frame $i
  5.     $sel update   
  6.     set residue_ids [$sel get resid]  
  7.     set unique_residue_ids [lsort -unique $residue_ids]  
  8.       
  9.     foreach resid $unique_residue_ids {  
  10.         if {[info exists residue_counts($resid)]} {  
  11.          
  12.             incr residue_counts($resid)  
  13.         } else {  
  14.             
  15.             set residue_counts($resid) 1  
  16.         }  
  17.     }  
  18. }  
  19. foreach resid [array names residue_counts] {  
  20.     puts "Residue ID: $resid, Total Count: $residue_counts($resid)"  
  21. }  
  22.   
复制代码
然后统计出来的残基次数就出现了大于200的情况。

不知道是代码哪里写错了,请各位老师指点。

42

帖子

0

威望

187

eV
积分
229

Level 3 能力者

2#
 楼主 Author| 发表于 Post on 2024-6-12 18:53:27 | 只看该作者 Only view this author
  1. # 选择与名为"MOL"的残基距离在5埃之内的蛋白质原子
  2. set sel [atomselect top "same residue as {protein within 5 of resname MOL}"]

  3. # 循环处理200帧的数据
  4. for {set i 0} {$i < 200} {incr i} {
  5.     # 设置当前帧
  6.     $sel frame $i
  7.     # 更新选择
  8.     $sel update
  9.    
  10.     # 获取当前帧中选中的残基ID
  11.     set residue_ids [$sel get resid]
  12.    
  13.     # 对残基ID进行去重,得到当前帧中的唯一残基ID
  14.     set unique_residue_ids [lsort -unique $residue_ids]
  15.    
  16.     # 遍历唯一的残基ID
  17.     foreach resid $unique_residue_ids {
  18.         # 如果该残基ID已经存在于residue_frames数组中,则添加当前帧号
  19.         if {[info exists residue_frames($resid)]} {
  20.             lappend residue_frames($resid) $i
  21.         } else {
  22.             # 否则,初始化该残基ID的帧集合并添加当前帧号
  23.             set residue_frames($resid) [list $i]
  24.         }
  25.     }
  26. }

  27. # 输出每个残基ID以及其出现的帧数
  28. foreach resid [array names residue_frames] {
  29.     set frame_count [llength [lsort -unique $residue_frames($resid)]]
  30.     puts "Residue ID: $resid, Total Frames: $frame_count"
  31. }
复制代码

42

帖子

0

威望

187

eV
积分
229

Level 3 能力者

3#
 楼主 Author| 发表于 Post on 2024-6-12 18:53:40 | 只看该作者 Only view this author

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2026-2-24 01:57 , Processed in 0.228404 second(s), 23 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list