I have a program to calculate the distance. its like this:
Expand|Select|Wrap|Line Numbers
- open(IN, "/path/outModified.pl") or die "$!";
- while (my $line = <IN>) {
- chomp($line);
- my @array = (split (/\s+/, $line))[6, 7, 8];
- # print "@array\n";
- push @points, [ @array ];
- }
- close(IN);
- print '@points : ', Dumper \@points;
- open my $out_file, '>', "/path/dist_modified.pl" or die "cannot open: $!\n";
- for my $i1 ( 0 .. $#points -1 ){
- my ( $x1, $y1, $z1 ) = @{ $points[$i1] };
- for my $i2 ( 1 .. $#points){
- my ( $x2, $y2, $z2 ) = @{ $points[$i2] };
- my $dist = sqrt(($x2 - $x1)**2 + ($y2 - $y1)**2 + ($z2 - $z1)**2);
- print $out_file "153L.pdb: the distance between CA $i1 and CA $i2 = $dist\n";
- }
- }
- close $out_file or die "cannot close file: $!\n";
6.324 32.707 50.379
5.197 32.618 46.826
4.020 36.132 46.259
7.131 38.210 45.919
6.719 38.935 42.270
2.986 39.221 41.892
-0.269 37.184 41.565
-1.140 35.549 38.341
-4.817 35.710 39.211
-4.704 39.489 39.013
my question is, i have to compare these $dist values with another value in another file (DBins.pl)which has the data:
col1 col2
1 2.69
2 2.97032
3 3.25064
4 3.53096
5 3.81128
6 4.0916
7 4.37192
8 ....... so on.....
.
.
170 50.98
171 51.086....so on
I have to match the value of $dist with the column 2(col2) with its approximate value and retrieve the corresponding column1(col1)value? I have to match the value of $dist to the second column value(maximum is upto 50. any value of $dist greater than 50 should stop at the value(170 50.98)and retireve the value 170 for $dist compared with 50.98 or to its nearest high value. I dont know how to write this in perl. Can you help...The first column is the index value and second column is the energy value, so the energy value shud be compared to the $dist and the index value shud be printed in output.
To make it clear, if the value of $dist = 2.84, then the program should search for second row in the file [2 2.97032] and print only 2. that is the first column.it this possible. I think i have to use regular expressions?? or pattern matching??
pls help I am a beginner in perl.
I have written the code like this after calculating the $dist:
Expand|Select|Wrap|Line Numbers
- open(DIST,"path/DBins.pl") or die "$!";
- while(my $lines = <DIST>){
- chomp($lines);
- my @point = (split (/\s+/, $lines))[1,2];
Thank you in advance