[Bio] / FigWebServices / targets.cgi Repository:
ViewVC logotype

Annotation of /FigWebServices/targets.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.6 - (view) (download)

1 : parrello 1.1 #!/usr/bin/env /vol/drugtargets/FIGdisk/env/cee/bin/perl
2 :    
3 :    
4 :     BEGIN {
5 :     # Print the HTML header.
6 :     print "CONTENT-TYPE: text/html\n\n";
7 :     }
8 :     use strict;
9 :     use Tracer;
10 :     use CGI;
11 :     use SHDrugSearch;
12 : parrello 1.6 use FIGRules;
13 : parrello 1.1
14 :     my $odd = 1;
15 :     my @styles = ("even", "odd");
16 :     my $lkpdb ='http://www.rcsb.org/pdb/explore.do?structureId=';
17 :     my $fig = new FIG;
18 :     my ($cgi, $varHash) = ScriptSetup();
19 :     #get the query paramaters
20 :     my $target = $cgi->param("target");
21 :     my $uctarget = ucfirst $target;
22 : parrello 1.6 my %pegHash;
23 : parrello 1.1
24 :     eval {
25 :     my $org = $cgi->param("org");
26 :     # Set the descriptive variables. These change key words in the introductory
27 :     # text and page heading.
28 :     $varHash->{target} = $target;
29 :     $varHash->{uc_first_target} = ucfirst $target;
30 :     $varHash->{org} = $org;
31 : parrello 1.6 # Compute the peg hash if we're organism-only.
32 :     if ($org && ! $target) {
33 :     %pegHash = get_attribute_hash($org);
34 :     }
35 : parrello 1.1 #The script operates
36 :     &add_table_top($cgi, $varHash, $org);
37 :     if ($target){
38 :     &get_table($cgi, $varHash, "$target.txt");
39 :     }elsif($org){
40 :     &get_table($cgi, $varHash, $org);
41 :     }
42 :     $varHash->{result} .='</table>';
43 :     };
44 :    
45 :     # error messages
46 :     if ($@) {
47 :     my $errorMessage = $@;
48 :     Trace("Script Error: $errorMessage") if T(0);
49 :     }
50 :     ScriptFinish("targets_tmpl.php", $varHash);
51 :     #---Subs------#
52 :    
53 :     # This function adds the table header based on if we looking at a specific target category
54 :     sub add_table_top{
55 :     my ($cgi, $varHash, $org) = @_;
56 :     &add_words($cgi, $varHash, $org);
57 :     if($target){
58 :     $varHash->{result} .= ' <table width="90%" class="targets">
59 : parrello 1.6 <tr class=odd><th>Organism</th><th>Functional Role</th><th>Candidacy<th>PDB</th><th>Best Hit to Human</th></tr>';
60 :     }elsif ($org) {
61 : parrello 1.1 $varHash->{result} .= '<table width="90%" class="targets">
62 : parrello 1.6 <tr class=odd><th>Organism</th><th>Functional Role</th><th>Category</th><th>PDB</th><th>Best Hit to Human</th></tr>';
63 : parrello 1.1 }
64 :     }
65 :    
66 : parrello 1.3 # This funtion sets up the variables used by the template to display organism-related text.
67 : parrello 1.1 # and how to navigate it
68 :     sub add_words{
69 :     my ($cgi, $varHash, $org) = @_;
70 : parrello 1.3 $varHash->{orgName} = "";
71 : parrello 1.1 if($org){
72 : parrello 1.3 $varHash->{orgName} = $fig->genus_species($org);
73 : parrello 1.1 }
74 :     }
75 :    
76 :     # This Sub funtions to open up the table and keep track of the index of what row we are on
77 :     sub get_table{
78 :     my($cgi, $varHash, $file)= @_;
79 : parrello 1.4 Open(\*TABLE, "<$FIG_Config::drug_directory/$file");
80 : parrello 1.5 Trace("Processing table $file.") if T(3);
81 : parrello 1.4 while (! eof TABLE){
82 :     my @entry = Tracer::GetLine(\*TABLE);
83 :     &get_best_pdb($cgi, $varHash, @entry);
84 : parrello 1.1 }
85 :     }
86 :    
87 :    
88 :     # This Sub funtions to print the Table Row in the correct format.
89 :     sub print_column{
90 : parrello 1.4 my($cgi, $varHash, $pdb, $color, $score,$peg, $func, $lit, $cat) = @_ ;
91 : parrello 1.1 my $genome = $peg;
92 :     $genome =~ s/fig\|//;
93 :     $genome =~ s/\.peg\.\d+//;
94 :     my $which = $fig->genus_species($genome);
95 :     $pdb =~ s/pdb//;
96 :     $pdb =~ s/\.ent//;
97 : parrello 1.2 $cat = changecat($cat);
98 : parrello 1.1 my $selfURL = $cgi->url(-relative => 1);
99 :     my $link = '../FIG/protein.cgi?new_framework=0&SPROUT=1&prot=';
100 :     my $org = $cgi->param('org');
101 :     Trace("Printing $color for $pdb.") if T(4);
102 : parrello 1.6 # We'll put the category/attribute column value in here if this row should be
103 :     # displayed.
104 :     my $caColumn;
105 : parrello 1.1 if ($org && $target){
106 :     if ($peg =~ m/$org/){
107 : parrello 1.6 $caColumn = "<td><a href=\"$lit\">$cat</a></td>\n";
108 : parrello 1.1 }
109 :     }elsif($target){
110 : parrello 1.6 $caColumn = "<td><a href=\"$lit\">$cat</a></td>\n";
111 : parrello 1.1 }elsif($org){
112 : parrello 1.6 if ($pegHash{$peg}) {
113 :     $caColumn = $pegHash{$peg};
114 :     } else {
115 :     $caColumn = "<td><a href=\"../content/contactus.php\">Suggest</a></td>\n";
116 :     }
117 :     }
118 :     if (defined $caColumn) {
119 : parrello 1.1 $odd = 1 - $odd;
120 :     $varHash->{result} .= "<tr class=\"$styles[$odd]\"><td><em>$which</em><br>$peg</td>\n";
121 :     $varHash->{result} .= "<td>$func (<a href=\"$link$peg\">NMPDR</a>)</td>\n";
122 : parrello 1.6 $varHash->{result} .= $caColumn;
123 :     $varHash->{result} .= "<td color=\"$color\"><a href=\"$lkpdb$pdb\">$pdb</a></td>\n";
124 :     # Find the best hit to a human.
125 :     my @bbhList = FIGRules::BatchBBHs($peg, 1e-15, '9606.3');
126 :     if (@bbhList) {
127 :     # Here we found one, so get the best one in the list.
128 :     my @sorted = sort { $a->[2] <=> $b->[2] } @bbhList;
129 :     my $bestPeg = $sorted[0]->[1];
130 :     $varHash->{result} .= "<td><a href=\"../FIG/protein.cgi?new_framework=0&SPROUT=1&prot=$bestPeg\">$sorted[0]->[2]</a></td>\n";
131 :     } else {
132 :     $varHash->{result} .= "<td>&nbsp;</td>\n";
133 :     }
134 : parrello 1.1 }
135 :     }
136 :    
137 : parrello 1.6
138 : parrello 1.1 # This sub changes the Candidacy code to something meaningful.
139 :     sub changecat{
140 :     my($dog) = @_;
141 : parrello 1.5 Trace("Selecting category for $dog.") if T(4);
142 : parrello 1.1 my $cat = SHDrugSearch::GetCategory($dog);
143 :     return $cat;
144 :     }
145 :    
146 : parrello 1.6 # This sub determines the attributes of each peg related to the given genome.
147 :     sub get_attribute_hash {
148 :     my ($genome) = @_;
149 : parrello 1.1 my %files = (drug => "drug.txt", toxin => "toxin.txt", vaccine => "vaccine.txt");
150 : parrello 1.6 my %retVal;
151 : parrello 1.1 my $selfURL = $cgi->url(-relative => 1);
152 :     for my $key (keys %files) {
153 : parrello 1.6 Open(\*INFILE, "$FIG_Config::drug_directory/$files{$key}");
154 :     while (! eof(INFILE)){
155 :     my @entry = Tracer::GetLine(\*INFILE);
156 :     if ($entry[5] =~ /$genome/){
157 :     my $title = ucfirst $key;
158 :     $retVal{$entry[5]} = "<td><a href=$selfURL?org=$genome&target=$key>$title</a></td>\n";
159 : parrello 1.1 }
160 :     }
161 : parrello 1.6 close(INFILE);
162 : parrello 1.1 }
163 :     }
164 :    
165 :     #-- we wish to desplay only the best pdbs and those that are relavent
166 :     sub get_best_pdb{
167 : parrello 1.4 my ($cgi, $varHash, @entry)= @_;
168 : parrello 1.1 my @pdbresults =("1ah7","1dhn","1tfu"); # we define what pdb actually have been docked well.
169 : parrello 1.4 if (T(4)) {
170 :     my $line = "Processing line\n";
171 :     for (my $i = 0; $i <= $#entry; $i++) {
172 :     $line .= "$i. $entry[$i]\n";
173 : parrello 1.1 }
174 : parrello 1.4 Trace($line);
175 :     }
176 :     Trace("Analyzing PDB $entry[11].") if T(4);
177 :     foreach (@pdbresults){ #look through the results we have
178 :     if ($entry[11] =~ m/$_/gi){ #ifwe have results for the free
179 :     &print_column($cgi, $varHash, $entry[11],'red', $entry[13],$entry[5], $entry[9], $entry[3], $entry[1]); #we want to display this
180 :     return;
181 :     }elsif($entry[14] =~ m/$_/gi){ #if we have resutls for the bound
182 :     &print_column($cgi, $varHash,$entry[14], 'red', $entry[16],$entry[5], $entry[9], $entry[3], $entry[1]); #we wnat to display this
183 :     return;
184 : parrello 1.1 }
185 : parrello 1.4 }
186 :     if ($entry[13] eq "0"){ #if the free pdb is perfect
187 :     &print_column($cgi, $varHash, $entry[11], '', $entry[13],$entry[5], $entry[9], $entry[3], $entry[1]); #we want to display this
188 :     return;
189 :     }elsif($entry[16] eq '0'){ #if the bound pdb is perfect
190 :     &print_column($cgi, $varHash, $entry[14], '', $entry[16],$entry[5], $entry[9], $entry[3], $entry[1]); #we want to display this
191 :     return;
192 :     }elsif($entry[13] =~ /\d\.\d*E\-(\d+)/ ){ #if the eval is like 1.4E-45
193 :     if (15 < $1) { #and the exponant is less than 1.0E-15
194 :     if($entry[16] =~ /\d\.\d*E\-(\d+)/ ){ #but we should check if the bound is any better
195 :     if (15 < $1){ #and the xponant is less than 1.0-15 we need to do the comparison
196 :     my @free = split(/E\-/,$entry[13]);
197 :     my @bound = split(/E\-/,$entry[16]);
198 :     my $efree = $free[0] * 13 ** -$free[1];
199 :     my $ebound = $bound[0] * 13 ** -$bound[1];
200 :     if ($efree <= $ebound){ #if the free is less than the boutd
201 :     &print_column($cgi, $varHash, $entry[11], 'black', $entry[13],$entry[5], $entry[9], $entry[3], $entry[1]); #we want to display this
202 :     return;
203 :     }else{
204 :     &print_column($cgi, $varHash, $entry[14], 'green', $entry[16],$entry[5], $entry[9], $entry[3], $entry[1]); #we want to display this
205 : parrello 1.1 return;
206 :     }
207 : parrello 1.4 }else{ #the bound exponent wasn't less than 15
208 :     &print_column($cgi, $varHash, $entry[11], 'blue', $entry[13],$entry[5], $entry[9], $entry[3], $entry[1]); #we want to display this
209 :     return;
210 :     }
211 :     }else{ #the bound pdb didn't even have an exponant
212 :     &print_column($cgi, $varHash, $entry[11], 'yello', $entry[13],$entry[5], $entry[9], $entry[3], $entry[1]); #we want to display this
213 :     return; #this takes care the if free is good and bound is bad
214 :     }#a free pdb is no good becaus eval > 1e-15
215 :     }#free pdb was no good because eval > 1e-15
216 :     }elsif($entry[16] =~ /\d\.\d*E\-(\d+)/ ){ #we are now checking if the bound pdb is good
217 :     if (15 < $1) {
218 :     &print_column($cgi, $varHash, $entry[14], 'black', $entry[16],$entry[5], $entry[9], $entry[3], $entry[1]);
219 :     return;
220 : parrello 1.1 }
221 : parrello 1.4 } else {
222 :     Trace("Peg $entry[5] not printed.") if T(4);
223 : parrello 1.1 }
224 :     }
225 :    
226 :    
227 :     # -error interupt--these subs will probably go when bruce sees them
228 :     sub err {
229 :     my ($msg) = @_;
230 :     $msg = "Error!" unless $msg;
231 :     print (&colored($msg, "CC0033"));
232 :     die "$msg\n";
233 :     }
234 :    
235 :     sub colored {
236 :     my ($text, $color) = @_;
237 :     return "<font color=$color>$text</font>";
238 :     }

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3