Parent Directory
|
Revision Log
Revision 1.3.2.1 - (view) (download)
1 : | overbeek | 1.1 | #### start ##### |
2 : | olson | 1.3.2.1 | use InterfaceRoutines; |
3 : | |||
4 : | overbeek | 1.1 | |
5 : | use HTML; | ||
6 : | use strict; | ||
7 : | use CGI; | ||
8 : | my $cgi = new CGI; | ||
9 : | |||
10 : | olson | 1.3.2.1 | use FIG; |
11 : | my $sproutAvail = eval { | ||
12 : | require SproutFIG; | ||
13 : | require PageBuilder; | ||
14 : | }; | ||
15 : | |||
16 : | my($fig_or_sprout); | ||
17 : | my $is_sprout; | ||
18 : | my $html = []; | ||
19 : | |||
20 : | if ($cgi->param('SPROUT')) { | ||
21 : | $is_sprout = 1; | ||
22 : | $fig_or_sprout = new SproutFIG($FIG_Config::sproutDB, $FIG_Config::sproutData); | ||
23 : | unshift @$html, "<TITLE>The NMPDR Homologs in Clusters Page</TITLE>\n"; | ||
24 : | } else { | ||
25 : | $is_sprout = 0; | ||
26 : | $fig_or_sprout = new FIG; | ||
27 : | unshift @$html, "<TITLE>The SEED Homologs in Clusters Page</TITLE>\n"; | ||
28 : | } | ||
29 : | |||
30 : | overbeek | 1.1 | if (0) |
31 : | { | ||
32 : | my $VAR1; | ||
33 : | eval(join("",`cat /tmp/homologs_in_clusters_parms`)); | ||
34 : | $cgi = $VAR1; | ||
35 : | # print STDERR &Dumper($cgi); | ||
36 : | } | ||
37 : | |||
38 : | if (0) | ||
39 : | { | ||
40 : | print $cgi->header; | ||
41 : | my @params = $cgi->param; | ||
42 : | print "<pre>\n"; | ||
43 : | foreach $_ (@params) | ||
44 : | { | ||
45 : | print "$_\t:",join(",",$cgi->param($_)),":\n"; | ||
46 : | } | ||
47 : | |||
48 : | if (0) | ||
49 : | { | ||
50 : | if (open(TMP,">/tmp/homologs_in_clusters_parms")) | ||
51 : | { | ||
52 : | print TMP &Dumper($cgi); | ||
53 : | close(TMP); | ||
54 : | } | ||
55 : | } | ||
56 : | exit; | ||
57 : | } | ||
58 : | |||
59 : | my $prot = $cgi->param('prot'); | ||
60 : | if (! $prot) | ||
61 : | { | ||
62 : | push(@$html,"<h1>Sorry, you need to specify a protein</h1>\n"); | ||
63 : | &HTML::show_page($cgi,$html); | ||
64 : | exit; | ||
65 : | } | ||
66 : | |||
67 : | |||
68 : | if ($prot !~ /^fig\|/) | ||
69 : | { | ||
70 : | olson | 1.3.2.1 | my @poss = $fig_or_sprout->by_alias($prot); |
71 : | overbeek | 1.1 | if (@poss > 0) |
72 : | { | ||
73 : | $prot = $poss[0]; | ||
74 : | } | ||
75 : | else | ||
76 : | { | ||
77 : | push(@$html,"<h1>Sorry, $prot appears not to have a FIG id at this point</h1>\n"); | ||
78 : | &HTML::show_page($cgi,$html); | ||
79 : | exit; | ||
80 : | } | ||
81 : | } | ||
82 : | |||
83 : | olson | 1.3.2.1 | &compute_desired_homologs($fig_or_sprout,$cgi,$html,$prot); |
84 : | overbeek | 1.1 | &HTML::show_page($cgi,$html); |
85 : | exit; | ||
86 : | |||
87 : | sub compute_desired_homologs { | ||
88 : | olson | 1.3.2.1 | my($fig_or_sprout,$cgi,$html,$peg) = @_; |
89 : | overbeek | 1.1 | |
90 : | olson | 1.3.2.1 | my @pinned = &relevant_homologs($fig_or_sprout,$cgi,$peg); |
91 : | overbeek | 1.1 | # print STDERR &Dumper(\@pinned); |
92 : | |||
93 : | olson | 1.3.2.1 | # my @clusters = sort { (@$b <=> @$a) } &sets_of_homologs($fig_or_sprout,$cgi,$peg,\@pinned); |
94 : | overbeek | 1.1 | # print STDERR &Dumper(\@clusters); |
95 : | |||
96 : | overbeek | 1.3 | # my @homologs = &extract_homologs($peg,\@pinned,\@clusters); |
97 : | overbeek | 1.1 | # print STDERR &Dumper(\@homologs); |
98 : | |||
99 : | my $sc; | ||
100 : | my @tab = map { ($peg,$sc) = @$_; [$sc, | ||
101 : | &HTML::fid_link($cgi,$peg), | ||
102 : | olson | 1.3.2.1 | $fig_or_sprout->genus_species($fig_or_sprout->genome_of($peg)), |
103 : | scalar $fig_or_sprout->function_of($peg,$cgi->param('user')), | ||
104 : | &HTML::set_prot_links($cgi,join( ', ', $fig_or_sprout->feature_aliases($peg) )) | ||
105 : | overbeek | 1.3 | ] } @pinned; |
106 : | push(@$html,&HTML::make_table(["Score","PEG","Genome", "Function","Aliases"],\@tab,"PEGs that Might Be in Clusters")); | ||
107 : | overbeek | 1.1 | } |
108 : | |||
109 : | sub relevant_homologs { | ||
110 : | olson | 1.3.2.1 | my($fig_or_sprout,$cgi,$peg) = @_; |
111 : | overbeek | 1.1 | my($maxN,$maxP,$genome1,$sim,$id2,$genome2,%seen); |
112 : | |||
113 : | $maxN = $cgi->param('maxN'); | ||
114 : | $maxN = $maxN ? $maxN : 50; | ||
115 : | |||
116 : | $maxP = $cgi->param('maxP'); | ||
117 : | $maxP = $maxP ? $maxP : 1.0e-10; | ||
118 : | |||
119 : | olson | 1.3.2.1 | my @sims = $fig_or_sprout->sims( $peg, $maxN, $maxP, "fig"); |
120 : | overbeek | 1.1 | |
121 : | my @homologs = (); | ||
122 : | $seen{&FIG::genome_of($peg)} = 1; | ||
123 : | foreach $sim (@sims) | ||
124 : | { | ||
125 : | $id2 = $sim->id2; | ||
126 : | $genome2 = &FIG::genome_of($id2); | ||
127 : | overbeek | 1.3 | my @coup; |
128 : | olson | 1.3.2.1 | if ((! $seen{$genome2}) && (@coup = $fig_or_sprout->coupled_to($id2)) && (@coup > 0)) |
129 : | overbeek | 1.1 | { |
130 : | $seen{$genome2} = 1; | ||
131 : | overbeek | 1.3 | push(@homologs,[$id2,scalar @coup]); |
132 : | overbeek | 1.1 | } |
133 : | } | ||
134 : | overbeek | 1.3 | return sort { $b->[1] <=> $a->[1] } @homologs; |
135 : | overbeek | 1.1 | } |
136 : | |||
137 : | sub sets_of_homologs { | ||
138 : | olson | 1.3.2.1 | my($fig_or_sprout,$cgi,$given_peg,$pinned) = @_; |
139 : | overbeek | 1.1 | my($peg,$mid,$min,$max,$feat,$fid); |
140 : | |||
141 : | my $bound = $cgi->param('bound'); | ||
142 : | $bound = $bound ? $bound : 4000; | ||
143 : | |||
144 : | my @pegs = (); | ||
145 : | foreach $peg (($given_peg,@$pinned)) | ||
146 : | { | ||
147 : | olson | 1.3.2.1 | my $loc = $fig_or_sprout->feature_location($peg); |
148 : | overbeek | 1.1 | if ($loc) |
149 : | { | ||
150 : | my($contig,$beg,$end) = &FIG::boundaries_of($loc); | ||
151 : | if ($contig && $beg && $end) | ||
152 : | { | ||
153 : | $mid = int(($beg + $end) / 2); | ||
154 : | $min = $mid - $bound; | ||
155 : | $max = $mid + $bound; | ||
156 : | |||
157 : | olson | 1.3.2.1 | ($feat,undef,undef) = &genes_in_region($fig_or_sprout,$cgi,&FIG::genome_of($peg),$contig,$min,$max); |
158 : | overbeek | 1.1 | foreach $fid (@$feat) |
159 : | { | ||
160 : | if (&FIG::ftype($fid) eq "peg") | ||
161 : | { | ||
162 : | push(@pegs,$fid); | ||
163 : | } | ||
164 : | } | ||
165 : | } | ||
166 : | } | ||
167 : | } | ||
168 : | |||
169 : | my %represents; | ||
170 : | foreach $peg (@pegs) | ||
171 : | { | ||
172 : | olson | 1.3.2.1 | my $tmp = $fig_or_sprout->maps_to_id($peg); |
173 : | overbeek | 1.1 | push(@{$represents{$tmp}},$peg); |
174 : | olson | 1.3.2.1 | # if ($tmp ne $peg) { push(@{$represents{$peg}},$peg) } |
175 : | overbeek | 1.1 | } |
176 : | my($sim,%conn,$x,$y,$i,$j); | ||
177 : | foreach $y (keys(%represents)) | ||
178 : | { | ||
179 : | $x = $represents{$y}; | ||
180 : | for ($i=0; ($i < @$x); $i++) | ||
181 : | { | ||
182 : | for ($j=$i+1; ($j < @$x); $j++) | ||
183 : | { | ||
184 : | push(@{$conn{$x->[$i]}},$x->[$j]); | ||
185 : | push(@{$conn{$x->[$j]}},$x->[$i]); | ||
186 : | } | ||
187 : | } | ||
188 : | } | ||
189 : | |||
190 : | my $maxN = $cgi->param('maxN'); | ||
191 : | $maxN = $maxN ? $maxN : 50; | ||
192 : | |||
193 : | my $maxP = $cgi->param('maxP'); | ||
194 : | $maxP = $maxP ? $maxP : 1.0e-10; | ||
195 : | |||
196 : | foreach $peg (@pegs) | ||
197 : | { | ||
198 : | olson | 1.3.2.1 | foreach $sim ($fig_or_sprout->sims( $peg, $maxN, $maxP, "raw")) |
199 : | overbeek | 1.1 | { |
200 : | if (defined($x = $represents{$sim->id2})) | ||
201 : | { | ||
202 : | foreach $y (@$x) | ||
203 : | { | ||
204 : | push(@{$conn{$peg}},$y); | ||
205 : | } | ||
206 : | } | ||
207 : | } | ||
208 : | } | ||
209 : | |||
210 : | my(%seen,$k,$cluster); | ||
211 : | my @clusters = (); | ||
212 : | for ($i=0; ($i < @pegs); $i++) | ||
213 : | { | ||
214 : | $peg = $pegs[$i]; | ||
215 : | if (! $seen{$peg}) | ||
216 : | { | ||
217 : | $cluster = [$peg]; | ||
218 : | $seen{$peg} = 1; | ||
219 : | for ($j=0; ($j < @$cluster); $j++) | ||
220 : | { | ||
221 : | $x = $conn{$cluster->[$j]}; | ||
222 : | foreach $k (@$x) | ||
223 : | { | ||
224 : | if (! $seen{$k}) | ||
225 : | { | ||
226 : | push(@$cluster,$k); | ||
227 : | $seen{$k} = 1; | ||
228 : | } | ||
229 : | } | ||
230 : | } | ||
231 : | |||
232 : | if (@$cluster > 1) | ||
233 : | { | ||
234 : | push(@clusters,$cluster); | ||
235 : | } | ||
236 : | } | ||
237 : | } | ||
238 : | return @clusters; | ||
239 : | } | ||
240 : | |||
241 : | sub extract_homologs { | ||
242 : | my($given_peg,$pinned,$clusters) = @_; | ||
243 : | my(%main,$cluster,$peg,%counts,@with_counts); | ||
244 : | |||
245 : | %main = map { $_ => 1 } ($given_peg,@$pinned); | ||
246 : | foreach $cluster (@$clusters) | ||
247 : | { | ||
248 : | foreach $peg (@$cluster) | ||
249 : | { | ||
250 : | if (! $main{$peg}) | ||
251 : | { | ||
252 : | $counts{&FIG::genome_of($peg)} += @$cluster - 1; | ||
253 : | } | ||
254 : | } | ||
255 : | } | ||
256 : | |||
257 : | foreach $peg (($given_peg,@$pinned)) | ||
258 : | { | ||
259 : | push(@with_counts,[$peg,$counts{&FIG::genome_of($peg)}]); | ||
260 : | } | ||
261 : | |||
262 : | return grep { $_->[1] > 2} sort { $b->[1] <=> $a->[1] } @with_counts; | ||
263 : | } |
MCS Webmaster | ViewVC Help |
Powered by ViewVC 1.0.3 |