annotate variant_effect_predictor/Bio/DB/FileCache.pm @ 1:d6778b5d8382 draft default tip

Deleted selected files
author willmclaren
date Fri, 03 Aug 2012 10:05:43 -0400
parents 21066c0abaf5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 # POD documentation - main docs before the code
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 Bio::DB::FileCache - In file cache for BioSeq objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 $cachedb = Bio::DB::FileCache->new($real_db);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 # $real_db is a Bio::DB::RandomAccessI database
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 $seq = $cachedb->get_Seq_by_id('ROA1_HUMAN');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22 # $seq is a Bio::Seq object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 # more control provided with named-parameter form
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 $cachedb = Bio::DB::FileCache->new( -seqdb => $real_db,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28 -file => $path,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 -keep => $flag,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33 This is a disk cache system which saves the objects returned by
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 Bio::DB::RandomAccessI on disk. The disk cache grows without limit,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 while the process is running, but is automatically unlinked at process
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 termination unless the -keep flag is set.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 This module requires DB_File and Storable.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 =head1 CONTACT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 Lincoln Stein
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 =head2 Reporting Bugs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 Report bugs to the Bioperl bug tracking system to help us keep track
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 the bugs and their resolution. Bug reports can be submitted via email
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48 or the web:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 bioperl-bugs@bio.perl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51 http://bugzilla.bioperl.org/
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 =head1 APPENDIX
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 The rest of the documentation details each of the object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56 methods. Internal methods are usually preceded with a _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 # Let the code begin...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 package Bio::DB::FileCache;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64 use DB_File;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 use Storable qw(freeze thaw);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 use Fcntl qw(O_CREAT O_RDWR O_RDONLY);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67 use File::Temp 'tmpnam';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69 use vars qw(@ISA);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 use Bio::Root::Root;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 @ISA = qw(Bio::Root::Root Bio::DB::SeqI);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76 use Bio::DB::SeqI;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 use Bio::Seq::RichSeq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 use Bio::Location::Split;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 use Bio::Location::Fuzzy;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 use Bio::Seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 use Bio::SeqFeature::Generic;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 use Bio::Species;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 use Bio::Annotation::Collection;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85 =head2 new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 Title : new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 Usage : $db = Bio::DB::FileCache->new(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 -seqdb => $db, # Bio::DB::RandomAccessI database
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 -file => $path, # path to index file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 -keep => $flag, # don't unlink index file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 )
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 Function: creates a new on-disk cache
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 Returns : a Bio::DB::RandomAccessI database
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 Args : as above
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 Throws : "Must be a randomaccess database" exception
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 "Could not open primary index file" exception
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 If no index file is specified, will create a temporary file in your
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 system's temporary file directory. The name of this temporary file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 can be retrieved using file_name().
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 my ($class,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 my $self = Bio::Root::Root->new();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 bless $self,$class;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 my ($seqdb,$file_name,$keep) = $self->_rearrange([qw(SEQDB FILE KEEP)],@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 if( !defined $seqdb || !ref $seqdb || !$seqdb->isa('Bio::DB::RandomAccessI') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 $self->throw("Must be a randomaccess database not a [$seqdb]");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 $self->seqdb($seqdb);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 $file_name ||= tmpnam();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119 $self->file_name($file_name);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 $self->keep($keep);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 $self->_open_database($file_name);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 =head2 get_Seq_by_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 Title : get_Seq_by_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 Usage : $seq = $db->get_Seq_by_id('ROA1_HUMAN')
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 Function: Gets a Bio::Seq object by its name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 Returns : a Bio::Seq object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 Args : the id (as a string) of a sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 Throws : "id does not exist" exception
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 sub get_Seq_by_id{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 my ($self,$id) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 # look in the cache first
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 my $obj = $self->_get('id' => $id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 return $obj if defined $obj;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 # get object from seqdb
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 $obj = $self->seqdb->get_Seq_by_id($id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 $self->_store('id' => $id, $obj);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 return $obj;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 =head2 get_Seq_by_acc
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 Title : get_Seq_by_acc
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 Usage : $seq = $db->get_Seq_by_acc('X77802');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 Function: Gets a Bio::Seq object by accession number
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 Returns : A Bio::Seq object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 Args : accession number (as a string)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 Throws : "acc does not exist" exception
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 sub get_Seq_by_acc{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 my ($self,$acc) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 # look in the cache first
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 my $obj = $self->_get('acc' => $acc);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 return $obj if defined $obj;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 # get object from seqdb
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 $obj = $self->seqdb->get_Seq_by_acc($acc);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 $self->_store('acc' => $acc, $obj);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 return $obj;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 =head2 seqdb
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 Title : seqdb
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 Usage : $seqdb = $db->seqdb([$seqdb])
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 Function: gets/sets the Bio::DB::RandomAccessI database
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 Returns : a Bio::DB::RandomAccessI database
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 Args : new sequence database (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 Throws : nothing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 sub seqdb {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 my ($self, $seqdb) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 if ($seqdb) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 $self->{'seqdb'} = $seqdb;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 return $self->{'seqdb'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 =head2 file_name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 Title : file_name
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 Usage : $path = $db->file_name([$file_name])
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 Function: gets/sets the name of the cache file
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 Returns : a path
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 Args : new cache file name (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 Throws : nothing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 It probably isn't useful to set the cache file name after you've
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 opened it.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 #'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 sub file_name {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 my $d = $self->{file_name};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 $self->{file_name} = shift if @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 $d;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 =head2 keep
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 Title : keep
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 Usage : $keep = $db->keep([$flag])
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 Function: gets/sets the value of the "keep" flag
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 Returns : current value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 Args : new value (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 Throws : nothing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 The keep flag will cause the index file to be unlinked when the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 process exits. Since on some operating systems (Unix, OS/2) the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 unlinking occurs during the new() call immediately after opening the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 file, it probably isn't safe to change this value.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 sub keep {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 my $d = $self->{keep};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 $self->{keep} = shift if @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 $d;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 =head2 db
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 Title : db
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 Usage : $db->db
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 Function: returns tied hash to index database
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 Returns : a Berkeley DB tied hashref
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 Throws : nothing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 sub db { shift->{db} }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 =head2 flush
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 Title : flush
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 Usage : $db->flush
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 Function: flushes the cache
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 Returns : nothing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263 Args : none
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 Throws : nothing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 sub flush {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 my $db = shift->db or return;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 %{$db} = ();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 sub _get {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 my ($type,$id) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 my $serialized = $self->db->{"${type}_${id}"};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277 my $obj = thaw($serialized);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 $obj;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 sub _store {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 my ($type,$id,$obj) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 my $serialized = freeze($obj);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 $self->db->{"${type}_${id}"} = $serialized;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 =head2 get_Seq_by_version
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 Title : get_Seq_by_version
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 Usage : $seq = $db->get_Seq_by_version('X77802.1');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 Function: Gets a Bio::Seq object by sequence version
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 Returns : A Bio::Seq object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 Args : accession.version (as a string)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 Throws : "acc.version does not exist" exception
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 sub get_Seq_by_version{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 my ($self,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 $self->throw("Not implemented it");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 sub DESTROY {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 unlink $self->file_name unless $self->keep;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 sub _open_database {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 my $file = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 my $flags = O_CREAT|O_RDWR;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 my %db;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 tie(%db,'DB_File',$file,$flags,0666,$DB_BTREE)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316 or $self->throw("Could not open primary index file");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317 $self->{db} = \%db;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 unlink $file unless $self->keep;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 ## End of Package
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 1;