1. RAM problem.
RAM is 512MB and swap 1GB.
A file typically is 1.2MB
No. of lines (atoms) 20,000.
Note: This is in test phase, but it can increase by about 10-50 fold.
2. Graph Theory problem.
This unfortunately is not a Graph-Theory problem, but more of a gas-phase problem. I need to find out all the 'interacting-pairs' (ie pairs of atoms close enough) to do a more complicated analysis.
3. FORTRAN object file.
Ok, may be I can make this piece into a library file, so that I should be able to use it as a POSIX funtion?
4. Grid-wise calculation.
Promising. :) I thought, but was a bit lazy to try. After brute-force I began to wonder if it would be worth the effort... Thanks. :)
5. Chemistry::Bond::Find
Yes, I must try this. :) Mine's is a protein with hell-lot of water, and I have to find water-protein hydrogen bonds. At least based on distance alone. Will get back to you. itub. :D
6. Using square of distance.
Well, yes, I was already using the square of the distance, and yes, it is on PDB files. :)
7. Using x:y:z boxinfo.
Yes. I thought of it, but was lazy as I thought I need to put in lot of code. But now I am convinced it won't be so much. Thanks a lot BrowserUk. :)
8. The code:
# Open each PDB
foreach my $pdb_file (<$pdb_list>) {
{
chomp($pdb_file);
my $tmp_file; # We would open the PDB with this handle
open($tmp_file, "< $pdb_file") or (die "Cannot open PDB: $
+!");
# Read X,Y,Z coordinates
my @X; # X-coordinates
my @Y; # Y-coordinates
my @Z; # Z-coordinates
my @pdb_tmp=<$tmp_file>;
foreach (@pdb_tmp) {
if (substr($_,0,3) eq "ATO") {
push @X, substr($_,30,8);
push @Y, substr($_,38,8);
push @Z, substr($_,46,8);
}
}
# Find the interaction pairs. Also strore the best angle, sh
+ould it
# occur again with another proton. Also keep track of the wa
+ters
# that have made h-bond with the solute atoms.
my @sel_wat; # Array of water molecule (numbers) selected
my %hbond; # $hbond[$tag1:$tag2][0]=distance
# $hbond[$tag1:$tag2][0]=angle
# Solute as donor and water as acceptor
{
my @atom_cov; # Polar solute atom that is already cover
+ed.
for (my $i=0; $i <= $#pol_h; $i++) {
# If this donor is not already covered, then go ahead.
if ( ! defined($atom_cov[$pol_h[$i][1]]) ) {
for (my $j=0; $j <= $#wat_a; $j++) {
my $dx=$X[$pol_h[$i][1]]-$X[$wat_a[$j]];
my $dy=$Y[$pol_h[$i][1]]-$Y[$wat_a[$j]];
my $dz=$Z[$pol_h[$i][1]]-$Z[$wat_a[$j]];
my $distSq=($dx*$dx)+($dy*$dy)+($dz*$dz);
if ($distSq <= $hb_dist) {
$atom_cov[$pol_h[$i][1]]=1;
print $idty[$pol_h[$i][1]], " ",
$idty[$wat_a[$j]], $distSq,"\n";
}
}
}
}
}
}
}
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.