#!/usr/bin/perl # Randal R. Ketchem, Ph.D. 619.784.9879 (voice1) # Department of Molecular Biology, MB-9 619.784.8754 (voice2) # The Scripps Research Institute 619.784.9985 (FAX) # 10550 N. Torrey Pines Road ketchemr@scripps.edu (email) # La Jolla, CA 92037-1027 http://www.scripps.edu/~ketchemr # Create 7 column file for DIANA using the volume and peak files generated # from felix. # Bin file # 0.103E+09 3.4 # 0.763E+07 4.2 # 0.0 5.5 # Volume file # 14 0.622E+08 # Peak file # 14 140.254 1.399 101 1:ILE_13:HN 44.994 1.200 88 1:LEU_12:HN 41.015 1.611 102 1:ILE_13:N 0.00 require "ctime.pl"; require "getopt.pl"; if($#ARGV < 7) { $prgName = `basename $0`; chop($prgName); die <) { next if(/^\s*#/); #skip commented lines next if(/^\s*$/); #skip blank lines chop; @words = split(' '); $binNum{$words[0]} = $words[1]; } close(BINFILE); die("No volume bins in bin file $binFile.\n") unless(%binNum); # Store the stereos in a hash. if($stereoFile) { open(STEREOFILE, $stereoFile) || die("Cannot open $stereoFile.\n"); while() { next if(/^\s*#/); #skip commented lines next if(/^\s*$/); #skip blank lines chop; ($resNum, $resName, $atomName, $stereoName) = split(' '); $stereo{"$resNum $resName $atomName"} = $stereoName; } close(STEREOFILE); } # Store all the peak numbers and their volumes in a hash. open(VOLUMEFILE, $volumeFile) || die("Cannot open $volumeFile.\n"); while() { next if(/^\s*#/); #skip commented lines next if(/^\s*$/); #skip blank lines next if(/^[a-z]|^[A-Z]/); next if(/^c\*\*/); next if(/^vol/); chop; @words = split(' '); $numCols = scalar(@words); die("The column number must be [1..$numCols]") if($column < 1 || $column > $numCols); $volumeNum{$words[0]} = $words[$column]; } close(VOLUMEFILE); die("No volumes in volume file $volumeFile.\n") unless(%volumeNum); # Loop through all of the peaks. #MODIFIED by MN: added next if matches null to skipp unassigned #peaks open(PEAKFILE, $peakFile) || die("Cannot open $peakFile.\n"); while() { next if(/^\s*#/); #skip commented lines next if(/^\s*$/); #skip blank lines next if(/^c\*\*/); next if(/^xpk/); next if(/null/); chop; @words = split(' '); $peakNum = $words[0]; $resInfo1 = $words[4]; $resInfo2 = $words[8]; # 1:ILE_13:HN -> 1 ILE_13 HN @res = split(':', $resInfo1); $chainID1 = $res[0]; $atomName = $res[2]; # ILE_13 -> ILE 13 @splitRes = split('_', $res[1]); # Grab first three characters of the residue name. $resName1 = substr($splitRes[0], 0, 3); $resNum1 = $splitRes[1]; $atomName1 = &ConvertAtomName($resNum1, $resName1, $atomName); @res = split(':', $resInfo2); $chainID2 = $res[0]; $atomName = $res[2]; @splitRes = split('_', $res[1]); $resName2 = substr($splitRes[0], 0, 3); $resNum2 = $splitRes[1]; $atomName2 = &ConvertAtomName($resNum2, $resName2, $atomName); # Make sure the volume exists. if($volumeNum{$peakNum} == 0) { die <= $bin) { $distance = $binNum{$bin}; } } # Only use intra assignments. if($chainID1 eq $chainID2) { # Build a 7col array for printing later. Save the peak number as a comment. $line = sprintf("%3d %-5s%-5s%4d %-5s%-5s%7.2f \n", $resNum1, $resName1, $atomName1, $resNum2, $resName2, $atomName2, $distance ); push(@lines, $line); } } close(PEAKFILE); # Print some header info. $date = &ctime(time); print "# Date: $date"; print "# Bin File: $binFile\n"; print "# Stereo File: $stereoFile\n" if($stereoFile); print "# Peak File: $peakFile\n"; print "# Volume File: $volumeFile\n"; print "# resNum1 resName1 atomName1 "; print "resNum2 resName2 atomName2 distance # peakFile:peakNum\n"; # Print the sorted peaks. foreach $line (sort @lines) { print $line; } # Subroutine to sort by number as opposed to character. sub bynumber { $a <=> $b; } # Subroutine to convert the atom names into names disgeo will understand. sub ConvertAtomName { local($resNum, $resName, $oldName) = @_; # Convert to upper case. $oldName = "\U${oldName}\E"; # If no conversion is done, the atom will be surrounded by 'xxx'. Convert # everything! local($newName) = "xxx${oldName}xxx"; if($resName1 eq "ARG") { $resName1 = "ARG+" }; if($resName1 eq "ASP") { $resName1 = "ASP-" }; if($resName1 eq "GLU") { $resName1 = "GLU-" }; if($resName1 eq "LYS") { $resName1 = "LYS+" }; if($resName2 eq "ARG") { $resName2 = "ARG+" }; if($resName2 eq "ASP") { $resName2 = "ASP-" }; if($resName2 eq "GLU") { $resName2 = "GLU-" }; if($resName2 eq "LYS") { $resName2 = "LYS+" }; if($resName eq "ARG") { $resName = "ARG+" }; if($resName eq "ASP") { $resName = "ASP-" }; if($resName eq "GLU") { $resName = "GLU-" }; if($resName eq "LYS") { $resName = "LYS+" }; if($resName eq "ALA") { if($oldName eq "HN") { $newName = "HN" }; if($oldName eq "HA") { $newName = "HA" }; if($oldName eq "HB1") { $newName = "QB" }; if($oldName eq "HB2") { $newName = "QB" }; if($oldName eq "HB3") { $newName = "QB" }; if($oldName eq "HB*") { $newName = "QB" }; } if($resName eq "ARG+") { if($oldName eq "HN") { $newName = "HN" }; if($oldName eq "HA") { $newName = "HA" }; if($oldName eq "HB1") { $newName = "QB" }; if($oldName eq "HB2") { $newName = "QB" }; if($oldName eq "HB3") { $newName = "QB" }; if($oldName eq "HB") { $newName = "QB" }; if($oldName eq "HG1") { $newName = "QG" }; if($oldName eq "HG2") { $newName = "QG" }; if($oldName eq "HG") { $newName = "QG" }; if($oldName eq "HD1") { $newName = "QD" }; if($oldName eq "HD2") { $newName = "QD" }; if($oldName eq "HE") { $newName = "HE" }; # Missing all past delta } if($resName eq "ASN") { if($oldName eq "HN") { $newName = "HN" }; if($oldName eq "HA") { $newName = "HA" }; if($oldName eq "HB1") { $newName = "QB" }; if($oldName eq "HB2") { $newName = "QB" }; if($oldName eq "HB3") { $newName = "QB" }; if($oldName eq "HB") { $newName = "QB" }; if($oldName eq "HD21") { $newName = "QD2" }; if($oldName eq "HD22") { $newName = "QD2" }; } if($resName eq "ASP-") { if($oldName eq "HN") { $newName = "HN" }; if($oldName eq "HA") { $newName = "HA" }; if($oldName eq "HB1") { $newName = "QB" }; if($oldName eq "HB2") { $newName = "QB" }; if($oldName eq "HB3") { $newName = "QB" }; if($oldName eq "HB") { $newName = "QB" }; if($oldName eq "QB") { $newName = "QB" }; } if($resName eq "CYS") { } if($resName eq "GLN") { if($oldName eq "HN") { $newName = "HN" }; if($oldName eq "HA") { $newName = "HA" }; if($oldName eq "HB1") { $newName = "QB" }; if($oldName eq "HB2") { $newName = "QB" }; if($oldName eq "HB3") { $newName = "QB" }; if($oldName eq "HB") { $newName = "QB" }; if($oldName eq "HG1") { $newName = "QG" }; if($oldName eq "HG2") { $newName = "QG" }; if($oldName eq "HG") { $newName = "QG" }; if($oldName eq "HE21") { $newName = "QE2" }; if($oldName eq "HE1") { $newName = "QE2" }; if($oldName eq "HE22") { $newName = "QE2" }; if($oldName eq "HE2") { $newName = "QE2" }; } if($resName eq "GLU-") { if($oldName eq "HN") { $newName = "HN" }; if($oldName eq "HA") { $newName = "HA" }; if($oldName eq "HB1") { $newName = "QB" }; if($oldName eq "HB2") { $newName = "QB" }; if($oldName eq "HB3") { $newName = "QB" }; if($oldName eq "HB") { $newName = "QB" }; if($oldName eq "HG1") { $newName = "QG" }; if($oldName eq "HG2") { $newName = "QG" }; if($oldName eq "HG") { $newName = "QG" }; } if($resName eq "GLY") { if($oldName eq "HN") { $newName = "HN" }; if($oldName eq "HA1") { $newName = "QA" }; if($oldName eq "HA2") { $newName = "QA" }; if($oldName eq "HA") { $newName = "QA" }; } if($resName eq "HIS") { if($oldName eq "HN") { $newName = "HN" }; if($oldName eq "HA") { $newName = "HA" }; if($oldName eq "HB1") { $newName = "QB" }; if($oldName eq "HB2") { $newName = "QB" }; if($oldName eq "HB3") { $newName = "QB" }; if($oldName eq "HD2") { $newName = "HD2" }; if($oldName eq "HE1") { $newName = "HE1" }; # Missing all past delta } if($resName eq "ILE") { if($oldName eq "HN") { $newName = "HN" }; if($oldName eq "HA") { $newName = "HA" }; if($oldName eq "HB") { $newName = "HB" }; if($oldName eq "HG11") { $newName = "QG1" }; if($oldName eq "HG12") { $newName = "QG1" }; if($oldName eq "HG21") { $newName = "QG2" }; if($oldName eq "HG22") { $newName = "QG2" }; if($oldName eq "HG23") { $newName = "QG2" }; if($oldName eq "HD11") { $newName = "QD1" }; if($oldName eq "HD12") { $newName = "QD1" }; if($oldName eq "HD13") { $newName = "QD1" }; if($oldName eq "HD1*") { $newName = "QD1" }; if($oldName eq "QD1") { $newName = "QD1" }; if($oldName eq "HG2*") { $newName = "QG2" }; if($oldName eq "QG2") { $newName = "QG2" }; } if($resName eq "LEU") { if($oldName eq "HN") { $newName = "HN" }; if($oldName eq "HA") { $newName = "HA" }; if($oldName eq "HB1") { $newName = "QB" }; if($oldName eq "HB2") { $newName = "QB" }; if($oldName eq "HB3") { $newName = "QB" }; if($oldName eq "HB") { $newName = "QB" }; if($oldName eq "QB") { $newName = "QB" }; if($oldName eq "HG") { $newName = "HG" }; if($oldName eq "HD11") { $newName = "QQD" }; if($oldName eq "HD12") { $newName = "QQD" }; if($oldName eq "HD13") { $newName = "QQD" }; if($oldName eq "HD21") { $newName = "QQD" }; if($oldName eq "HD22") { $newName = "QQD" }; if($oldName eq "HD23") { $newName = "QQD" }; if($oldName eq "HD2*") { $newName = "QQD" }; if($oldName eq "MD2") { $newName = "QQD" }; if($oldName eq "MD1") { $newName = "QQD" }; if($oldName eq "HD1*") { $newName = "QQD" }; if($oldName eq "HD*") { $newName = "QQD" }; if($oldName eq "QQD") { $newName = "QQD" }; } if($resName eq "LYS+") { if($oldName eq "HN") { $newName = "HN" }; if($oldName eq "HA") { $newName = "HA" }; if($oldName eq "HB1") { $newName = "QB" }; if($oldName eq "HB2") { $newName = "QB" }; if($oldName eq "HB3") { $newName = "QB" }; if($oldName eq "HB") { $newName = "QB" }; if($oldName eq "HB*") { $newName = "QB" }; if($oldName eq "QB") { $newName = "QB" }; if($oldName eq "HG1") { $newName = "QG" }; if($oldName eq "HG2") { $newName = "QG" }; if($oldName eq "HG") { $newName = "QG" }; if($oldName eq "HG*") { $newName = "QG" }; if($oldName eq "QG") { $newName = "QG" }; if($oldName eq "HD1") { $newName = "QD" }; if($oldName eq "HD2") { $newName = "QD" }; if($oldName eq "HD") { $newName = "QD" }; if($oldName eq "QD") { $newName = "QD" }; if($oldName eq "HE1") { $newName = "QE" }; if($oldName eq "HE2") { $newName = "QE" }; if($oldName eq "HE") { $newName = "QE" }; if($oldName eq "QE") { $newName = "QE" }; # Missing NH3 } if($resName eq "MET") { if($oldName eq "HN") { $newName = "HN" }; if($oldName eq "HA") { $newName = "HA" }; if($oldName eq "HB1") { $newName = "QB" }; if($oldName eq "HB2") { $newName = "QB" }; if($oldName eq "HB3") { $newName = "QB" }; if($oldName eq "HB") { $newName = "QB" }; if($oldName eq "HG1") { $newName = "QG" }; if($oldName eq "HG2") { $newName = "QG" }; if($oldName eq "HG") { $newName = "QG" }; if($oldName eq "HE1") { $newName = "QE" }; if($oldName eq "HE2") { $newName = "QE" }; if($oldName eq "HE3") { $newName = "QE" }; if($oldName eq "HE*") { $newName = "QE" }; } if($resName eq "PHE") { if($oldName eq "HN") { $newName = "HN" }; if($oldName eq "HA") { $newName = "HA" }; if($oldName eq "HB1") { $newName = "QB" }; if($oldName eq "HB2") { $newName = "QB" }; if($oldName eq "HB3") { $newName = "QB" }; if($oldName eq "HB") { $newName = "QB" }; if($oldName eq "HD1") { $newName = "CG" }; if($oldName eq "HD2") { $newName = "CG" }; if($oldName eq "HE1") { $newName = "CZ" }; if($oldName eq "HE2") { $newName = "CZ" }; if($oldName eq "HZ") { $newName = "HZ" }; if($oldName eq "HD*") { $newName = "CG" }; if($oldName eq "HD") { $newName = "CG" }; if($oldName eq "HE*") { $newName = "CZ" }; if($oldName eq "HE") { $newName = "CZ" }; } if($resName eq "PRO") { if($oldName eq "HN") { $newName = "HN" }; if($oldName eq "HA") { $newName = "HA" }; if($oldName eq "HB1") { $newName = "QB" }; if($oldName eq "HB2") { $newName = "QB" }; if($oldName eq "HB3") { $newName = "QB" }; if($oldName eq "HB") { $newName = "QB" }; if($oldName eq "QB") { $newName = "QB" }; if($oldName eq "HG1") { $newName = "QG" }; if($oldName eq "HG2") { $newName = "QG" }; if($oldName eq "HG") { $newName = "QG" }; if($oldName eq "QG") { $newName = "QG" }; if($oldName eq "HD1") { $newName = "QD" }; if($oldName eq "HD2") { $newName = "QD" }; if($oldName eq "HD") { $newName = "QD" }; if($oldName eq "QD") { $newName = "QD" }; } if($resName eq "SER") { if($oldName eq "HN") { $newName = "HN" }; if($oldName eq "HA") { $newName = "HA" }; if($oldName eq "HB1") { $newName = "QB" }; if($oldName eq "HB2") { $newName = "QB" }; if($oldName eq "HB3") { $newName = "QB" }; if($oldName eq "HB") { $newName = "QB" }; if($oldName eq "QB") { $newName = "QB" }; # Missing HO } if($resName eq "THR") { if($oldName eq "HN") { $newName = "HN" }; if($oldName eq "HA") { $newName = "HA" }; if($oldName eq "HB") { $newName = "HB" }; if($oldName eq "HG1") { $newName = "HG1" }; if($oldName eq "HG21") { $newName = "QG2" }; if($oldName eq "HG22") { $newName = "QG2" }; if($oldName eq "HG23") { $newName = "QG2" }; if($oldName eq "HG2*") { $newName = "QG2" }; if($oldName eq "MG2") { $newName = "QG2" }; if($oldName eq "QG2") { $newName = "QG2" }; if($oldName eq "MG") { $newName = "QG2" }; # Missing HO } if($resName eq "TRP") { } if($resName eq "TYR") { if($oldName eq "HN") { $newName = "HN" }; if($oldName eq "HA") { $newName = "HA" }; if($oldName eq "HB1") { $newName = "QB" }; if($oldName eq "HB2") { $newName = "QB" }; if($oldName eq "HB3") { $newName = "QB" }; if($oldName eq "HB") { $newName = "QB" }; if($oldName eq "HD1") { $newName = "CG" }; if($oldName eq "HD2") { $newName = "CG" }; if($oldName eq "HE1") { $newName = "CZ" }; if($oldName eq "HE2") { $newName = "CZ" }; if($oldName eq "HD*") { $newName = "CG" }; if($oldName eq "HD") { $newName = "CG" }; if($oldName eq "HE*") { $newName = "CZ" }; if($oldName eq "HE") { $newName = "CZ" }; if($oldName eq "HH") { $newName = "HH" }; # Missing HO } if($resName eq "VAL") { if($oldName eq "HN") { $newName = "HN" }; if($oldName eq "HA") { $newName = "HA" }; if($oldName eq "HB") { $newName = "HB" }; if($oldName eq "HG11") { $newName = "QQG" }; if($oldName eq "HG12") { $newName = "QQG" }; if($oldName eq "HG13") { $newName = "QQG" }; if($oldName eq "HG21") { $newName = "QQG" }; if($oldName eq "HG22") { $newName = "QQG" }; if($oldName eq "HG23") { $newName = "QQG" }; if($oldName eq "HG1*") { $newName = "QQG" }; if($oldName eq "MG1") { $newName = "QQG" }; if($oldName eq "MG2") { $newName = "QQG" }; if($oldName eq "HG2*") { $newName = "QQG" }; if($oldName eq "QQG*") { $newName = "QQG" }; } # Stereo's if($stereo{"$resNum $resName $oldName"}) { $newName = $stereo{"$resNum $resName $oldName"} }; # Return the new atom name. $newName; }