0

温度.bgf

ATOM     218  CB   ASN 1   34   -7.84400  -9.19900  -5.03100 C_3    4 0 -0.18000 0   0
ATOM     221  CG   ASN 1   34   -7.37700  -7.83400  -4.55200 C_R    3 0  0.55000 0   0
ATOM     226  C    ASN 1   34   -9.18200 -10.62100  -6.58300 C_R    3 0  0.51000 0   0
ATOM     393  CB   THR 2   69   -3.33000  -7.97700  -7.72000 C_3    4 0  0.14000 0   0
ATOM     397  CG2  THR 2   69   -4.75300  -8.54400  -7.67200 C_3    4 0 -0.27000 0   0
ATOM     401  C    THR 2   69   -2.58000  -9.55700  -5.85500 C_R    3 0  0.51000 0   0
ATOM     417  CB   THR 2   71    1.99100  -9.86800  -2.77000 C_3    4 0  0.14000 0   0
ATOM     421  CG2  THR 2   71    2.86300 -10.15400  -1.55700 C_3    4 0 -0.27000 0   0
ATOM     425  C    THR 2   71   -0.19100 -10.14200  -1.62900 C_R    3 0  0.51000 0   0
ATOM     492  CB   CYS 2   77   -5.17100 -14.77100   4.04000 C_3    4 0 -0.11000 0   0
ATOM     495  SG   CYS 2   77   -6.29600 -14.88500   2.59500 S_3    2 2 -0.23000 0   0
ATOM     497  C    CYS 2   77   -4.65100 -13.75800   6.12000 C_R    3 0  0.51000 0   0
ATOM    2071  CB   SER 7  316   -3.87300  -2.15900   1.02300 C_3    4 0  0.05000 0   0
ATOM    2076  C    SER 7  316   -4.79700  -1.16500  -1.10800 C_R    3 0  0.51000 0   0

目标.bgf

ATOM     575  CB   ASP 2   72   -2.80100  -7.45000  -2.09400 C_3    4 0 -0.28000 0   0
ATOM     578  CG   ASP 2   72   -3.74900  -6.45900  -1.31600 C_R    3 0  0.62000 0   0
ATOM     581  C    ASP 2   72   -3.19300  -9.62400  -0.87900 C_R    3 0  0.51000 0   0

我有两个数据文件。第一个文件包含我想要计算距离的残基数据。第二个文件包含目标残基的坐标。

我想计算两个量之间的最小距离(即 ASP 和 temp.bgf 中的残基)。我一直无法想出一种最佳方式来存储 x、y、z 值并比较 temp.bgf 中的距离。

关于如何进行计算一直存在疑问。这是我的想法

 @asp_atoms
 @asn_atoms
 $asnmin, aspmin
 foreach $ap (@asp_atoms)
 {
     foreach $an (@asn_atoms)
     {
         dist = dist($v..$g...);
         if($dist < $min)
         {
                $min = $dist;   
         }
    }
 }

我希望澄清有关如何实现代码的问题。但是,我遇到的问题是如何将值存储在数组中并遍历文件。

此外,为了澄清如何准确(即距离将使用什么数字,这是我想要做的一个例子)。

对于具有以下坐标的 ASP CB 原子:-2.80100 -7.45000 -2.09400 我想计算 ASN CB、ASN CG、ASN C 原子之间的距离。最小值是打印出来的值。不幸的是,我没有关于最小值的确切值,但我必须打印出小于 5 个距离单位的值。然后,将计算所有 ASN 原子的 ASP CG 原子距离以查看最小值。所以我想在这里找到最小距离。

4

1 回答 1

1

您可以通过简单地将文件中的每一行拆分为空白来解决此问题,然后将结果存储在数组数组中,然后仅切出循环中需要的参数(在本例中为 x、y、z)。这不是对您的问题的完整答案,但它应该让您了解如何实现这一点。

open (my $temp,"<","temp.bgf");

open (my $target,"<","target.bgf");

my @temps = create_ar($temp);
my @targets = create_ar($target);

sub create_ar {
    my $filehan = shift;
    my @array;

foreach (<$filehan>) {
    push  @array,[split(/\s+/,$_)];
}
    return @array;
}


foreach my $ap (@targets) {

my ($target_X,$target_Y,$target_Z) =  @{$ap}[6,7,8];

    foreach my $an (@temps) {

my ($temp_X,$temp_Y,$temp_Z) = @{$an}[6,7,8];

...

    }

}

于 2013-08-06T19:13:03.673 回答