/usr/lib/perl5/Ace/Sequence/FeatureList.pm is in libace-perl 1.92-2build3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | package Ace::Sequence::FeatureList;
use overload '""' => 'asString';
sub new {
local $^W = 0; # to prevent untrackable uninitialized variable warning
my $package =shift;
my @lines = split("\n",$_[0]);
my (%parsed);
foreach (@lines) {
next if m!^//!;
my ($minor,$major,$count) = split "\t";
next unless $count > 0;
$parsed{$major}{$minor} += $count;
$parsed{_TOTAL} += $count;
}
return bless \%parsed,$package;
}
# no arguments, scalar context -- count all features
# no arguments, array context -- list of major types
# 1 argument, scalar context -- count of major type
# 1 argument, array context -- list of minor types
# 2 arguments -- count of subtype
sub types {
my $self = shift;
my ($type,$subtype) = @_;
my $count = 0;
unless ($type) {
return wantarray ? grep !/^_/,keys %$self : $self->{_TOTAL};
}
unless ($subtype) {
return keys %{$self->{$type}} if wantarray;
foreach (keys %{$self->{$type}}) {
$count += $self->{$type}{$_};
}
return $count;
}
return $self->{$type}{$subtype};
}
# human-readable summary table
sub asString {
my $self = shift;
my ($type,$subtype);
for my $type ( sort $self->types() ) {
for my $subtype (sort $self->types($type) ) {
print join("\t",$type,$subtype,$self->{$type}{$subtype}),"\n";
}
}
}
1;
=head1 NAME
Ace::Sequence::FeatureList - Lightweight Access to Features
=head1 SYNOPSIS
# get a megabase from the middle of chromosome I
$seq = Ace::Sequence->new(-name => 'CHROMOSOME_I,
-db => $db,
-offset => 3_000_000,
-length => 1_000_000);
# find out what's there
$list = $seq->feature_list;
# Scalar context: count all the features
$feature_count = $list->types;
# Array context: list all the feature types
@feature_types = $list->types;
# Scalar context, 1 argument. Count this type
$gene_cnt = $list->types('Predicted_gene');
print "There are $gene_cnt genes here.\n";
# Array context, 1 argument. Get list of subtypes
@subtypes = $list->types('Predicted_gene');
# Two arguments. Count type & subtype
$genefinder_cnt = $list->types('Predicted_gene','genefinder');
=head1 DESCRIPTION
I<Ace::Sequence::FeatureList> is a small class that provides
statistical information about sequence features. From it you can
obtain summary counts of the features and their types within a
selected region.
=head1 OBJECT CREATION
You will not ordinarily create an I<Ace::Sequence::FeatureList> object
directly. Instead, objects will be created by calling a
I<Ace::Sequence> object's feature_list() method. If you wish to
create an I<Ace::Sequence::FeatureList> object directly, please consult
the source code for the I<new()> method.
=head1 OBJECT METHODS
There are only two methods in I<Ace::Sequence::FeatureList>.
=over 4
=item type()
This method has five distinct behaviors, depending on its context and
the number of parameters. Usage should be intuitive
Context Arguments Behavior
------- --------- --------
scalar -none- total count of features in list
array -none- list feature types (e.g. "exon")
scalar type count features of this type
array type list subtypes of this type
-any- type,subtype count features of this type & subtype
For example, this code fragment will count the number of exons present
on the list:
$exon_count = $list->type('exon');
This code fragment will count the number of exons found by "genefinder":
$predicted_exon_count = $list->type('exon','genefinder');
This code fragment will print out all subtypes of "exon" and their
counts:
for my $subtype ($list->type('exon')) {
print $subtype,"\t",$list->type('exon',$subtype),"\n";
}
=item asString()
print $list->asString;
This dumps the list out in tab-delimited format. The order of columns
is type, subtype, count.
=back
=head1 SEE ALSO
L<Ace>, L<Ace::Object>, L<Ace::Sequence>,
L<Ace::Sequence::Feature>, L<GFF>
=head1 AUTHOR
Lincoln Stein <lstein@w3.org> with extensive help from Jean
Thierry-Mieg <mieg@kaa.crbm.cnrs-mop.fr>
Copyright (c) 1999, Lincoln D. Stein
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself. See DISCLAIMER.txt for
disclaimers of warranty.
=cut
|