annotate variant_effect_predictor/Bio/SeqIO/scf.pm @ 3:d30fa12e4cc5 default tip

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