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