annotate variant_effect_predictor/Bio/SeqFeature/Collection.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: Collection.pm,v 1.9.2.1 2003/02/21 03:07:19 jason Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::SeqFeature::Collection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Jason Stajich <jason@bioperl.org>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Jason Stajich
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 Bio::SeqFeature::Collection - A container class for SeqFeatures
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 suitable for performing operations such as finding features within a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 range, that match a certain feature type, etc.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 use Bio::SeqFeature::Collection;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 use Bio::Location::Simple;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 use Bio::Tools::GFF;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 use Bio::Root::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 # let's first input some features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 my $gffio = Bio::Tools::GFF->new(-file => Bio::Root::IO->catfile
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 ("t","data","myco_sites.gff"),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 -gff_version => 2);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 my @features = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 # loop over the input stream
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 while(my $feature = $gffio->next_feature()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 # do something with feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 push @features, $feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 $gffio->close();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 # build the Collection object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 my $col = new Bio::SeqFeature::Collection();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 # add these features to the object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 my $totaladded = $col->add_features(\@features);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 my @subset = $col->features_in_range(-start => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 -end => 25000,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 -strand => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 -contain => 0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 # subset should have 18 entries for this dataset
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 print "size is ", scalar @subset, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 @subset = $col->features_in_range(-range => Bio::Location::Simple->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 (-start => 70000,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 -end => 150000,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 -strand => -1),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 -contain => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 -strandmatch => 'strong');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 # subset should have 22 entries for this dataset
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 print "size is ", scalar @subset, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 print "total number of features in collection is ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 $col->feature_count(),"\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 This object will efficiently allow one for query subsets of ranges
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 within a large collection of sequence features (in fact the objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 just have to be Bio::RangeI compliant). This is done by the creation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 of bins which are stored in order in a B-Tree data structure as
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 provided by the DB_File interface to the Berkeley DB.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 This is based on work done by Lincoln for storage in a mysql instance
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 - this is intended to be an embedded in-memory implementation for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 easily quering for subsets of a large range set. All features are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 held in memory even if the -usefile flag is provided.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 Bioperl modules. Send your comments and suggestions preferably to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 the Bioperl mailing list. Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 http://bioperl.org/MailList.shtml - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 of the bugs and their resolution. Bug reports can be submitted via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 bioperl-bugs@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 =head1 AUTHOR - Jason Stajich
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 Email jason@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 =head1 CONTRIBUTORS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 Using code and strategy developed by Lincoln Stein (lstein@cshl.org)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 in Bio::DB::GFF implementation.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 The rest of the documentation details each of the object methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 package Bio::SeqFeature::Collection;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 # Object preamble - inherits from Bio::Root::Root
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 use Bio::Root::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 use Bio::Root::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 use Bio::DB::GFF::Util::Binning;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 use DB_File;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 use Bio::Location::Simple;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 @ISA = qw(Bio::Root::Root );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 # This may need to get re-optimized for BDB usage as these
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 # numbers were derived empirically by Lincoln on a mysql srv
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 # running on his laptop
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 # this is the largest that any reference sequence can be (100 megabases)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 use constant MAX_BIN => 100_000_000;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 # this is the smallest bin (1 K)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 use constant MIN_BIN => 1_000;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 Title : new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 Usage : my $obj = new Bio::SeqFeature::Collection();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 Function: Builds a new Bio::SeqFeature::Collection object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 Returns : Bio::SeqFeature::Collection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 -minbin minimum value to use for binning
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 (default is 100,000,000)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 -maxbin maximum value to use for binning
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 (default is 1,000)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 -usefile boolean to use a file to store
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 BTREE rather than an in-memory structure
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 (default is false or in-memory).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 -features Array ref of features to add initially
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 my($class,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 my $self = $class->SUPER::new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 my ($maxbin,$minbin,$usefile,$features) = $self->_rearrange([qw(MAXBIN MINBIN
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 USEFILE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 FEATURES)],@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 defined $maxbin && $self->max_bin($maxbin);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 defined $minbin && $self->min_bin($minbin);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 defined $features && $self->add_features($features);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 $DB_BTREE->{'flags'} = R_DUP ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 $DB_BTREE->{'compare'} = \&_compare;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 # $DB_BTREE->{'compare'} = \&_comparepack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 $self->{'_btreehash'} = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 my $tmpname = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 if( $usefile ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 $self->{'_io'} = new Bio::Root::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 (undef,$tmpname) = $self->{'_io'}->tempfile();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 unlink($tmpname);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 $self->debug("tmpfile is $tmpname");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 $self->{'_btree'} = tie %{$self->{'_btreehash'}},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 'DB_File', $tmpname, O_RDWR|O_CREAT, 0640, $DB_BTREE;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 # possibly storing/retrieving as floats for speed improvement?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 # $self->{'_btree'}->filter_store_key ( sub { $_ = pack ("d", $_) } );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 # $self->{'_btree'}->filter_fetch_key ( sub { $_ = unpack("d", $_) } );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 $self->{'_features'} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 =head2 add_features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 Title : add_features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 Usage : $collection->add_features(\@features);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 Returns : number of features added
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 Args : arrayref of Bio::SeqFeatureI objects to index
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 sub add_features{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 my ($self,$feats) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 if( ref($feats) !~ /ARRAY/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 $self->warn("Must provide a valid Array reference to add_features");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 my $count = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 foreach my $f ( @$feats ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 if( ! $f || ! ref($f) || ! $f->isa('Bio::RangeI') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 $self->warn("Must provide valid Bio::RangeI objects to add_features, skipping object '$f'\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 my $bin = bin($f->start,$f->end,$self->min_bin);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 push @{$self->{'_features'}}, $f;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 $self->{'_btreehash'}->{$bin} = $#{$self->{'_features'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 $self->debug( "$bin for ". $f->location->to_FTstring(). " matches ".$#{$self->{'_features'}}. "\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 $count++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 return $count;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 =head2 features_in_range
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 Title : features_in_range
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 Usage : my @features = $collection->features_in_range($range)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 Function: Retrieves a list of features which were contained or overlap the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 the requested range (see Args for way to specify overlap or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 only those containe)d
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 Returns : List of Bio::SeqFeatureI objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 Args : -range => Bio::RangeI object defining range to search,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 OR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 -start => start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 -end => end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 -strand => strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 -contain => boolean - true if feature must be completely
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 contained with range
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 OR false if should include features that simply overlap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 the range. Default: true.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 -strandmatch => 'strong', ranges must have the same strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 'weak', ranges must have the same
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 strand or no strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 'ignore', ignore strand information
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 Default. 'ignore'.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 sub features_in_range{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 my (@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 my ($range, $contain, $strandmatch,$start,$end,$strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 if( @args == 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 $range = shift @args;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 ($start,$end,$strand,$range,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 $contain,$strandmatch) = $self->_rearrange([qw(START END
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 STRAND
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 RANGE CONTAIN
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 STRANDMATCH)],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 $contain = 1 unless defined $contain;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 $strand = 1 unless defined $strand;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 if( $strand !~ /^([\-\+])$/ &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 $strand !~ /^[\-\+]?1$/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 $self->warn("must provide a valid numeric or +/- for strand");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 return ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 if( defined $1 ) { $strand .= 1; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 if( !defined $start && !defined $end ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 if( ! defined $range || !ref($range) || ! $range->isa("Bio::RangeI") )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 $self->warn("Must defined a valid Range for the method feature_in_range");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 return ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 ($start,$end,$strand) = ($range->start,$range->end,$range->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 my $r = new Bio::Location::Simple(-start => $start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 -end => $end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 -strand => $strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 my @features;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 my $maxbin = $self->max_bin;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 my $minbin = $self->min_bin;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 my $tier = $maxbin;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 my ($k,$v,@bins) = ("",undef);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 while ($tier >= $minbin) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 my ($tier_start,$tier_stop) = (bin_bot($tier,$start),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 bin_top($tier,$end));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 if( $tier_start == $tier_stop ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 my @vals = $self->{'_btree'}->get_dup($tier_start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 if( scalar @vals > 0 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 push @bins, map { $self->{'_features'}->[$_] } @vals;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 $k = $tier_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 my @vals;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 for( my $rc = $self->{'_btree'}->seq($k,$v,R_CURSOR);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 $rc == 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 $rc = $self->{'_btree'}->seq($k,$v, R_NEXT) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 last if( $k > $tier_stop || $k < $tier_start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 push @vals, $v;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 foreach my $v ( @vals ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 if( defined $self->{'_features'}->[$v] ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 push @bins, $self->{'_features'}->[$v] ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 $tier /= 10;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 $strandmatch = 'ignore' unless defined $strandmatch;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 return ( $contain ) ? grep { $r->contains($_,$strandmatch) } @bins :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 grep { $r->overlaps($_,$strandmatch)} @bins;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 =head2 remove_features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 Title : remove_features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 Usage : $collection->remove_features(\@array)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 Function: Removes the requested sequence features (based on features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 which have the same location)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 Returns : Number of features removed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 Args : Arrayref of Bio::RangeI objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 sub remove_features{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 my ($self,$feats) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 if( ref($feats) !~ /ARRAY/i ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 $self->warn("Must provide a valid Array reference to remove_features");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 my $countprocessed = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 foreach my $f ( @$feats ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 next if ! ref($f) || ! $f->isa('Bio::RangeI');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 my $bin = bin($f->start,$f->end,$self->min_bin);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 my @vals = $self->{'_btree'}->get_dup($bin);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 my $vcount = scalar @vals;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 foreach my $v ( @vals ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 # eventually this array will become sparse...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 if( $self->{'_features'}->[$v] == $f ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 $self->{'_features'}->[$v] = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 $self->{'_btree'}->del_dup($bin,$v);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 $vcount--;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 if( $vcount == 0 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 $self->{'_btree'}->del($bin);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 =head2 get_all_features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 Title : get_all_features
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 Usage : my @f = $col->get_all_features()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 Function: Return all the features stored in this collection (Could be large)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 Returns : Array of Bio::RangeI objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 Args : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 sub get_all_features{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 return grep {defined $_} @{ $self->{'_features'} };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 =head2 min_bin
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 Title : min_bin
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 Usage : my $minbin= $self->min_bin;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 Function: Get/Set the minimum value to use for binning
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 Returns : integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 Args : [optional] minimum bin value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 sub min_bin {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 my ($self,$min) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 if( defined $min ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 $self->{'_min_bin'} = $min;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 return $self->{'_min_bin'} || MIN_BIN;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 =head2 max_bin
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 Title : max_bin
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 Usage : my $maxbin= $self->max_bin;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 Function: Get/Set the maximum value to use for binning
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 Returns : integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 Args : [optional] maximum bin value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 sub max_bin {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 my ($self,$max) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 if( defined $max ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 $self->{'_max_bin'} = $max;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 return $self->{'max_bin'} || MAX_BIN;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 =head2 feature_count
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 Title : feature_count
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 Usage : my $c = $col->feature_count()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 Function: Retrieve the total number of features in the collection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 Returns : integer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 sub feature_count{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 return scalar ( grep {defined $_} @{ $self->{'_features'} });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 sub _compare{ if( defined $_[0] && ! defined $_[1] ) { return -1 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 elsif ( defined $_[1] && ! defined $_[0] ) { return 1}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 $_[0] <=> $_[1]}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 sub _comparepack { unpack("d", $_[0]) <=> unpack("d", $_[1]) ;}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 sub DESTROY {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 $self->SUPER::DESTROY();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 if( defined $self->{'_io'} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 $self->{'_io'}->_io_cleanup();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 $self->{'_io'} = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 $self->{'_btree'} = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 1;