temp.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
target.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个距离的值。然后,ASP CG原子距离将计算到所有ASN原子以查看最小值。所以我想在这里找到最小距离。
答案 0 :(得分: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];
...
}
}