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

Diff of /FigWebServices/index.cgi

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.16, Fri Feb 13 20:29:28 2004 UTC revision 1.17, Sun Feb 15 17:12:54 2004 UTC
# Line 1  Line 1 
   
1  use FIG;  use FIG;
2  my $fig = new FIG;  my $fig = new FIG;
3    
# Line 43  Line 42 
42    
43  if ($cgi->param('Search for Genes Matching an Occurrence Profile'))  if ($cgi->param('Search for Genes Matching an Occurrence Profile'))
44  {  {
   
45      my $url = $cgi->url;      my $url = $cgi->url;
46      $ENV{"REQUEST_METHOD"} = "GET";      $ENV{"REQUEST_METHOD"} = "GET";
47      $ENV{"QUERY_STRING"} = "user=$user";      $ENV{"QUERY_STRING"} = "user=$user";
# Line 51  Line 49 
49      &HTML::trim_output(\@out);      &HTML::trim_output(\@out);
50      push(@$html,@out);      push(@$html,@out);
51  }  }
52    #-----------------------------------------------------------------------
53    #  Search (text) || Find Genes in Org that Might Play the Role
54    #-----------------------------------------------------------------------
55  elsif (($pattern = $cgi->param('pattern')) && ($cgi->param('Search') || $cgi->param('Find Genes in Org that Might Play the Role')))  elsif (($pattern = $cgi->param('pattern')) && ($cgi->param('Search') || $cgi->param('Find Genes in Org that Might Play the Role')))
56  {  {
57        #  Remove leading and trailing spaces from pattern -- GJO:
58        $pattern =~ s/^\s+//;
59        $pattern =~ s/\s+$//;
60      if ($cgi->param('Find Genes in Org that Might Play the Role') &&      if ($cgi->param('Find Genes in Org that Might Play the Role') &&
61          (@orgs = $cgi->param('korgs')) && (@orgs == 1))          (@orgs = $cgi->param('korgs')) && (@orgs == 1))
62      {      {
# Line 65  Line 69 
69      }      }
70      else      else
71      {      {
72          &show_indexed_objects($fig,$cgi,$html,$pattern);          my $check_all = $cgi->param('Select all') || 0;
73            &show_indexed_objects($fig, $cgi, $html, $pattern, $check_all);
74      }      }
75  }  }
76    #-----------------------------------------------------------------------
77    #  Metabolic Overview
78    #-----------------------------------------------------------------------
79  elsif (($map = $cgi->param('kmap')) && $cgi->param('Metabolic Overview'))  elsif (($map = $cgi->param('kmap')) && $cgi->param('Metabolic Overview'))
80  {  {
81      $map =~ s/^.*\((MAP\d+)\).*$/$1/;      $map =~ s/^.*\((MAP\d+)\).*$/$1/;
# Line 87  Line 95 
95      &HTML::trim_output(\@out);      &HTML::trim_output(\@out);
96      push(@$html,@out);      push(@$html,@out);
97  }  }
98    
99    #-----------------------------------------------------------------------
100    #  Search for Matches (sequence or pattern)
101    #-----------------------------------------------------------------------
102  elsif (($seq_pat = $cgi->param('seq_pat')) &&  elsif (($seq_pat = $cgi->param('seq_pat')) &&
103         (@orgs = $cgi->param('korgs')) &&         (@orgs = $cgi->param('korgs')) &&
104         ($tool = $cgi->param('Tool')) &&         ($tool = $cgi->param('Tool')) &&
# Line 110  Line 122 
122  {  {
123      &export_assignments($fig,$cgi,$html,$made_by);      &export_assignments($fig,$cgi,$html,$made_by);
124  }  }
125    
126    #-----------------------------------------------------------------------
127    #  Initial search page
128    #-----------------------------------------------------------------------
129  else  else
130  {  {
131      &show_initial($fig,$cgi,$html);      &show_initial($fig,$cgi,$html);
132  }  }
133  &HTML::show_page($cgi,$html,1);  &HTML::show_page($cgi,$html,1);
134    
135    
136    #==============================================================================
137    #  Initial page (alias search)
138    #==============================================================================
139    
140  sub show_initial {  sub show_initial {
141      my($fig,$cgi,$html) = @_;      my($fig,$cgi,$html) = @_;
142      my($map,$name,$olrg,$gs);      my($map,$name,$olrg,$gs);
# Line 131  Line 152 
152      push(@$html,      push(@$html,
153                  $cgi->start_form(-action => "index.cgi"),                  $cgi->start_form(-action => "index.cgi"),
154                  $cgi->h1('Searching for Genes or Functional Roles Using Text'),                  $cgi->h1('Searching for Genes or Functional Roles Using Text'),
155                  "Search Pattern: ",                  "<table><tr>",
156                  $cgi->textfield(-name => "pattern", -size => 50),                  "<td>Search Pattern: </td><td>",
157                  $cgi->br,                  $cgi->textfield(-name => "pattern", -size => 65),
158                  $cgi->br,                  "</td></tr><tr>",
159                  "User ID: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ",                  "<td>User ID:</td><td>",
160                  $cgi->textfield(-name => "user", -size => 20),                  $cgi->textfield(-name => "user", -size => 20),
161                  "&nbsp; [optional]",                  " [optional] ",
162                  $cgi->br,                  "&nbsp; &nbsp; Max Genes: ",
163                  $cgi->br,                  $cgi->textfield(-name => "maxpeg",  -size => 6, -value => 100),
164                    "&nbsp; &nbsp; Max Roles: ",
165                    $cgi->textfield(-name => "maxrole", -size => 6, -value => 100),
166                    "</td></td></table>",
167                  $cgi->submit('Search'),                  $cgi->submit('Search'),
168                  $cgi->reset('Clear'),                  $cgi->reset('Clear'),
169                  $cgi->hr,                  $cgi->hr,
170    
171                  $cgi->h1('If You Need to Pick an Organism for Options Below'),                  $cgi->h1('If You Need to Pick an Organism for Options Below'),
172                  $cgi->scrolling_list(-name => 'korgs',                  $cgi->scrolling_list(-name => 'korgs',
173                                       -values => [@orgs],                                       -values => [@orgs],
174                                       -size => 10                                       -size => 10
175                                      ),                                      ),
176                  $cgi->hr,                  $cgi->hr,
177    
178                  $cgi->h1('Finding Candidates for a Functional Role'),                  $cgi->h1('Finding Candidates for a Functional Role'),
179                  "Make sure that you type the functional role you want to search for in the Search Pattern above",                  "Make sure that you type the functional role you want to search for in the Search Pattern above",
180                  $cgi->br,                  $cgi->br,
181                  $cgi->submit('Find Genes in Org that Might Play the Role'),                  $cgi->submit('Find Genes in Org that Might Play the Role'),
182                  $cgi->hr,                  $cgi->hr,
183    
184                  $cgi->h1('Metabolic Overviews (via KEGG) - Choose KEGG Map'),                  $cgi->h1('Metabolic Overviews (via KEGG) - Choose KEGG Map'),
185                  $cgi->submit('Metabolic Overview'),                  $cgi->submit('Metabolic Overview'),
186                  $cgi->br,                  $cgi->br,
# Line 163  Line 190 
190                                       -size => 10                                       -size => 10
191                                      ),                                      ),
192                  $cgi->hr,                  $cgi->hr,
193    
194                  $cgi->h1('Searching DNA or Protein Sequences (in a selected organism)'),                  $cgi->h1('Searching DNA or Protein Sequences (in a selected organism)'),
195                  "Sequence/Pattern: ",                  "Sequence/Pattern: ",
196                  $cgi->textarea(-name => 'seq_pat', -rows => 20, -cols => 70),                  $cgi->textarea(-name => 'seq_pat', -rows => 20, -cols => 70),
197                  $cgi->popup_menu(-name => 'Tool', -values => ['blastp','blastx','blastn','tblastn','Protein scan_for_matches','DNA scan_for_matches'], -default => 'blastp'),                  $cgi->popup_menu(-name => 'Tool', -values => ['blastp','blastx','blastn','tblastn','Protein scan_for_matches','DNA scan_for_matches'], -default => 'blastp'),
198                  $cgi->submit('Search for Matches'),                  $cgi->submit('Search for Matches'),
199                  $cgi->hr,                  $cgi->hr,
200    
201                  $cgi->h1('Exporting Assignments'),                  $cgi->h1('Exporting Assignments'),
202                  "Extract assignments made by ",                  "Extract assignments made by ",
203                  $cgi->textfield(-name => "made_by", -size => 50),                  $cgi->textfield(-name => "made_by", -size => 50),
# Line 185  Line 214 
214                  $cgi->br,                  $cgi->br,
215                  $cgi->submit('Extract Assignments'),                  $cgi->submit('Extract Assignments'),
216                  $cgi->hr,                  $cgi->hr,
217    
218                  $cgi->h1('Searching for Interesting Genes'),                  $cgi->h1('Searching for Interesting Genes'),
219                  $cgi->submit('Search for Genes Matching an Occurrence Profile'),                  $cgi->submit('Search for Genes Matching an Occurrence Profile'),
220                  $cgi->end_form,                  $cgi->end_form
221           );           );
222    
223      push(@$html,      push(@$html,
# Line 196  Line 226 
226                  $cgi->start_form(-action => "assignments.cgi"),                  $cgi->start_form(-action => "assignments.cgi"),
227                  $cgi->textfield(-name => "user", -size => 20),                  $cgi->textfield(-name => "user", -size => 20),
228                  $cgi->submit('Process Assignment Sets'),                  $cgi->submit('Process Assignment Sets'),
229                  $cgi->end_form,                  $cgi->end_form
230           );           );
231    
232  }  }
233    
234    
235    #==============================================================================
236    #  Indexed objects (text search)
237    #==============================================================================
238    
239  sub show_indexed_objects {  sub show_indexed_objects {
240      my($fig,$cgi,$html,$pattern) = @_;      my($fig,$cgi,$html,$pattern,$check_all) = @_;
241      my($msg,$i);      my($msg,$i);
242    
243      if ($pattern =~ /^\s*(fig\|\d+\.\d+\.peg\.\d+)\s*$/)      if ($pattern =~ /^\s*(fig\|\d+\.\d+\.peg\.\d+)\s*$/)
# Line 219  Line 254 
254          return;          return;
255      }      }
256    
257        push( @$html, $cgi->br );
258      my($peg_index_data,$role_index_data) = $fig->search_index($pattern);      my($peg_index_data,$role_index_data) = $fig->search_index($pattern);
259        my $maxpeg  = defined( $cgi->param("maxpeg")  ) ? $cgi->param("maxpeg")  : 100;
260        my $maxrole = defined( $cgi->param("maxrole") ) ? $cgi->param("maxrole") : 100;
261    
262        if ($maxpeg > 0)
263        {
264            push( @$html, $cgi->start_form(-action => "index.cgi"),
265                          $cgi->hidden(-name => 'user',    -value => $user),
266                          $cgi->hidden(-name => 'pattern', -value => $pattern),
267                          $cgi->hidden(-name => 'maxpeg',  -value => $maxpeg),
268                          $cgi->hidden(-name => 'maxrole', -value => $maxpeg),
269                          $cgi->hidden(-name => 'maxpeg',  -value => $maxrole),
270                          $cgi->hidden(-name => 'Search',  -value => 'Search'),
271                          $cgi->submit( $check_all ? 'Deselect all' : 'Select all'),
272                          $cgi->end_form
273                );
274    
275            push( @$html, $cgi->start_form( -method => 'post',
276                                            -target => "window$$",
277                                            -action => 'fid_checked.cgi'
278                                          ),
279                          $cgi->hidden(-name => 'user', -value => $user),
280                          "For SELECTed (checked) sequences: ",
281                          $cgi->submit('get sequences'),
282                          $cgi->submit('view annotations'),
283                          $cgi->br, $cgi->br
284                );
285    
286      my $n = @$peg_index_data;      my $n = @$peg_index_data;
287      if ($n > 100)          if ($n > $maxpeg)
288      {      {
289          $msg = "Showing First 100 Out of $n PEGs";              $msg = "Showing First $maxpeg Out of $n PEGs";
290          $#{$peg_index_data} = 99;              $#{$peg_index_data} = $maxpeg-1;
291      }      }
292      else      else
293      {      {
294          $msg = "Showing $n PEGs";          $msg = "Showing $n PEGs";
295      }      }
296    
297      my $col_hdrs = ["PEG","Organism","Aliases","Function","Who"];          my $col_hdrs = ["Sel","PEG","Organism","Aliases","Function","Who"];
298      my $tab = [ map { &format_peg_entry($fig,$cgi,$_) } @$peg_index_data ];          my $tab = [ map { &format_peg_entry($fig,$cgi,$_,$check_all) } @$peg_index_data ];
299      push(@$html,&HTML::make_table($col_hdrs,$tab,$msg), $cgi->hr);          push( @$html, &HTML::make_table($col_hdrs,$tab,$msg),
300                          $cgi->br,
301                          "For SELECTed (checked) sequences: ",
302                          $cgi->submit('get sequences'),
303                          $cgi->submit('view annotations'),
304                          $cgi->br,
305                          $cgi->end_form
306                );
307        }
308    
309      $n = @$role_index_data;      if ($maxrole > 0)
     if ($n > 100)  
310      {      {
311          $msg = "Showing First 100 Out of $n Roles";          my $n = @$role_index_data;
312          $#{$role_index_data} = 99;          if ($n > $maxrole)
313            {
314                $msg = "Showing First $maxrole Out of $n Roles";
315                $#{$role_index_data} = $maxrole - 1;
316      }      }
317      else      else
318      {      {
319          $msg = "Showing $n Roles";          $msg = "Showing $n Roles";
320      }      }
321    
322      $col_hdrs = ["Role"];          if ( $maxpeg > 0 ) { push( @$html, $cgi->hr ) }
323      $tab = [ map { &format_role_entry($fig,$cgi,$_) } @$role_index_data ];          my $col_hdrs = ["Role"];
324            my $tab = [ map { &format_role_entry($fig,$cgi,$_) } @$role_index_data ];
325      push(@$html,&HTML::make_table($col_hdrs,$tab,$msg));      push(@$html,&HTML::make_table($col_hdrs,$tab,$msg));
326  }  }
327    }
328    
329  sub format_peg_entry {  sub format_peg_entry {
330      my($fig,$cgi,$entry) = @_;      my( $fig, $cgi, $entry, $checked) = @_;
331      my($i,$function,$who);      my($i,$function,$who);
332    
333      my($peg,$gs,$aliases,@funcs) = @$entry;      my($peg,$gs,$aliases,@funcs) = @$entry;
334      $gs =~ s/\s+\d+$//;  
335    #   $gs =~ s/\s+\d+$//;   # What is this???
336    
337      my $user = $cgi->param('user');      my $user = $cgi->param('user');
338      $user = $user ? $user : "";      $user = $user ? $user : "";
# Line 293  Line 369 
369      {      {
370          ($function,$who) = split(/\#/,$funcs[0]);          ($function,$who) = split(/\#/,$funcs[0]);
371      }      }
372      return [&HTML::fid_link($cgi,$peg),$gs,$aliases,$function,$who];      my $box = "<input type=\"checkbox\" name=\"checked\" value=\"$peg\""
373                . ($checked ? "checked=1" : "")
374                . ">";
375        return [ $box, &HTML::fid_link($cgi,$peg), $gs, $aliases, $function, $who ];
376  }  }
377    
378  sub format_role_entry {  sub format_role_entry {
# Line 337  Line 416 
416                  $end = $3;                  $end = $3;
417                  $string = $out[$i+1];                  $string = $out[$i+1];
418                  chop $string;                  chop $string;
419                  push(@$tab,[&HTML::fid_link($cgi,$peg,1),$beg,$end,$string,scalar $fig->function_of($peg,$user)]);                  push( @$tab, [ &HTML::fid_link($cgi,$peg,1),
420                                   $beg,
421                                   $end,
422                                   $string,
423                                   scalar $fig->function_of( $peg, $user )
424                                 ]
425                        );
426              }              }
427          }          }
428          push(@$html,&HTML::make_table($col_hdrs,$tab,"Matches"));          push(@$html,&HTML::make_table($col_hdrs,$tab,"Matches"));
# Line 346  Line 431 
431      unlink($tmp_pat);      unlink($tmp_pat);
432  }  }
433    
434    #==============================================================================
435    #  Scan for matches
436    #==============================================================================
437    
438  sub run_dna_scan_for_matches {  sub run_dna_scan_for_matches {
439      my($fig,$cgi,$html,$org,$pat) = @_;      my($fig,$cgi,$html,$org,$pat) = @_;
440      my($string,$contig,$beg,$end,$col_hdrs,$tab,$i);      my($string,$contig,$beg,$end,$col_hdrs,$tab,$i);
# Line 389  Line 478 
478      unlink($tmp_pat);      unlink($tmp_pat);
479  }  }
480    
481    #==============================================================================
482    #  BLAST search
483    #==============================================================================
484    
485  sub run_blast {  sub run_blast {
486      my($fig,$cgi,$html,$org,$tool,$seq) = @_;      my($fig,$cgi,$html,$org,$tool,$seq) = @_;
487      my($query,@out);      my($query,@out);
488    
489      my $tmp_seq = "$FIG_Config::temp/tmp$$.seq";      my $tmp_seq = "$FIG_Config::temp/tmp$$.seq";
490    
491        #--------------------------------------------------------------------------
492        #  Is the request for an id?  Get the sequence
493        #--------------------------------------------------------------------------
494      if ($seq =~ /^\s*([a-zA-Z]{2,4}\|\S+)/)      if ($seq =~ /^\s*([a-zA-Z]{2,4}\|\S+)/)
495      {      {
496          my $id = $1;          my $id = $1;
# Line 417  Line 513 
513              return;              return;
514          }          }
515      }      }
516        #--------------------------------------------------------------------------
517        #  Is it a fasta format?  Get the query name
518        #--------------------------------------------------------------------------
519      elsif ($seq =~ s/^>(\S+)[^\n\012\015]*//)      elsif ($seq =~ s/^>(\S+)[^\n\012\015]*//)
520      {      {
521          $query = $1;          $query = $1;
522      }      }
523        #--------------------------------------------------------------------------
524        #  Take it as plain text
525        #--------------------------------------------------------------------------
526      else      else
527      {      {
528          $query = "query";          $query = "query";
# Line 433  Line 535 
535    
536      if (! $ENV{"BLASTMAT"}) { $ENV{"BLASTMAT"} = "$FIG_Config::blastmat" }      if (! $ENV{"BLASTMAT"}) { $ENV{"BLASTMAT"} = "$FIG_Config::blastmat" }
537    
538        my $blastall = "$FIG_Config::ext_bin/blastall";
539      if ($tool eq "blastp")      if ($tool eq "blastp")
540      {      {
541          &verify_db("$FIG_Config::organisms/$org/Features/peg/fasta","p");          my $db = "$FIG_Config::organisms/$org/Features/peg/fasta";
542          @out = map { &HTML::set_prot_links($cgi,$_) } `$FIG_Config::ext_bin/blastall -i $tmp_seq -d $FIG_Config::organisms/$org/Features/peg/fasta -p blastp`;          &verify_db($db,"p");
543            @out = map { &HTML::set_prot_links($cgi,$_) } `$blastall -i $tmp_seq -d $db -p blastp`;
544      }      }
545      elsif ($tool eq "blastx")      elsif ($tool eq "blastx")
546      {      {
547          &verify_db("$FIG_Config::organisms/$org/Features/peg/fasta","p");          my $db = "$FIG_Config::organisms/$org/Features/peg/fasta";
548          @out = map { &HTML::set_prot_links($cgi,$_) } `$FIG_Config::ext_bin/blastall -i $tmp_seq -d $FIG_Config::organisms/$org/Features/peg/fasta -p blastx`;          &verify_db($db,"p");
549            @out = map { &HTML::set_prot_links($cgi,$_) } `$blastall -i $tmp_seq -d $db -p blastx`;
550      }      }
551      elsif ($tool eq "blastn")      elsif ($tool eq "blastn")
552      {      {
553          &verify_db("$FIG_Config::organisms/$org/contigs","n");  ### fix to get all contigs          # Typo fixed by GJO
554          @out = `$FIG_Config::ext_bin/blastall -i $tmp_seq -d $FIG_Config::organisms/$org/contigs -p blastn`;          # my $db = "$$FIG_Config::organisms/$org/contigs";
555            my $db = "$FIG_Config::organisms/$org/contigs";
556            &verify_db($db,"n");                               ### fix to get all contigs
557            #  Matrix changed by GJO for greater sensitivity
558            # @out = `$blastall -i $tmp_seq -d $db -p blastn`;
559            @out = `$blastall -i $tmp_seq -d $db -p blastn -r 1 -q -1`;
560      }      }
561      elsif ($tool eq "tblastn")      elsif ($tool eq "tblastn")
562      {      {
563          &verify_db("$FIG_Config::organisms/$org/contigs","n");  ### fix to get all contigs          my $db = "$FIG_Config::organisms/$org/contigs";
564          @out = `$FIG_Config::ext_bin/blastall -i $tmp_seq -d $FIG_Config::organisms/$org/contigs -p tblastn`;          &verify_db($db,"n");                               ### fix to get all contigs
565            @out = `$blastall -i $tmp_seq -d $db -p tblastn`;
566      }      }
567    
568      if (@out < 1)      if (@out < 1)          #  This is really a bigger problem than no hits (GJO)
569      {      {
570          push(@$html,$cgi->h1("Sorry, no hits"));          push(@$html,$cgi->h1("Sorry, no hits"));
571      }      }
# Line 467  Line 578 
578      unlink($tmp_seq);      unlink($tmp_seq);
579  }  }
580    
581    
582  sub verify_db {  sub verify_db {
583      my($db,$type) = @_;      my($db,$type) = @_;
584    
585      if ($type =~ /p/i)      if ($type =~ /^p/i)
586      {      {
587          if ((! -s "$db.psq") || (-M "$db.psq" > -M $db))          if ((! -s "$db.psq") || (-M "$db.psq" > -M $db))
588          {          {
# Line 518  Line 630 
630              my $user = $cgi->param('save_user');              my $user = $cgi->param('save_user');
631              if ($user)              if ($user)
632              {              {
                 $user =~ s/^master://;  
633                  &FIG::verify_dir("$FIG_Config::data/Assignments/$user");                  &FIG::verify_dir("$FIG_Config::data/Assignments/$user");
634                  my $file = &FIG::epoch_to_readable(time) . ":$who:exported_from_local_SEED";                  my $file = &FIG::epoch_to_readable(time) . ":$who:exported_from_local_SEED";
635                  if (open(TMP,">$FIG_Config::data/Assignments/$user/$file"))                  if (open(TMP,">$FIG_Config::data/Assignments/$user/$file"))

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.17

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3