计算化学公社

标题: Tcl统计配体附近5埃内的氨基酸,在200帧内出现的次数 [打印本页]

作者
Author:
lxhpdx    时间: 2024-6-12 11:50
标题: Tcl统计配体附近5埃内的氨基酸,在200帧内出现的次数
  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如下图
(, 下载次数 Times of downloads: 12)
,于是乎我想统计一下每个残基在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的情况。
(, 下载次数 Times of downloads: 13)
不知道是代码哪里写错了,请各位老师指点。

作者
Author:
lxhpdx    时间: 2024-6-12 18:53
  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. }
复制代码

作者
Author:
lxhpdx    时间: 2024-6-12 18:53
lxhpdx 发表于 2024-6-12 18:53

问题已解决




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