annotate variant_effect_predictor/Bio/Seq/LargePrimarySeq.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 # $Id: LargePrimarySeq.pm,v 1.27 2002/12/01 00:05:21 jason Exp $
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 # BioPerl module for Bio::Seq::LargePrimarySeq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5 # Cared for by Ewan Birney <birney@ebi.ac.uk>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 # Copyright Ewan Birney
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 # updated to utilize File::Temp - jason 2000-12-12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12 # POD documentation - main docs before the code
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 Bio::Seq::LargePrimarySeq - PrimarySeq object that stores sequence as
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 files in the tempdir (as found by File::Temp) or the default method in
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18 Bio::Root::Root
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22 # normal primary seq usage
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26 This object stores a sequence as a series of files in a temporary
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 directory. The aim is to allow someone the ability to store very large
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28 sequences (eg, E<gt> 100MBases) in a file system without running out of memory
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 (eg, on a 64 MB real memory machine!).
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31 Of course, to actually make use of this functionality, the programs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 which use this object B<must> not call $primary_seq-E<gt>seq otherwise the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33 entire sequence will come out into memory and probably paste your
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 machine. However, calls $primary_seq-E<gt>subseq(10,100) will cause only
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 90 characters to be brought into real memory.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37 =head1 FEEDBACK
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39 =head2 Mailing Lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41 User feedback is an integral part of the evolution of this
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 and other Bioperl modules. Send your comments and suggestions preferably
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43 to one of the Bioperl mailing lists.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44 Your participation is much appreciated.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 bioperl-l@bioperl.org - General discussion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 http://bio.perl.org/MailList.html - About the mailing lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 =head2 Reporting Bugs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51 Report bugs to the Bioperl bug tracking system to help us keep track
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 the bugs and their resolution. Bug reports can be submitted via email
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53 or the web:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 bioperl-bugs@bio.perl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56 http://bugzilla.bioperl.org/
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 =head1 AUTHOR - Ewan Birney, Jason Stajich
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 Email birney@ebi.ac.uk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61 Email jason@bioperl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 =head1 APPENDIX
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 The rest of the documentation details each of the object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 methods. Internal methods are usually preceded with a _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 # Let the code begin...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 package Bio::Seq::LargePrimarySeq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 use vars qw($AUTOLOAD @ISA);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 use Bio::PrimarySeq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 use Bio::Root::IO;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 @ISA = qw(Bio::PrimarySeq Bio::Root::IO);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84 my ($class, %params) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 # don't let PrimarySeq set seq until we have
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 # opened filehandle
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 my $seq = $params{'-seq'} || $params{'-SEQ'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 if($seq ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 delete $params{'-seq'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 delete $params{'-SEQ'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94 my $self = $class->SUPER::new(%params);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 $self->_initialize_io(%params);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 my $tempdir = $self->tempdir( CLEANUP => 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 my ($tfh,$file) = $self->tempfile( DIR => $tempdir );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99 $tfh && $self->_fh($tfh);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 $file && $self->_filename($file);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 $self->length(0);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 $seq && $self->seq($seq);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 sub length {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 my ($obj,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 if( defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 $obj->{'length'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 return (defined $obj->{'length'}) ? $obj->{'length'} : 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 =head2 seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119 Title : seq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 sub seq {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 my ($self, $data) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 if( defined $data ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 if( $self->length() == 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 $self->add_sequence_as_string($data);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 $self->warn("Trying to reset the seq string, cannot do this with a LargePrimarySeq - must allocate a new object");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 return $self->subseq(1,$self->length);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 =head2 subseq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 Title : subseq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 Usage :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 Returns :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 Args :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 sub subseq{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 my ($self,$start,$end) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 my $string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 my $fh = $self->_fh();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 if( ref($start) && $start->isa('Bio::LocationI') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 my $loc = $start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 if( $loc->length == 0 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 $self->warn("Expect location lengths to be > 0");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 return '';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 } elsif( $loc->end < $loc->start ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 # what about circular seqs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 $self->warn("Expect location start to come before location end");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 my $seq = '';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 if( $loc->isa('Bio::Location::SplitLocationI') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 foreach my $subloc ( $loc->sub_Location ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 if(! seek($fh,$subloc->start() - 1,0)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 $self->throw("Unable to seek on file $start:$end $!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 my $ret = read($fh, $string, $subloc->length());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 if( !defined $ret ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 $self->throw("Unable to read $start:$end $!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 if( $subloc->strand < 0 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 $string = Bio::PrimarySeq->new(-seq => $string)->revcom()->seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 $seq .= $string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 if(! seek($fh,$loc->start()-1,0)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 $self->throw("Unable to seek on file ".$loc->start.":".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 $loc->end ." $!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 my $ret = read($fh, $string, $loc->length());
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 if( !defined $ret ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 $self->throw("Unable to read ".$loc->start.":".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 $loc->end ." $!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 $seq = $string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 if( defined $loc->strand &&
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 $loc->strand < 0 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 $seq = Bio::PrimarySeq->new(-seq => $seq)->revcom()->seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 return $seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 if( $start <= 0 || $end > $self->length ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 $self->throw("Attempting to get a subseq out of range $start:$end vs ".
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 $self->length);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 if( $end < $start ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 $self->throw("Attempting to subseq with end ($end) less than start ($start). To revcom use the revcom function with trunc");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 if(! seek($fh,$start-1,0)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 $self->throw("Unable to seek on file $start:$end $!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 my $ret = read($fh, $string, $end-$start+1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 if( !defined $ret ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 $self->throw("Unable to read $start:$end $!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 return $string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 =head2 add_sequence_as_string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 Title : add_sequence_as_string
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 Usage : $seq->add_sequence_as_string("CATGAT");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 Function: Appends additional residues to an existing LargePrimarySeq object.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 This allows one to build up a large sequence without storing
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 entire object in memory.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 Returns : Current length of sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 Args : string to append
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 sub add_sequence_as_string{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 my ($self,$str) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 my $len = $self->length + CORE::length($str);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 my $fh = $self->_fh();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 if(! seek($fh,0,2)) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 $self->throw("Unable to seek end of file: $!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 $self->_print($str);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 $self->length($len);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 =head2 _filename
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 Title : _filename
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 Usage : $obj->_filename($newval)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 Returns : value of _filename
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 Args : newvalue (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 sub _filename{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 my ($obj,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 if( defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 $obj->{'_filename'} = $value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 return $obj->{'_filename'};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 =head2 alphabet
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 Title : alphabet
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265 Usage : $obj->alphabet($newval)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 Function:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 Example :
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 Returns : value of alphabet
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 Args : newvalue (optional)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 sub alphabet{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 my ($self,$value) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 if( defined $value) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277 $self->SUPER::alphabet($value);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 return $self->SUPER::alphabet() || 'dna';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 sub DESTROY {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 my $fh = $self->_fh();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 close($fh) if( defined $fh );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 # this should be handled by Tempfile removal, but we'll unlink anyways.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 unlink $self->_filename() if defined $self->_filename() && -e $self->_filename;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 $self->SUPER::DESTROY();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 1;