首页 >> 个人仿真建议 >>个人脚本 >>tcl >> 碱基对质心间距离的分析
详细内容

碱基对质心间距离的分析

注释:我现在需要一个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"


技术支持: CLOUD | 管理登录
seo seo