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

Annotation of /FigKernelPackages/Assignments.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.14 - (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 :    
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 : overbeek 1.13 my @subs = ();
254 :     foreach my $sub ($fig->peg_to_subsystems($peg))
255 :     {
256 : overbeek 1.14 if (1) # (&solid_sub_assign($fig,$sub,$peg,$func))
257 : overbeek 1.13 {
258 :     push(@subs,$sub);
259 :     }
260 :     }
261 : overbeek 1.1 my $sub;
262 : overbeek 1.3 my $in_sub = 0;
263 : overbeek 1.1 foreach $sub (@subs)
264 :     {
265 : overbeek 1.3 if ($_ = $parms->{'subsystems'}->{$sub})
266 : overbeek 1.1 {
267 : overbeek 1.3 if ($_ > $subv)
268 :     {
269 :     $subv = $_;
270 :     }
271 :     $in_sub = 1;
272 : overbeek 1.1 }
273 :     }
274 :     $value += $subv;
275 : overbeek 1.3 push(@{$functions->{$func}},[$value,$peg,$in_sub]);
276 : overbeek 1.1 }
277 :     }
278 :    
279 : overbeek 1.13 sub solid_sub_assign {
280 :     my($fig,$sub,$peg,$func) = @_;
281 :    
282 :     my $curator = $fig->subsystem_curator($sub);
283 :     $curator =~ s/^master://;
284 :     return ($fig->usable_subsystem($sub) && &made_by_curator($fig,$peg,$func,$curator));
285 :     }
286 :    
287 :     sub made_by_curator {
288 :     my($fig,$peg,$func,$curator) = @_;
289 :    
290 :     my @ann = $fig->feature_annotations($peg,"rawtime");
291 :     my $i;
292 :     my $funcQ = quotemeta $func;
293 :     for ($i=$#ann;
294 :     ($i >= 0) && (($ann[$i]->[2] !~ /$curator/) || ($ann[$i]->[3] !~ /Set \S+ function to\n$funcQ/s));
295 :     $i--) {}
296 :     return ($i >= 0);
297 :     }
298 :    
299 : overbeek 1.1 sub equivalent_ids {
300 :     my($fig,$parms,$pegs) = @_;
301 :     my($peg,@aliases,$alias,%external_ids,%pegs,$tuple);
302 :    
303 :     foreach $peg (@$pegs)
304 :     {
305 :     $pegs{$peg} = 1;
306 :     @aliases = $fig->feature_aliases($peg);
307 :     foreach $alias (@aliases)
308 :     {
309 :     if (($alias =~ /^([A-Za-z]{2,4})\|\S+$/) && $parms->{"external"}->{$1})
310 :     {
311 :     $external_ids{$alias} = 1;
312 :     }
313 :     }
314 :     foreach $tuple ($fig->mapped_prot_ids($peg))
315 :     {
316 : overbeek 1.8 if (($tuple->[0] =~ /^fig\|/) && $fig->is_real_feature($tuple->[0]))
317 : overbeek 1.1 {
318 :     $pegs{$tuple->[0]} = 1;
319 :     }
320 :     elsif (($tuple->[0] =~ /^([A-Za-z]{2,4})\|\S+$/) && $parms->{"external"}->{$1})
321 :     {
322 :     $external_ids{$tuple->[0]} = 1;
323 :     }
324 :     }
325 :     }
326 :     return ([sort { &FIG::by_fig_id($a,$b) } keys(%pegs)],[sort keys(%external_ids)]);
327 :     }
328 :    
329 :     sub load_parms {
330 :     my($parmsF) = @_;
331 :     my @parmsS;
332 :    
333 :     my $wts = {};
334 :    
335 :     if ($parmsF)
336 :     {
337 :     @parmsS = `cat $parmsF`;
338 :     }
339 :     else
340 :     {
341 :     @parmsS = &default_parms;
342 :     }
343 :     while ($_ = shift @parmsS)
344 :     {
345 :     chomp;
346 :     my($type,$data,$val) = split(/\t/,$_);
347 :     if ($type eq 'subsystems')
348 :     {
349 :     my $x;
350 :     while (($x = shift @parmsS) && ($x !~ /^\/\//))
351 :     {
352 :     if ($x =~ /^(\S[^\t]+\S)/)
353 :     {
354 :     $wts->{$type}->{$1} = $val;
355 :     }
356 :     }
357 :     }
358 :     else
359 :     {
360 :     $wts->{$type}->{$data} = $val;
361 :     }
362 :     }
363 :     return $wts;
364 :     }
365 :    
366 :     sub print_parms {
367 :     my($parms) = @_;
368 :     my($type,$data,$val,$wt_by_type);
369 :    
370 :     print STDERR "Parameters:\n";
371 :     foreach $type (sort keys(%$parms))
372 :     {
373 :     print STDERR "\n\t$type\n";
374 :     $wt_by_type = $parms->{$type};
375 :     foreach $data (sort keys(%$wt_by_type))
376 :     {
377 :     $val = $wt_by_type->{$data};
378 :     print STDERR "\t\t$data\t$val\n";
379 :     }
380 :     }
381 :     print STDERR "\n";
382 :     }
383 :    
384 :    
385 :     1;

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3