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

Diff of /FigWebServices/sigs.cgi

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

revision 1.5, Fri Feb 20 14:34:56 2004 UTC revision 1.6, Thu Apr 8 16:38:05 2004 UTC
# Line 1  Line 1 
   
1  use FIG;  use FIG;
2  my $fig = new FIG;  my $fig = new FIG;
3    
# Line 57  Line 56 
56                      $full{$org}]);                      $full{$org}]);
57      }      }
58      push(@$html,$cgi->start_form(-action => 'sigs.cgi'),      push(@$html,$cgi->start_form(-action => 'sigs.cgi'),
59                  $cgi->h1("Find Proteins that Discriminate Two Sets of Organisms"),                  $cgi->h1("Find Proteins that Discriminate Two Sets of Organisms or Are Common to a Set of Organisms"),
60                  &HTML::make_table($col_hdrs,$tab,"Pick organisms for Set 1 and Set 2"),                  &HTML::make_table($col_hdrs,$tab,"Pick organisms for Set 1 and Set 2"),
61                  $cgi->submit("Find the Discriminating Proteins from Checked Organism"),                  $cgi->submit("Find the Discriminating Proteins from Checked Organism"),
62                    $cgi->br,
63                    $cgi->br,
64                    $cgi->submit("Find Genes from Checked Organism and in Organisms from Set 1"),
65                    " (minimum matches from Set 1: )", $cgi->textfield(-name => minN, -size => 5),
66                  $cgi->end_form,                  $cgi->end_form,
67                  "\n");                  "\n");
68  }  }
# Line 68  Line 71 
71      my $sim_cutoff = $cgi->param('sim_cutoff');      my $sim_cutoff = $cgi->param('sim_cutoff');
72      if (! $sim_cutoff) { $sim_cutoff = 1.0e-10 }      if (! $sim_cutoff) { $sim_cutoff = 1.0e-10 }
73    
74      my @hits = &differentiating_genes(\@set1,\@set2,$given,$sim_cutoff);      if (@set1 > 0)
75        {
76            my @hits;
77            if (@set2 > 0)
78            {
79                @hits = &differentiating_genes(\@set1,\@set2,$given,$sim_cutoff);
80      @hits    = sort { ($b->[1] <=> $a->[1]) || ($a->[0] cmp $b->[0]) } @hits;      @hits    = sort { ($b->[1] <=> $a->[1]) || ($a->[0] cmp $b->[0]) } @hits;
81    
82      $col_hdrs = ["Gene","Score","Function"];      $col_hdrs = ["Gene","Score","Function"];
# Line 78  Line 86 
86      foreach $_ (@hits)      foreach $_ (@hits)
87      {      {
88          my($peg,$score) = @$_;          my($peg,$score) = @$_;
89          push(@$tab,[&HTML::fid_link($cgi,$peg),$score,scalar $fig->function_of($peg,$cgi->param('user'))]);                  push(@$tab,[&HTML::fid_link($cgi,$peg,"local"),$score,scalar $fig->function_of($peg,$cgi->param('user'))]);
90                }
91                push(@$html,&HTML::make_table($col_hdrs,$tab,$title));
92            }
93            else
94            {
95                my($i,$j,%which_col,$peg1,$func1,$link,$genome1,$hit);
96                my $minN = $cgi->param('minN');
97                $minN = $minN ? $minN : @set1;
98                @hits = &common_genes(\@set1,$given,$sim_cutoff,$minN);
99                $col_hdrs = ["",&FIG::abbrev($fig->genus_species($given)),"Score","Function"];
100                for ($i=0; ($i < @set1); $i++)
101                {
102                    $which_col{$set1[$i]} = $i+4;
103                    push(@$col_hdrs,&FIG::abbrev($fig->genus_species($set1[$i])));
104                }
105    
106                $tab      = [];
107                $title    = "Genes in Common";
108    
109                for ($j=0; ($j < @hits); $j++)
110                {
111                    my($peg,$score,$hits) = @{$hits[$j]};
112                    my $func = scalar $fig->function_of($peg,$cgi->param('user'));
113                    my $row = [$j+1,&HTML::fid_link($cgi,$peg,"local"),$score,$func];
114                    for ($i=0; ($i < @set1); $i++)
115                    {
116                        push(@$row,"");
117                    }
118                    foreach $hit (@$hits)
119                    {
120                        ($peg1,$func1) = @$hit;
121                        $genome1 = &FIG::genome_of($peg1);
122                        $col     = $which_col{$genome1};
123                        $link = &HTML::fid_link($cgi,$peg1,"local");
124                        $row->[$col] = ($func eq $func1) ? $link : "*$link";
125                    }
126                    push(@$tab,$row);
127      }      }
128      push(@$html,&HTML::make_table($col_hdrs,$tab,$title));      push(@$html,&HTML::make_table($col_hdrs,$tab,$title));
129  }  }
130        }
131        else
132        {
133            push(@$html,$cgi->h1("You need to fill in at least Set1"));
134        }
135    }
136  &HTML::show_page($cgi,$html);  &HTML::show_page($cgi,$html);
137    
138    sub common_genes {
139        my($set1,$given,$sim_cutoff,$minN) = @_;
140        my %set1  = map { $_ => 1 } @$set1;
141        if ($set1{$given})
142        {
143            $minN--;
144            $set1{$given} = 0;
145        }
146    
147        foreach $peg ($fig->all_features($given,"peg"))
148        {
149            undef %hits_set1;
150            foreach $sim ($fig->sims($peg, 1000, $sim_cutoff, "fig"))
151            {
152                $id2          = $sim->id2;
153                if ($id2 =~ /^fig\|(\d+\.\d+)/)
154                {
155                    my $org1 = $1;
156                    if ($set1{$org1})
157                    {
158                        if (! $hits_set1{$org1})
159                        {
160                            $hits_set1{$org1} = $id2;
161                        }
162                    }
163                }
164            }
165            $sc = keys(%hits_set1);
166            if ($sc >= $minN)
167            {
168                push(@hits,[$peg,$sc,[map { [$hits_set1{$_},scalar $fig->function_of($hits_set1{$_})] } keys(%hits_set1)]]);
169            }
170        }
171        return @hits;
172    }
173    
174  sub differentiating_genes {  sub differentiating_genes {
175      my($set1,$set2,$given,$sim_cutoff) = @_;      my($set1,$set2,$given,$sim_cutoff) = @_;
176    
# Line 97  Line 184 
184          undef %hits_set1; undef %hits_set2;          undef %hits_set1; undef %hits_set2;
185          $hits_set1{&FIG::genome_of($peg)} = 1;          $hits_set1{&FIG::genome_of($peg)} = 1;
186    
187          foreach $sim ($fig->sims($peg, 1000, 1.0e-10, "fig"))          foreach $sim ($fig->sims($peg, 1000, $sim_cutoff, "fig"))
188          {          {
189              $id2          = $sim->id2;              $id2          = $sim->id2;
190              if ($id2 =~ /^fig\|(\d+\.\d+)/)              if ($id2 =~ /^fig\|(\d+\.\d+)/)

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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3