|
碱基对质心间距离的分析注释:我现在需要一个vmd的tcl脚本进行分析距离随时间的变化,链A的残基为1到12,链B的残基为13到24,D1为残基1的质心和残基24的质心之间的距离,D2为残基2的质心和残基23的质心之间的距离,以此类推,D12为残基12的质心和残基13的质心之间的距离,依次将帧数T,D1,D2.... D12写入到radius.txt文件中,每列保留8个字符,其中小数点后5个字符,每列均为右对齐,每列之间空4个字符,其中第一行将T,D1,D2.... D12对应的写上。 #!/usr/bin/env vmd -e # 设置输出文件名 set outfile [open "distance.txt" w] # 创建选择列表(A链残基1-12,B链残基13-24) set sel_list [list] for {set i 1} {$i <= 12} {incr i} { set j [expr {25 - $i}] ;# 对应的B链残基
# 创建选择对象 set selA [atomselect top "resid $i"] set selB [atomselect top "resid $j"]
lappend sel_list [list $selA $selB] } # 写入标题行 set header " T" for {set k 1} {$k <= 12} {incr k} { append header [format " %8s" "D$k"] } puts $outfile $header # 获取总帧数 set num_frames [molinfo top get numframes] # 循环处理每一帧 for {set frame 0} {$frame < $num_frames} {incr frame} { # 更新到当前帧 animate goto $frame display update # 准备数据行 set line [format "%8d" [expr {$frame + 1}]] ;# 帧数从1开始
# 计算所有距离 foreach pair $sel_list { set selA [lindex $pair 0] set selB [lindex $pair 1]
$selA frame $frame $selB frame $frame $selA update $selB update
# 计算质心距离 set comA [measure center $selA weight mass] set comB [measure center $selB weight mass] set dist [vecdist $comA $comB]
# 格式化添加到行 append line [format " %8.5f" $dist] }
# 写入数据行 puts $outfile $line
puts "已处理: [format %6d/$nframes $fr]帧..." flush stdout
} # 清理资源 foreach pair $sel_list { [lindex $pair 0] delete [lindex $pair 1] delete } close $outfile puts "计算完成!结果已保存到 distance.txt" |