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

Diff of /FigWebServices/co_occurs_server.cgi

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

revision 1.6, Thu Jul 2 20:41:00 2009 UTC revision 1.7, Thu Aug 27 19:51:59 2009 UTC
# Line 1  Line 1 
1  use strict;  use strict;
 use Data::Dumper;  
 my $have_fcgi;  
 eval {  
     require CGI::Fast;  
     $have_fcgi = 1;  
 };  
 use CGI;  
 use ERDB;  
 use FC;  
2    
3    use strict;
4    use ServerThing;
5    use constant POD => "http://servers.nmpdr.org/co_occurrence/server.cgi?pod=";
6    
7  use YAML;  ServerThing::RunServer(CO => $ARGV[0], POD);
   
 use FIG;  
   
 my $fig = new FIG;  
   
 my $db = ERDB::GetDatabase('Sapling');  
   
 #  
 # If no CGI vars, assume we are invoked as a fastcgi service.  
 #  
 if ($have_fcgi && $ENV{REQUEST_METHOD} eq '')  
 {  
     #  
     # Make mysql autoreconnect.  
     #  
     if ($FIG_Config::dbms eq 'mysql')  
     {  
         my $dbh = $fig->db_handle()->{_dbh};  
         $dbh->{mysql_auto_reconnect} = 1;  
     }  
     #  
     # And ERDB too.  
     #  
     $db->{_dbh}->{_dbh}->{mysql_auto_reconnect} = 1;  
   
     while (my $cgi = new CGI::Fast())  
     {  
         eval {  
             &process($cgi);  
         };  
         if ($@)  
         {  
             if (ref($@) ne 'ARRAY')  
             {  
                 warn "code died, returning error\n";  
                 print $cgi->header(-status => '500 error in body of cgi processing');  
                 print $@;  
             }  
         }  
     }  
 }  
 else  
 {  
     my $cgi = new CGI();  
     print $cgi->header();  
     &process($cgi);  
 }  
   
 exit;  
   
 sub myerror  
 {  
     my($cgi, $stat, $msg) = @_;  
     print $cgi->header(-status =>  $stat);  
     print "$msg\n";  
     die ['cgi error returned'];  
 }  
   
 sub process  
 {  
     my($cgi) = @_;  
   
     my $function = $cgi->param('function');  
     $function || myerror($cgi, "500 missing function", "Missing a function in call to co_occurs_server.cgi");  
   
     if ($function eq "conserved_in_neighborhood")  
     {  
         my $pegs = &YAML::Load($cgi->param('args'));  
         my $tuples = [];  
         foreach my $peg (@$pegs)  
         {  
             my $group = [];  
             my @co_occurs = &FC::co_occurs($db,$peg);  
             foreach my $tuple (@co_occurs)  
             {  
                 my($sc,$fid,$pairset) = @$tuple;  
                 push(@$group,[$sc,$fid,scalar $fig->function_of($fid),$pairset]);  
             }  
             push(@$tuples,$group);  
         }  
8    
9          print $cgi->header();  1;
         my $str = &YAML::Dump($tuples);  
         print $str;  
     }  
     elsif ($function eq "pairsets")  
     {  
         my $pairsets = &YAML::Load($cgi->param('args'));  
         my $ans = [];  
         foreach my $pairset (@$pairsets)  
         {  
             push(@$ans,[$pairset,[&FC::co_occurrence_set($db,$pairset)]]);  
         }  
         print $cgi->header();  
         print &YAML::Dump($ans);  
     }  
     elsif ($function eq "clusters_containing")  
     {  
         my $pegs = &YAML::Load($cgi->param('args'));  
         my $ans = [];  
         foreach my $peg (@$pegs)  
         {  
             my $cluster = &FC::in_co_occurrence_cluster($db,$peg);  
             if ($cluster)  
             {  
                 my $func = scalar $fig->function_of($peg);  
                 push(@$ans,[$peg,$func,[map { [$_,scalar $fig->function_of($_)] } @$cluster]]);  
             }  
         }  
         print $cgi->header();  
         print &YAML::Dump($ans);  
     }  
     elsif ($function eq "related_clusters")  
     {  
         my $pegs = &YAML::Load($cgi->param('args'));  
         my $ans = [];  
         foreach my $peg (@$pegs)  
         {  
             my $one_set = [];  
             my @clusters = &FC::largest_co_occurrence_clusters($db,$peg);  
             foreach my $cluster (@clusters)  
             {  
                 my($peg1,$sc,$other_pegs) = @$cluster;  
                 my $func1 = $fig->function_of($peg1);  
                 my $others = [ map { [$_,scalar $fig->function_of($_)] } @$other_pegs];  
                 push(@$one_set,[$peg1,$sc,$others]);  
             }  
             push(@$ans,$one_set);  
         }  
         print $cgi->header();  
         print &YAML::Dump($ans);  
     }  
     elsif ($function eq "related_figfams")  
     {  
         my $ffs = &YAML::Load($cgi->param('args'));  
         my $ans = [];  
         foreach my $ff (@$ffs)  
         {  
             push(@$ans,[$ff,[&FC::co_occurring_FIGfams($db,$ff)]]);  
         }  
         print $cgi->header();  
         print &YAML::Dump($ans);  
     }  
 }  

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3