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

Annotation of /FigKernelPackages/FIGO.pm

Parent Directory Parent Directory | Revision Log Revision Log


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

1 : gdpusch 1.33 # -*- perl -*-
2 : overbeek 1.9 ########################################################################
3 : overbeek 1.1 #
4 :     # Copyright (c) 2003-2006 University of Chicago and Fellowship
5 :     # for Interpretations of Genomes. All Rights Reserved.
6 :     #
7 :     # This file is part of the SEED Toolkit.
8 :     #
9 :     # The SEED Toolkit is free software. You can redistribute
10 :     # it and/or modify it under the terms of the SEED Toolkit
11 :     # Public License.
12 :     #
13 :     # You should have received a copy of the SEED Toolkit Public License
14 :     # along with this program; if not write to the University of Chicago
15 :     # at info@ci.uchicago.edu or the Fellowship for Interpretation of
16 :     # Genomes at veronika@thefig.info or download a copy from
17 :     # http://www.theseed.org/LICENSE.TXT.
18 :     #
19 : overbeek 1.9 ########################################################################
20 :    
21 : gdpusch 1.30 =head1 TODO
22 :    
23 :     =over 4
24 :    
25 :     =item Null arg to ContigO::dna_seq() should return entire contig seq.
26 :    
27 :     =item Add method to access "FIG::crude_estimate_of_distance()"
28 :    
29 :     =back
30 :    
31 :     =cut
32 :    
33 : overbeek 1.9 =head1 Overview
34 :    
35 :     This module is a set of packages encapsulating the SEED's core methods
36 : parrello 1.32 using an "OOP-like" style.
37 : overbeek 1.9
38 :     There are several modules clearly related to "individual genomes:"
39 : gdpusch 1.30 GenomeO, ContigO, FeatureO (and I<maybe> AnnotationO).
40 : overbeek 1.9
41 :     There are also modules that deal with complex relationships between
42 :     pairs or sets of features in one, two, or more genomes,
43 :     rather than any particular single genome:
44 :     BBHO, CouplingO, SubsystemO, FunctionalRoleO, FigFamO.
45 :    
46 :     Finally, the methods in "Attribute" might in principle attach
47 : gdpusch 1.30 "atributes" to any type of object.
48 :     (Likewise, in principle one might also want to attach an "annotation"
49 :     to any type of object,
50 :     although currently we only support annotations of "features.")
51 : overbeek 1.9
52 : gdpusch 1.30 The three modules that act on "individual genomes" have a reasonable clear
53 :     "implied heirarchy" relative to FIGO:
54 : overbeek 1.9
55 :     =over 4
56 :    
57 :     FIGO > GenomeO > ContigO > FeatureO
58 :    
59 :     =back
60 : overbeek 1.1
61 : overbeek 1.9 However, inheritance is B<NOT> implemented using the C<@ISA> mechanism,
62 :     because some methods deal with "pairwise" or "setwise" relations between objects
63 :     or other more complex relationships that do not naturally fit into any heirarchy ---
64 :     which would get us into the whole quagmire of "multiple inheritance."
65 :    
66 : overbeek 1.13 We have chosen to in many cases sidestep the entire issue of inheritance
67 :     via an I<ad hoc> mechanism:
68 : overbeek 1.9 If a "child" object needs access to its "ancestors'" methods,
69 : gdpusch 1.24 we will explicitly pass it references to its "ancestors,"
70 :     as subroutine arguments.
71 : overbeek 1.9 This is admittedly ugly, clumsy, and potentially error-prone ---
72 : parrello 1.32 but it has the advantage that, unlike multiple inheritance,
73 : overbeek 1.9 we understand how to do it...
74 :    
75 :     MODULE DEPENDENCIES: FIG, FIG_Config, FigFams, SFXlate, SproutFIG, Tracer,
76 :     gjoparseblast, Data::Dumper.
77 :    
78 :     =cut
79 :    
80 :     ########################################################################
81 : overbeek 1.1 package FIGO;
82 : overbeek 1.9 ########################################################################
83 : overbeek 1.1 use strict;
84 :     use FIG;
85 : gdpusch 1.33 use FIGV;
86 : overbeek 1.1 use FIG_Config;
87 :     use SFXlate;
88 :     use SproutFIG;
89 :     use Tracer;
90 :     use Data::Dumper;
91 : overbeek 1.23 use Carp;
92 : overbeek 1.1 use FigFams;
93 : overbeek 1.3 use gjoparseblast;
94 : overbeek 1.1
95 : overbeek 1.9 =head1 FIGO
96 :    
97 :     The effective "base class" containing a few "top-level" methods.
98 :    
99 :     =cut
100 :    
101 : overbeek 1.4
102 :     =head3 new
103 :    
104 :     Constructs a new FIGO object.
105 :    
106 : parrello 1.32 =over 4
107 : overbeek 1.4
108 : parrello 1.32 =item USAGE:
109 : overbeek 1.4
110 : gdpusch 1.33 my $figO = FIGO->new(); #...Subclass defaults to FIG
111 : overbeek 1.4
112 : gdpusch 1.33 my $figO = FIGO->new('SPROUT'); #...Subclass is a SPROUT object
113 :    
114 :     my $figO = FIGO->new($orgdir); #...Subclass includes $orgdir as a "Virtual" SEED genome
115 :    
116 :     my $figO = FIGO->new($orgdir, 'SPROUT'); #...Subclass includes $orgdir as a "Virtual" SPROUT genome
117 : overbeek 1.4
118 :     =back
119 :    
120 :     =cut
121 :    
122 : overbeek 1.1 sub new {
123 : gdpusch 1.33 my ($class, @argv) = @_;
124 :    
125 : overbeek 1.1 my $fig;
126 : gdpusch 1.33 if (@argv) {
127 : gdpusch 1.34 print STDERR ("New FIGO using FIGV( ",
128 :     join(qq(, ), @argv),
129 :     " )\n",
130 :     ) if $ENV{FIG_DEBUG};
131 :    
132 :     $fig = FIGV->new(@argv);
133 : overbeek 1.1 }
134 : gdpusch 1.33 else {
135 : gdpusch 1.34 print STDERR "FIGO using FIG with installed SEED orgs\n" if $ENV{FIG_DEBUG};
136 : gdpusch 1.33 $fig = FIG->new();
137 : overbeek 1.1 }
138 : gdpusch 1.33
139 : overbeek 1.1 my $self = {};
140 :     $self->{_fig} = $fig;
141 : overbeek 1.3 $self->{_tmp_dir} = $FIG_Config::temp;
142 : overbeek 1.1 return bless $self, $class;
143 :     }
144 :    
145 : overbeek 1.21 sub function_of {
146 :     my($self,$id) = @_;
147 : overbeek 1.4
148 : overbeek 1.21 my $fig = $self->{_fig};
149 :     my $func = $fig->function_of($id);
150 : parrello 1.32
151 : overbeek 1.21 return ($func ? $func : "");
152 :     }
153 : overbeek 1.4
154 :     =head3 genomes
155 :    
156 :     Returns a list of Taxonomy-IDs, possibly constrained by selection criteria.
157 :     (Default: Empty constraint returns all Tax-IDs in the SEED or SPROUT.)
158 :    
159 : overbeek 1.9 =over 4
160 : overbeek 1.4
161 :     =item USAGE:
162 :    
163 : parrello 1.32 my @tax_ids = $figo->genomes();
164 : overbeek 1.4
165 : parrello 1.32 my @tax_ids = $figo->genomes( @constraints );
166 : overbeek 1.4
167 :     =item @constraints
168 : overbeek 1.9
169 : gdpusch 1.30 One or more element of: complete, prokaryotic, eukaryotic, bacterial, archaeal, nmpdr.
170 : overbeek 1.4
171 :     =item RETURNS: List of Tax-IDs.
172 :    
173 : overbeek 1.9 =item EXAMPLE:
174 :    
175 : overbeek 1.13 L<Display all complete, prokaryotic genomes>
176 : overbeek 1.4
177 :     =back
178 :    
179 :     =cut
180 :    
181 : overbeek 1.1 sub genomes {
182 :     my($self,@constraints) = @_;
183 :     my $fig = $self->{_fig};
184 :    
185 :     my %constraints = map { $_ => 1 } @constraints;
186 :     my @genomes = ();
187 :    
188 :     if ($constraints{complete})
189 :     {
190 :     @genomes = $fig->genomes('complete');
191 :     }
192 :     else
193 :     {
194 :     @genomes = $fig->genomes;
195 :     }
196 :    
197 :     if ($constraints{prokaryotic})
198 :     {
199 :     @genomes = grep { $fig->is_prokaryotic($_) } @genomes;
200 :     }
201 : parrello 1.32
202 : overbeek 1.1 if ($constraints{eukaryotic})
203 :     {
204 :     @genomes = grep { $fig->is_eukaryotic($_) } @genomes;
205 :     }
206 : parrello 1.32
207 : overbeek 1.1 if ($constraints{bacterial})
208 :     {
209 :     @genomes = grep { $fig->is_bacterial($_) } @genomes;
210 :     }
211 : parrello 1.32
212 : overbeek 1.1 if ($constraints{archaeal})
213 :     {
214 :     @genomes = grep { $fig->is_archaeal($_) } @genomes;
215 :     }
216 : parrello 1.32
217 : overbeek 1.1 if ($constraints{nmpdr})
218 :     {
219 :     @genomes = grep { $fig->is_NMPDR_genome($_) } @genomes;
220 :     }
221 : parrello 1.32
222 : overbeek 1.1 return map { &GenomeO::new('GenomeO',$self,$_) } @genomes;
223 :     }
224 :    
225 : overbeek 1.4
226 :    
227 :     =head3 subsystems
228 :    
229 : overbeek 1.9 =over 4
230 : overbeek 1.4
231 :     =item RETURNS:
232 :    
233 : gdpusch 1.30 List of all subsystems.
234 : overbeek 1.9
235 :     =item EXAMPLE:
236 :    
237 : overbeek 1.13 L<Accessing Subsystem data>
238 : overbeek 1.4
239 :     =back
240 :    
241 :     =cut
242 :    
243 : overbeek 1.1 sub subsystems {
244 :     my($self) = @_;
245 :     my $fig = $self->{_fig};
246 :    
247 :     return map { &SubsystemO::new('SubsystemO',$self,$_) } $fig->all_subsystems;
248 :     }
249 :    
250 : overbeek 1.4
251 :     =head3 functional_roles
252 :    
253 :     (Not yet implemented)
254 :    
255 : parrello 1.32 =over
256 : overbeek 1.4
257 :     =item RETURNS:
258 :    
259 :     =item EXAMPLE:
260 :    
261 :     =back
262 :    
263 :     =cut
264 :    
265 : overbeek 1.1 sub functional_roles {
266 :     my($self) = @_;
267 :     my $fig = $self->{_fig};
268 :    
269 :     my @functional_roles = ();
270 : parrello 1.32
271 : overbeek 1.1 return @functional_roles;
272 :     }
273 :    
274 : overbeek 1.4
275 :    
276 :     =head3 all_figfams
277 :    
278 :     Returns a list of all FIGfam objects.
279 :    
280 : overbeek 1.9 =over 4
281 :    
282 :     =item USAGE:
283 :    
284 : parrello 1.32 foreach $fam ($figO->all_figfams) { #...Do something }
285 : overbeek 1.9
286 :     =item RETURNS:
287 : overbeek 1.4
288 : gdpusch 1.30 List of FIGfam Objects
289 : overbeek 1.4
290 : overbeek 1.9 =item EXAMPLE:
291 : overbeek 1.4
292 : overbeek 1.13 L<Accessing FIGfams>
293 : overbeek 1.4
294 :     =back
295 :    
296 :     =cut
297 :    
298 : overbeek 1.1 sub all_figfams {
299 :     my($self) = @_;
300 :     my $fig = $self->{_fig};
301 : gdpusch 1.33 my $fams = FigFams->new($fig);
302 : overbeek 1.1 return map { &FigFamO::new('FigFamO',$self,$_) } $fams->all_families;
303 :     }
304 :    
305 : overbeek 1.4
306 :    
307 :     =head3 family_containing
308 :    
309 : overbeek 1.9 =over 4
310 : overbeek 1.4
311 : overbeek 1.9 =item USAGE:
312 : overbeek 1.4
313 : parrello 1.32 my ($fam, $sims) = $figO->family_containing($seq);
314 : overbeek 1.4
315 : overbeek 1.9 =item $seq:
316 :    
317 : gdpusch 1.30 A protein translation string.
318 : overbeek 1.9
319 :     =item RETURNS:
320 :    
321 : gdpusch 1.30 $fam: A FIGfam Object.
322 : overbeek 1.9
323 : gdpusch 1.30 $sims: A set of similarity objects.
324 : overbeek 1.4
325 :     =item EXAMPLE: L<Placing a sequence into a FIGfam>
326 :    
327 :     =back
328 :    
329 :     =cut
330 :    
331 : overbeek 1.1 sub family_containing {
332 :     my($self,$seq) = @_;
333 :    
334 :     my $fig = $self->{_fig};
335 : gdpusch 1.33 my $fams = FigFams->new($fig);
336 : overbeek 1.1 my($fam,$sims) = $fams->place_in_family($seq);
337 :     if ($fam)
338 :     {
339 :     return (&FigFamO::new('FigFamO',$self,$fam->family_id),$sims);
340 :     }
341 :     else
342 :     {
343 :     return undef;
344 :     }
345 :     }
346 :    
347 : overbeek 1.17 =head3 figfam
348 :    
349 :     =over 4
350 :    
351 :     =item USAGE:
352 :    
353 : parrello 1.32 my $fam = $figO->figfam($family_id);
354 : overbeek 1.17
355 :     =item $family_id;
356 :    
357 : gdpusch 1.30 A FigFam ID
358 : overbeek 1.17
359 :     =item RETURNS:
360 :    
361 : gdpusch 1.30 $fam: A FIGfam Object.
362 : overbeek 1.17
363 :     =back
364 :    
365 :     =cut
366 :    
367 :     sub figfam {
368 :     my($self,$fam_id) = @_;
369 :    
370 :     return &FigFamO::new('FigFamO',$self,$fam_id);
371 :     }
372 : parrello 1.32
373 : overbeek 1.4
374 :     ########################################################################
375 : overbeek 1.1 package GenomeO;
376 : overbeek 1.4 ########################################################################
377 : gdpusch 1.34 use Carp;
378 : overbeek 1.4 use Data::Dumper;
379 :    
380 :     =head1 GenomeO
381 :    
382 :     =cut
383 :    
384 : overbeek 1.13
385 : overbeek 1.4 =head3 new
386 :    
387 :     Constructor of GenomeO objects.
388 : overbeek 1.1
389 : overbeek 1.9 =over 4
390 : gdpusch 1.24
391 : overbeek 1.4 =item USAGE:
392 :    
393 : parrello 1.32 my $orgO = GenomeO->new($figO, $tax_id);
394 : overbeek 1.9
395 :     =item RETURNS:
396 :    
397 : gdpusch 1.30 A new "GenomeO" object.
398 : overbeek 1.4
399 :     =back
400 :    
401 :     =cut
402 : overbeek 1.1
403 :     sub new {
404 :     my($class,$figO,$genomeId) = @_;
405 :    
406 :     my $self = {};
407 :     $self->{_figO} = $figO;
408 :     $self->{_id} = $genomeId;
409 :     return bless $self, $class;
410 : parrello 1.32 }
411 : overbeek 1.1
412 : overbeek 1.4
413 :    
414 :     =head3 id
415 :    
416 : overbeek 1.9 =over 4
417 :    
418 :     =item USAGE:
419 : overbeek 1.4
420 : parrello 1.32 my $tax_id = $orgO->id();
421 : overbeek 1.9
422 :     =item RETURNS:
423 : overbeek 1.4
424 : gdpusch 1.30 Taxonomy-ID of "GenomeO" object.
425 : overbeek 1.4
426 :     =back
427 :    
428 :     =cut
429 :    
430 : overbeek 1.1 sub id {
431 :     my($self) = @_;
432 :    
433 :     return $self->{_id};
434 :     }
435 :    
436 : overbeek 1.4
437 :    
438 :     =head3 genus_species
439 :    
440 : overbeek 1.9 =over 4
441 : overbeek 1.4
442 : overbeek 1.9 =item USAGE:
443 :    
444 : parrello 1.32 $gs = $orgO->genus_species();
445 : overbeek 1.9
446 :     =item RETURNS:
447 : overbeek 1.4
448 : gdpusch 1.30 Genus-species-strain string
449 : overbeek 1.4
450 :     =back
451 :    
452 :     =cut
453 :    
454 : overbeek 1.1 sub genus_species {
455 :     my($self) = @_;
456 : gdpusch 1.34
457 : overbeek 1.1 my $fig = $self->{_figO}->{_fig};
458 : gdpusch 1.34 if (defined($fig)) {
459 :     return $fig->genus_species($self->{_id});
460 :     }
461 :     else {
462 :     confess "Undefined FIG or FIGV\n", Dumper($self);
463 :     }
464 : overbeek 1.1 }
465 :    
466 : overbeek 1.4
467 : gdpusch 1.25
468 :     =head3 taxonomy_of
469 :    
470 : gdpusch 1.26 =over 4
471 :    
472 :     =item FUNCTION:
473 :    
474 :     Return the TAXONOMY string of a "GenomeO" object.
475 :    
476 :     =item USAGE:
477 :    
478 : parrello 1.32 my $taxonomy = $orgO->taxonomy_of();
479 : gdpusch 1.26
480 :     =item RETURNS:
481 :    
482 :     TAXONOMY string.
483 :    
484 :     =back
485 :    
486 : gdpusch 1.25 =cut
487 :    
488 :     sub taxonomy_of {
489 :     my ($self) = @_;
490 : parrello 1.32
491 : gdpusch 1.25 my $figO = $self->{_figO};
492 :     my $fig = $figO->{_fig};
493 : parrello 1.32
494 : gdpusch 1.26 return $fig->taxonomy_of($self->{_id});
495 : gdpusch 1.25 }
496 :    
497 :    
498 : overbeek 1.4 =head3 contigs_of
499 :    
500 : overbeek 1.9 =over 4
501 :    
502 :     =item RETURNS:
503 :    
504 : gdpusch 1.24 List of C<contig> objects contained in a C<GenomeO> object.
505 : overbeek 1.4
506 : overbeek 1.9 =item EXAMPLE:
507 : overbeek 1.4
508 : overbeek 1.13 L<Show how to access contigs and extract sequence>
509 : overbeek 1.4
510 :     =back
511 :    
512 :     =cut
513 :    
514 : overbeek 1.1 sub contigs_of {
515 :     my($self) = @_;
516 :    
517 :     my $figO = $self->{_figO};
518 :     my $fig = $figO->{_fig};
519 :     return map { &ContigO::new('ContigO',$figO,$self->id,$_) } $fig->contigs_of($self->id);
520 :     }
521 :    
522 : overbeek 1.4
523 :    
524 :     =head3 features_of
525 :    
526 : gdpusch 1.26 =over 4
527 :    
528 :     =item FUNCTION:
529 :    
530 :     Returns a list of "FeatureO" objects contained in a "GenomeO" object.
531 :    
532 :     =item USAGE:
533 :    
534 : parrello 1.32 my @featureOs = $orgO->features_of(); #...Fetch all features
535 : gdpusch 1.26
536 : parrello 1.32 or
537 : gdpusch 1.26
538 : parrello 1.32 my @featureOs = $orgO->features_of('peg'); #...Fetch only PEGs
539 : gdpusch 1.26
540 :     =item RETURNS:
541 :    
542 :     List of "FeatureO" objects.
543 :    
544 :     =back
545 :    
546 : overbeek 1.4 =cut
547 :    
548 : overbeek 1.1 sub features_of {
549 :     my($self,$type) = @_;
550 :    
551 :     my $figO = $self->{_figO};
552 :     my $fig = $figO->{_fig};
553 :    
554 :     return map { &FeatureO::new('FeatureO',$figO,$_) } $fig->all_features($self->id,$type);
555 :     }
556 :    
557 : overbeek 1.4
558 :     =head3 display
559 :    
560 :     Prints the genus, species, and strain information about a genome to STDOUT.
561 :    
562 : overbeek 1.9 =over 4
563 :    
564 :     =item USAGE:
565 :    
566 : parrello 1.32 $genome->display();
567 : overbeek 1.4
568 : overbeek 1.9 =item RETURNS:
569 : overbeek 1.4
570 : gdpusch 1.30 (Void)
571 : overbeek 1.4
572 :     =back
573 :    
574 :     =cut
575 :    
576 : overbeek 1.1 sub display {
577 :     my($self) = @_;
578 :    
579 :     print join("\t",("Genome",$self->id,$self->genus_species)),"\n";
580 :     }
581 :    
582 : overbeek 1.4
583 :    
584 :     ########################################################################
585 : overbeek 1.1 package ContigO;
586 : overbeek 1.4 ########################################################################
587 :     use Data::Dumper;
588 :    
589 :     =head1 ContigO
590 :    
591 :     Methods for working with DNA sequence objects.
592 :    
593 :     =cut
594 :    
595 :     =head3 new
596 :    
597 :     Contig constructor.
598 : overbeek 1.1
599 : overbeek 1.9 =over 4
600 : overbeek 1.4
601 : parrello 1.32 =item USAGE:
602 : overbeek 1.4
603 : parrello 1.32 $contig = ContigO->new( $figO, $genomeId, $contigId);
604 : overbeek 1.4
605 : overbeek 1.9 =item $figO:
606 : overbeek 1.4
607 : gdpusch 1.30 Parent FIGO object.
608 : overbeek 1.4
609 : overbeek 1.9 =item $genomeId:
610 :    
611 : gdpusch 1.30 Taxon-ID for the genome the contig is from.
612 : overbeek 1.9
613 :     =item $contigId:
614 :    
615 : gdpusch 1.30 Identifier for the contig
616 : overbeek 1.9
617 :     =item RETURNS:
618 :    
619 : gdpusch 1.30 A "ContigO" object.
620 : overbeek 1.4
621 :     =back
622 :    
623 :     =cut
624 : overbeek 1.1
625 :     sub new {
626 :     my($class,$figO,$genomeId,$contigId) = @_;
627 :    
628 :     my $self = {};
629 :     $self->{_figO} = $figO;
630 :     $self->{_id} = $contigId;
631 :     $self->{_genome} = $genomeId;
632 :     return bless $self, $class;
633 : parrello 1.32 }
634 : overbeek 1.1
635 : overbeek 1.4
636 :    
637 :     =head3 id
638 :    
639 : overbeek 1.9 =over 4
640 : overbeek 1.4
641 : overbeek 1.9 =item RETURNS:
642 :    
643 : gdpusch 1.30 Sequence ID string of "ContigO" object
644 : overbeek 1.4
645 :     =back
646 :    
647 :     =cut
648 :    
649 : overbeek 1.1 sub id {
650 :     my($self) = @_;
651 :    
652 :     return $self->{_id};
653 :     }
654 :    
655 : overbeek 1.4
656 :     =head3 genome
657 :    
658 : overbeek 1.9 =over 4
659 : overbeek 1.4
660 : overbeek 1.9 =item USAGE:
661 : gdpusch 1.24
662 : parrello 1.32 my $tax_id = $contig->genome->id();
663 : overbeek 1.4
664 : overbeek 1.9 =item RETURNS:
665 :    
666 : gdpusch 1.30 Tax-ID of the GenomeO object containing the contig object.
667 : overbeek 1.4
668 :     =back
669 :    
670 :     =cut
671 :    
672 : overbeek 1.1 sub genome {
673 :     my($self) = @_;
674 :    
675 : overbeek 1.10 my $figO = $self->{_figO};
676 : gdpusch 1.33 return GenomeO->new($figO,$self->{_genome});
677 : overbeek 1.1 }
678 :    
679 : overbeek 1.4
680 :    
681 :     =head3 contig_length
682 :    
683 : overbeek 1.9 =over 4
684 : overbeek 1.4
685 :     =item USAGE:
686 : overbeek 1.9
687 : parrello 1.32 my $len = $contig->contig_length();
688 : overbeek 1.4
689 : overbeek 1.9 =item RETURNS:
690 :    
691 : gdpusch 1.30 Length of contig's DNA sequence.
692 : overbeek 1.4
693 :     =back
694 :    
695 :     =cut
696 :    
697 : overbeek 1.1 sub contig_length {
698 :     my($self) = @_;
699 :    
700 :     my $fig = $self->{_figO}->{_fig};
701 : overbeek 1.11 my $contig_lengths = $fig->contig_lengths($self->genome->id);
702 : overbeek 1.1 return $contig_lengths->{$self->id};
703 :     }
704 :    
705 : overbeek 1.4
706 :     =head3 dna_seq
707 :    
708 : overbeek 1.9 =over 4
709 : overbeek 1.4
710 :     =item USAGE:
711 : overbeek 1.9
712 : parrello 1.32 my $seq = $contig->dna_seq(beg, $end);
713 : overbeek 1.4
714 : overbeek 1.9 =item $beg:
715 :    
716 : gdpusch 1.30 Begining point of DNA subsequence
717 : overbeek 1.4
718 : overbeek 1.9 =item $end:
719 : overbeek 1.4
720 : gdpusch 1.30 End point of DNA subsequence
721 : overbeek 1.4
722 : overbeek 1.9 =item RETURNS:
723 :    
724 : gdpusch 1.30 String containing DNA subsequence running from $beg to $end
725 :     (NOTE: if $beg > $end, returns reverse complement of DNA subsequence.)
726 : overbeek 1.4
727 :     =back
728 :    
729 :     =cut
730 :    
731 : overbeek 1.1 sub dna_seq {
732 :     my($self,$beg,$end) = @_;
733 : parrello 1.32
734 : overbeek 1.1 my $fig = $self->{_figO}->{_fig};
735 :     my $max = $self->contig_length;
736 :     if (($beg && (&FIG::between(1,$beg,$max))) &&
737 :     ($end && (&FIG::between(1,$end,$max))))
738 :     {
739 : overbeek 1.11 return $fig->dna_seq($self->genome->id,join("_",($self->id,$beg,$end)));
740 : overbeek 1.1 }
741 :     else
742 :     {
743 :     return undef;
744 :     }
745 :     }
746 :    
747 : overbeek 1.4
748 :     =head3 display
749 :    
750 :     Prints summary information about a "ContigO" object to STDOUT:
751 :    
752 :     Genus, species, strain
753 :    
754 :     Contig ID
755 :    
756 :     Contig length
757 :    
758 : overbeek 1.9 =over 4
759 :    
760 :     =item RETURNS:
761 : overbeek 1.4
762 : gdpusch 1.30 (Void)
763 : overbeek 1.4
764 :     =back
765 :    
766 :     =cut
767 :    
768 : overbeek 1.1 sub display {
769 :     my($self) = @_;
770 :    
771 : overbeek 1.11 print join("ContigO",$self->genome->id,$self->id,$self->contig_length),"\n";
772 : overbeek 1.1 }
773 :    
774 : overbeek 1.10 sub features_in_region {
775 :     my($self,$beg,$end) = @_;
776 : parrello 1.32 my $figO = $self->{_figO};
777 : overbeek 1.10 my $fig = $figO->{_fig};
778 : overbeek 1.4
779 : overbeek 1.10 my($features) = $fig->genes_in_region($self->genome->id,$self->id,$beg,$end);
780 : gdpusch 1.33 return map { FeatureO->new($figO,$_) } @$features;
781 : overbeek 1.10 }
782 : overbeek 1.4
783 : overbeek 1.13
784 :    
785 : overbeek 1.4 ########################################################################
786 : overbeek 1.1 package FeatureO;
787 : overbeek 1.4 ########################################################################
788 :     use Data::Dumper;
789 : overbeek 1.23 use Carp;
790 : overbeek 1.4
791 :     =head1 FeatureO
792 :    
793 : overbeek 1.9 Methods for working with features on "ContigO" objects.
794 :    
795 : overbeek 1.4 =cut
796 :    
797 : overbeek 1.13
798 : overbeek 1.9 =head3 new
799 : overbeek 1.4
800 : gdpusch 1.24 Constructor of new "FeatureO" objects
801 : overbeek 1.4
802 : overbeek 1.13 =over 4
803 :    
804 : parrello 1.32 =item USAGE:
805 : overbeek 1.13
806 : parrello 1.32 my $feature = FeatureO->new( $figO, $fid );
807 : overbeek 1.13
808 :     =item C<$figO>:
809 :    
810 :     "Base" FIGO object.
811 :    
812 : parrello 1.32 =item C<$fid>:
813 : overbeek 1.13
814 :     Feature-ID for new feature
815 :    
816 :     =item RETURNS:
817 :    
818 :     A newly created "FeatureO" object.
819 :    
820 :     =back
821 :    
822 : overbeek 1.4 =cut
823 : overbeek 1.1
824 :     sub new {
825 :     my($class,$figO,$fid) = @_;
826 :    
827 :     ($fid =~ /^fig\|\d+\.\d+\.[^\.]+\.\d+$/) || return undef;
828 :     my $self = {};
829 :     $self->{_figO} = $figO;
830 :     $self->{_id} = $fid;
831 :     return bless $self, $class;
832 : parrello 1.32 }
833 : overbeek 1.1
834 : overbeek 1.4
835 : overbeek 1.13
836 : overbeek 1.4 =head3 id
837 :    
838 : overbeek 1.13 =over 4
839 :    
840 :     =item USAGE:
841 :    
842 : parrello 1.32 my $fid = $feature->id();
843 : overbeek 1.13
844 :     =item RETURNS:
845 :    
846 :     The FID (Feature ID) of a "FeatureO" object.
847 :    
848 :     =back
849 :    
850 : overbeek 1.4 =cut
851 :    
852 : overbeek 1.1 sub id {
853 :     my($self) = @_;
854 :    
855 :     return $self->{_id};
856 :     }
857 :    
858 : overbeek 1.4
859 :    
860 :     =head3 genome
861 :    
862 : overbeek 1.13 =over 4
863 :    
864 :     =item USAGE:
865 :    
866 : parrello 1.32 my $taxid = $feature->genome();
867 : overbeek 1.13
868 :     =item RETURNS:
869 :    
870 : overbeek 1.22 The Taxon-ID for the "GenomeO" object containing the feature.
871 : overbeek 1.13
872 :     =back
873 :    
874 : overbeek 1.4 =cut
875 :    
876 : overbeek 1.1 sub genome {
877 :     my($self) = @_;
878 : overbeek 1.12 my $figO = $self->{_figO};
879 : overbeek 1.1 $self->id =~ /^fig\|(\d+\.\d+)/;
880 : gdpusch 1.33 return GenomeO->new($figO,$1);
881 : overbeek 1.1 }
882 :    
883 : overbeek 1.4
884 :    
885 :     =head3 type
886 :    
887 : overbeek 1.13 =over 4
888 :    
889 :     =item USAGE:
890 :    
891 : parrello 1.32 my $feature_type = $feature->type();
892 : overbeek 1.13
893 :     =item RETURNS:
894 :    
895 :     The feature object's "type" (e.g., "peg," "rna," etc.)
896 :    
897 :     =back
898 :    
899 : overbeek 1.4 =cut
900 :    
901 : overbeek 1.1 sub type {
902 :     my($self) = @_;
903 :    
904 :     $self->id =~ /^fig\|\d+\.\d+\.([^\.]+)/;
905 :     return $1;
906 :     }
907 :    
908 : overbeek 1.4
909 :    
910 : overbeek 1.13 =head3 location
911 :    
912 :     =over 4
913 : overbeek 1.4
914 : overbeek 1.13 =item USAGE:
915 :    
916 : parrello 1.32 my $loc = $feature->location();
917 : overbeek 1.13
918 :     =item RETURNS:
919 :    
920 :     A string representing the feature object's location on the genome's DNA,
921 :     in SEED "tbl format" (i.e., "contig_beging_end").
922 :    
923 :     =back
924 : overbeek 1.4
925 :     =cut
926 :    
927 : overbeek 1.1 sub location {
928 :     my($self) = @_;
929 :    
930 :     my $fig = $self->{_figO}->{_fig};
931 :     return scalar $fig->feature_location($self->id);
932 :     }
933 :    
934 : overbeek 1.13
935 :     =head3 contig
936 :    
937 :     =over 4
938 :    
939 :     =item USAGE:
940 :    
941 : parrello 1.32 my $contig = $feature->contig();
942 : overbeek 1.13
943 :     =item RETURNS:
944 :    
945 :     A "ContigO" object to access the contig data
946 :     for the contig the feature is on.
947 :    
948 :     =back
949 :    
950 :     =cut
951 :    
952 : overbeek 1.12 sub contig {
953 :     my($self) = @_;
954 :    
955 :     my $figO = $self->{_figO};
956 :     my $loc = $self->location;
957 :     my $genomeID = $self->genome->id;
958 : gdpusch 1.33 return (($loc =~ /^(\S+)_\d+_\d+$/) ? ContigO->new($figO,$genomeID,$1) : undef);
959 : overbeek 1.12 }
960 :    
961 : overbeek 1.13
962 :    
963 :     =head3 begin
964 :    
965 :     =over 4
966 :    
967 :     =item USAGE:
968 :    
969 : parrello 1.32 my $beg = $feature->begin();
970 : overbeek 1.13
971 :     =item RETURNS:
972 :    
973 :     The numerical coordinate of the first base of the feature.
974 :    
975 :     =back
976 :    
977 :     =cut
978 :    
979 : overbeek 1.12 sub begin {
980 :     my($self) = @_;
981 :    
982 :     my $loc = $self->location;
983 :     return ($loc =~ /^\S+_(\d+)_\d+$/) ? $1 : undef;
984 :     }
985 : overbeek 1.4
986 : overbeek 1.13
987 :    
988 :     =head3 end
989 :    
990 :     =over 4
991 :    
992 :     =item USAGE:
993 :    
994 : parrello 1.32 my $end = $feature->end();
995 : overbeek 1.13
996 :     =item RETURNS:
997 :    
998 :     The numerical coordinate of the last base of the feature.
999 :    
1000 :     =back
1001 :    
1002 :     =cut
1003 :    
1004 : overbeek 1.12 sub end {
1005 :     my($self) = @_;
1006 :    
1007 :     my $loc = $self->location;
1008 :     return ($loc =~ /^\S+_\d+_(\d+)$/) ? $1 : undef;
1009 :     }
1010 : overbeek 1.4
1011 : overbeek 1.13
1012 :    
1013 : overbeek 1.4 =head3 dna_seq
1014 :    
1015 : overbeek 1.13 =over 4
1016 :    
1017 :     =item USAGE:
1018 :    
1019 : parrello 1.32 my $dna_seq = $feature->dna_seq();
1020 : overbeek 1.13
1021 :     =item RETURNS:
1022 :    
1023 :     A string contining the DNA subsequence of the contig
1024 :     running from the first to the last base of the feature.
1025 :    
1026 :     If ($beg > $end), the reverse complement subsequence is returned.
1027 :    
1028 :     =back
1029 :    
1030 : overbeek 1.4 =cut
1031 :    
1032 : overbeek 1.1 sub dna_seq {
1033 :     my($self) = @_;
1034 :    
1035 :     my $fig = $self->{_figO}->{_fig};
1036 :     my $fid = $self->id;
1037 :     my @loc = $fig->feature_location($fid);
1038 :     return $fig->dna_seq(&FIG::genome_of($fid),@loc);
1039 :     }
1040 :    
1041 : overbeek 1.4
1042 :    
1043 :     =head3 prot_seq
1044 :    
1045 : overbeek 1.13 =over 4
1046 :    
1047 :     =item USAGE:
1048 :    
1049 : parrello 1.32 my $dna_seq = $feature->prot_seq();
1050 : overbeek 1.13
1051 :     =item RETURNS:
1052 :    
1053 :     A string contining the protein translation of the feature (if it exists),
1054 :     or the "undef" value if the feature does not exist or is not a PEG.
1055 :    
1056 :     =back
1057 :    
1058 : overbeek 1.4 =cut
1059 :    
1060 : overbeek 1.1 sub prot_seq {
1061 :     my($self) = @_;
1062 :    
1063 :     ($self->type eq "peg") || return undef;
1064 :     my $fig = $self->{_figO}->{_fig};
1065 :     my $fid = $self->id;
1066 :     return $fig->get_translation($fid);
1067 :     }
1068 :    
1069 : overbeek 1.4
1070 :    
1071 :     =head3 function_of
1072 :    
1073 : overbeek 1.13 =over 4
1074 :    
1075 :     =item USAGE:
1076 :    
1077 : parrello 1.32 my $func = $feature->function_of();
1078 : overbeek 1.13
1079 :     =item RETURNS:
1080 :    
1081 :     A string containing the function assigned to the feature,
1082 :     or the "undef" value if no function has been assigned.
1083 :    
1084 :     =back
1085 :    
1086 : overbeek 1.4 =cut
1087 :    
1088 : overbeek 1.1 sub function_of {
1089 :     my($self) = @_;
1090 :    
1091 :     my $fig = $self->{_figO}->{_fig};
1092 :     my $fid = $self->id;
1093 :     return scalar $fig->function_of($fid);
1094 :     }
1095 :    
1096 : overbeek 1.4
1097 :    
1098 :     =head3 coupled_to
1099 :    
1100 : overbeek 1.13 =over 4
1101 :    
1102 :     =item USAGE:
1103 :    
1104 : parrello 1.32 my @coupled_features = $feature->coupled_to();
1105 : overbeek 1.13
1106 :     =item RETURNS:
1107 :    
1108 : gdpusch 1.24 A list of "CouplingO" objects describing the evidence for functional coupling
1109 : overbeek 1.13 between this feature and other nearby features.
1110 :    
1111 :     =back
1112 :    
1113 : overbeek 1.4 =cut
1114 :    
1115 : overbeek 1.1 sub coupled_to {
1116 :     my($self) = @_;
1117 :    
1118 : overbeek 1.13 ($self->type eq "peg") || return ();
1119 : overbeek 1.1 my $figO = $self->{_figO};
1120 :     my $fig = $figO->{_fig};
1121 :     my $peg1 = $self->id;
1122 :     my @coupled = ();
1123 :     foreach my $tuple ($fig->coupled_to($peg1))
1124 :     {
1125 :     my($peg2,$sc) = @$tuple;
1126 :     push(@coupled, &CouplingO::new('CouplingO',$figO,$peg1,$peg2,$sc));
1127 :     }
1128 :     return @coupled;
1129 :     }
1130 :    
1131 : overbeek 1.4
1132 :    
1133 :     =head3 annotations
1134 :    
1135 : overbeek 1.13 =over 4
1136 :    
1137 :     =item USAGE:
1138 :    
1139 : parrello 1.32 my @annot_list = $feature->annotations();
1140 : overbeek 1.13
1141 :     =item RETURNS:
1142 :    
1143 : gdpusch 1.24 A list of "AnnotationO" objects allowing access to the annotations for this feature.
1144 : overbeek 1.13
1145 :     =back
1146 :    
1147 : overbeek 1.4 =cut
1148 :    
1149 : overbeek 1.1 sub annotations {
1150 :     my($self) = @_;
1151 :    
1152 :     my $figO = $self->{_figO};
1153 :     my $fig = $figO->{_fig};
1154 : parrello 1.32
1155 : overbeek 1.1 return map { &AnnotationO::new('AnnotationO',@$_) } $fig->feature_annotations($self->id,1);
1156 :     }
1157 :    
1158 : overbeek 1.13
1159 :     =head3 in_subsystems
1160 :    
1161 :     =over 4
1162 :    
1163 :     =item USAGE:
1164 :    
1165 : parrello 1.32 my @subsys_list = $feature->in_subsystems();
1166 : overbeek 1.13
1167 :     =item RETURNS:
1168 :    
1169 : gdpusch 1.24 A list of "SubsystemO" objects allowing access to the subsystems
1170 : overbeek 1.13 that this feature particupates in.
1171 :    
1172 :     =back
1173 :    
1174 :     =cut
1175 :    
1176 : overbeek 1.5 sub in_subsystems {
1177 :     my($self) = @_;
1178 :     my $figO = $self->{_figO};
1179 :     my $fig = $figO->{_fig};
1180 : parrello 1.32
1181 : gdpusch 1.33 return map { SubsystemO->new($figO,$_) } $fig->peg_to_subsystems($self->id);
1182 : overbeek 1.5 }
1183 : overbeek 1.4
1184 :    
1185 :     =head3 possibly_truncated
1186 :    
1187 : overbeek 1.13 =over 4
1188 :    
1189 :     =item USAGE:
1190 :    
1191 : parrello 1.32 my $trunc = $feature->possibly_truncated();
1192 : overbeek 1.13
1193 :     =item RETURNS:
1194 :    
1195 :     Boolean C<TRUE> if the feature may be truncated;
1196 :     boolean C<FALSE> otherwise.
1197 :    
1198 :     =back
1199 :    
1200 : overbeek 1.4 =cut
1201 :    
1202 : overbeek 1.3 sub possibly_truncated {
1203 :     my($self) = @_;
1204 :     my $figO = $self->{_figO};
1205 :     my $fig = $figO->{_fig};
1206 : parrello 1.32
1207 : overbeek 1.3 return $fig->possibly_truncated($self->id);
1208 :     }
1209 :    
1210 : overbeek 1.4
1211 :    
1212 :     =head3 possible_frameshift
1213 :    
1214 : overbeek 1.13 =over 4
1215 :    
1216 :     =item USAGE:
1217 :    
1218 : parrello 1.32 my $fs = $feature->possible_frameshift();
1219 : overbeek 1.13
1220 :     =item RETURNS:
1221 :    
1222 :     Boolean C<TRUE> if the feature may be a frameshifted fragment;
1223 :     boolean C<FALSE> otherwise.
1224 :    
1225 :     (NOTE: This is a crude prototype implementation,
1226 :     and is mostly as an example of how to code using FIGO.)
1227 :    
1228 :     =back
1229 :    
1230 : overbeek 1.4 =cut
1231 :    
1232 : overbeek 1.3 sub possible_frameshift {
1233 :     my($self) = @_;
1234 :     my $figO = $self->{_figO};
1235 : overbeek 1.27 my $fig = $figO->{_fig};
1236 : overbeek 1.31
1237 :     return $fig->possible_frameshift($self->id);
1238 : overbeek 1.3 }
1239 :    
1240 : overbeek 1.4
1241 :    
1242 :     =head3 run
1243 :    
1244 : overbeek 1.13 (Note: This function should be considered "PRIVATE")
1245 :    
1246 :     =over 4
1247 :    
1248 :     =item FUNCTION:
1249 :    
1250 :     Passes a string containing a command to be execture by the "system" shell command.
1251 :    
1252 :     =item USAGE:
1253 :    
1254 : parrello 1.32 $feature->run($cmd);
1255 : overbeek 1.13
1256 :     =item RETURNS:
1257 :    
1258 :     Nil if the execution of C<$cmd> was successful;
1259 :     aborts with traceback if C<$cmd> fails.
1260 : overbeek 1.4
1261 : overbeek 1.13 =back
1262 :    
1263 :     =cut
1264 :    
1265 :     sub run {
1266 : overbeek 1.3 my($cmd) = @_;
1267 : overbeek 1.23 (system($cmd) == 0) || confess("FAILED: $cmd");
1268 : overbeek 1.3 }
1269 :    
1270 : overbeek 1.4
1271 :    
1272 :     =head3 max
1273 :    
1274 : overbeek 1.13 (Note: This function should be considered "PRIVATE")
1275 :    
1276 :     =over 4
1277 :    
1278 :     =item USAGE:
1279 :    
1280 : parrello 1.32 my $max = $feature->max($x, $y);
1281 : overbeek 1.13
1282 : gdpusch 1.24 =item C<$x> and C<$y>
1283 : overbeek 1.13
1284 : gdpusch 1.24 Numerical values.
1285 : overbeek 1.13
1286 : gdpusch 1.24 =item RETURNS:
1287 : overbeek 1.13
1288 :     The larger of the two numerical values C<$x> and C<$y>.
1289 :    
1290 :     =back
1291 :    
1292 : overbeek 1.4 =cut
1293 :    
1294 : overbeek 1.3 sub max {
1295 :     my($x,$y) = @_;
1296 :     return ($x < $y) ? $y : $x;
1297 :     }
1298 :    
1299 : overbeek 1.4
1300 :    
1301 :     =head3 min
1302 :    
1303 : overbeek 1.13 (Note: This function should be considered "PRIVATE")
1304 :    
1305 :     =over 4
1306 :    
1307 :     =item USAGE:
1308 :    
1309 : parrello 1.32 my $min = $feature->min($x, $y);
1310 : overbeek 1.13
1311 : gdpusch 1.24 =item C<$x> and C<$y>
1312 : overbeek 1.13
1313 : gdpusch 1.24 Numerical values.
1314 : overbeek 1.13
1315 : overbeek 1.16 =item RETURNS:
1316 : overbeek 1.13
1317 :     The smaller of the two numerical values C<$x> and C<$y>.
1318 :    
1319 :     =back
1320 :    
1321 : overbeek 1.4 =cut
1322 :    
1323 : overbeek 1.3 sub min {
1324 :     my($x,$y) = @_;
1325 :     return ($x < $y) ? $x : $y;
1326 :     }
1327 :    
1328 : overbeek 1.4 =head3 sims
1329 :    
1330 : overbeek 1.16 =over 4
1331 :    
1332 :     =item FUNCTION:
1333 :    
1334 :     Returns precomputed "Sim.pm" objects from the SEED.
1335 :    
1336 :     =item USAGE:
1337 : gdpusch 1.24
1338 : parrello 1.32 my @sims = $pegO->sims( -all, -cutoff => 1.0e-10);
1339 : overbeek 1.16
1340 : parrello 1.32 my @sims = $pegO->sims( -max => 50, -cutoff => 1.0e-10);
1341 : overbeek 1.16
1342 :     =item RETURNS: List of sim objects.
1343 :    
1344 :     =back
1345 :    
1346 : overbeek 1.4 =cut
1347 :    
1348 : overbeek 1.2 use Sim;
1349 :     sub sims {
1350 :     my($self,%args) = @_;
1351 :    
1352 :     my $figO = $self->{_figO};
1353 :     my $fig = $figO->{_fig};
1354 :    
1355 :     my $cutoff = $args{-cutoff} ? $args{-cutoff} : 1.0e-5;
1356 : overbeek 1.21 my $all = $args{-all} ? 'all' : "fig";
1357 : overbeek 1.2 my $max = $args{-max} ? $args{-max} : 10000;
1358 : parrello 1.32
1359 : overbeek 1.20 my @sims = $fig->sims($self->id,$max,$cutoff,$all);
1360 : parrello 1.32
1361 : overbeek 1.20 if (@sims) {
1362 :     my $peg1 = FeatureO->new($figO, $sims[0]->[0]);
1363 : parrello 1.32
1364 : overbeek 1.20 foreach my $sim (@sims) {
1365 : overbeek 1.21 # $sim->[0] = $peg1;
1366 :     # $sim->[1] = FeatureO->new($figO, $sim->[1]);
1367 : overbeek 1.20 }
1368 :     }
1369 : parrello 1.32
1370 : overbeek 1.20 return @sims;
1371 : overbeek 1.2 }
1372 :    
1373 : overbeek 1.4
1374 :    
1375 :     =head3 bbhs
1376 :    
1377 : overbeek 1.16 =over 4
1378 :    
1379 : gdpusch 1.24 =item FUNCTION:
1380 : overbeek 1.16
1381 :     Given a PEG-type "FeatureO" object, returns the list of BBHO objects
1382 :     corresponding to the pre-computed BBHs for that PEG.
1383 :    
1384 :     =item USAGE:
1385 :    
1386 : parrello 1.32 my @bbhs = $pegO->bbhs();
1387 : overbeek 1.16
1388 : gdpusch 1.24 =item RETURNS:
1389 :    
1390 :     List of BBHO objects.
1391 : overbeek 1.16
1392 :     =back
1393 :    
1394 : overbeek 1.4 =cut
1395 :    
1396 : overbeek 1.2 sub bbhs {
1397 :     my($self) = @_;
1398 :    
1399 :     my $figO = $self->{_figO};
1400 :     my $fig = $figO->{_fig};
1401 :    
1402 :     my @bbhs = $fig->bbhs($self->id);
1403 : overbeek 1.6 return map { my($peg2,$sc,$bs) = @$_; bless({ _figO => $figO,
1404 : parrello 1.32 _peg1 => $self->id,
1405 :     _peg2 => $peg2,
1406 : overbeek 1.2 _psc => $sc,
1407 : parrello 1.32 _bit_score => $bs
1408 : overbeek 1.2 },'BBHO') } @bbhs;
1409 :     }
1410 :    
1411 : gdpusch 1.24
1412 : overbeek 1.4 =head3 display
1413 :    
1414 : gdpusch 1.24 =over 4
1415 :    
1416 :     =item FUNCTION:
1417 :    
1418 : overbeek 1.16 Prints info about a "FeatureO" object to STDOUT.
1419 :    
1420 : gdpusch 1.24 =item USAGE:
1421 : overbeek 1.16
1422 : parrello 1.32 $pegO->display();
1423 : overbeek 1.16
1424 : gdpusch 1.24 =item RETURNS;
1425 :    
1426 :     (void)
1427 :    
1428 :     =back
1429 :    
1430 : overbeek 1.4 =cut
1431 :    
1432 : overbeek 1.1 sub display {
1433 :     my($self) = @_;
1434 :    
1435 :     print join("\t",$self->id,$self->location,$self->function_of),"\n",
1436 :     $self->dna_seq,"\n",
1437 :     $self->prot_seq,"\n";
1438 :     }
1439 :    
1440 : overbeek 1.4
1441 :    
1442 :     ########################################################################
1443 : overbeek 1.2 package BBHO;
1444 : overbeek 1.4 ########################################################################
1445 :    
1446 :     =head1 BBHO
1447 :    
1448 : overbeek 1.16 Methods for accessing "Bidirectiona Best Hits" (BBHs).
1449 :    
1450 : overbeek 1.4 =cut
1451 :    
1452 :    
1453 :     =head3 new
1454 :    
1455 : overbeek 1.16 Constructor of BBHO objects.
1456 :    
1457 :     (NOTE: The "average user" should never need to invoke this method.)
1458 :    
1459 : overbeek 1.4 =cut
1460 : overbeek 1.2
1461 :     sub new {
1462 : overbeek 1.6 my($class,$figO,$peg1,$peg2,$sc,$normalized_bitscore) = @_;
1463 : overbeek 1.2
1464 :     my $self = {};
1465 : overbeek 1.6 $self->{_figO} = $figO;
1466 : overbeek 1.2 $self->{_peg1} = $peg1;
1467 :     $self->{_peg2} = $peg2;
1468 :     $self->{_psc} = $sc;
1469 :     $self->{_bit_score} = $normalized_bitscore
1470 :    
1471 : overbeek 1.16 }
1472 :    
1473 : overbeek 1.2
1474 : overbeek 1.4
1475 :     =head3 peg1
1476 :    
1477 : overbeek 1.16 =over 4
1478 :    
1479 :     =item USAGE:
1480 :    
1481 : parrello 1.32 my $peg1 = $bbh->peg1();
1482 : overbeek 1.16
1483 :     =item RETURNS:
1484 :    
1485 :     A "FeatureO" object corresponding to the "query" sequence
1486 :     in a BBH pair.
1487 :    
1488 :     =back
1489 :    
1490 : overbeek 1.4 =cut
1491 :    
1492 : overbeek 1.2 sub peg1 {
1493 :     my($self) = @_;
1494 :    
1495 : overbeek 1.6 my $figO = $self->{_figO};
1496 : gdpusch 1.33 return FeatureO->new($figO, $self->{_peg1});
1497 : overbeek 1.2 }
1498 :    
1499 : overbeek 1.6 =head3 peg2
1500 : overbeek 1.4
1501 : overbeek 1.16 =over 4
1502 :    
1503 :     =item USAGE:
1504 :    
1505 : parrello 1.32 my $peg2 = $bbh->peg2();
1506 : overbeek 1.16
1507 :     =item RETURNS:
1508 :    
1509 :     A "FeatureO" object corresponding to the "database" sequence
1510 :     in a BBH pair.
1511 :    
1512 :     =back
1513 :    
1514 : overbeek 1.4 =cut
1515 :    
1516 : overbeek 1.2 sub peg2 {
1517 :     my($self) = @_;
1518 :    
1519 : overbeek 1.6 my $figO = $self->{_figO};
1520 : gdpusch 1.33 return FeatureO->new($figO,$self->{_peg2});
1521 : overbeek 1.2 }
1522 :    
1523 : overbeek 1.4
1524 :    
1525 :     =head3 psc
1526 :    
1527 : overbeek 1.16 =over 4
1528 :    
1529 :     =item USAGE:
1530 :    
1531 : parrello 1.32 my $psc = $bbh->psc();
1532 : overbeek 1.16
1533 :     =item RETURNS:
1534 :    
1535 :     The numerical value of the BLAST E-value for the pair.
1536 :    
1537 :     =back
1538 :    
1539 : overbeek 1.4 =cut
1540 :    
1541 : overbeek 1.2 sub psc {
1542 :     my($self) = @_;
1543 :    
1544 :     return $self->{_psc};
1545 :     }
1546 :    
1547 : overbeek 1.4
1548 :    
1549 :     =head3 norm_bitscore
1550 :    
1551 : overbeek 1.16
1552 :     =over 4
1553 :    
1554 :     =item USAGE:
1555 :    
1556 : parrello 1.32 my $bsc = $bbh->norm_bitscore();
1557 : overbeek 1.16
1558 :     =item RETURNS:
1559 :    
1560 :     The "BLAST bit-score per aligned character" for the pair.
1561 :    
1562 :     =back
1563 :    
1564 : overbeek 1.4 =cut
1565 :    
1566 : overbeek 1.2 sub norm_bitscore {
1567 :     my($self) = @_;
1568 :    
1569 :     return $self->{_bit_score};
1570 :     }
1571 :    
1572 : overbeek 1.4
1573 :    
1574 :     ########################################################################
1575 : overbeek 1.1 package AnnotationO;
1576 : overbeek 1.4 ########################################################################
1577 :    
1578 :     =head1 AnnotationO
1579 :    
1580 : overbeek 1.16 Methods for accessing SEED annotations.
1581 :    
1582 : overbeek 1.4 =cut
1583 :    
1584 :    
1585 :    
1586 :     =head3 new
1587 :    
1588 : gdpusch 1.24 =over 4
1589 :    
1590 :     =item FUNCTION:
1591 :    
1592 :     Cronstruct a new "AnnotationO" object
1593 :    
1594 :     =item USAGE:
1595 :    
1596 : parrello 1.32 my $annotO = AnnotationO->new( $fid, $timestamp, $who, $text);
1597 : gdpusch 1.24
1598 :     =item C<$fid>
1599 :    
1600 :     A feature identifier.
1601 :    
1602 :     =item C<$timestamp>
1603 :    
1604 :     The C<UN*X> timestamp one wishes to associate with the annotation.
1605 :    
1606 :     =item C<$who>
1607 :    
1608 :     The annotator's user-name.
1609 :    
1610 :     =item C<$text>
1611 :    
1612 :     The textual content of the annotation.
1613 :    
1614 :     =item RETURNS:
1615 :    
1616 :     An "AnnotationO" object.
1617 :    
1618 :     =back
1619 :    
1620 : overbeek 1.4 =cut
1621 : overbeek 1.1
1622 :     sub new {
1623 :     my($class,$fid,$timestamp,$who,$text) = @_;
1624 :    
1625 :     my $self = {};
1626 :     $self->{_fid} = $fid;
1627 :     $self->{_timestamp} = $timestamp;
1628 :     $self->{_who} = $who;
1629 :     $self->{_text} = $text;
1630 :     return bless $self, $class;
1631 : parrello 1.32 }
1632 : overbeek 1.1
1633 : overbeek 1.4
1634 :    
1635 :     =head3 fid
1636 :    
1637 : gdpusch 1.24 =over 4
1638 :    
1639 :     =item FUNCTION:
1640 :    
1641 :     Extract the feature-ID that was annotated.
1642 :    
1643 :     =item USAGE:
1644 :    
1645 : parrello 1.32 my $fid = $annotO->fid();
1646 : gdpusch 1.24
1647 :     =item RETURNS;
1648 :    
1649 :     The feature-ID as a string.
1650 :    
1651 :     =back
1652 :    
1653 : overbeek 1.4 =cut
1654 :    
1655 : overbeek 1.1 sub fid {
1656 :     my($self) = @_;
1657 :    
1658 :     return $self->{_fid};
1659 :     }
1660 :    
1661 : overbeek 1.4
1662 :    
1663 :     =head3 timestamp
1664 :    
1665 : gdpusch 1.24 =over 4
1666 :    
1667 :     =item FUNCTION:
1668 :    
1669 :     Extract the C<UN*X> timestamp of the annotation.
1670 :    
1671 :     =item USAGE:
1672 :    
1673 : parrello 1.32 my $fid = $annotO->timestamp();
1674 : gdpusch 1.24
1675 :     =item RETURNS;
1676 :    
1677 :     The timestamp as a string.
1678 :    
1679 :     =back
1680 :    
1681 : overbeek 1.4 =cut
1682 :    
1683 : overbeek 1.1 sub timestamp {
1684 :     my($self,$convert) = @_;
1685 :    
1686 : parrello 1.32 if ($convert)
1687 : overbeek 1.1 {
1688 :     return scalar localtime($self->{_timestamp});
1689 :     }
1690 :     else
1691 :     {
1692 :     return $self->{_timestamp};
1693 :     }
1694 :     }
1695 :    
1696 : overbeek 1.4
1697 :    
1698 :     =head3 made_by
1699 :    
1700 : gdpusch 1.24 =over 4
1701 :    
1702 :     =item FUNCTION:
1703 :    
1704 :     Extract the annotator's user-name.
1705 :    
1706 :     =item USAGE:
1707 :    
1708 : parrello 1.32 my $fid = $annotO->made_by();
1709 : gdpusch 1.24
1710 :     =item RETURNS;
1711 :    
1712 :     The username of the annotator, as a string.
1713 :    
1714 :     =back
1715 :    
1716 : overbeek 1.4 =cut
1717 :    
1718 : overbeek 1.1 sub made_by {
1719 :     my($self) = @_;
1720 :    
1721 :     my $who = $self->{_who};
1722 :     $who =~ s/^master://i;
1723 :     return $who;
1724 :     }
1725 :    
1726 : overbeek 1.4
1727 :    
1728 :     =head3 text
1729 :    
1730 : gdpusch 1.24 =over 4
1731 :    
1732 :     =item FUNCTION:
1733 :    
1734 :     Extract the text of the annotation.
1735 :    
1736 :     =item USGAE:
1737 :    
1738 : parrello 1.32 my $text = $annotO->text();
1739 : gdpusch 1.24
1740 :     =item RETURNS:
1741 :    
1742 :     The text of the annotation, as a string.
1743 :    
1744 :     =back
1745 :    
1746 : overbeek 1.4 =cut
1747 :    
1748 : overbeek 1.1 sub text {
1749 :     my($self) = @_;
1750 :    
1751 :     my $text = $self->{_text};
1752 :     return $text;
1753 :     }
1754 :    
1755 : overbeek 1.4
1756 :     =head3 display
1757 :    
1758 : gdpusch 1.24 =over 4
1759 :    
1760 :     =item FUNCTION:
1761 :    
1762 :     Print the contents of an "AnnotationO" object to B<STDOUT>
1763 :     in human-readable form.
1764 :    
1765 :     =item USAGE:
1766 :    
1767 : parrello 1.32 my $annotO->display();
1768 : gdpusch 1.24
1769 :     =item RETURNS:
1770 :    
1771 :     (void)
1772 :    
1773 :     =back
1774 :    
1775 : overbeek 1.4 =cut
1776 :    
1777 : overbeek 1.1 sub display {
1778 :     my($self) = @_;
1779 :    
1780 :     print join("\t",($self->fid,$self->timestamp(1),$self->made_by)),"\n",$self->text,"\n";
1781 :     }
1782 :    
1783 : overbeek 1.4
1784 :    
1785 :     ########################################################################
1786 : overbeek 1.1 package CouplingO;
1787 : overbeek 1.4 ########################################################################
1788 :     use Data::Dumper;
1789 :    
1790 : overbeek 1.13 =head1 CouplingO
1791 :    
1792 : overbeek 1.16 Methods for accessing the "Functional coupling scores"
1793 :     of PEGs in close physical proximity to each other.
1794 :    
1795 : overbeek 1.13 =cut
1796 :    
1797 :    
1798 :    
1799 : overbeek 1.4 =head3 new
1800 : overbeek 1.1
1801 : gdpusch 1.24 =over 4
1802 :    
1803 :     =item FUNCTION:
1804 :    
1805 :     Construct a new "CouplingO" object
1806 :     encapsulating the "functional coupling" score
1807 :     between a pair of features in some genome.
1808 :    
1809 :     =item USAGE:
1810 :    
1811 : parrello 1.32 $couplingO = CouplingO->new($figO, $fid1, $fid2, $sc);
1812 : gdpusch 1.24
1813 :     =item C<$figO>
1814 :    
1815 :     Parent "FIGO" object.
1816 :    
1817 :     =item C<$fid1> and C<$fid2>
1818 :    
1819 :     A pair of feature-IDs.
1820 :    
1821 :     =item C<$sc>
1822 :    
1823 :     A functional-coupling score
1824 :    
1825 :     =item RETURNS:
1826 :    
1827 :     A "CouplingO" object.
1828 :    
1829 :     =back
1830 :    
1831 : overbeek 1.4 =cut
1832 : overbeek 1.1
1833 :     sub new {
1834 :     my($class,$figO,$peg1,$peg2,$sc) = @_;
1835 :    
1836 :     ($peg1 =~ /^fig\|\d+\.\d+\.peg\.\d+$/) || return undef;
1837 :     ($peg2 =~ /^fig\|\d+\.\d+\.peg\.\d+$/) || return undef;
1838 :     my $self = {};
1839 :     $self->{_figO} = $figO;
1840 :     $self->{_peg1} = $peg1;
1841 :     $self->{_peg2} = $peg2;
1842 :     $self->{_sc} = $sc;
1843 :     return bless $self, $class;
1844 : parrello 1.32 }
1845 : overbeek 1.1
1846 : overbeek 1.4
1847 :    
1848 :     =head3 peg1
1849 :    
1850 : gdpusch 1.24 =over 4
1851 :    
1852 :     =item FUNCTION:
1853 :    
1854 :     Returns a "FeatureO" object corresponding to the first FID in a coupled pair.
1855 :    
1856 :     =item USAGE:
1857 :    
1858 : parrello 1.32 my $peg1 = $couplingO->peg1();
1859 : gdpusch 1.24
1860 :     =item RETURNS:
1861 :    
1862 :     A "FeatureO" object.
1863 :    
1864 :     =back
1865 :    
1866 : overbeek 1.4 =cut
1867 :    
1868 : overbeek 1.1 sub peg1 {
1869 :     my($self) = @_;
1870 :    
1871 : overbeek 1.5 my $figO = $self->{_figO};
1872 : gdpusch 1.33 return FeatureO->new($figO,$self->{_peg1});
1873 : overbeek 1.1 }
1874 :    
1875 : overbeek 1.4
1876 :    
1877 : gdpusch 1.24 =head3 peg2
1878 :    
1879 :     =over 4
1880 :    
1881 :     =item FUNCTION:
1882 :    
1883 :     Returns a "FeatureO" object corresponding to the second FID in a coupled pair.
1884 :    
1885 :     =item USAGE:
1886 :    
1887 : parrello 1.32 my $peg2 = $couplingO->peg2();
1888 : gdpusch 1.24
1889 :     =item RETURNS:
1890 :    
1891 :     A "FeatureO" object.
1892 :    
1893 :     =back
1894 : overbeek 1.4
1895 :     =cut
1896 :    
1897 : overbeek 1.1 sub peg2 {
1898 :     my($self) = @_;
1899 :    
1900 : overbeek 1.5 my $figO = $self->{_figO};
1901 : gdpusch 1.33 return FeatureO->new($figO,$self->{_peg2});
1902 : overbeek 1.1 }
1903 :    
1904 : overbeek 1.4
1905 :    
1906 :     =head3 sc
1907 :    
1908 : gdpusch 1.24 =over 4
1909 :    
1910 :     =item FUNCTION:
1911 :    
1912 :     Extracts the "functional coupling" score from a "CouplingO" object.
1913 :    
1914 :     =item USAGE:
1915 :    
1916 : parrello 1.32 my $sc = $couplingO->sc();
1917 : gdpusch 1.24
1918 :     =item RETURNS:
1919 :    
1920 :     A scalar score.
1921 :    
1922 :     =back
1923 :    
1924 : overbeek 1.4 =cut
1925 :    
1926 : overbeek 1.1 sub sc {
1927 :     my($self) = @_;
1928 :    
1929 :     return $self->{_sc};
1930 :     }
1931 :    
1932 : overbeek 1.4
1933 :    
1934 :     =head3 evidence
1935 :    
1936 : gdpusch 1.24 =over 4
1937 :    
1938 :     =item FUNCTION:
1939 :    
1940 :     Fetch the evidence for a "functional coupling" between two close PEGs,
1941 :     in the form of a list of objects describing the "Pairs of Close Homologs" (PCHs)
1942 :     supporting the existence of a functional coupling between the two close PEGs.
1943 :    
1944 :     =item USAGE:
1945 :    
1946 : parrello 1.32 my $evidence = $couplingO->evidence();
1947 : gdpusch 1.24
1948 :     =item RETURNS
1949 :    
1950 :     List of pairs of "FeatureO" objects.
1951 :    
1952 :     =back
1953 :    
1954 : overbeek 1.4 =cut
1955 :    
1956 : overbeek 1.1 sub evidence {
1957 :     my($self) = @_;
1958 :    
1959 :     my $figO = $self->{_figO};
1960 :     my $fig = $figO->{_fig};
1961 :     my @ev = ();
1962 : overbeek 1.19 foreach my $tuple ($fig->coupling_evidence($self->peg1->id,$self->peg2->id))
1963 : overbeek 1.1 {
1964 :     my($peg3,$peg4,$rep) = @$tuple;
1965 :     push(@ev,[&FeatureO::new('FeatureO',$figO,$peg3),
1966 :     &FeatureO::new('FeatureO',$figO,$peg4),
1967 :     $rep]);
1968 :     }
1969 :     return @ev;
1970 :     }
1971 :    
1972 : overbeek 1.4
1973 :    
1974 :     =head3 display
1975 :    
1976 : gdpusch 1.24 =over 4
1977 :    
1978 :     =item FUNCTION:
1979 :    
1980 :     Print the contents of a "CouplingO" object to B<STDOUT> in human-readable form.
1981 :    
1982 :     =item USAGE:
1983 :    
1984 : parrello 1.32 $couplingO->display();
1985 : gdpusch 1.24
1986 :     =item RETURNS:
1987 :    
1988 :     (Void)
1989 :    
1990 :     =back
1991 :    
1992 : overbeek 1.4 =cut
1993 :    
1994 : overbeek 1.1 sub display {
1995 :     my($self) = @_;
1996 :    
1997 :     print join("\t",($self->peg1,$self->peg2,$self->sc)),"\n";
1998 :     }
1999 :    
2000 : overbeek 1.4
2001 :    
2002 :     ########################################################################
2003 : overbeek 1.1 package SubsystemO;
2004 : overbeek 1.4 ########################################################################
2005 : overbeek 1.1 use Data::Dumper;
2006 :     use Subsystem;
2007 :    
2008 : overbeek 1.4 =head1 SubsystemO
2009 :    
2010 :     =cut
2011 :    
2012 :    
2013 :    
2014 :     =head3 new
2015 :    
2016 :     =cut
2017 :    
2018 : overbeek 1.1 sub new {
2019 :     my($class,$figO,$name) = @_;
2020 :    
2021 :     my $self = {};
2022 :     $self->{_figO} = $figO;
2023 :     $self->{_id} = $name;
2024 :    
2025 :     return bless $self, $class;
2026 : parrello 1.32 }
2027 : overbeek 1.1
2028 : overbeek 1.4
2029 :    
2030 :     =head3 id
2031 :    
2032 :     =cut
2033 :    
2034 : overbeek 1.1 sub id {
2035 :     my($self) = @_;
2036 :    
2037 :     return $self->{_id};
2038 :     }
2039 :    
2040 : overbeek 1.4
2041 :    
2042 :     =head3 usable
2043 :    
2044 : overbeek 1.16
2045 : parrello 1.32 =cut
2046 : overbeek 1.4
2047 : overbeek 1.1 sub usable {
2048 :     my($self) = @_;
2049 :    
2050 :     my $figO = $self->{_figO};
2051 :     my $fig = $figO->{_fig};
2052 :     return $fig->usable_subsystem($self->id);
2053 :     }
2054 :    
2055 : overbeek 1.4
2056 :    
2057 :     =head3 genomes
2058 :    
2059 :     =cut
2060 :    
2061 : overbeek 1.1 sub genomes {
2062 :     my($self) = @_;
2063 :    
2064 :     my $figO = $self->{_figO};
2065 :     my $subO = $self->{_subO};
2066 : gdpusch 1.33 if (! $subO) {
2067 :     $subO = $self->{_subO} = Subsystem->new($self->{_id}, $figO->{_fig});
2068 :     }
2069 :    
2070 : overbeek 1.1 return map { &GenomeO::new('GenomeO',$figO,$_) } $subO->get_genomes;
2071 :     }
2072 :    
2073 : overbeek 1.9
2074 :    
2075 : overbeek 1.4 =head3 roles
2076 :    
2077 :     =cut
2078 :    
2079 : overbeek 1.1 sub roles {
2080 :     my($self) = @_;
2081 :    
2082 :     my $figO = $self->{_figO};
2083 :     my $subO = $self->{_subO};
2084 : gdpusch 1.33 if (! $subO) {
2085 :     $subO = $self->{_subO} = Subsystem->new($self->{_id}, $figO->{_fig});
2086 :     }
2087 :    
2088 : overbeek 1.1 return map { &FunctionalRoleO::new('FunctionalRoleO',$figO,$_) } $subO->get_roles($self->id);
2089 :     }
2090 :    
2091 : overbeek 1.9
2092 :    
2093 : overbeek 1.4 =head3 curator
2094 :    
2095 :     =cut
2096 :    
2097 : overbeek 1.1 sub curator {
2098 :     my($self) = @_;
2099 :    
2100 :     my $figO = $self->{_figO};
2101 :     my $subO = $self->{_subO};
2102 : gdpusch 1.33 if (! $subO) {
2103 :     $subO = $self->{_subO} = Subsystem->new($self->{_id}, $figO->{_fig});
2104 :     }
2105 :    
2106 : overbeek 1.9 return $subO->get_curator;
2107 : overbeek 1.1 }
2108 :    
2109 : overbeek 1.4
2110 :    
2111 :    
2112 :     =head3 variant
2113 :    
2114 :     =cut
2115 :    
2116 : overbeek 1.1 sub variant {
2117 :     my($self,$genome) = @_;
2118 :    
2119 :     my $figO = $self->{_figO};
2120 :     my $subO = $self->{_subO};
2121 : gdpusch 1.33 if (! $subO) {
2122 :     $subO = $self->{_subO} = Subsystem->new($self->{_id},$figO->{_fig});
2123 :     }
2124 :    
2125 : overbeek 1.1 return $subO->get_variant_code_for_genome($genome->id);
2126 :     }
2127 : overbeek 1.4
2128 :    
2129 :    
2130 :     =head3 pegs_in_cell
2131 :    
2132 :     =cut
2133 :    
2134 : overbeek 1.1 sub pegs_in_cell {
2135 :     my($self,$genome,$role) = @_;
2136 :    
2137 :     my $figO = $self->{_figO};
2138 :     my $subO = $self->{_subO};
2139 : gdpusch 1.33 if (! $subO) {
2140 :     $subO = $self->{_subO} = Subsystem->new($self->{_id},$figO->{_fig});
2141 :     }
2142 :    
2143 : overbeek 1.1 return $subO->get_pegs_from_cell($genome->id,$role->id);
2144 :     }
2145 :    
2146 : overbeek 1.4
2147 :    
2148 :     ########################################################################
2149 : overbeek 1.1 package FunctionalRoleO;
2150 : overbeek 1.4 ########################################################################
2151 :     use Data::Dumper;
2152 : overbeek 1.1
2153 : overbeek 1.4 =head1 FunctionalRoleO
2154 :    
2155 : overbeek 1.9 Methods for accessing the functional roles of features.
2156 :    
2157 : overbeek 1.4 =cut
2158 :    
2159 :    
2160 :     =head3 new
2161 :    
2162 :     =cut
2163 : overbeek 1.1
2164 :     sub new {
2165 :     my($class,$figO,$fr) = @_;
2166 :    
2167 :     my $self = {};
2168 :     $self->{_figO} = $figO;
2169 :     $self->{_id} = $fr;
2170 :     return bless $self, $class;
2171 : parrello 1.32 }
2172 : overbeek 1.1
2173 : overbeek 1.4
2174 :    
2175 :     =head3 id
2176 :    
2177 :     =cut
2178 :    
2179 : overbeek 1.1 sub id {
2180 :     my($self) = @_;
2181 :    
2182 :     return $self->{_id};
2183 :     }
2184 :    
2185 : overbeek 1.4
2186 :    
2187 :     ########################################################################
2188 : overbeek 1.1 package FigFamO;
2189 : overbeek 1.4 ########################################################################
2190 : overbeek 1.1 use FigFams;
2191 :     use FigFam;
2192 :    
2193 : overbeek 1.4
2194 :     =head1 FigFamO
2195 :    
2196 :     =cut
2197 :    
2198 :    
2199 :     =head3 new
2200 :    
2201 :     =cut
2202 :    
2203 : overbeek 1.1 sub new {
2204 :     my($class,$figO,$id) = @_;
2205 :    
2206 :     my $self = {};
2207 :     $self->{_figO} = $figO;
2208 :     $self->{_id} = $id;
2209 :     return bless $self, $class;
2210 : parrello 1.32 }
2211 : overbeek 1.1
2212 : overbeek 1.4
2213 :    
2214 :     =head3 id
2215 :    
2216 :     =cut
2217 :    
2218 : overbeek 1.1 sub id {
2219 :     my($self) = @_;
2220 :    
2221 :     return $self->{_id};
2222 :     }
2223 :    
2224 : overbeek 1.4
2225 :     =head3 function
2226 :    
2227 :     =cut
2228 :    
2229 : overbeek 1.1 sub function {
2230 :     my($self) = @_;
2231 :    
2232 :     my $fig = $self->{_figO}->{_fig};
2233 :     my $famO = $self->{_famO};
2234 :     if (! $famO) { $famO = $self->{_famO} = &FigFam::new('FigFam',$fig,$self->id) }
2235 : parrello 1.32
2236 : overbeek 1.1 return $famO->family_function;
2237 :     }
2238 :    
2239 : overbeek 1.4
2240 :    
2241 :     =head3 members
2242 :    
2243 :     =cut
2244 :    
2245 : overbeek 1.1 sub members {
2246 :     my($self) = @_;
2247 :    
2248 :     my $figO = $self->{_figO};
2249 :     my $fig = $figO->{_fig};
2250 :     my $famO = $self->{_famO};
2251 :     if (! $famO) { $famO = $self->{_famO} = &FigFam::new('FigFam',$fig,$self->id) }
2252 : parrello 1.32
2253 : overbeek 1.18 return map { &FeatureO::new('FeatureO',$figO,$_) } $famO->list_members;
2254 : overbeek 1.1 }
2255 :    
2256 : overbeek 1.4 =head3 rep_seqs
2257 :    
2258 :     =cut
2259 :    
2260 : overbeek 1.1 sub rep_seqs {
2261 :     my($self) = @_;
2262 :    
2263 :     my $figO = $self->{_figO};
2264 :     my $fig = $figO->{_fig};
2265 :     my $famO = $self->{_famO};
2266 :     if (! $famO) { $famO = $self->{_famO} = &FigFam::new('FigFam',$fig,$self->id) }
2267 : parrello 1.32
2268 : overbeek 1.1 return $famO->representatives;
2269 :     }
2270 :    
2271 : overbeek 1.4
2272 :    
2273 :     =head3 should_be_member
2274 :    
2275 :     =cut
2276 :    
2277 : overbeek 1.1 sub should_be_member {
2278 :     my($self,$seq) = @_;
2279 :    
2280 :     my $figO = $self->{_figO};
2281 :     my $fig = $figO->{_fig};
2282 :     my $famO = $self->{_famO};
2283 :     if (! $famO) { $famO = $self->{_famO} = &FigFam::new('FigFam',$fig,$self->id) }
2284 : parrello 1.32
2285 : overbeek 1.1 return $famO->should_be_member($seq);
2286 :     }
2287 :    
2288 :    
2289 :    
2290 : overbeek 1.4 =head3 display
2291 :    
2292 :     =cut
2293 :    
2294 : overbeek 1.1 sub display {
2295 :     my($self) = @_;
2296 :    
2297 :     print join("\t",($self->id,$self->function)),"\n";
2298 :     }
2299 :    
2300 :    
2301 :    
2302 : overbeek 1.4 ########################################################################
2303 : overbeek 1.1 package Attribute;
2304 : overbeek 1.4 ########################################################################
2305 :     =head1 Attribute
2306 :    
2307 : overbeek 1.9 (Note yet implemented.)
2308 :    
2309 : overbeek 1.4 =cut
2310 : overbeek 1.1
2311 :     1;
2312 : overbeek 1.4 __END__
2313 :    
2314 :     =head1 Examples
2315 :    
2316 :     =head3 Display all complete, prokaryotic genomes
2317 :    
2318 :     use FIGO;
2319 : gdpusch 1.33 my $figO = FIGO->new();
2320 : overbeek 1.4
2321 :     foreach $genome ($figO->genomes('complete','prokaryotic'))
2322 :     {
2323 :     $genome->display;
2324 :     }
2325 :    
2326 :     #---------------------------------------------
2327 :    
2328 :     use FIG;
2329 : gdpusch 1.33 my $fig = FIG->new();
2330 : overbeek 1.4
2331 :     foreach $genome (grep { $fig->is_prokaryotic($_) } $fig->genomes('complete'))
2332 :     {
2333 :     print join("\t",("Genome",$genome,$fig->genus_species($genome))),"\n";
2334 :     }
2335 :    
2336 :     ###############################################
2337 :    
2338 :     =head3 Show how to access contigs and extract sequence
2339 :    
2340 :     use FIGO;
2341 : gdpusch 1.33 my $figO = FIGO->new();
2342 : overbeek 1.4
2343 :     $genomeId = '83333.1';
2344 : gdpusch 1.33 my $genome = GenomeO->new($figO, $genomeId);
2345 : overbeek 1.4
2346 :     foreach $contig ($genome->contigs_of)
2347 :     {
2348 :     $tag1 = $contig->dna_seq(1,10);
2349 :     $tag2 = $contig->dna_seq(10,1);
2350 :     print join("\t",($tag1,$tag2,$contig->id,$contig->contig_length)),"\n";
2351 :     }
2352 :    
2353 :     #---------------------------------------------
2354 :    
2355 :     use FIG;
2356 : gdpusch 1.33 my $fig = FIG->new();
2357 : overbeek 1.4
2358 :     $genomeId = '83333.1';
2359 :    
2360 :     $contig_lengths = $fig->contig_lengths($genomeId);
2361 :    
2362 :     foreach $contig ($fig->contigs_of($genomeId))
2363 :     {
2364 :     $tag1 = $fig->dna_seq($genomeId,join("_",($contig,1,10)));
2365 :     $tag2 = $fig->dna_seq($genomeId,join("_",($contig,10,1)));
2366 :     print join("\t",($tag1,$tag2,$contig,$contig_lengths->{$contig})),"\n";
2367 :     }
2368 :    
2369 :     ###############################################
2370 :    
2371 :     ### accessing data related to features
2372 :    
2373 :     use FIGO;
2374 : gdpusch 1.33 my $figO = FIGO->new();
2375 : overbeek 1.4
2376 : gdpusch 1.33 my $genome = GenomeO->new($figO, "83333.1");
2377 : overbeek 1.4 my $peg = "fig|83333.1.peg.4";
2378 : gdpusch 1.33 my $pegO = FeatureO->new($figO, $peg);
2379 : overbeek 1.4
2380 :     print join("\t",$pegO->id,$pegO->location,$pegO->function_of),"\n",
2381 :     $pegO->dna_seq,"\n",
2382 :     $pegO->prot_seq,"\n";
2383 :    
2384 :     foreach $fidO ($genome->features_of('rna'))
2385 :     {
2386 :     print join("\t",$fidO->id,$fidO->location,$fidO->function_of),"\n";
2387 :     }
2388 :    
2389 :     #---------------------------------------------
2390 :    
2391 :    
2392 :     use FIG;
2393 : gdpusch 1.33 my $fig = FIG->new();
2394 : overbeek 1.4
2395 :     my $genome = "83333.1";
2396 :     my $peg = "fig|83333.1.peg.4";
2397 :    
2398 :     print join("\t",$peg,scalar $fig->feature_location($peg),scalar $fig->function_of($peg)),"\n",
2399 :     $fig->dna_seq($genome,$fig->feature_location($peg)),"\n",
2400 :     $fig->get_translation($peg),"\n";
2401 :    
2402 :     foreach $fid ($fig->all_features($genome,'rna'))
2403 :     {
2404 :     print join("\t",$fid,scalar $fig->feature_location($fid),scalar $fig->function_of($fid)),"\n";
2405 :     }
2406 :    
2407 :     ###############################################
2408 :    
2409 :     ### accessing similarities
2410 :    
2411 :     use FIGO;
2412 : gdpusch 1.33 my $figO = FIGO->new();
2413 : overbeek 1.4
2414 :     $peg = "fig|83333.1.peg.4";
2415 : gdpusch 1.33 $pegO = FeatureO->new($figO, $peg);
2416 : overbeek 1.4
2417 :     @sims = $pegO->sims; # use sims( -all => 1, -max => 10000, -cutoff => 1.0e-20) to all
2418 :     # sims (including non-FIG sequences
2419 :     foreach $sim (@sims)
2420 :     {
2421 :     $peg2 = $sim->id2;
2422 : gdpusch 1.33 $pegO2 = FeatureO->new($figO, $peg2);
2423 : overbeek 1.4 $func = $pegO2->function_of;
2424 :     $sc = $sim->psc;
2425 :     print join("\t",($peg2,$sc,$func)),"\n";
2426 :     }
2427 :    
2428 :     #---------------------------------------------
2429 :    
2430 :    
2431 :     use FIG;
2432 : gdpusch 1.33 my $fig = FIG new;
2433 : overbeek 1.4
2434 :     $peg = "fig|83333.1.peg.4";
2435 :    
2436 :     @sims = $fig->sims($peg,1000,1.0e-5,"fig");
2437 :     foreach $sim (@sims)
2438 :     {
2439 :     $peg2 = $sim->id2;
2440 :     $func = $fig->function_of($peg2);
2441 :     $sc = $sim->psc;
2442 :     print join("\t",($peg2,$sc,$func)),"\n";
2443 :     }
2444 :    
2445 :     ###############################################
2446 :    
2447 :     ### accessing BBHs
2448 :    
2449 :     use FIGO;
2450 : gdpusch 1.33 my $figO = FIGO new;
2451 : overbeek 1.4
2452 :     $peg = "fig|83333.1.peg.4";
2453 : gdpusch 1.33 $pegO = FeatureO->new($figO, $peg);
2454 : overbeek 1.4
2455 :     @bbhs = $pegO->bbhs;
2456 :     foreach $bbh (@bbhs)
2457 :     {
2458 :     $peg2 = $bbh->peg2;
2459 : gdpusch 1.33 $pegO2 = FeatureO->new($figO, $peg2);
2460 : overbeek 1.4 $func = $pegO2->function_of;
2461 :     $sc = $bbh->psc;
2462 :     print join("\t",($peg2,$sc,$func)),"\n";
2463 :     }
2464 :    
2465 :     #---------------------------------------------
2466 :    
2467 :     use FIG;
2468 : gdpusch 1.33 my $fig = FIG->new();
2469 : overbeek 1.4
2470 :     $peg = "fig|83333.1.peg.4";
2471 :    
2472 :     @bbhs = $fig->bbhs($peg);
2473 :     foreach $bbh (@bbhs)
2474 :     {
2475 :     ($peg2,$sc,$bit_score) = @$bbh;
2476 :     $func = $fig->function_of($peg2);
2477 :     print join("\t",($peg2,$sc,$func)),"\n";
2478 :     }
2479 :    
2480 :     ###############################################
2481 :    
2482 :     ### accessing annotations
2483 :    
2484 :     use FIGO;
2485 : gdpusch 1.33 my $figO = FIGO->new();
2486 : overbeek 1.4
2487 :     $peg = "fig|83333.1.peg.4";
2488 : gdpusch 1.33 $pegO = FeatureO->new($figO, $peg);
2489 : overbeek 1.4
2490 :     @annotations = $pegO->annotations;
2491 :    
2492 :     foreach $ann (@annotations)
2493 :     {
2494 :     print join("\n",$ann->fid,$ann->timestamp(1),$ann->made_by,$ann->text),"\n\n";
2495 :     }
2496 :    
2497 :     #---------------------------------------------
2498 :    
2499 :     use FIG;
2500 : gdpusch 1.33 my $fig = FIG->new();
2501 : overbeek 1.4
2502 :     $peg = "fig|83333.1.peg.4";
2503 :     @annotations = $fig->feature_annotations($peg);
2504 :     foreach $_ (@annotations)
2505 :     {
2506 :     (undef,$ts,$who,$text) = @$_;
2507 :     $who =~ s/master://i;
2508 :     print "$ts\n$who\n$text\n\n";
2509 :     }
2510 :    
2511 :     ###############################################
2512 :    
2513 :     ### accessing coupling data
2514 :    
2515 :    
2516 :     use FIGO;
2517 : gdpusch 1.33 my $figO = FIGO->new();
2518 : overbeek 1.4
2519 :     my $peg = "fig|83333.1.peg.4";
2520 : gdpusch 1.33 my $pegO = FeatureO->new($figO, $peg);
2521 : overbeek 1.4 foreach $coupled ($pegO->coupled_to)
2522 :     {
2523 :     print join("\t",($coupled->peg1,$coupled->peg2,$coupled->sc)),"\n";
2524 :     foreach $tuple ($coupled->evidence)
2525 :     {
2526 :     my($peg3O,$peg4O,$rep) = @$tuple;
2527 :     print "\t",join("\t",($peg3O->id,$peg4O->id,$rep)),"\n";
2528 :     }
2529 :     print "\n";
2530 :     }
2531 :    
2532 :     #---------------------------------------------
2533 :    
2534 :    
2535 :     use FIG;
2536 : gdpusch 1.33 my $fig = FIG->new();
2537 : overbeek 1.4
2538 :     my $peg1 = "fig|83333.1.peg.4";
2539 :     foreach $coupled ($fig->coupled_to($peg1))
2540 :     {
2541 :     ($peg2,$sc) = @$coupled;
2542 :     print join("\t",($peg1,$peg2,$sc)),"\n";
2543 :     foreach $tuple ($fig->coupling_evidence($peg1,$peg2))
2544 :     {
2545 :     my($peg3,$peg4,$rep) = @$tuple;
2546 :     print "\t",join("\t",($peg3,$peg4,$rep)),"\n";
2547 :     }
2548 :     print "\n";
2549 :     }
2550 :    
2551 :     ###############################################
2552 :    
2553 :     =head3 Accessing Subsystem data
2554 :    
2555 :     use FIGO;
2556 : gdpusch 1.33 my $figO = FIGO->new();
2557 : overbeek 1.4
2558 :     foreach $sub ($figO->subsystems)
2559 :     {
2560 :     if ($sub->usable)
2561 :     {
2562 :     print join("\t",($sub->id,$sub->curator)),"\n";
2563 :    
2564 :     print "\tRoles\n";
2565 :     @roles = $sub->roles;
2566 :     foreach $role (@roles)
2567 :     {
2568 :     print "\t\t",join("\t",($role->id)),"\n";
2569 :     }
2570 : parrello 1.32
2571 : overbeek 1.4 print "\tGenomes\n";
2572 :     foreach $genome ($sub->genomes)
2573 :     {
2574 :     print "\t\t",join("\t",($sub->variant($genome),
2575 :     $genome->id,
2576 :     $genome->genus_species)),"\n";
2577 :     @pegs = ();
2578 :     foreach $role (@roles)
2579 :     {
2580 :     push(@pegs,$sub->pegs_in_cell($genome,$role));
2581 :     }
2582 :     print "\t\t\t",join(",",@pegs),"\n";
2583 :     }
2584 :     }
2585 :     }
2586 :    
2587 :     #---------------------------------------------
2588 :    
2589 :     use FIG;
2590 : gdpusch 1.33 my $fig = FIG->new();
2591 : overbeek 1.4
2592 :     foreach $sub (grep { $fig->usable_subsystem($_) } $fig->all_subsystems)
2593 :     {
2594 : gdpusch 1.33 $subO = Subsystem->new($sub, $fig);
2595 : overbeek 1.4 $curator = $subO->get_curator;
2596 :     print join("\t",($sub,$curator)),"\n";
2597 :    
2598 :     print "\tRoles\n";
2599 :     @roles = $subO->get_roles;
2600 :     foreach $role (@roles)
2601 :     {
2602 :     print "\t\t",join("\t",($role)),"\n";
2603 :     }
2604 : parrello 1.32
2605 : overbeek 1.4 print "\tGenomes\n";
2606 :     foreach $genome ($subO->get_genomes)
2607 :     {
2608 :     print "\t\t",join("\t",($subO->get_variant_code_for_genome($genome),
2609 :     $genome,
2610 :     $fig->genus_species($genome))),"\n";
2611 :     foreach $role (@roles)
2612 :     {
2613 :     push(@pegs,$subO->get_pegs_from_cell($genome,$role));
2614 :     }
2615 :     print "\t\t\t",join(",",@pegs),"\n";
2616 :     }
2617 :     print "\n";
2618 :     }
2619 :    
2620 :     ###############################################
2621 :    
2622 :     =head3 Accessing FIGfams
2623 :    
2624 :     use FIGO;
2625 : gdpusch 1.33 my $figO = FIGO->new();
2626 : overbeek 1.4
2627 :     foreach $fam ($figO->all_figfams)
2628 :     {
2629 :     print join("\t",($fam->id,$fam->function)),"\n";
2630 :     foreach $pegO ($fam->members)
2631 :     {
2632 :     $peg = $pegO->id;
2633 :     print "\t$peg\n";
2634 :     }
2635 :     }
2636 :    
2637 :     #---------------------------------------------
2638 :    
2639 :     use FIG;
2640 :     use FigFam;
2641 :     use FigFams;
2642 :    
2643 : gdpusch 1.33 my $fig = FIG->new();
2644 :     my $figfams = FigFams->new($fig);
2645 : overbeek 1.4
2646 :     foreach $fam ($figfams->all_families)
2647 :     {
2648 : gdpusch 1.33 my $figfam = FigFam->new($fig, $fam);
2649 : overbeek 1.4 print join("\t",($fam,$figfam->family_function)),"\n";
2650 :     foreach $peg ($figfam->list_members)
2651 :     {
2652 :     print "\t$peg\n";
2653 :     }
2654 :     }
2655 :    
2656 :     ###############################################
2657 :    
2658 :     =head3 Placing a sequence into a FIGfam
2659 :    
2660 :     use FIGO;
2661 : gdpusch 1.33 my $figO = FIGO->new();
2662 : overbeek 1.4
2663 :     $seq = "MKLYNLKDHNEQVSFAQAVTQGLGKNQGLFFPHDLPEFSLTEIDEMLKLDFVTRSAKILS
2664 :     AFIGDEIPQEILEERVRAAFAFPAPVANVESDVGCLELFHGPTLAFKDFGGRFMAQMLTH
2665 :     IAGDKPVTILTATSGDTGAAVAHAFYGLPNVKVVILYPRGKISPLQEKLFCTLGGNIETV
2666 :     AIDGDFDACQALVKQAFDDEELKVALGLNSANSINISRLLAQICYYFEAVAQLPQETRNQ
2667 :     LVVSVPSGNFGDLTAGLLAKSLGLPVKRFIAATNVNDTVPRFLHDGQWSPKATQATLSNA
2668 :     MDVSQPNNWPRVEELFRRKIWQLKELGYAAVDDETTQQTMRELKELGYTSEPHAAVAYRA
2669 :     LRDQLNPGEYGLFLGTAHPAKFKESVEAILGETLDLPKELAERADLPLLSHNLPADFAAL
2670 :     RKLMMNHQ";
2671 :     $seq =~ s/\n//gs;
2672 :    
2673 :     my($fam,$sims) = $figO->family_containing($seq);
2674 : parrello 1.32
2675 : overbeek 1.4 if ($fam)
2676 :     {
2677 :     print join("\t",($fam->id,$fam->function)),"\n";
2678 :     print &Dumper($sims);
2679 :     }
2680 :     else
2681 :     {
2682 :     print "Could not place it in a family\n";
2683 :     }
2684 :    
2685 :     #---------------------------------------------
2686 :    
2687 :     use FIG;
2688 :     use FigFam;
2689 :     use FigFams;
2690 :    
2691 : gdpusch 1.33 my $fig = FIG->new();
2692 :     my $figfams = FigFams->new($fig);
2693 : overbeek 1.4
2694 :     $seq = "MKLYNLKDHNEQVSFAQAVTQGLGKNQGLFFPHDLPEFSLTEIDEMLKLDFVTRSAKILS
2695 :     AFIGDEIPQEILEERVRAAFAFPAPVANVESDVGCLELFHGPTLAFKDFGGRFMAQMLTH
2696 :     IAGDKPVTILTATSGDTGAAVAHAFYGLPNVKVVILYPRGKISPLQEKLFCTLGGNIETV
2697 :     AIDGDFDACQALVKQAFDDEELKVALGLNSANSINISRLLAQICYYFEAVAQLPQETRNQ
2698 :     LVVSVPSGNFGDLTAGLLAKSLGLPVKRFIAATNVNDTVPRFLHDGQWSPKATQATLSNA
2699 :     MDVSQPNNWPRVEELFRRKIWQLKELGYAAVDDETTQQTMRELKELGYTSEPHAAVAYRA
2700 :     LRDQLNPGEYGLFLGTAHPAKFKESVEAILGETLDLPKELAERADLPLLSHNLPADFAAL
2701 :     RKLMMNHQ";
2702 :     $seq =~ s/\n//gs;
2703 :    
2704 :     my($fam,$sims) = $figfams->place_in_family($seq);
2705 : parrello 1.32
2706 : overbeek 1.4 if ($fam)
2707 :     {
2708 :     print join("\t",($fam->family_id,$fam->family_function)),"\n";
2709 :     print &Dumper($sims);
2710 :     }
2711 :     else
2712 :     {
2713 :     print "Could not place it in a family\n";
2714 :     }
2715 :    
2716 :     ###############################################
2717 :    
2718 :     =head3 Getting representative sequences for a FIGfam
2719 :    
2720 :     use FIGO;
2721 : gdpusch 1.33 my $figO = FIGO->new();
2722 : overbeek 1.4
2723 :     $fam = "FIG102446";
2724 :     my $famO = &FigFamO::new('FigFamO',$figO,$fam);
2725 :     my @rep_seqs = $famO->rep_seqs;
2726 :    
2727 :     foreach $seq (@rep_seqs)
2728 :     {
2729 :     print ">query\n$seq\n";
2730 :     }
2731 :    
2732 :     #---------------------------------------------
2733 :    
2734 :     use FIG;
2735 :     use FigFam;
2736 :     use FigFams;
2737 :    
2738 : gdpusch 1.33 my $fig = FIG->new();
2739 : overbeek 1.4
2740 :     $fam = "FIG102446";
2741 : gdpusch 1.33 my $famO = FigFam->new($fig, $fam);
2742 : overbeek 1.4 my @rep_seqs = $famO->representatives;
2743 :    
2744 :     foreach $seq (@rep_seqs)
2745 :     {
2746 :     print ">query\n$seq\n";
2747 :     }
2748 :    
2749 :    
2750 :     ###############################################
2751 :    
2752 :    
2753 :     =head3 Testing for membership in FIGfam
2754 :    
2755 :     use FIGO;
2756 : gdpusch 1.33 my $figO = FIGO->new();
2757 : overbeek 1.4
2758 :     $seq = "MKLYNLKDHNEQVSFAQAVTQGLGKNQGLFFPHDLPEFSLTEIDEMLKLDFVTRSAKILS
2759 :     AFIGDEIPQEILEERVRAAFAFPAPVANVESDVGCLELFHGPTLAFKDFGGRFMAQMLTH
2760 :     IAGDKPVTILTATSGDTGAAVAHAFYGLPNVKVVILYPRGKISPLQEKLFCTLGGNIETV
2761 :     AIDGDFDACQALVKQAFDDEELKVALGLNSANSINISRLLAQICYYFEAVAQLPQETRNQ
2762 :     LVVSVPSGNFGDLTAGLLAKSLGLPVKRFIAATNVNDTVPRFLHDGQWSPKATQATLSNA
2763 :     MDVSQPNNWPRVEELFRRKIWQLKELGYAAVDDETTQQTMRELKELGYTSEPHAAVAYRA
2764 :     LRDQLNPGEYGLFLGTAHPAKFKESVEAILGETLDLPKELAERADLPLLSHNLPADFAAL
2765 :     RKLMMNHQ";
2766 :     $seq =~ s/\n//gs;
2767 :    
2768 :     $fam = "FIG102446";
2769 :     my $famO = &FigFamO::new('FigFamO',$figO,$fam);
2770 :     my($should_be, $sims) = $famO->should_be_member($seq);
2771 :    
2772 :     if ($should_be)
2773 :     {
2774 :     print join("\t",($famO->id,$famO->function)),"\n";
2775 :     print &Dumper($sims);
2776 :     }
2777 :     else
2778 :     {
2779 :     print "Sequence should not be added to family\n";
2780 :     }
2781 :    
2782 :     #---------------------------------------------
2783 :    
2784 :     use FIG;
2785 :     use FigFam;
2786 :     use FigFams;
2787 :    
2788 : gdpusch 1.33 my $fig = FIG->new();
2789 : overbeek 1.4
2790 :     $seq = "MKLYNLKDHNEQVSFAQAVTQGLGKNQGLFFPHDLPEFSLTEIDEMLKLDFVTRSAKILS
2791 :     AFIGDEIPQEILEERVRAAFAFPAPVANVESDVGCLELFHGPTLAFKDFGGRFMAQMLTH
2792 :     IAGDKPVTILTATSGDTGAAVAHAFYGLPNVKVVILYPRGKISPLQEKLFCTLGGNIETV
2793 :     AIDGDFDACQALVKQAFDDEELKVALGLNSANSINISRLLAQICYYFEAVAQLPQETRNQ
2794 :     LVVSVPSGNFGDLTAGLLAKSLGLPVKRFIAATNVNDTVPRFLHDGQWSPKATQATLSNA
2795 :     MDVSQPNNWPRVEELFRRKIWQLKELGYAAVDDETTQQTMRELKELGYTSEPHAAVAYRA
2796 :     LRDQLNPGEYGLFLGTAHPAKFKESVEAILGETLDLPKELAERADLPLLSHNLPADFAAL
2797 :     RKLMMNHQ";
2798 :     $seq =~ s/\n//gs;
2799 :    
2800 :     $fam = "FIG102446";
2801 : gdpusch 1.33 my $famO = FigFam->new($fig, $fam);
2802 : overbeek 1.4 my($should_be, $sims) = $famO->should_be_member($seq);
2803 :    
2804 :     if ($should_be)
2805 :     {
2806 :     print join("\t",($famO->family_id,$famO->family_function)),"\n";
2807 :     print &Dumper($sims);
2808 :     }
2809 :     else
2810 :     {
2811 :     print "Sequence should not be added to family\n";
2812 :     }
2813 :    
2814 :     =cut
2815 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3