[Bio] / FigKernelPackages / Assignments.pm Repository:
ViewVC logotype

Annotation of /FigKernelPackages/Assignments.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.12 - (view) (download) (as text)

1 : olson 1.4 #
2 :     # Copyright (c) 2003-2006 University of Chicago and Fellowship
3 :     # for Interpretations of Genomes. All Rights Reserved.
4 :     #
5 :     # This file is part of the SEED Toolkit.
6 :     #
7 :     # The SEED Toolkit is free software. You can redistribute
8 :     # it and/or modify it under the terms of the SEED Toolkit
9 :     # Public License.
10 :     #
11 :     # You should have received a copy of the SEED Toolkit Public License
12 :     # along with this program; if not write to the University of Chicago
13 :     # at info@ci.uchicago.edu or the Fellowship for Interpretation of
14 :     # Genomes at veronika@thefig.info or download a copy from
15 :     # http://www.theseed.org/LICENSE.TXT.
16 :     #
17 :    
18 : overbeek 1.1 package Assignments;
19 :    
20 :     use Carp;
21 :     use Data::Dumper;
22 :     use FIG;
23 :     use SameFunc;
24 :    
25 :     sub default_parms {
26 :    
27 :     my $x = <<END
28 : overbeek 1.12 genome 198214.1 15 Shigella flexneri 2a str. 301
29 :     genome 198215.1 15 Shigella flexneri 2a str. 2457T
30 :     genome 216598.1 15 Shigella dysenteriae M131649
31 :     genome 216599.1 15 Shigella sonnei 53G
32 :     genome 630.2 15 Yersinia enterocolitica 8081
33 :     genome 633.2 15 Yersinia pseudotuberculosis (Livermore)
34 :     genome 187410.1 15 Yersinia pestis KIM
35 :     genome 214092.1 15 Yersinia pestis CO92
36 :     genome 229193.1 15 Yersinia pestis biovar Medievalis str. 91001
37 :     genome 273123.1 15 Yersinia pseudotuberculosis IP 32953
38 :     genome 594.1 15 Salmonella enterica subsp. enterica serovar Gallinarum
39 :     genome 99287.1 15 Salmonella typhimurium LT2
40 :     genome 119912.1 15 Salmonella enterica serovar Choleraesuis SC-B67
41 :     genome 209261.1 15 Salmonella enterica subsp. enterica serovar Typhi Ty2
42 :     genome 220341.1 15 Salmonella enterica subsp. enterica serovar Typhi str. CT18
43 :     genome 83333.1 15 Escherichia coli K12
44 :     genome 83334.1 15 Escherichia coli O157:H7
45 :     genome 155864.1 15 Escherichia coli O157:H7 EDL933
46 :     genome 199310.1 15 Escherichia coli CFT073
47 :     genome 216592.1 15 Escherichia coli 042
48 :     genome 216593.1 15 Escherichia coli E2348/69
49 :     genome 192222.1 15 Campylobacter jejuni subsp. jejuni NCTC 11168
50 :     genome 224308.1 15 Bacillus subtilis subsp. subtilis str. 168
51 :     genome 196600.1 15 Vibrio vulnificus YJ016
52 :     genome 216895.1 15 Vibrio vulnificus CMCP6
53 :     genome 223926.1 15 Vibrio parahaemolyticus RIMD 2210633
54 :     genome 243277.1 15 Vibrio cholerae O1 biovar eltor str. N16961
55 :     genome 312309.3 15 Vibrio fischeri ES114
56 :     genome 314290.3 15 Vibrio sp. MED222
57 :     genome 314291.3 15 Vibrio splendidus 12B01
58 :     genome 192222.1 15 Campylobacter jejuni subsp. jejuni NCTC 11168
59 :     genome 195099.3 15 Campylobacter jejuni RM1221
60 :     genome 306254.1 15 Campylobacter coli RM2228
61 :     genome 306263.1 15 Campylobacter lari RM2100
62 :     genome 306264.1 15 Campylobacter upsaliensis RM3195
63 :     genome 169963.1 15 Listeria monocytogenes EGD-e
64 :     genome 265669.1 15 Listeria monocytogenes str. 4b F2365
65 :     genome 267409.1 15 Listeria monocytogenes str. 1/2a F6854
66 :     genome 267410.1 15 Listeria monocytogenes str. 4b H7858
67 :     genome 272626.1 15 Listeria innocua Clip11262
68 :     genome 1314.1 15 Streptococcus pyogenes M5
69 :     genome 160490.1 15 Streptococcus pyogenes M1 GAS
70 :     genome 170187.1 15 Streptococcus pneumoniae TIGR4
71 :     genome 171101.1 15 Streptococcus pneumoniae R6
72 :     genome 186103.1 15 Streptococcus pyogenes MGAS8232
73 :     genome 193567.1 15 Streptococcus pyogenes SSI-1
74 :     genome 198466.1 15 Streptococcus pyogenes MGAS315
75 :     genome 205921.3 15 Streptococcus agalactiae A909
76 :     genome 208435.1 15 Streptococcus agalactiae 2603V/R
77 :     genome 210007.1 15 Streptococcus mutans UA159
78 :     genome 211110.1 15 Streptococcus agalactiae NEM316
79 :     genome 246201.1 15 Streptococcus mitis NCTC 12261
80 :     genome 264199.3 15 Streptococcus thermophilus LMG 18311
81 :     genome 286636.1 15 Streptococcus pyogenes MGAS10394
82 :     genome 293653.3 15 Streptococcus pyogenes MGAS5005
83 :     genome 299768.3 15 Streptococcus thermophilus CNRZ1066
84 :     genome 319701.3 15 Streptococcus pyogenes MGAS6180
85 :     genome 93062.4 15 Staphylococcus aureus subsp. aureus COL
86 :     genome 158878.1 15 Staphylococcus aureus subsp. aureus Mu50
87 :     genome 158879.1 15 Staphylococcus aureus subsp. aureus N315
88 :     genome 176279.3 15 Staphylococcus epidermidis RP62A
89 :     genome 176280.1 15 Staphylococcus epidermidis ATCC 12228
90 :     genome 196620.1 15 Staphylococcus aureus subsp. aureus MW2
91 :     genome 282458.1 15 Staphylococcus aureus subsp. aureus MRSA252
92 :     genome 282459.1 15 Staphylococcus aureus subsp. aureus MSSA476
93 : overbeek 1.1 external sp 4
94 : overbeek 1.3 external uni 1.3
95 : overbeek 1.1 external kegg 1
96 : overbeek 1.8 subsystems trusted 20
97 : overbeek 1.1 END
98 :     ;
99 : overbeek 1.10 my @parms = split(/\n/,$x);
100 :     my $fig = new FIG;
101 :     my @trusted_subsystems = map { my $sub = $_; my $curr = $fig->subsystem_curator($sub);
102 :     "$sub\t$curr\n"
103 :     }
104 :     grep { $fig->usable_subsystem($_) }
105 :     $fig->all_subsystems;
106 :     push(@parms,@trusted_subsystems,"//\n");
107 :     return @parms;
108 : overbeek 1.1 }
109 :    
110 : overbeek 1.3
111 : overbeek 1.1 sub choose_best_assignment {
112 : overbeek 1.9 my($fig,$parms,$pegs,$external_ids,$ignore) = @_;
113 : overbeek 1.1 my($peg,$id);
114 :    
115 :     my $functions = {};
116 :     foreach $peg (@$pegs)
117 :     {
118 :     &load_peg_function($fig,$parms,$peg,$functions);
119 :     }
120 : overbeek 1.9 my @tmp = keys(%$functions);
121 :     # print &Dumper(['peg check',\@tmp,$functions]);
122 :    
123 :     if ((@tmp == 1) && (@$pegs >= 5)) { return $tmp[0] }
124 : overbeek 1.1
125 :     foreach $id (@$external_ids)
126 :     {
127 :     &load_ext_function($fig,$parms,$id,$functions);
128 :     }
129 :    
130 :     return &cleanup(&pick_function($fig,$parms,$functions));
131 :     }
132 :    
133 :    
134 :     sub cleanup {
135 :     my($func) = @_;
136 :    
137 :     if (! $func) { return "hypothetical protein" }
138 :     if ($func =~ /^hypothetical (\S+ )?protein .*$/i) { return "hypothetical protein" }
139 :     if ($func =~ /^[a-zA-Z]{1,2}\d{2,5}( protein)?$/i) { return "hypothetical protein" }
140 : overbeek 1.5 if ($func =~ /^similar to ORF\d+$/) { return "hypothetical protein" }
141 :     if ($func =~ /^(Alr|As|All|Tlr|Tll|Glr|Blr|Slr|SEW|pANL)\d+( protein)?$/i) { return "hypothetical protein" }
142 : overbeek 1.6 if ($func =~ /^\d{5}/) { return "hypothetical protein" }
143 : overbeek 1.5 if ($func =~ /unknown protein/) { return "hypothetical protein" }
144 :    
145 : overbeek 1.1 return $func;
146 :     }
147 :    
148 :     sub pick_function {
149 :     my($fig,$parms,$functions) = @_;
150 :     my($set,$score,$best_source,$poss_function);
151 :     my(@scored);
152 :    
153 :     my @partitions = &SameFunc::group_funcs(keys(%$functions));
154 :     if ($ENV{'VERBOSE'}) { print STDERR "partition: ",&Dumper(\@partitions,$functions); }
155 :    
156 :     foreach $set (@partitions)
157 :     {
158 :     $score = &score_set($set,$functions);
159 : overbeek 1.12 if ($ENV{'DEBUG'}) { print STDERR &Dumper([$score,$set]); }
160 : overbeek 1.1
161 : overbeek 1.12 if ($ENV{'DEBUG'}) { print STDERR "picking from set ",&Dumper($set); }
162 : overbeek 1.1 ($poss_function,$best_source) = &pick_specific($fig,$parms,$set,$functions);
163 : overbeek 1.12 if ($ENV{'DEBUG'}) { print STDERR "picked $poss_function from $best_source\n"; }
164 : overbeek 1.1 push(@scored,[$score,$poss_function,$best_source]);
165 :     }
166 :     @scored = sort { $b->[0] <=> $a->[0] } @scored;
167 :    
168 :     if ((@scored > 1) && $ENV{'VERBOSE'})
169 :     {
170 :     foreach $_ (@scored)
171 :     {
172 :     print STDERR join("\t",@$_),"\n";
173 :     }
174 :     print STDERR "//\n";
175 :     }
176 :     return (@scored > 0) ? $scored[0]->[1] : "";
177 :     }
178 :    
179 :     sub score_set {
180 :     my($set,$functions) = @_;
181 :     my($func,$x);
182 :    
183 :     my $score = 0;
184 :     foreach $func (@$set)
185 :     {
186 :     if ($x = $functions->{$func})
187 :     {
188 :     foreach $_ (@$x)
189 :     {
190 :     $score += $_->[0];
191 :     }
192 :     }
193 :     }
194 :     return $score;
195 :     }
196 :    
197 :     sub pick_specific {
198 :     my($fig,$parms,$set,$functions) = @_;
199 :     my($best_func,$best_score,$func,$x,$best_source);
200 :    
201 :     $best_func = "";
202 : overbeek 1.7 $best_score = 0;
203 : overbeek 1.1 $best_source = "";
204 :    
205 :     foreach $func (@$set)
206 :     {
207 :     if ($x = $functions->{$func})
208 :     {
209 :     my $incr = @$x;
210 :     foreach $_ (@$x)
211 :     {
212 : overbeek 1.3 my($sc,$peg,$in_sub) = @$_;
213 :     $sc += $in_sub ? 10000 : 0;
214 :    
215 :     if (((100 * $sc) + $incr) > $best_score)
216 : overbeek 1.1 {
217 : overbeek 1.3 $best_score = (100 * $sc) + $incr;
218 : overbeek 1.1 $best_func = $func;
219 : overbeek 1.3 $best_source = $peg;
220 : overbeek 1.1 }
221 :     }
222 :     }
223 :     }
224 :     if ($ENV{'VERBOSE'}) { print STDERR &Dumper(["picked best source",$set,$functions,$best_func,$best_source]) }
225 :     return ($best_func,$best_source);
226 :     }
227 :    
228 :     sub load_ext_function {
229 :     my($fig,$parms,$id,$functions) = @_;
230 :    
231 :     my $func = $fig->function_of($id);
232 :     if ($func && # (! &FIG::hypo($func)) &&
233 :     ($id =~ /^([A-Za-z]{2,4})\|/) && ($_ = $parms->{'external'}->{$1}))
234 :     {
235 :     push(@{$functions->{$func}},[$_,$id]);
236 :     }
237 :     }
238 :    
239 :     sub load_peg_function {
240 :     my($fig,$parms,$peg,$functions) = @_;
241 :    
242 :     my $func = $fig->function_of($peg);
243 :     if ($func) # (! &FIG::hypo($func))
244 :     {
245 :     my $value = 1;
246 :    
247 :     my $genome = &FIG::genome_of($peg);
248 :     if ($_ = $parms->{'genome'}->{$genome})
249 :     {
250 :     $value += $_;
251 :     }
252 :     my $subv = 0;
253 :     my @subs = $fig->peg_to_subsystems($peg);
254 :     my $sub;
255 : overbeek 1.3 my $in_sub = 0;
256 : overbeek 1.1 foreach $sub (@subs)
257 :     {
258 : overbeek 1.3 if ($_ = $parms->{'subsystems'}->{$sub})
259 : overbeek 1.1 {
260 : overbeek 1.3 if ($_ > $subv)
261 :     {
262 :     $subv = $_;
263 :     }
264 :     $in_sub = 1;
265 : overbeek 1.1 }
266 :     }
267 :     $value += $subv;
268 : overbeek 1.3 push(@{$functions->{$func}},[$value,$peg,$in_sub]);
269 : overbeek 1.1 }
270 :     }
271 :    
272 :     sub equivalent_ids {
273 :     my($fig,$parms,$pegs) = @_;
274 :     my($peg,@aliases,$alias,%external_ids,%pegs,$tuple);
275 :    
276 :     foreach $peg (@$pegs)
277 :     {
278 :     $pegs{$peg} = 1;
279 :     @aliases = $fig->feature_aliases($peg);
280 :     foreach $alias (@aliases)
281 :     {
282 :     if (($alias =~ /^([A-Za-z]{2,4})\|\S+$/) && $parms->{"external"}->{$1})
283 :     {
284 :     $external_ids{$alias} = 1;
285 :     }
286 :     }
287 :     foreach $tuple ($fig->mapped_prot_ids($peg))
288 :     {
289 : overbeek 1.8 if (($tuple->[0] =~ /^fig\|/) && $fig->is_real_feature($tuple->[0]))
290 : overbeek 1.1 {
291 :     $pegs{$tuple->[0]} = 1;
292 :     }
293 :     elsif (($tuple->[0] =~ /^([A-Za-z]{2,4})\|\S+$/) && $parms->{"external"}->{$1})
294 :     {
295 :     $external_ids{$tuple->[0]} = 1;
296 :     }
297 :     }
298 :     }
299 :     return ([sort { &FIG::by_fig_id($a,$b) } keys(%pegs)],[sort keys(%external_ids)]);
300 :     }
301 :    
302 :     sub load_parms {
303 :     my($parmsF) = @_;
304 :     my @parmsS;
305 :    
306 :     my $wts = {};
307 :    
308 :     if ($parmsF)
309 :     {
310 :     @parmsS = `cat $parmsF`;
311 :     }
312 :     else
313 :     {
314 :     @parmsS = &default_parms;
315 :     }
316 :     while ($_ = shift @parmsS)
317 :     {
318 :     chomp;
319 :     my($type,$data,$val) = split(/\t/,$_);
320 :     if ($type eq 'subsystems')
321 :     {
322 :     my $x;
323 :     while (($x = shift @parmsS) && ($x !~ /^\/\//))
324 :     {
325 :     if ($x =~ /^(\S[^\t]+\S)/)
326 :     {
327 :     $wts->{$type}->{$1} = $val;
328 :     }
329 :     }
330 :     }
331 :     else
332 :     {
333 :     $wts->{$type}->{$data} = $val;
334 :     }
335 :     }
336 :     return $wts;
337 :     }
338 :    
339 :     sub print_parms {
340 :     my($parms) = @_;
341 :     my($type,$data,$val,$wt_by_type);
342 :    
343 :     print STDERR "Parameters:\n";
344 :     foreach $type (sort keys(%$parms))
345 :     {
346 :     print STDERR "\n\t$type\n";
347 :     $wt_by_type = $parms->{$type};
348 :     foreach $data (sort keys(%$wt_by_type))
349 :     {
350 :     $val = $wt_by_type->{$data};
351 :     print STDERR "\t\t$data\t$val\n";
352 :     }
353 :     }
354 :     print STDERR "\n";
355 :     }
356 :    
357 :    
358 :     1;

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3