use Math::Trig; #USE THIS MODULE # # METHOD TO COMPUTE STRUCTURAL FACTOR FROM PDB AND PRINT IN XY FORMAT FOR XMGRACE. # Code by - Shourjya Sanyal. Jun 2012. Dublin Ireland. print "***************************** \n"; print "STRUCT FACTOR READER Ver 0.1 \n"; print "***************************** \n"; # ***************************** # Modify next line $inputFile = 'mypdb.pdb'; open (FROM,$inputFile) || die("Could not open file!"); # load the file into an array chomp(@data = ); close(FROM); # ***************************** # FIND CENTER OF MASS OF -FROM PDB1 print "\n"; $atom=0; $atom1=1; @resid; for ($line = 0; $line < scalar @data; $line++) {if ($data[$line] =~ m/^ATOM/) { $mydata = @data[$line]; @aa= split('',$mydata); $atom = join('',@aa[23..26]); $tempf = join('',@aa[61..66]); if ($atom == $atom1) {$tot = $tot + $tempf; } else {@resid[$atom1] = $tot; print "$atom1"; $tot = $tempf; $atom1 = $atom; } }# end of if }# end of for @resid[$atom1] = $tot; print "$atom1"; # ***************************** for ($line = 0; $line < scalar @resid; $line++) {print " $line @resid[$line]\n" } # ***************************** # CREATE OUTPUT FILE For XMGRACE $prefix = $inputFile; $prefix =~ s/\.pdb//; $outputFile = $prefix."_rmsfProtein.xvg"; open (FH, ">$outputFile"); print FH "#File was created by Programme STRUCT FACTOR READER Ver 0.1\n"; print FH "#By Shourjya Sanyal Aug 2012\n"; print FH "#\n"; print FH "@ title \"RMS Fluctuation Per Amino Acid - Related To Temperature factor\"\n"; print FH "@ xaxis label \"Residue\"\n"; print FH "@ yaxis label \"(nm)\"\n"; print FH "\@TYPE xy\n"; if ((scalar @resid > 0) && (scalar @resid < 10)) {foreach ($line = 1; $line < scalar @resid; $line++) { print FH " $line @resid[$line]\n" } } if ((scalar @resid > 9) && (scalar @resid < 100)) {foreach ($line = 1; $line < 10; $line++) { print FH " $line @resid[$line]\n" } foreach ($line = 10; $line < scalar @resid; $line++) { print FH " $line @resid[$line]\n" } } if ((scalar @resid > 99) && (scalar @resid < 1000)) { foreach ($line = 1; $line < 10; $line++) { print FH " $line @resid[$line]\n" } foreach ($line = 10; $line < 100; $line++) { print FH " $line @resid[$line]\n" } foreach ($line = 100; $line < scalar @resid; $line++) { print FH " $line @resid[$line]\n" } } if ((scalar @resid > 999) && (scalar @resid < 10000)) { foreach ($line = 1; $line < 10; $line++) { print FH " $line @resid[$line]\n" } foreach ($line = 10; $line < 100; $line++) { print FH " $line @resid[$line]\n" } foreach ($line = 100; $line < 1000; $line++) { print FH " $line @resid[$line]\n" } foreach ($line = 1000; $line < scalar @resid; $line++) { print FH " $line @resid[$line]\n" } } print FH "#\n"; print FH "#\n"; print FH "# \"I want to go home now !!\"\n"; close FH;