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

Annotation of /FigKernelPackages/Assignments.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.16 - (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 : overbeek 1.13 print STDERR &Dumper(['peg check',\@tmp,$functions]) if ($ENV{'DEBUG'} || $ENV{'VERBOSE'});
122 : overbeek 1.9
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 :     my @partitions = &SameFunc::group_funcs(keys(%$functions));
153 :     if ($ENV{'VERBOSE'}) { print STDERR "partition: ",&Dumper(\@partitions,$functions); }
154 :    
155 :     foreach $set (@partitions)
156 :     {
157 :     $score = &score_set($set,$functions);
158 : overbeek 1.12 if ($ENV{'DEBUG'}) { print STDERR &Dumper([$score,$set]); }
159 : overbeek 1.1
160 : overbeek 1.12 if ($ENV{'DEBUG'}) { print STDERR "picking from set ",&Dumper($set); }
161 : overbeek 1.1 ($poss_function,$best_source) = &pick_specific($fig,$parms,$set,$functions);
162 : overbeek 1.12 if ($ENV{'DEBUG'}) { print STDERR "picked $poss_function from $best_source\n"; }
163 : overbeek 1.1 push(@scored,[$score,$poss_function,$best_source]);
164 :     }
165 :     @scored = sort { $b->[0] <=> $a->[0] } @scored;
166 :    
167 :     if ((@scored > 1) && $ENV{'VERBOSE'})
168 :     {
169 :     foreach $_ (@scored)
170 :     {
171 :     print STDERR join("\t",@$_),"\n";
172 :     }
173 :     print STDERR "//\n";
174 :     }
175 :     return (@scored > 0) ? $scored[0]->[1] : "";
176 :     }
177 :    
178 :     sub score_set {
179 :     my($set,$functions) = @_;
180 :     my($func,$x);
181 :    
182 :     my $score = 0;
183 :     foreach $func (@$set)
184 :     {
185 :     if ($x = $functions->{$func})
186 :     {
187 :     foreach $_ (@$x)
188 :     {
189 :     $score += $_->[0];
190 :     }
191 :     }
192 :     }
193 :     return $score;
194 :     }
195 :    
196 :     sub pick_specific {
197 :     my($fig,$parms,$set,$functions) = @_;
198 :     my($best_func,$best_score,$func,$x,$best_source);
199 :    
200 :     $best_func = "";
201 : overbeek 1.7 $best_score = 0;
202 : overbeek 1.1 $best_source = "";
203 :    
204 :     foreach $func (@$set)
205 :     {
206 :     if ($x = $functions->{$func})
207 :     {
208 :     my $incr = @$x;
209 :     foreach $_ (@$x)
210 :     {
211 : overbeek 1.3 my($sc,$peg,$in_sub) = @$_;
212 :     $sc += $in_sub ? 10000 : 0;
213 :    
214 :     if (((100 * $sc) + $incr) > $best_score)
215 : overbeek 1.1 {
216 : overbeek 1.3 $best_score = (100 * $sc) + $incr;
217 : overbeek 1.1 $best_func = $func;
218 : overbeek 1.3 $best_source = $peg;
219 : overbeek 1.1 }
220 :     }
221 :     }
222 :     }
223 :     if ($ENV{'VERBOSE'}) { print STDERR &Dumper(["picked best source",$set,$functions,$best_func,$best_source]) }
224 :     return ($best_func,$best_source);
225 :     }
226 :    
227 :     sub load_ext_function {
228 :     my($fig,$parms,$id,$functions) = @_;
229 :    
230 :     my $func = $fig->function_of($id);
231 :     if ($func && # (! &FIG::hypo($func)) &&
232 :     ($id =~ /^([A-Za-z]{2,4})\|/) && ($_ = $parms->{'external'}->{$1}))
233 :     {
234 :     push(@{$functions->{$func}},[$_,$id]);
235 :     }
236 :     }
237 :    
238 :     sub load_peg_function {
239 :     my($fig,$parms,$peg,$functions) = @_;
240 :    
241 :     my $func = $fig->function_of($peg);
242 :     if ($func) # (! &FIG::hypo($func))
243 :     {
244 :     my $value = 1;
245 :    
246 :     my $genome = &FIG::genome_of($peg);
247 :     if ($_ = $parms->{'genome'}->{$genome})
248 :     {
249 :     $value += $_;
250 :     }
251 :     my $subv = 0;
252 : overbeek 1.13 my @subs = ();
253 :     foreach my $sub ($fig->peg_to_subsystems($peg))
254 :     {
255 : overbeek 1.14 if (1) # (&solid_sub_assign($fig,$sub,$peg,$func))
256 : overbeek 1.13 {
257 :     push(@subs,$sub);
258 :     }
259 :     }
260 : overbeek 1.1 my $sub;
261 : overbeek 1.3 my $in_sub = 0;
262 : overbeek 1.1 foreach $sub (@subs)
263 :     {
264 : overbeek 1.3 if ($_ = $parms->{'subsystems'}->{$sub})
265 : overbeek 1.1 {
266 : overbeek 1.3 if ($_ > $subv)
267 :     {
268 :     $subv = $_;
269 :     }
270 :     $in_sub = 1;
271 : overbeek 1.1 }
272 :     }
273 :     $value += $subv;
274 : overbeek 1.3 push(@{$functions->{$func}},[$value,$peg,$in_sub]);
275 : overbeek 1.1 }
276 :     }
277 :    
278 : overbeek 1.13 sub solid_sub_assign {
279 :     my($fig,$sub,$peg,$func) = @_;
280 :    
281 :     my $curator = $fig->subsystem_curator($sub);
282 :     $curator =~ s/^master://;
283 :     return ($fig->usable_subsystem($sub) && &made_by_curator($fig,$peg,$func,$curator));
284 :     }
285 :    
286 :     sub made_by_curator {
287 :     my($fig,$peg,$func,$curator) = @_;
288 :    
289 :     my @ann = $fig->feature_annotations($peg,"rawtime");
290 :     my $i;
291 :     my $funcQ = quotemeta $func;
292 :     for ($i=$#ann;
293 :     ($i >= 0) && (($ann[$i]->[2] !~ /$curator/) || ($ann[$i]->[3] !~ /Set \S+ function to\n$funcQ/s));
294 :     $i--) {}
295 :     return ($i >= 0);
296 :     }
297 :    
298 : overbeek 1.1 sub equivalent_ids {
299 :     my($fig,$parms,$pegs) = @_;
300 :     my($peg,@aliases,$alias,%external_ids,%pegs,$tuple);
301 :    
302 :     foreach $peg (@$pegs)
303 :     {
304 :     $pegs{$peg} = 1;
305 :     @aliases = $fig->feature_aliases($peg);
306 :     foreach $alias (@aliases)
307 :     {
308 :     if (($alias =~ /^([A-Za-z]{2,4})\|\S+$/) && $parms->{"external"}->{$1})
309 :     {
310 :     $external_ids{$alias} = 1;
311 :     }
312 :     }
313 :     foreach $tuple ($fig->mapped_prot_ids($peg))
314 :     {
315 : overbeek 1.8 if (($tuple->[0] =~ /^fig\|/) && $fig->is_real_feature($tuple->[0]))
316 : overbeek 1.1 {
317 :     $pegs{$tuple->[0]} = 1;
318 :     }
319 :     elsif (($tuple->[0] =~ /^([A-Za-z]{2,4})\|\S+$/) && $parms->{"external"}->{$1})
320 :     {
321 :     $external_ids{$tuple->[0]} = 1;
322 :     }
323 :     }
324 :     }
325 :     return ([sort { &FIG::by_fig_id($a,$b) } keys(%pegs)],[sort keys(%external_ids)]);
326 :     }
327 :    
328 :     sub load_parms {
329 :     my($parmsF) = @_;
330 :     my @parmsS;
331 :    
332 :     my $wts = {};
333 :    
334 :     if ($parmsF)
335 :     {
336 :     @parmsS = `cat $parmsF`;
337 :     }
338 :     else
339 :     {
340 :     @parmsS = &default_parms;
341 :     }
342 :     while ($_ = shift @parmsS)
343 :     {
344 :     chomp;
345 :     my($type,$data,$val) = split(/\t/,$_);
346 :     if ($type eq 'subsystems')
347 :     {
348 :     my $x;
349 :     while (($x = shift @parmsS) && ($x !~ /^\/\//))
350 :     {
351 :     if ($x =~ /^(\S[^\t]+\S)/)
352 :     {
353 :     $wts->{$type}->{$1} = $val;
354 :     }
355 :     }
356 :     }
357 :     else
358 :     {
359 :     $wts->{$type}->{$data} = $val;
360 :     }
361 :     }
362 :     return $wts;
363 :     }
364 :    
365 :     sub print_parms {
366 :     my($parms) = @_;
367 :     my($type,$data,$val,$wt_by_type);
368 :    
369 :     print STDERR "Parameters:\n";
370 :     foreach $type (sort keys(%$parms))
371 :     {
372 :     print STDERR "\n\t$type\n";
373 :     $wt_by_type = $parms->{$type};
374 :     foreach $data (sort keys(%$wt_by_type))
375 :     {
376 :     $val = $wt_by_type->{$data};
377 :     print STDERR "\t\t$data\t$val\n";
378 :     }
379 :     }
380 :     print STDERR "\n";
381 :     }
382 :    
383 :    
384 :     1;

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3