annotate variant_effect_predictor/Bio/SeqIO/scf.pm @ 0:2bc9b66ada89 draft default tip

Uploaded
author mahtabm
date Thu, 11 Apr 2013 06:29:17 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: scf.pm,v 1.23 2002/11/01 11:16:25 heikki Exp $
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3 # Copyright (c) 1997-2001 bioperl, Chad Matsalla. All Rights Reserved.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
4 # This module is free software; you can redistribute it and/or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
5 # modify it under the same terms as Perl itself.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
6 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Chad Matsalla
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
8 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
9 # You may distribute this module under the same terms as perl itself
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
10
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
11 # POD documentation - main docs before the code
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
12
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
13 =head1 NAME
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
14
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
15 Bio::SeqIO::scf - .scf file input/output stream
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
16
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
17 =head1 SYNOPSIS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
18
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
19 Do not use this module directly. Use it via the Bio::SeqIO class, see
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
20 L<Bio::SeqIO> for more information.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
21
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
22 =head1 DESCRIPTION
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
23
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
24 This object can transform .scf files to and from
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
25 Bio::Seq::SeqWithQuality objects. Mechanisms are present to retrieve
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
26 trace data from scf files.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
27
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
28 =head1 FEEDBACK
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
29
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
30 =head2 Mailing Lists
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
31
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
32
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
33 User feedback is an integral part of the evolution of this and other
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
34 Bioperl modules. Send your comments and suggestions preferably to one
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
35 of the Bioperl mailing lists. Your participation is much appreciated.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
36
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
37 bioperl-l@bioperl.org - General discussion
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
38 http://www.bioperl.org/MailList.shtml - About the mailing lists
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
39
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
40 =head2 Reporting Bugs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
41
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
42 Report bugs to the Bioperl bug tracking system to help us keep track
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
43 the bugs and their resolution. Bug reports can be submitted via email
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
44 or the web:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
45
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
46 bioperl-bugs@bio.perl.org
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
47 http://bugzilla.bioperl.org/
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
48
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
49 =head1 AUTHOR Chad Matsalla
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
50
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
51 Chad Matsalla
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
52 bioinformatics@dieselwurks.com
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
53
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
54 =head1 CONTRIBUTORS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
55
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
56 Jason Stajich, jason@bioperl.org
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
57 Tony Cox, avc@sanger.ac.uk
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
58 Heikki Lehvaslaiho, heikki@ebi.ac.uk
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
59
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
60 =head1 APPENDIX
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
61
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
62 The rest of the documentation details each of the object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
63 methods. Internal methods are usually preceded with a _
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
64
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
65 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
66
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
67 # Let the code begin...
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
68
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
69 package Bio::SeqIO::scf;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
70 use vars qw(@ISA $DEFAULT_QUALITY);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
71 use strict;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
72 use Bio::SeqIO;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
73 use Bio::Seq::SeqFactory;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
74 require 'dumpvar.pl';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
75
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
76 BEGIN {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
77 $DEFAULT_QUALITY= 10;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
78 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
79
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
80 @ISA = qw(Bio::SeqIO);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
81
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
82 sub _initialize {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
83 my($self,@args) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
84 $self->SUPER::_initialize(@args);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
85 if( ! defined $self->sequence_factory ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
86 $self->sequence_factory(new Bio::Seq::SeqFactory
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
87 (-verbose => $self->verbose(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
88 -type => 'Bio::Seq::SeqWithQuality'));
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
89 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
90 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
91
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
92 =head2 next_seq()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
93
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
94 Title : next_seq()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
95 Usage : $scf = $stream->next_seq()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
96 Function: returns the next scf sequence in the stream
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
97 Returns : Bio::Seq::SeqWithQuality object
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
98 Args : NONE
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
99 Notes : Fills the interface specification for SeqIO.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
100 The SCF specification does not provide for having more then
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
101 one sequence in a given scf. So once the filehandle has been open
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
102 and passed to SeqIO don't expect to run this function more then
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
103 once on a given scf unless you embraced and extended the SCF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
104 standard. (But that's just C R A Z Y talk, isn't it.)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
105
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
106 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
107
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
108 #'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
109 sub next_seq {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
110 my ($self) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
111 my ($seq, $seqc, $fh, $buffer, $offset, $length, $read_bytes, @read,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
112 %names);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
113 # set up a filehandle to read in the scf
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
114 $fh = $self->_filehandle();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
115 unless ($fh) { # simulate the <> function
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
116 if ( !fileno(ARGV) or eof(ARGV) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
117 return unless my $ARGV = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
118 open(ARGV,$ARGV) or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
119 $self->throw("Could not open $ARGV for SCF stream reading $!");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
120 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
121 $fh = \*ARGV;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
122 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
123 binmode $fh; # for the Win32/Mac crowds
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
124 return unless read $fh, $buffer, 128; # no exception; probably end of file
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
125 # the first thing to do is parse the header. This is common
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
126 # among all versions of scf.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
127 $self->_set_header($buffer);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
128 # the rest of the the information is different between the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
129 # the different versions of scf.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
130 my $byte = "n";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
131 if ($self->{'version'} lt "3.00") {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
132 # first gather the trace information
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
133 $length = $self->{'samples'}*$self->{sample_size}*4;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
134 $buffer = $self->read_from_buffer($fh,$buffer,$length);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
135 if ($self->{sample_size} == 1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
136 $byte = "c";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
137 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
138 @read = unpack "${byte}${length}",$buffer;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
139 # these traces need to be split
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
140 $self->_set_v2_traces(\@read);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
141 # now go and get the base information
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
142 $offset = $self->{bases_offset};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
143 $length = ($self->{bases} * 12);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
144 seek $fh,$offset,0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
145 $buffer = $self->read_from_buffer($fh,$buffer,$length);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
146 # now distill the information into its fractions.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
147 $self->_set_v2_bases($buffer);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
148 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
149 my $transformed_read;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
150 foreach (qw(A C G T)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
151 $length = $self->{'samples'}*$self->{sample_size};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
152 $buffer = $self->read_from_buffer($fh,$buffer,$length);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
153 if ($self->{sample_size} == 1) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
154 $byte = "c";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
155 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
156 @read = unpack "${byte}${length}",$buffer;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
157 # this little spurt of nonsense is because
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
158 # the trace values are given in the binary
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
159 # file as unsigned shorts but they really
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
160 # are signed. 30000 is an arbitrary number
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
161 # (will there be any traces with a given
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
162 # point greater then 30000? I hope not.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
163 # once the read is read, it must be changed
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
164 # from relative
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
165 for (my $element=0; $element < scalar(@read); $element++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
166 if ($read[$element] > 30000) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
167 $read[$element] = $read[$element] - 65536;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
168 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
169 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
170 $transformed_read = $self->_delta(\@read,"backward");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
171 $self->{'traces'}->{$_} = join(' ',@{$transformed_read});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
172 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
173 # now go and get the peak index information
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
174 $offset = $self->{bases_offset};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
175 $length = ($self->{bases} * 4);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
176 seek $fh,$offset,0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
177 $buffer = $self->read_from_buffer($fh,$buffer,$length);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
178 $self->_set_v3_peak_indices($buffer);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
179 # now go and get the accuracy information
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
180 $buffer = $self->read_from_buffer($fh,$buffer,$length);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
181 $self->_set_v3_base_accuracies($buffer);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
182 # OK, now go and get the base information.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
183 $length = $self->{bases};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
184 $buffer = $self->read_from_buffer($fh,$buffer,$length);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
185 $self->{'parsed'}->{'sequence'} = unpack("a$length",$buffer);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
186 # now, finally, extract the calls from the accuracy information.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
187 $self->_set_v3_quality($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
188 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
189 # now go and get the comment information
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
190 $offset = $self->{comments_offset};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
191 seek $fh,$offset,0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
192 $length = $self->{comment_size};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
193 $buffer = $self->read_from_buffer($fh,$buffer,$length);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
194 $self->_set_comments($buffer);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
195 return $self->sequence_factory->create
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
196 (-seq => $self->{'parsed'}->{'sequence'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
197 -qual => $self->{'parsed'}->{'qualities'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
198 -id => $self->{'comments'}->{'NAME'}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
199 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
200 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
201
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
202
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
203 =head2 _set_v3_quality()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
204
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
205 Title : _set_v3_quality()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
206 Usage : $self->_set_v3_quality()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
207 Function: Set the base qualities from version3 scf's
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
208 Returns : Nothing. Alters $self.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
209 Args : None.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
210 Notes :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
211
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
212 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
213
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
214 #'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
215 sub _set_v3_quality {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
216 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
217 my @bases = split//,$self->{'parsed'}->{'sequence'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
218 my (@qualities,$currbase,$currqual,$counter);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
219 for ($counter=0; $counter <= $#bases ; $counter++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
220 $currbase = uc($bases[$counter]);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
221 if ($currbase eq "A") { $currqual = $self->{'parsed'}->{'base_accuracies'}->{'A'}->[$counter]; }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
222 elsif ($currbase eq "C") { $currqual = $self->{'parsed'}->{'base_accuracies'}->{'C'}->[$counter]; }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
223 elsif ($currbase eq "G") { $currqual = $self->{'parsed'}->{'base_accuracies'}->{'G'}->[$counter]; }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
224 elsif ($currbase eq "T") { $currqual = $self->{'parsed'}->{'base_accuracies'}->{'T'}->[$counter]; }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
225 else { $currqual = "unknown"; }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
226 push @qualities,$currqual;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
227 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
228 $self->{'parsed'}->{'qualities'} = \@qualities;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
229 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
230
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
231 =head2 _set_v3_peak_indices($buffer)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
232
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
233 Title : _set_v3_peak_indices($buffer)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
234 Usage : $self->_set_v3_peak_indices($buffer);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
235 Function: Unpacks the base accuracies for version3 scf
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
236 Returns : Nothing. Alters $self
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
237 Args : A scalar containing binary data.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
238 Notes :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
239
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
240 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
241
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
242 sub _set_v3_peak_indices {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
243 my ($self,$buffer) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
244 my $length = length($buffer);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
245 my ($offset,@read,@positions);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
246 @read = unpack "N$length",$buffer;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
247 $self->{'parsed'}->{'peak_indices'} = join(' ',@read);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
248 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
249
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
250 =head2 _set_v3_base_accuracies($buffer)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
251
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
252 Title : _set_v3_base_accuracies($buffer)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
253 Usage : $self->_set_v3_base_accuracies($buffer)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
254 Function: Set the base accuracies for version 3 scf's
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
255 Returns : Nothing. Alters $self.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
256 Args : A scalar containing binary data.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
257 Notes :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
258
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
259 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
260
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
261 #'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
262 sub _set_v3_base_accuracies {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
263 my ($self,$buffer) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
264 my $length = length($buffer);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
265 my $qlength = $length/4;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
266 my $offset = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
267 my (@qualities,@sorter,$counter,$round,$last_base);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
268 foreach (qw(A C G T)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
269 my @read;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
270 $last_base = $offset + $qlength;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
271 for (;$offset < $last_base; $offset += $qlength) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
272 @read = unpack "c$qlength", substr($buffer,$offset,$qlength);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
273 $self->{'parsed'}->{'base_accuracies'}->{"$_"} = \@read;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
274 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
275 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
276 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
277
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
278
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
279 =head2 _set_comments($buffer)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
280
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
281 Title : _set_comments($buffer)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
282 Usage : $self->_set_comments($buffer);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
283 Function: Gather the comments section from the scf and parse it into its
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
284 components.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
285 Returns : Nothing. Modifies $self.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
286 Args : The buffer. It is expected that the buffer contains a binary
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
287 string for the comments section of an scf file according to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
288 the scf file specifications.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
289 Notes : None. Works like Jello.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
290
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
291 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
292
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
293 sub _set_comments {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
294 my ($self,$buffer) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
295 my $size = length($buffer);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
296 my $comments_retrieved = unpack "a$size",$buffer;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
297 $comments_retrieved =~ s/\0//;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
298 my @comments_split = split/\n/,$comments_retrieved;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
299 if (@comments_split) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
300 foreach (@comments_split) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
301 /(\w+)=(.*)/;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
302 if ($1 && $2) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
303 $self->{'comments'}->{$1} = $2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
304 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
305 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
306 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
307 return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
308 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
309
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
310 =head2 _set_header()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
311
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
312 Title : _set_header($buffer)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
313 Usage : $self->_set_header($buffer);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
314 Function: Gather the header section from the scf and parse it into its
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
315 components.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
316 Returns : Nothing. Modifies $self.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
317 Args : The buffer. It is expected that the buffer contains a binary
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
318 string for the header section of an scf file according to the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
319 scf file specifications.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
320 Notes : None.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
321
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
322 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
323
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
324 sub _set_header {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
325 my ($self,$buffer) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
326 ($self->{'scf'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
327 $self->{'samples'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
328 $self->{'sample_offset'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
329 $self->{'bases'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
330 $self->{'bases_left_clip'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
331 $self->{'bases_right_clip'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
332 $self->{'bases_offset'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
333 $self->{'comment_size'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
334 $self->{'comments_offset'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
335 $self->{'version'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
336 $self->{'sample_size'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
337 $self->{'code_set'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
338 @{$self->{'header_spare'}} ) = unpack "a4 NNNNNNNN a4 NN N20", $buffer;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
339 return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
340
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
341 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
342
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
343 =head2 _set_v2_bases($buffer)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
344
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
345 Title : _set_v2_bases($buffer)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
346 Usage : $self->_set_v2_bases($buffer);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
347 Function: Gather the bases section from the scf and parse it into its
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
348 components.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
349 Returns : Nothing. Modifies $self.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
350 Args : The buffer. It is expected that the buffer contains a binary
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
351 string for the bases section of an scf file according to the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
352 scf file specifications.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
353 Notes : None.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
354
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
355 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
356
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
357 sub _set_v2_bases {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
358 my ($self,$buffer) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
359 my $length = length($buffer);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
360 my ($offset2,$currbuff,$currbase,$currqual,$sequence,@qualities,@indices);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
361 my @read;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
362 for ($offset2=0;$offset2<$length;$offset2+=12) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
363 @read = unpack "N C C C C a C3", substr($buffer,$offset2,$length);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
364 push @indices,$read[0];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
365 $currbase = uc($read[5]);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
366 if ($currbase eq "A") { $currqual = $read[1]; }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
367 elsif ($currbase eq "C") { $currqual = $read[2]; }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
368 elsif ($currbase eq "G") { $currqual = $read[3]; }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
369 elsif ($currbase eq "T") { $currqual = $read[4]; }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
370 else { $currqual = "UNKNOWN"; }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
371 $sequence .= $currbase;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
372 push @qualities,$currqual;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
373 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
374 unless (!@indices) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
375 $self->{'parsed'}->{'peak_indices'} = join(' ',@indices);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
376 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
377 $self->{'parsed'}->{'sequence'} = $sequence;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
378 unless (!@qualities) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
379 $self->{'parsed'}->{'qualities'} = join(' ',@qualities);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
380 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
381 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
382
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
383 =head2 _set_v2_traces(\@traces_array)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
384
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
385 Title : _set_v2_traces(\@traces_array)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
386 Usage : $self->_set_v2_traces(\@traces_array);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
387 Function: Parses an scf Version2 trace array into its base components.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
388 Returns : Nothing. Modifies $self.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
389 Args : A reference to an array of the unpacked traces section of an
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
390 scf version2 file.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
391
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
392 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
393
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
394 sub _set_v2_traces {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
395 my ($self,$rread) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
396 my @read = @$rread;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
397 my $array = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
398 for (my $offset2 = 0; $offset2< scalar(@read); $offset2+=4) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
399 if ($array) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
400 push @{$self->{'traces'}->{'A'}},$read[$offset2];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
401 push @{$self->{'traces'}->{'C'}},$read[$offset2+1];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
402 push @{$self->{'traces'}->{'G'}},$read[$offset2+3];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
403 push @{$self->{'traces'}->{'T'}},$read[$offset2+2];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
404 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
405 $self->{'traces'}->{'A'} .= " ".$read[$offset2];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
406 $self->{'traces'}->{'C'} .= " ".$read[$offset2+1];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
407 $self->{'traces'}->{'G'} .= " ".$read[$offset2+2];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
408 $self->{'traces'}->{'T'} .= " ".$read[$offset2+3];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
409 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
410 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
411 return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
412 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
413
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
414 =head2 get_trace($base_channel)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
415
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
416 Title : get_trace($base_channel)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
417 Usage : @a_trace = @{$obj->get_trace("A")};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
418 Function: Return the trace data for the given base.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
419 Returns : A reference to an array containing the trace data for the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
420 given base.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
421 Args : A,C,G, or T. Any other input throws.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
422 Notes :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
423
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
424 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
425
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
426 sub get_trace {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
427 my ($self,$base_channel) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
428 $base_channel =~ tr/a-z/A-Z/;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
429 if ($base_channel !~ /A|T|G|C/) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
430 $self->throw("You tried to ask for a base channel that wasn't A,T,G, or C. Ask for one of those next time.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
431 } elsif ($base_channel) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
432 my @temp = split(' ',$self->{'traces'}->{$base_channel});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
433 return \@temp;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
434 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
435 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
436
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
437 =head2 get_peak_indices()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
438
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
439 Title : get_peak_indices()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
440 Usage : @a_trace = @{$obj->get_peak_indices()};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
441 Function: Return the peak indices for this scf.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
442 Returns : A reference to an array containing the peak indices for this scf.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
443 Args : None.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
444 Notes :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
445
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
446 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
447
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
448 sub get_peak_indices {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
449 my ($self) = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
450 my @temp = split(' ',$self->{'parsed'}->{'peak_indices'});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
451 return \@temp;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
452 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
453
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
454
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
455 =head2 get_header()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
456
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
457 Title : get_header()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
458 Usage : %header = %{$obj->get_header()};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
459 Function: Return the header for this scf.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
460 Returns : A reference to a hash containing the header for this scf.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
461 Args : None.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
462 Notes :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
463
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
464 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
465
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
466 sub get_header {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
467 my ($self) = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
468 my %header;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
469 foreach (qw(scf samples sample_offset bases bases_left_clip
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
470 bases_right_clip bases_offset comment_size comments_offset
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
471 version sample_size code_set peak_indices)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
472 $header{"$_"} = $self->{"$_"};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
473 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
474 return \%header;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
475 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
476
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
477 =head2 _dump_traces_incoming($transformed)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
478
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
479 Title : _dump_traces_incoming("transformed")
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
480 Usage : &_dump_traces($ra,$rc,$rg,$rt);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
481 Function: Used in debugging. Prints all traces one beside each other.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
482 Returns : Nothing.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
483 Args : References to the arrays containing the traces for A,C,G,T.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
484 Notes : Beats using dumpValue, I'll tell ya. Much better then using
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
485 join' ' too.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
486 - if a scalar is included as an argument (any scalar), this
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
487 procedure will dump the _delta'd trace. If you don't know what
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
488 that means you should not be using this.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
489
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
490 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
491
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
492 #'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
493 sub _dump_traces_incoming {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
494 my ($self) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
495 my (@sA,@sT,@sG,@sC);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
496 # @sA = @{$self->{'traces'}->{'A'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
497 # @sC = @{$self->{'traces'}->{'C'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
498 # @sG = @{$self->{'traces'}->{'G'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
499 # @sT = @{$self->{'traces'}->{'T'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
500 @sA = @{$self->get_trace('A')};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
501 @sC = @{$self->get_trace('C')};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
502 @sG = @{$self->get_trace('G')};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
503 @sT = @{$self->get_trace('t')};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
504 print ("Count\ta\tc\tg\tt\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
505 for (my $curr=0; $curr < scalar(@sG); $curr++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
506 print("$curr\t$sA[$curr]\t$sC[$curr]\t$sG[$curr]\t$sT[$curr]\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
507 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
508 return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
509 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
510
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
511 =head2 _dump_traces_outgoing($transformed)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
512
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
513 Title : _dump_traces_outgoing("transformed")
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
514 Usage : &_dump_traces_outgoing(($ra,$rc,$rg,$rt);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
515 Function: Used in debugging. Prints all traces one beside each other.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
516 Returns : Nothing.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
517 Args : References to the arrays containing the traces for A,C,G,T.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
518 Notes : Beats using dumpValue, I\'ll tell ya. Much better then using
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
519 join' ' too.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
520 - if a scalar is included as an argument (any scalar), this
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
521 procedur will dump the _delta'd trace. If you don't know what
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
522 that means you should not be using this.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
523
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
524 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
525
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
526 sub _dump_traces_outgoing {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
527 my ($self,$transformed) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
528 my (@sA,@sT,@sG,@sC);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
529 if ($transformed) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
530 @sA = @{$self->{'text'}->{'t_samples_a'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
531 @sC = @{$self->{'text'}->{'t_samples_c'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
532 @sG = @{$self->{'text'}->{'t_samples_g'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
533 @sT = @{$self->{'text'}->{'t_samples_t'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
534 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
535 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
536 @sA = @{$self->{'text'}->{'samples_a'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
537 @sC = @{$self->{'text'}->{'samples_c'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
538 @sG = @{$self->{'text'}->{'samples_g'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
539 @sT = @{$self->{'text'}->{'samples_t'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
540 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
541 print ("Count\ta\tc\tg\tt\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
542 for (my $curr=0; $curr < scalar(@sG); $curr++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
543 print("$curr\t$sA[$curr]\t$sC[$curr]\t$sG[$curr]\t$sT[$curr]\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
544 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
545 return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
546 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
547
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
548 =head2 write_seq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
549
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
550 Title : write_seq(-SeqWithQuality => $swq, <comments>)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
551 Usage : $obj->write_seq( -SeqWithQuality => $swq,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
552 -version => 2,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
553 -CONV => "Bioperl-Chads Mighty SCF writer.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
554 Function: Write out an scf.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
555 Returns : Nothing.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
556 Args : Requires: a reference to a SeqWithQuality object to form the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
557 basis for the scf.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
558 if -version is provided, it should be "2" or "3". A SCF of that
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
559 version will be written.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
560 Any other arguments are assumed to be comments and are put into
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
561 the comments section of the scf. Read the specifications for scf
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
562 to decide what might be good to put in here.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
563
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
564 Notes :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
565 Someday: (All of this stuff is easy easy easy I just don't have
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
566 the requirement or the time.)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
567 - Change the peak scaling factor?
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
568 - Change the width of the peak?
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
569 - Change the overlap between peaks?
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
570
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
571 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
572
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
573 #'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
574 sub write_seq {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
575 my ($self,%args) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
576 my %comments;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
577 my ($label,$arg);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
578
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
579 my ($swq) = $self->_rearrange([qw(SEQWITHQUALITY)], %args);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
580 unless (ref($swq) eq "Bio::Seq::SeqWithQuality") {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
581 $self->throw("You must pass a Bio::Seq::SeqWithQuality object to write_seq as a parameter named \"SeqWithQuality\"");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
582 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
583 # verify that there is some sequence or some qualities
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
584 # If the $swq with quality has no qualities, set all qualities to 0.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
585 # If the $swq has no sequence, set the sequence to N\'s.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
586 $self->_fill_missing_data($swq);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
587
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
588 # all of the rest of the arguments are comments for the scf
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
589 foreach $arg (sort keys %args) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
590 next if ($arg =~ /SeqWithQuality/i);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
591 ($label = $arg) =~ s/^\-//;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
592 $comments{$label} = $args{$arg};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
593 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
594 if (!$comments{'NAME'}) { $comments{'NAME'} = $swq->id(); }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
595 # HA! Bwahahahaha.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
596 $comments{'CONV'} = "Bioperl-Chads Mighty SCF writer." unless defined $comments{'CONV'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
597 # now deal with the version of scf they want to write
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
598 if ($comments{version}) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
599 if ($comments{version} != 2 && $comments{version} != 3) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
600 $self->warn("This module can only write version 2.0 or 3.0 scf's. Writing a version 2.0 scf by default.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
601 $comments{version} = "2.00";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
602 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
603 if ($comments{'version'} > 2) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
604 $comments{'version'} = "3.00";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
605 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
606 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
607 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
608 $comments{'version'} = "2.00";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
609 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
610
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
611
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
612
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
613 # set a few things in the header
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
614 $self->{'header'}->{'magic'} = ".scf";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
615 $self->{'header'}->{'sample_size'} = "2";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
616 $self->{'header'}->{'bases'} = length($swq->seq());
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
617 $self->{'header'}->{'bases_left_clip'} = "0";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
618 $self->{'header'}->{'bases_right_clip'} = "0";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
619 $self->{'header'}->{'version'} = $comments{'version'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
620 $self->{'header'}->{'sample_size'} = "2";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
621 $self->{'header'}->{'code_set'} = "9";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
622 @{$self->{'header'}->{'spare'}} = qw(0 0 0 0 0 0 0 0 0 0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
623 0 0 0 0 0 0 0 0 0 0);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
624
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
625 # create the binary for the comments and file it in $self->{'binaries'}->{'comments'}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
626 $self->_set_binary_comments(\%comments);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
627 # create the binary and the strings for the traces, bases, offsets (if necessary), and accuracies (if necessary)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
628 $self->_set_binary_tracesbases($comments{'version'},$swq->seq(),$swq->qual());
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
629
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
630 # now set more things in the header
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
631 $self->{'header'}->{'samples_offset'} = "128";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
632
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
633 my ($b_base_offsets,$b_base_accuracies,$samples_size,$bases_size);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
634 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
635 # version 2
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
636 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
637 if ($self->{'header'}->{'version'} == 2) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
638 $samples_size = $self->{'header'}->{'samples'} * 4 *
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
639 $self->{'header'}->{'sample_size'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
640 $bases_size = length($swq->seq()) * 12;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
641 $self->{'header'}->{'bases_offset'} = 128 + length($self->{'binaries'}->{'samples_all'});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
642 $self->{'header'}->{'comments_offset'} = 128 + length($self->{'binaries'}->{'samples_all'}) + length($self->{'binaries'}->{'v2_bases'});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
643 $self->{'header'}->{'comments_size'} = length($self->{'binaries'}->{'comments'});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
644 $self->{'header'}->{'private_size'} = "0";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
645 $self->{'header'}->{'private_offset'} = 128 + $samples_size +
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
646 $bases_size + $self->{'header'}->{'comments_size'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
647 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
648 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
649 $self->{'header'}->{'bases_offset'} = 128 + length($self->{'binaries'}->{'samples_all'});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
650 $self->{'header'}->{'comments_size'} = length($self->{'binaries'}->{'comments'});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
651 # this is:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
652 # bases_offset + base_offsets + accuracies + called_bases + reserved
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
653 $self->{'header'}->{'comments_offset'} = $self->{'header'}->{'bases_offset'} + 4*$self->{header}->{'bases'} + 4*$self->{header}->{'bases'} + $self->{header}->{'bases'} + 3*$self->{header}->{'bases'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
654 $self->{'header'}->{'private_size'} = "0";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
655 $self->{'header'}->{'private_offset'} = $self->{'header'}->{'comments_offset'} + $self->{'header'}->{'comments_size'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
656 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
657
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
658 $self->_set_binary_header();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
659
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
660 # should something better be done rather then returning after
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
661 # writing? I don't do any exception trapping here
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
662 if ($comments{'version'} == 2) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
663 # print ("Lengths:\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
664 # print("Header : ".length($self->{'binaries'}->{'header'})."\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
665 # print("Traces : ".length($self->{'binaries'}->{'samples_all'})."\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
666 # print("Bases : ".length($self->{'binaries'}->{'v2_bases'})."\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
667 # print("Comments: ".length($self->{'binaries'}->{'comments'})."\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
668 $self->_print ($self->{'binaries'}->{'header'}) or return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
669 $self->_print ($self->{'binaries'}->{'samples_all'}) or return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
670 $self->_print ($self->{'binaries'}->{'v2_bases'}) or return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
671 $self->_print ($self->{'binaries'}->{'comments'}) or return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
672 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
673 elsif ($comments{'version'} ==3) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
674 # print ("Lengths:\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
675 # print("Header : ".length($self->{'binaries'}->{'header'})."\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
676 # print("Traces : ".length($self->{'binaries'}->{'samples_all'})."\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
677 # print("Offsets : ".length($self->{'binaries'}->{'v3_peak_offsets'})."\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
678 # print("Accuracy: ".length($self->{'binaries'}->{'v3_accuracies_all'})."\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
679 # print("Bases : ".length($self->{'binaries'}->{'v3_called_bases'})."\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
680 # print("Reserved: ".length($self->{'binaries'}->{'v3_reserved'})."\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
681 # print("Comments: ".length($self->{'binaries'}->{'comments'})."\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
682 $self->{'header'}->{'comments_offset'} =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
683 128+length($self->{'binaries'}->{'samples_all'})+
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
684 length($self->{'binaries'}->{'v3_peak_offsets'})+
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
685 length($self->{'binaries'}->{'v3_accuracies_all'})+
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
686 length($self->{'binaries'}->{'v3_called_bases'})+
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
687 length($self->{'binaries'}->{'v3_reserved'});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
688 $self->{'header'}->{'spare'}->[1] =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
689 $self->{'header'}->{'comments_offset'} +
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
690 length($self->{'binaries'}->{'comments'});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
691 $self->_set_binary_header();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
692 $self->_print ($self->{'binaries'}->{'header'}) or print("Couldn't write header\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
693 $self->_print ($self->{'binaries'}->{'samples_all'}) or print("Couldn't write samples\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
694 $self->_print ($self->{'binaries'}->{'v3_peak_offsets'}) or print("Couldn't write peak offsets\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
695 $self->_print ($self->{'binaries'}->{'v3_accuracies_all'}) or print("Couldn't write accuracies\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
696 $self->_print ($self->{'binaries'}->{'v3_called_bases'}) or print("Couldn't write called_bases\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
697 $self->_print ($self->{'binaries'}->{'v3_reserved'}) or print("Couldn't write reserved\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
698 $self->_print ($self->{'binaries'}->{'comments'}) or print ("Couldn't write comments\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
699 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
700
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
701 # kinda unnecessary, given the close() below, but maybe that'll go
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
702 # away someday.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
703 $self->flush if $self->_flush_on_write && defined $self->_fh;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
704
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
705 $self->close();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
706 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
707
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
708 =head2 _set_binary_header()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
709
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
710 Title : _set_binary_header();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
711 Usage : $self->_set_binary_header();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
712 Function: Provide the binary string that will be used as the header for
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
713 a scfv2 document.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
714 Returns : A binary string.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
715 Args : None. Uses the entries in the $self->{'header'} hash. These
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
716 are set on construction of the object (hopefully correctly!).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
717 Notes :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
718
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
719 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
720
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
721 sub _set_binary_header {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
722 my ($self) = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
723 my $binary = pack "a4 NNNNNNNN a4 NN N20",
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
724 (
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
725 $self->{'header'}->{'magic'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
726 $self->{'header'}->{'samples'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
727 $self->{'header'}->{'samples_offset'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
728 $self->{'header'}->{'bases'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
729 $self->{'header'}->{'bases_left_clip'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
730 $self->{'header'}->{'bases_right_clip'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
731 $self->{'header'}->{'bases_offset'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
732 $self->{'header'}->{'comments_size'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
733 $self->{'header'}->{'comments_offset'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
734 $self->{'header'}->{'version'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
735 $self->{'header'}->{'sample_size'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
736 $self->{'header'}->{'code_set'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
737 @{$self->{'header'}->{'spare'}});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
738 $self->{'binaries'}->{'header'} = $binary;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
739 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
740
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
741 =head2 _set_binary_tracesbases($version,$sequence,$ref_quality)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
742
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
743 Title : _set_binary_tracesbases($version,$sequence,$ref_quality)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
744 Usage : $self->_set_binary_tracesbases($version,$sequence,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
745 $ref_quality);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
746 Function: Constructs the trace and base strings for all scfs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
747 Returns : Nothing. Alters self.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
748 Args : $version - "2" or "3"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
749 $sequence - a scalar containing arbitrary sequence data
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
750 $ref_quality - a reference to an array containing quality
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
751 values
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
752 Notes : This is a really complicated thing.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
753
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
754 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
755
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
756 sub _set_binary_tracesbases {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
757 my ($self,$version,$sequence,$rqual) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
758 $sequence =~ tr/a-z/A-Z/;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
759 $self->{'info'}->{'sequence'} = $sequence;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
760 $self->{'info'}->{'sequence_length'} = length($sequence);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
761 my @quals = @$rqual;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
762 # build the ramp for the first base.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
763 # a ramp looks like this "1 4 13 29 51 71 80 71 51 29 13 4 1" times the quality score.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
764 # REMEMBER: A C G T
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
765 # note to self-> smooth this thing out a bit later
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
766 @{$self->{'text'}->{'ramp'}} = qw( 1 4 13 29 51 75 80 75 51 29 13 4 1 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
767 # the width of the ramp
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
768 $self->{'text'}->{'ramp_width'} = scalar(@{$self->{'text'}->{'ramp'}});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
769 # how far should the peaks overlap?
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
770 $self->{'text'}->{'ramp_overlap'} = 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
771 # where should the peaks be located?
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
772 $self->{'text'}->{'peak_at'} = 7;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
773 $self->{'text'}->{'ramp_total_length'} =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
774 $self->{'info'}->{'sequence_length'} * $self->{'text'}->{'ramp_width'}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
775 - $self->{'info'}->{'sequence_length'} * $self->{'text'}->{'ramp_overlap'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
776 # create some empty arrays
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
777 # my (@sam_a,@sam_c,@sam_g,@sam_t,$pos);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
778 my $pos;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
779 my $total_length = $self->{'text'}->{ramp_total_length};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
780 for ($pos=0;$pos<=$total_length;$pos++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
781 $self->{'text'}->{'samples_a'}[$pos] = $self->{'text'}->{'samples_c'}[$pos]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
782 = $self->{'text'}->{'samples_g'}[$pos] = $self->{'text'}->{'samples_t'}[$pos] = "0";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
783 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
784 # $self->_dump_traces();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
785 # now populate them
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
786 my ($current_base,$place_base_at,$peak_quality,$ramp_counter,$current_ramp,$ramp_position);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
787 my $sequence_length = $self->{'info'}->{'sequence_length'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
788 my $half_ramp = int($self->{'text'}->{'ramp_width'}/2);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
789 for ($pos = 0; $pos<$sequence_length;$pos++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
790 $current_base = substr($self->{'info'}->{'sequence'},$pos,1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
791 # where should the peak for this base be placed? Modeled after a mktrace scf
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
792 $place_base_at = ($pos * $self->{'text'}->{'ramp_width'}) -
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
793 ($pos * $self->{'text'}->{'ramp_overlap'}) -
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
794 $half_ramp + $self->{'text'}->{'ramp_width'} - 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
795 push @{$self->{'text'}->{'v3_peak_offsets'}},$place_base_at;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
796 $peak_quality = $quals[$pos];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
797 if ($current_base eq "A") {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
798 $ramp_position = $place_base_at - $half_ramp;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
799 for ($current_ramp = 0; $current_ramp < $self->{'text'}->{'ramp_width'}; $current_ramp++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
800 $self->{'text'}->{'samples_a'}[$ramp_position+$current_ramp] = $peak_quality * $self->{'text'}->{'ramp'}[$current_ramp];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
801 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
802 push @{$self->{'text'}->{'v2_bases'}},($place_base_at+1,$peak_quality,0,0,0,$current_base,0,0,0);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
803 push @{$self->{'text'}->{'v3_base_accuracy_a'}},$peak_quality;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
804 foreach (qw(g c t)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
805 push @{$self->{'text'}->{"v3_base_accuracy_$_"}},0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
806 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
807 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
808 elsif ($current_base eq "C") {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
809 $ramp_position = $place_base_at - $half_ramp;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
810 for ($current_ramp = 0; $current_ramp < $self->{'text'}->{'ramp_width'}; $current_ramp++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
811 $self->{'text'}->{'samples_c'}[$ramp_position+$current_ramp] = $peak_quality * $self->{'text'}->{'ramp'}[$current_ramp];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
812 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
813 push @{$self->{'text'}->{'v2_bases'}},($place_base_at+1,0,$peak_quality,0,0,$current_base,0,0,0);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
814 push @{$self->{'text'}->{'v3_base_accuracy_c'}},$peak_quality;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
815 foreach (qw(g a t)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
816 push @{$self->{'text'}->{"v3_base_accuracy_$_"}},0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
817 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
818 } elsif ($current_base eq "G") {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
819 $ramp_position = $place_base_at - $half_ramp;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
820 for ($current_ramp = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
821 $current_ramp < $self->{'text'}->{'ramp_width'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
822 $current_ramp++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
823 $self->{'text'}->{'samples_g'}[$ramp_position+$current_ramp] = $peak_quality * $self->{'text'}->{'ramp'}[$current_ramp];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
824 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
825 push @{$self->{'text'}->{'v2_bases'}},($place_base_at+1,0,0,$peak_quality,0,$current_base,0,0,0);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
826 push @{$self->{'text'}->{"v3_base_accuracy_g"}},$peak_quality;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
827 foreach (qw(a c t)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
828 push @{$self->{'text'}->{"v3_base_accuracy_$_"}},0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
829 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
830 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
831 elsif( $current_base eq "T" ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
832 $ramp_position = $place_base_at - $half_ramp;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
833 for ($current_ramp = 0; $current_ramp < $self->{'text'}->{'ramp_width'}; $current_ramp++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
834 $self->{'text'}->{'samples_t'}[$ramp_position+$current_ramp] = $peak_quality * $self->{'text'}->{'ramp'}[$current_ramp];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
835 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
836 push @{$self->{'text'}->{'v2_bases'}},($place_base_at+1,0,0,0,$peak_quality,$current_base,0,0,0);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
837 push @{$self->{'text'}->{'v3_base_accuracy_t'}},$peak_quality;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
838 foreach (qw(g c a)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
839 push @{$self->{'text'}->{"v3_base_accuracy_$_"}},0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
840 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
841 } elsif ($current_base eq "N") {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
842 $ramp_position = $place_base_at - $half_ramp;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
843 for ($current_ramp = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
844 $current_ramp < $self->{'text'}->{'ramp_width'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
845 $current_ramp++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
846 $self->{'text'}->{'samples_a'}[$ramp_position+$current_ramp] = $peak_quality * $self->{'text'}->{'ramp'}[$current_ramp];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
847 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
848 push @{$self->{'text'}->{'v2_bases'}},($place_base_at+1,$peak_quality,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
849 $peak_quality,$peak_quality,$peak_quality,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
850 $current_base,0,0,0);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
851 foreach (qw(a c g t)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
852 push @{$self->{'text'}->{"v3_base_accuracy_$_"}},0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
853 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
854 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
855 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
856 # don't print this.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
857 # print ("The current base ($current_base) is not a base. Hmmm.\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
858 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
859 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
860 foreach (qw(a c g t)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
861 pop @{$self->{'text'}->{"samples_$_"}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
862 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
863
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
864 # set the samples in the header
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
865 $self->{'header'}->{'samples'} = scalar(@{$self->{'text'}->{'samples_a'}});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
866
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
867 # create the final trace string (this is version dependent)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
868 $self->_make_trace_string($version);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
869 # create the binary for v2 bases
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
870 if ($self->{'header'}->{'version'} == 2) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
871 my ($packstring,@pack_array,$pos2,$tester,@unpacked);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
872 for ($pos = 0; $pos<$sequence_length;$pos++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
873 my @pack_array = @{$self->{'text'}->{'v2_bases'}}[$pos*9..$pos*9+8];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
874 $self->{'binaries'}->{'v2_bases'} .= pack "N C C C C a C3",@pack_array;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
875 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
876 # now create the binary for the traces
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
877 my $trace_pack_length = scalar(@{$self->{'text'}->{'samples_all'}});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
878 $self->{'binaries'}->{'samples_all'} .= pack "n$trace_pack_length",@{$self->{'text'}->{'samples_all'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
879 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
880 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
881 # now for the version 3 stuff!
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
882 # delta the trace data
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
883 my @temp;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
884 foreach (qw(a c g t)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
885 $self->{'text'}->{"t_samples_$_"} = $self->_delta($self->{'text'}->{"samples_$_"},"forward");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
886 if ($_ eq 'a') {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
887 @temp = @{$self->{'text'}->{"t_samples_a"}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
888 @{$self->{'text'}->{'samples_all'}} = @{$self->{'text'}->{"t_samples_a"}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
889 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
890 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
891 push @{$self->{'text'}->{'samples_all'}},@{$self->{'text'}->{"t_samples_$_"}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
892 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
893 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
894 # now create the binary for the traces
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
895 my $trace_pack_length = scalar(@{$self->{'text'}->{'samples_all'}});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
896
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
897 $self->{'binaries'}->{'samples_all'} .= pack "n$trace_pack_length",@{$self->{'text'}->{'samples_all'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
898
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
899 # peak offsets
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
900 my $length = scalar(@{$self->{'text'}->{'v3_peak_offsets'}});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
901 $self->{'binaries'}->{'v3_peak_offsets'} = pack "N$length",@{$self->{'text'}->{'v3_peak_offsets'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
902 # base accuracies
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
903 @{$self->{'text'}->{'v3_accuracies_all'}} = @{$self->{'text'}->{"v3_base_accuracy_a"}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
904 foreach (qw(c g t)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
905 @{$self->{'text'}->{'v3_accuracies_all'}} = (@{$self->{'text'}->{'v3_accuracies_all'}},@{$self->{'text'}->{"v3_base_accuracy_$_"}});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
906 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
907 $length = scalar(@{$self->{'text'}->{'v3_accuracies_all'}});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
908
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
909 $self->{'binaries'}->{'v3_accuracies_all'} = pack "c$length",@{$self->{'text'}->{'v3_accuracies_all'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
910 # called bases
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
911 $length = length($self->{'info'}->{'sequence'});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
912 my @seq = split(//,$self->{'info'}->{'sequence'});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
913 # pack the string
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
914 $self->{'binaries'}->{'v3_called_bases'} = $self->{'info'}->{'sequence'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
915 # finally, reserved for future use
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
916 $length = $self->{'info'}->{'sequence_length'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
917 for (my $counter=0; $counter < $length; $counter++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
918 push @temp,0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
919 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
920 $self->{'binaries'}->{'v3_reserved'} = pack "N$length",@temp;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
921 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
922 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
923
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
924 =head2 _make_trace_string($version)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
925
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
926 Title : _make_trace_string($version)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
927 Usage : $self->_make_trace_string($version)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
928 Function: Merges trace data for the four bases to produce an scf
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
929 trace string. _requires_ $version
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
930 Returns : Nothing. Alters $self.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
931 Args : $version - a version number. "2" or "3"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
932 Notes :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
933
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
934 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
935
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
936 sub _make_trace_string {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
937 my ($self,$version) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
938 my @traces;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
939 my @traces_view;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
940 my @as = @{$self->{'text'}->{'samples_a'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
941 my @cs = @{$self->{'text'}->{'samples_c'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
942 my @gs = @{$self->{'text'}->{'samples_g'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
943 my @ts = @{$self->{'text'}->{'samples_t'}};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
944 if ($version == 2) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
945 for (my $curr=0; $curr < scalar(@as); $curr++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
946 $as[$curr] = $DEFAULT_QUALITY unless defined $as[$curr];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
947 $cs[$curr] = $DEFAULT_QUALITY unless defined $cs[$curr];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
948 $gs[$curr] = $DEFAULT_QUALITY unless defined $gs[$curr];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
949 $ts[$curr] = $DEFAULT_QUALITY unless defined $ts[$curr];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
950 push @traces,($as[$curr],$cs[$curr],$gs[$curr],$ts[$curr]);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
951 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
952 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
953 elsif ($version == 3) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
954 @traces = (@as,@cs,@gs,@ts);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
955 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
956 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
957 $self->throw("No idea what version required to make traces here. You gave #$version# Bailing.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
958 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
959 my $length = scalar(@traces);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
960 $self->{'text'}->{'samples_all'} = \@traces;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
961
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
962 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
963
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
964 =head2 _set_binary_comments(\@comments)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
965
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
966 Title : _set_binary_comments(\@comments)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
967 Usage : $self->_set_binary_comments(\@comments);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
968 Function: Provide a binary string that will be the comments section of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
969 the scf file. See the scf specifications for detailed
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
970 specifications for the comments section of an scf file. Hint:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
971 CODE=something\nBODE=something\n\0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
972 Returns : Nothing. Alters self.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
973 Args : A reference to an array containing comments.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
974 Notes : None.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
975
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
976 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
977
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
978 sub _set_binary_comments {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
979 my ($self,$rcomments) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
980 my $comments_string = '';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
981 my %comments = %$rcomments;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
982 foreach my $key (sort keys %comments) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
983 $comments{$key} ||= '';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
984 $comments_string .= "$key=$comments{$key}\n";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
985 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
986 $comments_string .= "\n\0";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
987 $self->{'header'}->{'comments'} = $comments_string;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
988 my $length = length($comments_string);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
989 $self->{'binaries'}->{'comments'} = pack "A$length",$comments_string;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
990 $self->{'header'}->{'comments'} = $comments_string;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
991 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
992
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
993 =head2 _fill_missing_data($swq)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
994
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
995 Title : _fill_missing_data($swq)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
996 Usage : $self->_fill_missing_data($swq);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
997 Function: If the $swq with quality has no qualities, set all qualities
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
998 to 0.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
999 If the $swq has no sequence, set the sequence to N's.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1000 Returns : Nothing. Modifies the SeqWithQuality that was passed as an
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1001 argument.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1002 Args : A reference to a Bio::Seq::SeqWithQuality
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1003 Notes : None.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1004
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1005 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1006
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1007 #'
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1008 sub _fill_missing_data {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1009 my ($self,$swq) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1010 my $qual_obj = $swq->qual_obj();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1011 my $seq_obj = $swq->seq_obj();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1012 if ($qual_obj->length() == 0 && $seq_obj->length() != 0) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1013 my $fake_qualities = ("$DEFAULT_QUALITY ")x$seq_obj->length();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1014 $swq->qual($fake_qualities);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1015 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1016 if ($seq_obj->length() == 0 && $qual_obj->length != 0) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1017 my $sequence = ("N")x$qual_obj->length();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1018 $swq->seq($sequence);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1019 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1020 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1021
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1022 =head2 _delta(\@trace_data,$direction)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1023
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1024 Title : _delta(\@trace_data,$direction)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1025 Usage : $self->_delta(\@trace_data,$direction);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1026 Function:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1027 Returns : A reference to an array containing modified trace values.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1028 Args : A reference to an array containing trace data and a string
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1029 indicating the direction of conversion. ("forward" or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1030 "backward").
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1031 Notes : This code is taken from the specification for SCF3.2.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1032 http://www.mrc-lmb.cam.ac.uk/pubseq/manual/formats_unix_4.html
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1033
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1034 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1035
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1036
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1037 sub _delta {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1038 my ($self,$rsamples,$direction) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1039 my @samples = @$rsamples;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1040 # /* If job == DELTA_IT:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1041 # * change a series of sample points to a series of delta delta values:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1042 # * ie change them in two steps:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1043 # * first: delta = current_value - previous_value
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1044 # * then: delta_delta = delta - previous_delta
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1045 # * else
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1046 # * do the reverse
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1047 # */
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1048 # int i;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1049 # uint_2 p_delta, p_sample;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1050
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1051 my ($i,$num_samples,$p_delta,$p_sample,@samples_converted);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1052
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1053 # c-programmers are funny people with their single-letter variables
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1054
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1055 if ( $direction eq "forward" ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1056 $p_delta = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1057 for ($i=0; $i < scalar(@samples); $i++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1058 $p_sample = $samples[$i];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1059 $samples[$i] = $samples[$i] - $p_delta;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1060 $p_delta = $p_sample;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1061 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1062 $p_delta = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1063 for ($i=0; $i < scalar(@samples); $i++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1064 $p_sample = $samples[$i];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1065 $samples[$i] = $samples[$i] - $p_delta;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1066 $p_delta = $p_sample;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1067 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1068 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1069 elsif ($direction eq "backward") {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1070 $p_sample = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1071 for ($i=0; $i < scalar(@samples); $i++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1072 $samples[$i] = $samples[$i] + $p_sample;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1073 $p_sample = $samples[$i];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1074 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1075 $p_sample = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1076 for ($i=0; $i < scalar(@samples); $i++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1077 $samples[$i] = $samples[$i] + $p_sample;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1078 $p_sample = $samples[$i];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1079 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1080 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1081 else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1082 $self->warn("Bad direction. Use \"forward\" or \"backward\".");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1083 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1084 return \@samples;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1085 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1086
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1087 =head2 _unpack_magik($buffer)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1088
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1089 Title : _unpack_magik($buffer)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1090 Usage : $self->_unpack_magik($buffer)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1091 Function: What unpack specification should be used? Try them all.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1092 Returns : Nothing.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1093 Args : A buffer containing arbitrary binary data.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1094 Notes : Eliminate the ambiguity and the guesswork. Used in the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1095 adaptation of _delta(), mostly.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1096
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1097 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1098
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1099 sub _unpack_magik {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1100 my ($self,$buffer) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1101 my $length = length($buffer);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1102 my (@read,$counter);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1103 foreach (qw(c C s S i I l L n N v V)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1104 @read = unpack "$_$length", $buffer;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1105 print ("----- Unpacked with $_\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1106 for ($counter=0; $counter < 20; $counter++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1107 print("$read[$counter]\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1108 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1109 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1110 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1111
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1112 =head2 read_from_buffer($filehandle,$buffer,$length)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1113
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1114 Title : read_from_buffer($filehandle,$buffer,$length)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1115 Usage : $self->read_from_buffer($filehandle,$buffer,$length);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1116 Function: Read from the buffer.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1117 Returns : $buffer, containing a read of $length
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1118 Args : a filehandle, a buffer, and a read length
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1119 Notes : I just got tired of typing
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1120 "unless (length($buffer) == $length)" so I put it here.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1121
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1122 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1123
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1124 sub read_from_buffer {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1125 my ($self,$fh,$buffer,$length) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1126 read $fh, $buffer, $length;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1127 unless (length($buffer) == $length) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1128 $self->warn("The read was incomplete! Trying harder.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1129 my $missing_length = $length - length($buffer);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1130 my $buffer2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1131 read $fh,$buffer2,$missing_length;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1132 $buffer .= $buffer2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1133 if (length($buffer) != $length) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1134 $self->throw("Unexpected end of file while reading from SCF file. I should have read $length but instead got ".length($buffer)."! Current file position is ".tell($fh).".");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1135 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1136 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1137
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1138 return $buffer;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1139 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1140
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1141 =head2 _dump_keys()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1142
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1143 Title : _dump_keys()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1144 Usage : &_dump_keys($a_reference_to_some_hash)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1145 Function: Dump out the keys in a hash.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1146 Returns : Nothing.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1147 Args : A reference to a hash.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1148 Notes : A debugging method.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1149
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1150 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1151
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1152 sub _dump_keys {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1153 my $rhash = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1154 if ($rhash !~ /HASH/) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1155 print("_dump_keys: that was not a hash.\nIt was #$rhash# which was this reference:".ref($rhash)."\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1156 return;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1157 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1158 print("_dump_keys: The keys for $rhash are:\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1159 foreach (sort keys %$rhash) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1160 print("$_\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1161 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1162 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1163
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1164 =head2 _dump_base_accuracies()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1165
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1166 Title : _dump_base_accuracies()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1167 Usage : $self->_dump_base_accuracies();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1168 Function: Dump out the v3 base accuracies in an easy to read format.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1169 Returns : Nothing.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1170 Args : None.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1171 Notes : A debugging method.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1172
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1173 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1174
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1175 sub _dump_base_accuracies {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1176 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1177 print("Dumping base accuracies! for v3\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1178 print("There are this many elements in a,c,g,t:\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1179 print(scalar(@{$self->{'text'}->{'v3_base_accuracy_a'}}).",".scalar(@{$self->{'text'}->{'v3_base_accuracy_c'}}).",".scalar(@{$self->{'text'}->{'v3_base_accuracy_g'}}).",".scalar(@{$self->{'text'}->{'v3_base_accuracy_t'}})."\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1180 my $number_traces = scalar(@{$self->{'text'}->{'v3_base_accuracy_a'}});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1181 for (my $counter=0; $counter < $number_traces; $counter++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1182 print("$counter\t");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1183 print $self->{'text'}->{'v3_base_accuracy_a'}->[$counter]."\t";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1184 print $self->{'text'}->{'v3_base_accuracy_c'}->[$counter]."\t";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1185 print $self->{'text'}->{'v3_base_accuracy_g'}->[$counter]."\t";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1186 print $self->{'text'}->{'v3_base_accuracy_t'}->[$counter]."\t";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1187 print("\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1188 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1189 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1190
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1191 =head2 _dump_peak_indices_incoming()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1192
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1193 Title : _dump_peak_indices_incoming()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1194 Usage : $self->_dump_peak_indices_incoming();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1195 Function: Dump out the v3 peak indices in an easy to read format.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1196 Returns : Nothing.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1197 Args : None.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1198 Notes : A debugging method.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1199
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1200 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1201
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1202 sub _dump_peak_indices_incoming {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1203 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1204 print("Dump peak indices incoming!\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1205 my $length = $self->{'bases'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1206 print("The length is $length\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1207 for (my $count=0; $count < $length; $count++) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1208 print("$count\t$self->{parsed}->{peak_indices}->[$count]\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1209 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1210 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1211
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1212 =head2 _dump_base_accuracies_incoming()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1213
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1214 Title : _dump_base_accuracies_incoming()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1215 Usage : $self->_dump_base_accuracies_incoming();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1216 Function: Dump out the v3 base accuracies in an easy to read format.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1217 Returns : Nothing.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1218 Args : None.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1219 Notes : A debugging method.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1220
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1221 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1222
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1223 sub _dump_base_accuracies_incoming {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1224 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1225 print("Dumping base accuracies! for v3\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1226 # print("There are this many elements in a,c,g,t:\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1227 # print(scalar(@{$self->{'parsed'}->{'v3_base_accuracy_a'}}).",".scalar(@{$self->{'text'}->{'v3_base_accuracy_c'}}).",".scalar(@{$self->{'text'}->{'v3_base_accuracy_g'}}).",".scalar(@{$self->{'text'}->{'v3_base_accuracy_t'}})."\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1228 my $number_traces = $self->{'bases'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1229 for (my $counter=0; $counter < $number_traces; $counter++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1230 print("$counter\t");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1231 foreach (qw(A T G C)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1232 print $self->{'parsed'}->{'base_accuracies'}->{$_}->[$counter]."\t";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1233 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1234 print("\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1235 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1236 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1237
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1238
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1239 =head2 _dump_comments()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1240
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1241 Title : _dump_comments()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1242 Usage : $self->_dump_comments();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1243 Function: Debug dump the comments section from the scf.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1244 Returns : Nothing.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1245 Args : Nothing.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1246 Notes : None.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1247
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1248 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1249
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1250 sub _dump_comments {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1251 my ($self) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1252 warn ("SCF comments:\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1253 foreach my $k (keys %{$self->{'comments'}}) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1254 warn ("\t {$k} ==> ", $self->{'comments'}->{$k}, "\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1255 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1256 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1257
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1258
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1259 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1260 __END__
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1261
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1262