annotate variant_effect_predictor/Bio/Variation/IO/flat.pm @ 1:d6778b5d8382 draft default tip

Deleted selected files
author willmclaren
date Fri, 03 Aug 2012 10:05:43 -0400
parents 21066c0abaf5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 # $Id: flat.pm,v 1.12 2002/10/22 07:38:50 lapp Exp $
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2 # BioPerl module for Bio::Variation::IO::flat
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 # Cared for by Heikki Lehvaslaiho <Heikki@ebi.ac.uk>
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 # Copyright Heikki Lehvaslaiho
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8 # You may distribute this module under the same terms as perl itself
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 # POD documentation - main docs before the code
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15 Bio::Variation::IO::flat - flat file sequence variation input/output stream
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 Do not use this module directly. Use it via the Bio::Variation::IO class.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 This object can transform Bio::Variation::SeqDiff objects to and from
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24 flat file databases. The format used is EMBL like extension of what is
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 used by the "EBI Mutation Checker" at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26 http://www.ebi.ac.uk/cgi-bin/mutations/check.cgi and will eventually
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 replace it.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 More information of the attributes and values use can be found at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 http://www.ebi.ac.uk/mutations/recommendations/.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 =head1 FEEDBACK
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 =head2 Mailing Lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36 User feedback is an integral part of the evolution of this and other
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37 Bioperl modules. Send your comments and suggestions preferably to the
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 Bioperl mailing lists Your participation is much appreciated.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 bioperl-l@bioperl.org - General discussion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41 http://bio.perl.org/MailList.html - About the mailing lists
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43 =head2 Reporting Bugs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45 report bugs to the Bioperl bug tracking system to help us keep track
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 the bugs and their resolution. Bug reports can be submitted via
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 email or the web:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 bioperl-bugs@bio.perl.org
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50 http://bugzilla.bioperl.org/
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 =head1 AUTHOR - Heikki Lehvaslaiho
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54 Email: heikki@ebi.ac.uk
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55 Address:
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57 EMBL Outstation, European Bioinformatics Institute
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 Wellcome Trust Genome Campus, Hinxton
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 Cambs. CB10 1SD, United Kingdom
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63 =head1 APPENDIX
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65 The rest of the documentation details each of the object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 methods. Internal methods are usually preceded with a _
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 # Let the code begin...
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72 package Bio::Variation::IO::flat;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 my $VERSION=1.0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74 use vars qw(@ISA);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 use Text::Wrap;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 use Bio::Variation::IO;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79 use Bio::Variation::SeqDiff;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 use Bio::Variation::DNAMutation;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 use Bio::Variation::RNAChange;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 use Bio::Variation::AAChange;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 use Bio::Variation::Allele;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 @ISA = qw(Bio::Variation::IO);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 sub new {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 my($class, @args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90 my $self = bless {}, $class;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 $self->_initialize(@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 sub _initialize {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 my($self,@args) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 return unless $self->SUPER::_initialize(@args);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 =head2 next
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 Title : next
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 Usage : $haplo = $stream->next()
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 Function: returns the next seqDiff in the stream
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106 Returns : Bio::Variation::SeqDiff object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 Args : NONE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 sub next {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 my( $self ) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 local $/ = '//';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 return unless my $entry = $self->_readline;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 return if $entry =~ /^\s+$/;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 $entry =~ /\s*ID\s+\S+/ || $self->throw("We do need an ID!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 my ($id, $offset, $alphabet) = $entry =~ /\s*ID +([^:]+)..(\d+)[^\)]*.\[?([cg])?/
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 or $self->throw("Can't parse ID line");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 # $self->throw("$1|$2|$3");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 my $h =Bio::Variation::SeqDiff->new(-id => $id,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 -offset => $offset,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 if ($alphabet) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 if ($alphabet eq 'g') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 $alphabet = 'dna';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 elsif ($alphabet eq 'c') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 $alphabet = 'rna';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 $h->alphabet($alphabet);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 # DNA
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138 my @dna = split ( / DNA;/, $entry );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 shift @dna;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140 my $prevdnaobj;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 foreach my $dna (@dna) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 $dna =~ s/Feature[ \t]+//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143 ($dna) = split "RNA; ", $dna;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 #$self->warn("|$dna|") ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 #exit;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 my ($mut_number, $proof, $location, $upflank, $change, $dnflank) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 $dna =~ m|\W+([\d\.]+).+/proof: (\w+).+/location: ([^ \n]+).+/upflank: ([ \n\w]+).+/change: ([^ /]+).+/dnflank: ([ \n\w]+)|s;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 $change =~ s/[ \n]//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 my ($ori, $mut) = split /[>\|]/, $change;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 my ($variation_number, $change_number) = split /\./, $mut_number;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151 #$self->warn("|$mut_number|>|$variation_number|$change_number|");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 my $dnamut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153 if ($change_number and $change_number > 1 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 my $a3 = Bio::Variation::Allele->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155 $a3->seq($mut) if $mut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 #$dnamut->add_Allele($a3);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157 $prevdnaobj->add_Allele($a3);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 $upflank =~ s/[ \n]//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160 $dnflank =~ s/[ \n]//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 my ($region, $junk, $region_value, $junk2, $region_dist) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 $dna =~ m|.+/region: ([\w\']+)(; )?(\w+)?( ?\(\+?)?(-?\d+)?|s;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 #my $s = join ("|", $mut_number, $proof, $location, $upflank,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 # $change, $dnflank, $region, $region_value, $region_dist, $1,$2,$3,$4,$5);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 #$self->warn($s);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 #exit;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167 my ($start, $sep, $end) = $location =~ /(-?\d+)(.)?\D?(-?\d+)?/;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168 $end = $start if not $end ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 my ($len) = $end - $start +1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 $len = 0, $start = $end if defined $sep and $sep eq '^';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 my $ismut = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 $ismut = 1 if $change =~ m/>/;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 $dnamut = Bio::Variation::DNAMutation->new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 ('-start' => $start,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176 '-end' => $end,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 '-length' => $len,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 '-upStreamSeq' => $upflank,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179 '-dnStreamSeq' => $dnflank,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 '-proof' => $proof,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 '-mut_number' => $mut_number
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 $prevdnaobj = $dnamut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 my $a1 = Bio::Variation::Allele->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185 $a1->seq($ori) if $ori;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 $dnamut->allele_ori($a1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 my $a2 = Bio::Variation::Allele->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188 $a2->seq($mut) if $mut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 $dnamut->add_Allele($a2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190 if ($ismut) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 $dnamut->isMutation(1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192 $dnamut->allele_mut($a2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 $dnamut->region($region) if defined $region;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195 $dnamut->region_value($region_value) if defined $region_value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 $dnamut->region_dist($region_dist) if defined $region_dist;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198 $h->add_Variant($dnamut);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 $dnamut->SeqDiff($h);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 # RNA
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 my @rna = split ( / RNA;/, $entry );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207 shift @rna;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 my $prevrnaobj;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 foreach my $rna (@rna) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210 $rna = substr ($rna, 0, index($rna, 'Feature AA'));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 $rna =~ s/Feature[ \t]+//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 ($rna) = split "DNA; ", $rna;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 #$self->warn("|$rna|") ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 my ($mut_number, $proof, $location, $upflank, $change, $dnflank) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215 $rna =~ m|\W+([\d\.]+).+/proof: (\w+).+/location: ([^ \n]+).+/upflank: (\w+).+/change: ([^/]+).+/dnflank: (\w+)|s ;#'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 my ($region, $junk, $region_value, $junk2, $region_dist) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 $rna =~ m|.+/region: ([\w\']+)(; )?(\w+)?( ?\(\+?)?(-?\d+)?|s;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 #my $s = join ("|", $mut_number, $proof, $location, $upflank,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 # $change, $dnflank, $region, $region_value, $region_dist, $1,$2,$3,$4,$5);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220 #$self->warn($s);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 #exit;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 $change =~ s/[ \n]//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 my ($ori, $mut) = split /[>\|]/, $change;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224 my $rnamut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 my ($variation_number, $change_number) = split /\./, $mut_number;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 if ($change_number and $change_number > 1 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 my $a3 = Bio::Variation::Allele->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228 $a3->seq($mut) if $mut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 #$rnamut->add_Allele($a3);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 $prevrnaobj->add_Allele($a3);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 my ($start, $sep, $end) = $location =~ /(-?\d+)(.)?\D?(-?\d+)?/;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 $end = $start if not $end ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 my ($len) = $end - $start + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 $len = 0, $start = $end if defined $sep and $sep eq '^';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236 my $ismut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 $ismut = 1 if $change =~ m/>/;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 my ($codon_table) = $rna =~ m|.+/codon_table: (\d+)|s;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 my ($codon_pos) = $rna =~ m|.+/codon:[^;]+; ([123])|s;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241 $rnamut = Bio::Variation::RNAChange->new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 ('-start' => $start,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243 '-end' => $end,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 '-length' => $len,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 '-upStreamSeq' => $upflank,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 '-dnStreamSeq' => $dnflank,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247 '-proof' => $proof,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 '-mut_number' => $mut_number
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251 $prevrnaobj = $rnamut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 my $a1 = Bio::Variation::Allele->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 $a1->seq($ori) if $ori;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 $rnamut->allele_ori($a1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 my $a2 = Bio::Variation::Allele->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 $a2->seq($mut) if $mut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 $rnamut->add_Allele($a2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 if ($ismut) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259 $rnamut->isMutation(1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 $rnamut->allele_mut($a2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262 $rnamut->region($region) if defined $region;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263 $rnamut->region_value($region_value) if defined $region_value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 $rnamut->region_dist($region_dist) if defined $region_dist;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266 $rnamut->codon_table($codon_table) if $codon_table;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 $rnamut->codon_pos($codon_pos) if $codon_pos;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 $h->add_Variant($rnamut);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 foreach my $mut ($h->each_Variant) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270 if ($mut->isa('Bio::Variation::DNAMutation') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271 if ($mut->mut_number == $rnamut->mut_number) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
272 $rnamut->DNAMutation($mut);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
273 $mut->RNAChange($rnamut);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
274 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
275 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
276 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
277 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
278 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
279 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
280 # AA
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
281 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
282 my @aa = split ( / AA;/, $entry );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
283 shift @aa;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
284 my $prevaaobj;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
285 foreach my $aa (@aa) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
286 $aa = substr ($aa, 0, index($aa, 'Feature AA'));
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
287 $aa =~ s/Feature[ \t]+//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
288 ($aa) = split "DNA; ", $aa;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
289 #$self->warn("|$aa|") ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
290 my ($mut_number, $proof, $location, $change) =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
291 $aa =~ m|\W+([\d\.]+).+/proof: (\w+).+/location: ([^ \n]+)./change: ([^/;]+)|s;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
292 $change =~ s/[ \n]//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
293 #my $s = join ("|", $mut_number, $proof, $location, $change);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
294 #$self->warn($s);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
295 #exit;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
296 $change =~ s/[ \n]//g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
297 $change =~ s/DNA$//;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
298 my ($ori, $mut) = split /[>\|]/, $change;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
299 #print "------$location----$ori-$mut-------------\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
300 my ($variation_number, $change_number) = split /\./, $mut_number;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
301 my $aamut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
302 if ($change_number and $change_number > 1 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
303 my $a3 = Bio::Variation::Allele->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
304 $a3->seq($mut) if $mut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
305 $prevaaobj->add_Allele($a3);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
306 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
307 my ($start, $sep, $end) = $location =~ /(-?\d+)(.)?\D?(-?\d+)?/;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
308 $end = $start if not $end ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
309 my ($len) = $end - $start + 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
310 $len = 0, $start = $end if defined $sep and $sep eq '^';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
311 my $ismut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
312 $ismut = 1 if $change =~ m/>/;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
313 my ($region) = $aa =~ m|.+/region: (\w+)|s ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
314 $aamut = Bio::Variation::AAChange->new
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
315 ('-start' => $start,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
316 '-end' => $end,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
317 '-length' => $len,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
318 '-proof' => $proof,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
319 '-mut_number' => $mut_number
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
320 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
321 $prevaaobj = $aamut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
322 my $a1 = Bio::Variation::Allele->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
323 $a1->seq($ori) if $ori;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
324 $aamut->allele_ori($a1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
325 my $a2 = Bio::Variation::Allele->new;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
326 $a2->seq($mut) if $mut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
327 $aamut->add_Allele($a2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
328 if ($ismut) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
329 $aamut->isMutation(1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
330 $aamut->allele_mut($a2);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
331 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
332 $region && $aamut->region($region);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
333 $h->add_Variant($aamut);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
334 foreach my $mut ($h->each_Variant) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
335 if ($mut->isa('Bio::Variation::RNAChange') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
336 if ($mut->mut_number == $aamut->mut_number) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
337 $aamut->RNAChange($mut);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
338 $mut->AAChange($aamut);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
339 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
340 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
341 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
342
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
343 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
344 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
345 return $h;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
346 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
347
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
348 =head2 write
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
349
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
350 Title : write
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
351 Usage : $stream->write(@seqDiffs)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
352 Function: writes the $seqDiff object into the stream
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
353 Returns : 1 for success and 0 for error
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
354 Args : Bio::Variation::SeqDiff object
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
355
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
356
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
357 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
358
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
359 sub write {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
360 my ($self,@h) = @_;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
361
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
362 #$columns = 75; #default for Text::Wrap
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
363 my %tag =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
364 (
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
365 'ID' => 'ID ',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
366 'Description' => 'Description ',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
367 'FeatureKey' => 'Feature ',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
368 'FeatureQual' => "Feature ",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
369 'FeatureWrap' => "Feature ",
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
370 'ErrorComment' => 'Comment '
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
371 #'Comment' => 'Comment -!-',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
372 #'CommentLine' => 'Comment ',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
373 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
374
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
375 if( !defined $h[0] ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
376 $self->throw("Attempting to write with no information!");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
377 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
378
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
379 foreach my $h (@h) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
380
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
381 my @entry =();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
382
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
383 my ($text, $tmp, $tmp2, $sep);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
384 my ($count) = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
385
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
386
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
387 $text = $tag{ID};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
388
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
389 $text .= $h->id;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
390 $text .= ":(". $h->offset;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
391 $text .= "+1" if $h->sysname =~ /-/;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
392 $text .= ")". $h->sysname;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
393 $text .= "; ". $h->trivname if $h->trivname;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
394 push (@entry, $text);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
395
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
396 #Variants need to be ordered accoding to mutation_number attribute
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
397 #put them into a hash of arrays holding the Variant objects
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
398 #This is necessary for cases like several distict mutations present
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
399 # in the same sequence.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
400 my @allvariants = $h->each_Variant;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
401 my %variants = ();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
402 foreach my $mut ($h->each_Variant) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
403 push @{$variants{$mut->mut_number} }, $mut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
404 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
405 #my ($variation_number, $change_number) = split /\./, $mut_number;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
406 foreach my $var (sort keys %variants) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
407 #print $var, ": ", join (" ", @{$variants{$var}}), "\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
408
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
409 foreach my $mut (@{$variants{$var}}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
410 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
411 # DNA
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
412 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
413 if ( $mut->isa('Bio::Variation::DNAMutation') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
414 #collect all non-reference alleles
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
415 $self->throw("allele_ori needs to be defined in [$mut]")
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
416 if not $mut->allele_ori;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
417 if ($mut->isMutation) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
418 $sep = '>';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
419 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
420 $sep = '|';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
421 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
422 my @alleles = $mut->each_Allele;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
423 #push @alleles, $mut->allele_mut if $mut->allele_mut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
424 my $count = 0; # two alleles
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
425 foreach my $allele (@alleles) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
426 $count++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
427 my ($variation_number, $change_number) = split /\./, $mut->mut_number;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
428 if ($change_number and $change_number != $count){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
429 $mut->mut_number("$change_number.$count");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
430 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
431 $mut->allele_mut($allele);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
432 push (@entry,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
433 $tag{FeatureKey}. 'DNA'. "; ". $mut->mut_number
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
434 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
435 #label
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
436 $text=$tag{FeatureQual}. '/label: '. $mut->label;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
437 push (@entry, $text);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
438
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
439 #proof
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
440 if ($mut->proof) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
441 $text = $tag{FeatureQual}. '/proof: '. $mut->proof;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
442 push (@entry, $text) ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
443 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
444 #location
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
445 $text = $tag{FeatureQual}. '/location: ';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
446 #$mut->id. '; '. $mut->start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
447 if ($mut->length > 1 ) {# if ($mut->end - $mut->start ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
448 my $l = $mut->start + $mut->length -1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
449 $text .= $mut->start. '..'. $l;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
450 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
451 elsif ($mut->length == 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
452 my $tmp_start = $mut->start - 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
453 $tmp_start-- if $tmp_start == 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
454 $text .= $tmp_start. '^'. $mut->end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
455 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
456 $text .= $mut->start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
457 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
458
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
459 if ($h->alphabet && $h->alphabet eq 'dna') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
460 $tmp = $mut->start + $h->offset;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
461 $tmp-- if $tmp <= 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
462 $mut->start < 1 && $tmp++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
463 #$text.= ' ('. $h->id. '::'. $tmp;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
464 $tmp2 = $mut->end + $h->offset;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
465 if ( $mut->length > 1 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
466 $mut->end < 1 && $tmp2++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
467 $text.= ' ('. $h->id. '::'. $tmp. "..". $tmp2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
468 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
469 elsif ($mut->length == 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
470 $tmp--;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
471 $tmp-- if $tmp == 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
472 $text .= ' ('. $h->id. '::'. $tmp. '^'. $tmp2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
473 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
474 $text.= ' ('. $h->id. '::'. $tmp;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
475 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
476 $text .= ')';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
477 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
478 push (@entry, $text);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
479 #sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
480 push (@entry,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
481 $tag{FeatureQual}. '/upflank: '. $mut->upStreamSeq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
482 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
483 $text = '';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
484 $text = $mut->allele_ori->seq if $mut->allele_ori->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
485 $text .= $sep;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
486 $text .= $mut->allele_mut->seq if $mut->allele_mut->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
487 push (@entry,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
488 wrap($tag{FeatureQual}. '/change: ', $tag{FeatureWrap},
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
489 $text)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
490 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
491
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
492 push (@entry,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
493 $tag{FeatureQual}. '/dnflank: '. $mut->dnStreamSeq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
494 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
495 #restriction enzyme
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
496 if ($mut->restriction_changes ne '') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
497 $text = $mut->restriction_changes;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
498 $text = wrap($tag{FeatureQual}. '/re_site: ', $tag{FeatureWrap}, $text);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
499 push (@entry,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
500 $text
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
501 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
502 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
503 #region
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
504 if ($mut->region ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
505 $text = $tag{FeatureQual}. '/region: '. $mut->region;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
506 $text .= ';' if $mut->region_value or $mut->region_dist;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
507 $text .= ' '. $mut->region_value if $mut->region_value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
508 if ($mut->region_dist ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
509 $tmp = '';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
510 $tmp = '+' if $mut->region_dist > 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
511 $text .= " (". $tmp. $mut->region_dist. ')';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
512 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
513 push (@entry, $text);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
514 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
515 #CpG
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
516 if ($mut->CpG) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
517 push (@entry,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
518 $tag{FeatureQual}. "/CpG"
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
519 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
520 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
521 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
522 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
523 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
524 # RNA
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
525 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
526 elsif ($mut->isa('Bio::Variation::RNAChange') ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
527 #collect all non-reference alleles
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
528 $self->throw("allele_ori needs to be defined in [$mut]")
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
529 if not $mut->allele_ori;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
530 my @alleles = $mut->each_Allele;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
531 #push @alleles, $mut->allele_mut if $mut->allele_mut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
532 if ($mut->isMutation) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
533 $sep = '>';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
534 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
535 $sep = '|';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
536 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
537
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
538 my $count = 0; # two alleles
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
539 foreach my $allele (@alleles) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
540 $count++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
541 my ($variation_number, $change_number) = split /\./, $mut->mut_number;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
542 if ($change_number and $change_number != $count){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
543 $mut->mut_number("$change_number.$count");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
544 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
545 $mut->allele_mut($allele);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
546 push (@entry,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
547 $tag{FeatureKey}. 'RNA'. "; ". $mut->mut_number
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
548 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
549 #label
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
550 $text=$tag{FeatureQual}. '/label: '. $mut->label;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
551 push (@entry, $text);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
552 #proof
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
553 if ($mut->proof) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
554 $text = $tag{FeatureQual}. '/proof: '. $mut->proof;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
555 push (@entry, $text) ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
556 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
557 #location
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
558 $text = $tag{FeatureQual}. '/location: ' ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
559 if ($mut->length > 1 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
560 $text .= $mut->start. '..'. $mut->end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
561 $tmp2 = $mut->end + $h->offset;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
562 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
563 elsif ($mut->length == 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
564 my $tmp_start = $mut->start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
565 $tmp_start--;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
566 $tmp_start-- if $tmp_start == 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
567 $text .= $tmp_start. '^'. $mut->end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
568 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
569 $text .= $mut->start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
570 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
571
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
572 if ($h->alphabet && $h->alphabet eq 'rna') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
573 $tmp = $mut->start + $h->offset;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
574 $tmp-- if $tmp <= 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
575 #$mut->start < 1 && $tmp++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
576 #$text.= ' ('. $h->id. '::'. $tmp;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
577 $tmp2 = $mut->end + $h->offset;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
578 #$mut->end < 1 && $tmp2++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
579 if ( $mut->length > 1 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
580 $text.= ' ('. $h->id. '::'. $tmp. "..". $tmp2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
581 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
582 elsif ($mut->length == 0) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
583 $tmp--;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
584 $text .= ' ('. $h->id. '::'. $tmp. '^'. $tmp2;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
585 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
586 $text.= ' ('. $h->id. '::'. $tmp;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
587 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
588
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
589 $text .= ')';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
590 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
591 push (@entry, $text);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
592
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
593 #sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
594 push (@entry,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
595 $tag{FeatureQual}. '/upflank: '. $mut->upStreamSeq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
596 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
597 $text = '';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
598 $text = $mut->allele_ori->seq if $mut->allele_ori->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
599 $text .= $sep;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
600 $text .= $mut->allele_mut->seq if $mut->allele_mut->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
601 push (@entry,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
602 wrap($tag{FeatureQual}. '/change: ', $tag{FeatureWrap},
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
603 $text)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
604 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
605 push (@entry,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
606 $tag{FeatureQual}. '/dnflank: '. $mut->dnStreamSeq
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
607 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
608 #restriction
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
609 if ($mut->restriction_changes ne '') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
610 $text = $mut->restriction_changes;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
611 $text = wrap($tag{FeatureQual}. '/re_site: ', $tag{FeatureWrap}, $text);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
612 push (@entry,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
613 $text
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
614 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
615 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
616 #coding
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
617 if ($mut->region eq 'coding') {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
618 #codon table
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
619 $text = $tag{FeatureQual}. '/codon_table: ';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
620 $text .= $mut->codon_table;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
621 push (@entry, $text);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
622 #codon
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
623
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
624 $text = $tag{FeatureQual}. '/codon: '. $mut->codon_ori. $sep;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
625 if ($mut->DNAMutation->label =~ /.*point/) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
626 $text .= $mut->codon_mut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
627 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
628 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
629 $text .= '-';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
630 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
631 $text .= "; ". $mut->codon_pos;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
632 push (@entry, $text);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
633 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
634 #region
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
635 if ($mut->region ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
636 $text = $tag{FeatureQual}. '/region: '. $mut->region;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
637 $text .= ';' if $mut->region_value or $mut->region_dist;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
638 $text .= ' '. $mut->region_value if $mut->region_value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
639 if ($mut->region_dist ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
640 $tmp = '';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
641 $tmp = '+' if $mut->region_dist > 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
642 $text .= " (". $tmp. $mut->region_dist. ')';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
643 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
644 push (@entry, $text);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
645 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
646 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
647 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
648 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
649 # AA
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
650 #
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
651 elsif ($mut->isa('Bio::Variation::AAChange')) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
652 #collect all non-reference alleles
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
653 $self->throw("allele_ori needs to be defined in [$mut]")
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
654 if not $mut->allele_ori;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
655 if ($mut->isMutation) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
656 $sep = '>';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
657 } else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
658 $sep = '|';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
659 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
660 my @alleles = $mut->each_Allele;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
661 #push @alleles, $mut->allele_mut if $mut->allele_mut;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
662 my $count = 0; # two alleles
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
663 foreach my $allele (@alleles) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
664 $count++;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
665 my ($variation_number, $change_number) = split /\./, $mut->mut_number;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
666 if ($change_number and $change_number != $count){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
667 $mut->mut_number("$change_number.$count");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
668 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
669 $mut->allele_mut($allele);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
670 push (@entry,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
671 $tag{FeatureKey}. 'AA'. "; ". $mut->mut_number
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
672 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
673 #label
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
674 $text=$tag{FeatureQual}. '/label: '. $mut->label;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
675 push (@entry, $text) ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
676 #proof
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
677 if ($mut->proof) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
678 $text = $tag{FeatureQual}. '/proof: '. $mut->proof;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
679 push (@entry, $text) ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
680 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
681 #location
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
682 $text = $tag{FeatureQual}. '/location: '.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
683 #$mut->id. '; '. $mut->start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
684 $mut->start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
685 if ($mut->length > 1 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
686 $tmp = $mut->start + $mut->length -1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
687 $text .= '..'. $tmp;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
688 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
689 push (@entry, $text);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
690 #sequence
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
691 $text = '';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
692 $text = $mut->allele_ori->seq if $mut->allele_ori->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
693 $text .= $sep;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
694 $text .= $mut->allele_mut->seq if $mut->allele_mut->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
695 push (@entry,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
696 wrap($tag{FeatureQual}. '/change: ', $tag{FeatureWrap},
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
697 $text)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
698 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
699 #region
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
700 if ($mut->region ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
701 $text = $tag{FeatureQual}. '/region: '. $mut->region;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
702 $text .= ';' if $mut->region_value or $mut->region_dist;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
703 $text .= ' '. $mut->region_value if $mut->region_value;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
704 if ($mut->region_dist ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
705 $tmp = '';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
706 $tmp = '+' if $mut->region_dist > 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
707 $text .= " (". $tmp. $mut->region_dist. ')';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
708 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
709 push (@entry, $text);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
710 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
711 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
712 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
713 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
714 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
715 push (@entry,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
716 "//"
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
717 );
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
718 my $str = join ("\n", @entry). "\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
719 $str =~ s/\t/ /g;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
720 $self->_print($str);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
721 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
722 return 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
723 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
724
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
725 1;