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

Annotation of /FigKernelPackages/Assignments.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.11 - (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.11 genome 198214.1 5 Shigella flexneri 2a str. 301
29 :     genome 198215.1 5 Shigella flexneri 2a str. 2457T
30 :     genome 216598.1 5 Shigella dysenteriae M131649
31 :     genome 216599.1 5 Shigella sonnei 53G
32 :     genome 630.2 5 Yersinia enterocolitica 8081
33 :     genome 633.2 5 Yersinia pseudotuberculosis (Livermore)
34 :     genome 187410.1 5 Yersinia pestis KIM
35 :     genome 214092.1 5 Yersinia pestis CO92
36 :     genome 229193.1 5 Yersinia pestis biovar Medievalis str. 91001
37 :     genome 273123.1 5 Yersinia pseudotuberculosis IP 32953
38 :     genome 594.1 5 Salmonella enterica subsp. enterica serovar Gallinarum
39 :     genome 99287.1 5 Salmonella typhimurium LT2
40 :     genome 119912.1 5 Salmonella enterica serovar Choleraesuis SC-B67
41 :     genome 209261.1 5 Salmonella enterica subsp. enterica serovar Typhi Ty2
42 :     genome 220341.1 5 Salmonella enterica subsp. enterica serovar Typhi str. CT18
43 :     genome 83333.1 5 Escherichia coli K12
44 :     genome 83334.1 5 Escherichia coli O157:H7
45 :     genome 155864.1 5 Escherichia coli O157:H7 EDL933
46 :     genome 199310.1 5 Escherichia coli CFT073
47 :     genome 216592.1 5 Escherichia coli 042
48 :     genome 216593.1 5 Escherichia coli E2348/69
49 :     genome 192222.1 5 Campylobacter jejuni subsp. jejuni NCTC 11168
50 :     genome 224308.1 5 Bacillus subtilis subsp. subtilis str. 168
51 :     genome 196600.1 5 Vibrio vulnificus YJ016
52 :     genome 216895.1 5 Vibrio vulnificus CMCP6
53 :     genome 223926.1 5 Vibrio parahaemolyticus RIMD 2210633
54 :     genome 243277.1 5 Vibrio cholerae O1 biovar eltor str. N16961
55 :     genome 312309.3 5 Vibrio fischeri ES114
56 :     genome 314290.3 5 Vibrio sp. MED222
57 :     genome 314291.3 5 Vibrio splendidus 12B01
58 :     genome 192222.1 5 Campylobacter jejuni subsp. jejuni NCTC 11168
59 :     genome 195099.3 5 Campylobacter jejuni RM1221
60 :     genome 306254.1 5 Campylobacter coli RM2228
61 :     genome 306263.1 5 Campylobacter lari RM2100
62 :     genome 306264.1 5 Campylobacter upsaliensis RM3195
63 :     genome 169963.1 5 Listeria monocytogenes EGD-e
64 :     genome 265669.1 5 Listeria monocytogenes str. 4b F2365
65 :     genome 267409.1 5 Listeria monocytogenes str. 1/2a F6854
66 :     genome 267410.1 5 Listeria monocytogenes str. 4b H7858
67 :     genome 272626.1 5 Listeria innocua Clip11262
68 :     genome 1314.1 5 Streptococcus pyogenes M5
69 :     genome 160490.1 5 Streptococcus pyogenes M1 GAS
70 :     genome 170187.1 5 Streptococcus pneumoniae TIGR4
71 :     genome 171101.1 5 Streptococcus pneumoniae R6
72 :     genome 186103.1 5 Streptococcus pyogenes MGAS8232
73 :     genome 193567.1 5 Streptococcus pyogenes SSI-1
74 :     genome 198466.1 5 Streptococcus pyogenes MGAS315
75 :     genome 205921.3 5 Streptococcus agalactiae A909
76 :     genome 208435.1 5 Streptococcus agalactiae 2603V/R
77 :     genome 210007.1 5 Streptococcus mutans UA159
78 :     genome 211110.1 5 Streptococcus agalactiae NEM316
79 :     genome 246201.1 5 Streptococcus mitis NCTC 12261
80 :     genome 264199.3 5 Streptococcus thermophilus LMG 18311
81 :     genome 286636.1 5 Streptococcus pyogenes MGAS10394
82 :     genome 293653.3 5 Streptococcus pyogenes MGAS5005
83 :     genome 299768.3 5 Streptococcus thermophilus CNRZ1066
84 :     genome 319701.3 5 Streptococcus pyogenes MGAS6180
85 :     genome 93062.4 5 Staphylococcus aureus subsp. aureus COL
86 :     genome 158878.1 5 Staphylococcus aureus subsp. aureus Mu50
87 :     genome 158879.1 5 Staphylococcus aureus subsp. aureus N315
88 :     genome 176279.3 5 Staphylococcus epidermidis RP62A
89 :     genome 176280.1 5 Staphylococcus epidermidis ATCC 12228
90 :     genome 196620.1 5 Staphylococcus aureus subsp. aureus MW2
91 :     genome 282458.1 5 Staphylococcus aureus subsp. aureus MRSA252
92 :     genome 282459.1 5 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 :     # print STDERR &Dumper([$score,$set]);
160 :    
161 :     # print STDERR "picking from set ",&Dumper($set);
162 :     ($poss_function,$best_source) = &pick_specific($fig,$parms,$set,$functions);
163 : overbeek 1.7 # 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 :    
253 :     my $subv = 0;
254 :     my @subs = $fig->peg_to_subsystems($peg);
255 :     my $sub;
256 : overbeek 1.3 my $in_sub = 0;
257 : overbeek 1.1 foreach $sub (@subs)
258 :     {
259 : overbeek 1.3 if ($_ = $parms->{'subsystems'}->{$sub})
260 : overbeek 1.1 {
261 : overbeek 1.3 if ($_ > $subv)
262 :     {
263 :     $subv = $_;
264 :     }
265 :     $in_sub = 1;
266 : overbeek 1.1 }
267 :     }
268 :     $value += $subv;
269 : overbeek 1.3 push(@{$functions->{$func}},[$value,$peg,$in_sub]);
270 : overbeek 1.1 }
271 :     }
272 :    
273 :     sub equivalent_ids {
274 :     my($fig,$parms,$pegs) = @_;
275 :     my($peg,@aliases,$alias,%external_ids,%pegs,$tuple);
276 :    
277 :     foreach $peg (@$pegs)
278 :     {
279 :     $pegs{$peg} = 1;
280 :     @aliases = $fig->feature_aliases($peg);
281 :     foreach $alias (@aliases)
282 :     {
283 :     if (($alias =~ /^([A-Za-z]{2,4})\|\S+$/) && $parms->{"external"}->{$1})
284 :     {
285 :     $external_ids{$alias} = 1;
286 :     }
287 :     }
288 :     foreach $tuple ($fig->mapped_prot_ids($peg))
289 :     {
290 : overbeek 1.8 if (($tuple->[0] =~ /^fig\|/) && $fig->is_real_feature($tuple->[0]))
291 : overbeek 1.1 {
292 :     $pegs{$tuple->[0]} = 1;
293 :     }
294 :     elsif (($tuple->[0] =~ /^([A-Za-z]{2,4})\|\S+$/) && $parms->{"external"}->{$1})
295 :     {
296 :     $external_ids{$tuple->[0]} = 1;
297 :     }
298 :     }
299 :     }
300 :     return ([sort { &FIG::by_fig_id($a,$b) } keys(%pegs)],[sort keys(%external_ids)]);
301 :     }
302 :    
303 :     sub load_parms {
304 :     my($parmsF) = @_;
305 :     my @parmsS;
306 :    
307 :     my $wts = {};
308 :    
309 :     if ($parmsF)
310 :     {
311 :     @parmsS = `cat $parmsF`;
312 :     }
313 :     else
314 :     {
315 :     @parmsS = &default_parms;
316 :     }
317 :     while ($_ = shift @parmsS)
318 :     {
319 :     chomp;
320 :     my($type,$data,$val) = split(/\t/,$_);
321 :     if ($type eq 'subsystems')
322 :     {
323 :     my $x;
324 :     while (($x = shift @parmsS) && ($x !~ /^\/\//))
325 :     {
326 :     if ($x =~ /^(\S[^\t]+\S)/)
327 :     {
328 :     $wts->{$type}->{$1} = $val;
329 :     }
330 :     }
331 :     }
332 :     else
333 :     {
334 :     $wts->{$type}->{$data} = $val;
335 :     }
336 :     }
337 :     return $wts;
338 :     }
339 :    
340 :     sub print_parms {
341 :     my($parms) = @_;
342 :     my($type,$data,$val,$wt_by_type);
343 :    
344 :     print STDERR "Parameters:\n";
345 :     foreach $type (sort keys(%$parms))
346 :     {
347 :     print STDERR "\n\t$type\n";
348 :     $wt_by_type = $parms->{$type};
349 :     foreach $data (sort keys(%$wt_by_type))
350 :     {
351 :     $val = $wt_by_type->{$data};
352 :     print STDERR "\t\t$data\t$val\n";
353 :     }
354 :     }
355 :     print STDERR "\n";
356 :     }
357 :    
358 :    
359 :     1;

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3