annotate variant_effect_predictor/Bio/Coordinate/GeneMapper.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: GeneMapper.pm,v 1.13.2.2 2003/03/13 11:56:30 heikki Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # bioperl module for Bio::Coordinate::GeneMapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Heikki Lehvaslaiho <heikki@ebi.ac.uk>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 # Copyright Heikki Lehvaslaiho
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::Coordinate::GeneMapper - transformations between gene related coordinate systems
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 use Bio::Coordinate::GeneMapper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 # get a Bio::RangeI representing the start, end and strand of the CDS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 # in chromosomal (or entry) coordinates
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 my $cds;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 # get a Bio::Location::Split or an array of Bio::LocationI objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 # holding the start, end and strand of all the exons in chromosomal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 # (or entry) coordinates
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 my $exons;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 # create a gene mapper and set it to map from chromosomal to cds coordinates
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 my $gene = Bio::Coordinate::GeneMapper->new(-in=>'chr',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 -out=>'cds',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 -cds=>$cds,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 -exons=>$exons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 # get a a Bio::Location or sequence feature in input (chr) coordinates
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 my $loc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 # map the location into output coordinates and get a new location object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 $newloc = $gene->map($loc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 Bio::Coordinate::GeneMapper is a module for simplifying the mappings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 of coodinate locations between various gene related locations in human
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 genetics. It also adds a special human genetics twist to coordinate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 systems by making it possible to disable the use of zero
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 (0). Locations before position one start from -1. See method
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 L<nozero>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 It understands by name the following coordinate systems and mapping
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 between them:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 peptide (peptide length)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 ^
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 | -peptide_offset
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 |
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 frame propeptide (propeptide length)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 ^ ^
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 \ |
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 translate \ |
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 \ |
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 cds (transcript start and end)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 ^
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 negative_intron | \
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 ^ | \ transcribe
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 \ | \
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 intron exon \
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 ^ ^ ^ /
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 splice \ \ / | /
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 \ \ / | /
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 \ inex | /
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 \ ^ | /
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 \ \ |/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 ----- gene (gene_length)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 ^
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 | - gene_offset
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 |
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 chr (or entry)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 This structure is kept in the global variable $DAG which is a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 representation of a Directed Acyclic Graph. The path calculations
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 traversing this graph are done in a helper class. See
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 L<Bio::Coordinate::Graph>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 Of these, two operations are special cases, translate and splice.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 Translating and reverse translating are implemented as internal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 methods that do the simple 1E<lt>-E<gt>3 conversion. Splicing needs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 additional information that is provided by method L<exons> which takes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 in an array of Bio::LocationI objects.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 Most of the coordinate system names should be selfexplanatory to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 anyone familiar with genes. Negative intron coordinate system is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 starts counting backwards from -1 as the last nucleotide in the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 intron. This used when only exon and a few flanking intron nucleotides
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 are known.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 This class models coordinates within one transcript of a gene, so to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 tackle multiple transcripts you need several instances of the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 class. It is therefore valid to argue that the name of the class
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 should be TranscriptMapper. GeneMapper is a catchier name, so it
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 stuck.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 Bioperl modules. Send your comments and suggestions preferably to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 Bioperl mailing lists Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 http://bio.perl.org/MailList.html - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 the bugs and their resolution. Bug reports can be submitted via email
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 bioperl-bugs@bio.perl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 =head1 AUTHOR - Heikki Lehvaslaiho
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 Email: heikki@ebi.ac.uk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 Address:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 EMBL Outstation, European Bioinformatics Institute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 Wellcome Trust Genome Campus, Hinxton
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 Cambs. CB10 1SD, United Kingdom
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 The rest of the documentation details each of the object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 methods. Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 package Bio::Coordinate::GeneMapper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 use vars qw(@ISA %COORDINATE_SYSTEMS %COORDINATE_INTS $TRANSLATION $DAG
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 $NOZERO_VALUES $NOZERO_KEYS);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 # Object preamble - inherits from Bio::Root::Root
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 use Bio::Root::Root;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 use Bio::Coordinate::Result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 use Bio::Location::Simple;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 use Bio::Coordinate::Graph;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 use Bio::Coordinate::Collection;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 use Bio::Coordinate::Pair;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 use Bio::Coordinate::ExtrapolatingPair;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 @ISA = qw(Bio::Root::Root Bio::Coordinate::MapperI);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 # first set internal values for all translation tables
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 %COORDINATE_SYSTEMS = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 peptide => 10,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 propeptide => 9,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 frame => 8,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 cds => 7,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 negative_intron => 6,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 intron => 5,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 exon => 4,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 inex => 3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 gene => 2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 chr => 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 %COORDINATE_INTS = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 10 => 'peptide',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 9 => 'propeptide',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 8 => 'frame',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 7 => 'cds',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 6 => 'negative_intron',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 5 => 'intron',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 4 => 'exon',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 3 => 'inex',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 2 => 'gene',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 1 => 'chr'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 $TRANSLATION = $COORDINATE_SYSTEMS{'cds'}. "-".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 $COORDINATE_SYSTEMS{'propeptide'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 $DAG = {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 10 => [],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 9 => [10],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 8 => [],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 7 => [8, 9],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 6 => [],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 5 => [6],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 4 => [7],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 3 => [4, 5],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 2 => [3, 4, 5, 7],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 1 => [2]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 $NOZERO_VALUES = {0 => 0, 'in' => 1, 'out' => 2, 'in&out' => 3 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 $NOZERO_KEYS = { 0 => 0, 1 => 'in', 2 => 'out', 3 => 'in&out' };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 my($class,@args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 my $self = $class->SUPER::new(@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 # prime the graph
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 my $graph = new Bio::Coordinate::Graph;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 $graph->hash_of_arrays($DAG);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 $self->graph($graph);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 my($in, $out, $peptide_offset, $exons,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 $cds, $nozero, $strict) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 $self->_rearrange([qw(IN
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 OUT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 PEPTIDE_OFFSET
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 EXONS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 CDS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 NOZERO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 STRICT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 )],
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 @args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 # direction of mapping when going chr to protein
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 $self->{_direction} = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 $in && $self->in($in);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 $out && $self->out($out);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 $cds && $self->cds($cds);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 $exons && ref($exons) =~ /ARRAY/i && $self->exons(@$exons);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 $peptide_offset && $self->peptide_offset($peptide_offset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 $nozero && $self->nozero($nozero);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 $strict && $self->strict($strict);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 return $self; # success - we hope!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 =head2 in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 Title : in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 Usage : $obj->in('peptide');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 Function: Set and read the input coordinate system.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 Returns : value of input system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 Args : new value (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 sub in {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 if( defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 $self->throw("Not a valid input coordinate system name [$value]\n".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 "Valid values are ". join(", ", keys %COORDINATE_SYSTEMS ))
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 unless defined $COORDINATE_SYSTEMS{$value};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 $self->{'_in'} = $COORDINATE_SYSTEMS{$value};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 return $COORDINATE_INTS{ $self->{'_in'} };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 =head2 out
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 Title : out
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 Usage : $obj->out('peptide');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 Function: Set and read the output coordinate system.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 Returns : value of output system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 Args : new value (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 sub out {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 if( defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 $self->throw("Not a valid input coordinate system name [$value]\n".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 "Valid values are ". join(", ", keys %COORDINATE_SYSTEMS ))
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 unless defined $COORDINATE_SYSTEMS{$value};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 $self->{'_out'} = $COORDINATE_SYSTEMS{$value};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 return $COORDINATE_INTS{ $self->{'_out'} };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 =head2 strict
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 Title : strict
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 Usage : $obj->strict('peptide');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 Function: Set and read weather strict boundaried of coordinate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 systems are enforced.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 When strict is on, the end of the coordinate range must be defined.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 Returns : boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 Args : boolean (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 sub strict {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 if( defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 $value ? ( $self->{'_strict'} = 1 ) : ( $self->{'_strict'} = 0 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 ## update in each mapper !!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 return $self->{'_strict'} || 0 ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 =head2 nozero
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 Title : nozero
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 Usage : $obj->nozero(1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 Function: Flag to disable the use of zero in the input,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 output or both coordinate systems. Use of coordinate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 systems without zero is a peculiarity common in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 human genetics community.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 Returns : 0 (default), or 'in', 'out', 'in&out'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 Args : 0 (default), or 'in', 'out', 'in&out'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 sub nozero {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 if (defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 $self->throw("Not a valid value for nozero [$value]\n".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 "Valid values are ". join(", ", keys %{$NOZERO_VALUES} ))
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 unless defined $NOZERO_VALUES->{$value};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 $self->{'_nozero'} = $NOZERO_VALUES->{$value};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 my $res = $self->{'_nozero'} || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 return $NOZERO_KEYS->{$res};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 =head2 graph
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 Title : graph
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 Usage : $obj->graph($new_graph);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 Function: Set and read the graph object representing relationships
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 between coordinate systems
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 Returns : Bio::Coordinate::Graph object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 Args : new Bio::Coordinate::Graph object (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 sub graph {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 if( defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 $self->throw("Not a valid graph [$value]\n")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 unless $value->isa('Bio::Coordinate::Graph');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 $self->{'_graph'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 return $self->{'_graph'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 =head2 peptide
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 Title : peptide
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 Usage : $obj->peptide_offset($peptide_coord);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 Function: Read and write the offset of peptide from the start of propeptide
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 and peptide length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 Returns : a Bio::Location::Simple object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 Args : a Bio::LocationI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 sub peptide {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 my ($self, $value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 if( defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 $self->throw("I need a Bio::LocationI, not [". $value. "]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 unless $value->isa('Bio::LocationI');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 $self->throw("Peptide start not defined")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 unless defined $value->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 $self->{'_peptide_offset'} = $value->start - 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 $self->throw("Peptide end not defined")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 unless defined $value->end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 $self->{'_peptide_length'} = $value->end - $self->{'_peptide_offset'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 my $a = $self->_create_pair
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 ('propeptide', 'peptide', $self->strict,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 $self->{'_peptide_offset'}, $self->{'_peptide_length'} );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 my $mapper = $COORDINATE_SYSTEMS{'propeptide'}. "-". $COORDINATE_SYSTEMS{'peptide'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 $self->{'_mappers'}->{$mapper} = $a;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 return Bio::Location::Simple->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 (-seq_id => 'propeptide',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 -start => $self->{'_peptide_offset'} + 1 ,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 -end => $self->{'_peptide_length'} + $self->{'_peptide_offset'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 -strand => 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 =head2 peptide_offset
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 Title : peptide_offset
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 Usage : $obj->peptide_offset(20);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 Function: Set and read the offset of peptide from the start of propeptide
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 Returns : set value or 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 Args : new value (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 sub peptide_offset {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 my ($self,$offset, $len) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 if( defined $offset) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 $self->throw("I need an integer, not [$offset]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 unless $offset =~ /^[+-]?\d+$/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 $self->{'_peptide_offset'} = $offset;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 if (defined $len) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 $self->throw("I need an integer, not [$len]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 unless $len =~ /^[+-]?\d+$/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 $self->{'_peptide_length'} = $len;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 my $a = $self->_create_pair
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 ('propeptide', 'peptide', $self->strict, $offset, $self->{'_peptide_length'} );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 my $mapper = $COORDINATE_SYSTEMS{'propeptide'}. "-". $COORDINATE_SYSTEMS{'peptide'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 $self->{'_mappers'}->{$mapper} = $a;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 return $self->{'_peptide_offset'} || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 =head2 peptide_length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 Title : peptide_length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 Usage : $obj->peptide_length(20);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 Function: Set and read the offset of peptide from the start of propeptide
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 Returns : set value or 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 Args : new value (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 sub peptide_length {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 my ($self, $len) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 if( defined $len) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 $self->throw("I need an integer, not [$len]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 if defined $len && $len !~ /^[+-]?\d+$/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 $self->{'_peptide_length'} = $len;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 return $self->{'_peptide_length'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 =head2 exons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 Title : exons
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 Usage : $obj->exons(@exons);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 Function: Set and read the offset of CDS from the start of transcipt
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 You do not have to sort the exons before calling this method as
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 they will be sorted automatically.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 If you have not defined the CDS, is will be set to span all
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 exons here.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 Returns : array of Bio::LocationI exons in genome coordinates or 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 Args : array of Bio::LocationI exons in genome (or entry) coordinates
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 sub exons {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 my ($self,@value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 my $cds_mapper = $COORDINATE_SYSTEMS{'gene'}. "-". $COORDINATE_SYSTEMS{'cds'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 my $inex_mapper =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 $COORDINATE_SYSTEMS{'gene'}. "-". $COORDINATE_SYSTEMS{'inex'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 my $exon_mapper =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 $COORDINATE_SYSTEMS{'gene'}. "-". $COORDINATE_SYSTEMS{'exon'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 my $intron_mapper =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 $COORDINATE_SYSTEMS{'gene'}. "-". $COORDINATE_SYSTEMS{'intron'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 my $negative_intron_mapper =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 $COORDINATE_SYSTEMS{'intron'}. "-". $COORDINATE_SYSTEMS{'negative_intron'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 my $exon_cds_mapper = $COORDINATE_SYSTEMS{'exon'}. "-". $COORDINATE_SYSTEMS{'cds'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 if(@value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 if (ref($value[0]) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 $value[0]->isa('Bio::SeqFeatureI') and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 $value[0]->location->isa('Bio::Location::SplitLocationI')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 @value = $value[0]->location->each_Location;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 $self->throw("I need an array , not [@value]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 unless ref \@value eq 'ARRAY';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 $self->throw("I need a reference to an array of Bio::LocationIs, not to [".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 $value[0]. "]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 unless ref $value[0] and $value[0]->isa('Bio::LocationI');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 # sort the input array
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 # and if the used has not defined CDS assume it is the complete exonic range
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 if (defined $value[0]->strand && $value[0]->strand == - 1) { #reverse strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 @value = map { $_->[0] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 sort { $b->[1] <=> $a->[1] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 map { [ $_, $_->start] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 @value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 unless ($self->cds) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 $self->cds(new Bio::Location::Simple(-start => $value[-1]->start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 -end => $value[0]->end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 -strand=> $value[0]->strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 -seq_id=> $value[0]->seq_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 } else { #undef or forward strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 @value = map { $_->[0] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 sort { $a->[1] <=> $b->[1] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 map { [ $_, $_->start] }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 @value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 unless ($self->cds) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 $self->cds(new Bio::Location::Simple(-start => $value[0]->start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 -end => $value[-1]->end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 -strand=> $value[0]->strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 -seq_id=> $value[0]->seq_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 $self->{'_chr_exons'} = \@value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 # transform exons from chromosome to gene coordinates
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 # but only if gene coordinate system has been set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 my @exons ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 #my $gene_mapper = $self->$COORDINATE_SYSTEMS{'chr'}. "-". $COORDINATE_SYSTEMS{'gene'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 my $gene_mapper = "1-2";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 if (defined $self->{'_mappers'}->{$gene_mapper} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 my $tmp_in = $self->{'_in'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 my $tmp_out = $self->{'_out'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 my $tmp_verb = $self->verbose;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 $self->verbose(0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 $self->in('chr');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 $self->out('gene');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 @exons = map {$self->map($_)} @value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 $self->{'_in'} = ($tmp_in);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 $self->{'_out'} = ($tmp_out);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 $self->verbose($tmp_verb);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 @exons = @value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 my $cds_map = Bio::Coordinate::Collection->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 my $inex_map = Bio::Coordinate::Collection->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 my $exon_map = Bio::Coordinate::Collection->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 my $exon_cds_map = Bio::Coordinate::Collection->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 my $intron_map = Bio::Coordinate::Collection->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 my $negative_intron_map = Bio::Coordinate::Collection->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 my $tr_end = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 my $coffset;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 my $exon_counter;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 my $prev_exon_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 for my $exon ( @exons ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 $exon_counter++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 # gene -> cds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 my $match1 = Bio::Location::Simple->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 (-seq_id =>'gene' ,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 -start => $exon->start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 -end => $exon->end, -strand=>1 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 my $match2 = Bio::Location::Simple->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 (-seq_id => 'cds',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 -start => $tr_end + 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 -end => $tr_end + $exon->end - $exon->start +1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 -strand=>$exon->strand );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 $cds_map->add_mapper(Bio::Coordinate::Pair->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 (-in => $match1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 -out => $match2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 if ($exon->start <= 1 and $exon->end >= 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 $coffset = $tr_end - $exon->start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 $tr_end = $tr_end + $exon->end - $exon->start + 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 # gene -> intron
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 if (defined $prev_exon_end) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 my $match3 = Bio::Location::Simple->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 (-seq_id =>'gene',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 -start => $prev_exon_end + 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 -end => $exon->start -1, -strand=>$exon->strand );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 my $match4 = Bio::Location::Simple->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 (-seq_id => 'intron'. ($exon_counter -1),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 -start => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 -end => $exon->start - 1 - $prev_exon_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 -strand=>$exon->strand );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 # negative intron coordinates
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 my $match5 = Bio::Location::Simple->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 (-seq_id => 'intron'. ($exon_counter -1),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 -start => -1 * ($exon->start - 2 - $prev_exon_end) -1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 -end => -1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 -strand=>$exon->strand );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 $inex_map->add_mapper(Bio::Coordinate::Pair->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 (-in => $match3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627 -out => $match4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 $intron_map->add_mapper(Bio::Coordinate::Pair->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 (-in => $self->_clone_loc($match3),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 -out => $self->_clone_loc($match4)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 $negative_intron_map->add_mapper(Bio::Coordinate::Pair->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 (-in => $self->_clone_loc($match4),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 -out => $match5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 ));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 # store the value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 $prev_exon_end = $exon->end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646 # gene -> exon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 my $match6 = Bio::Location::Simple->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 (-seq_id => 'exon'. $exon_counter,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650 -start => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 -end => $exon->end - $exon->start +1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 -strand=> $exon->strand );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 my $pair2 = Bio::Coordinate::Pair->new(-in => $self->_clone_loc($match1),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 -out => $match6
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657 my $pair3 = Bio::Coordinate::Pair->new(-in => $self->_clone_loc($match6),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 -out => $self->_clone_loc($match2)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660 $inex_map->add_mapper(Bio::Coordinate::Pair->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661 (-in => $self->_clone_loc($match1),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 -out => $match6
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665 $exon_map->add_mapper(Bio::Coordinate::Pair->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 (-in => $self->_clone_loc($match1),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 -out => $self->_clone_loc($match6)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668 )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 $exon_cds_map->add_mapper(Bio::Coordinate::Pair->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671 (-in => $self->_clone_loc($match6),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 -out => $self->_clone_loc($match2)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673 )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 # move coordinate start if exons have negative values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 if ($coffset) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 foreach my $m ($cds_map->each_mapper) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 $m->out->start($m->out->start - $coffset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 $m->out->end($m->out->end - $coffset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687 $self->{'_mappers'}->{$cds_mapper} = $cds_map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688 $self->{'_mappers'}->{$exon_cds_mapper} = $exon_cds_map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689 $self->{'_mappers'}->{$inex_mapper} = $inex_map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 $self->{'_mappers'}->{$exon_mapper} = $exon_map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 $self->{'_mappers'}->{$intron_mapper} = $intron_map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692 $self->{'_mappers'}->{$negative_intron_mapper} = $negative_intron_map;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694 return @{$self->{'_chr_exons'}} || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 =head2 _clone_loc
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 Title : _clone_loc
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700 Usage : $copy_of_loc = $obj->_clone_loc($loc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 Function: Make a deep copy of a simple location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 Returns : a Bio::Location::Simple object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 Args : a Bio::Location::Simple object to be cloned
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 sub _clone_loc { # clone a simple location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 my ($self,$loc) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711 $self->throw("I need a Bio::Location::Simple , not [". ref $loc. "]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 unless $loc->isa('Bio::Location::Simple');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714 return Bio::Location::Simple->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 (-seq_id => $loc->seq_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716 -start => $loc->start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717 -end => $loc->end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 -strand=> $loc->strand,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719 -location_type => $loc->location_type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 =head2 cds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 Title : cds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727 Usage : $obj->cds(20);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728 Function: Set and read the offset of CDS from the start of transcipt
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 Simple input can be an integer which gives the start of the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 coding region in genomic coordinate. If you want to provide
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732 the end of the coding region or indicate the use of the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 opposite strand, you have to pass a Bio::RangeI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 (e.g. Bio::Location::Simple or Bio::SegFeature::Generic)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 object to this method.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 Returns : set value or 0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 Args : new value (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742 sub cds {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744 if( defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745 if ($value =~ /^[+-]?\d+$/ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746 my $loc = Bio::Location::Simple->new(-start=>$value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747 $self->{'_cds'} = $loc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749 elsif (ref $value && $value->isa('Bio::RangeI') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750 $self->{'_cds'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752 $self->throw("I need an integer or Bio::RangeI, not [$value]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 # strand !!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755 my $len;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757 $len = $self->{'_cds'}->end - $self->{'_cds'}->start +1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 if defined $self->{'_cds'}->end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760 my $a = $self->_create_pair
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761 ('chr', 'gene', 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762 $self->{'_cds'}->start-1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763 $len,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764 $self->{'_cds'}->strand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 my $mapper = $COORDINATE_SYSTEMS{'chr'}. "-". $COORDINATE_SYSTEMS{'gene'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766 $self->{'_mappers'}->{$mapper} = $a;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768 # recalculate exon-based mappers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769 if ( defined $self->{'_chr_exons'} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770 $self->exons(@{$self->{'_chr_exons'}});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774 return $self->{'_cds'} || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778 =head2 map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780 Title : map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781 Usage : $newpos = $obj->map(5);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782 Function: Map the location from the input coordinate system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 to a new value in the output coordinate system.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785 Returns : new value in the output coordiante system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786 Args : a Bio::Location::Simple
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
788 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
789
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
790 sub map {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
791 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792 my ($res);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794 $self->throw("Need to pass me a Bio::Location::Simple or ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
795 "Bio::Location::Simple or Bio::SeqFeatureI, not [".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
796 ref($value). "]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
797 unless ref($value) && ($value->isa('Bio::Location::Simple') or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
798 $value->isa('Bio::Location::SplitLocationI') or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
799 $value->isa('Bio::SeqFeatureI'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
800 $self->throw("Input coordinate system not set")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
801 unless $self->{'_in'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
802 $self->throw("Output coordinate system not set")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
803 unless $self->{'_out'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
804 $self->throw("Do not be silly. Input and output coordinate ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
805 "systems are the same!")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
806 unless $self->{'_in'} != $self->{'_out'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
807
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
808 $self->_check_direction();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
809
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
810 $value = $value->location if $value->isa('Bio::SeqFeatureI');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
811 print STDERR "=== Start location: ". $value->start. ",".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
812 $value->end. " (". $value->strand. ")\n" if $self->verbose > 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
813
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
814
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
815 # if nozero coordinate system is used in the input values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
816 if ( defined $self->{'_nozero'} &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
817 ( $self->{'_nozero'} == 1 || $self->{'_nozero'} == 3 ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
818 $value->start($value->start + 1)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
819 if defined $value->start && $value->start < 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
820 $value->end($value->end + 1)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
821 if defined $value->end && $value->end < 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
822 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
823
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
824 my @steps = $self->_get_path();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
825 print "mapping ", $self->{'_in'}, "->", $self->{'_out'},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
826 " Mappers: ", join(", ", @steps), "\n" if $self->verbose > 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
827
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
828 foreach my $mapper (@steps) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
829 if ($mapper eq $TRANSLATION) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
830 if ($self->direction == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
831 $value = $self->_translate($value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
832 print STDERR "+ $TRANSLATION cds -> propeptide (translate) \n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
833 if $self->verbose > 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
834 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
835 $value = $self->_reverse_translate($value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
836 print STDERR "+ $TRANSLATION propeptide -> cds (reverse translate) \n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
837 if $self->verbose > 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
838 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
839 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
840 # keep the start and end values, and go on to next iteration
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
841 # if this mapper is not set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
842 elsif ( ! defined $self->{'_mappers'}->{$mapper} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
843 # update mapper name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
844 $mapper =~ /\d+-(\d+)/; my ($counter) = $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
845 $value->seq_id($COORDINATE_INTS{$counter});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
846 print STDERR "- $mapper\n" if $self->verbose > 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
847 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
848
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
849 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
850 # the DEFAULT : generic mapping
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
851 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
852 $value = $self->{'_mappers'}->{$mapper}->map($value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
853 $value->purge_gaps
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
854 if ($value && $value->isa('Bio::Location::SplitLocationI') && $value->can('gap'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
855 print STDERR "+ $mapper (", $self->direction, "): start ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
856 $value->start, " end ", $value->end, "\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
857 if $value && $self->verbose > 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
858 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
859 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
860
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
861 # if nozero coordinate system is asked to be used in the output values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
862 if ( defined $value && defined $self->{'_nozero'} &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
863 ( $self->{'_nozero'} == 2 || $self->{'_nozero'} == 3 ) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
864
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
865 $value->start($value->start - 1)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
866 if defined $value->start && $value->start < 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
867 $value->end($value->end - 1)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
868 if defined $value->end && $value->end < 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
869 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
870
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
871 # handle merging of adjacent split locations!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
872
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
873 if (ref $value eq "Bio::Coordinate::Result" && $value->each_match > 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
874 my $prevloc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
875 my $merging = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
876 my $newvalue;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
877 my @matches;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
878 foreach my $loc ( $value->each_Location(1) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
879 unless ($prevloc) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
880 $prevloc = $loc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
881 push @matches, $prevloc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
882 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
883 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
884 if ($prevloc->end == ($loc->start - 1) && $prevloc->seq_id eq $loc->seq_id) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
885 $prevloc->end($loc->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
886 $merging = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
887 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
888 push @matches, $loc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
889 $prevloc = $loc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
890 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
891 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
892 if ($merging) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
893 if (@matches > 1 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
894 $newvalue = Bio::Coordinate::Result->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
895 map {$newvalue->add_sub_Location} @matches;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
896 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
897 $newvalue = Bio::Coordinate::Result::Match->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
898 (-seq_id => $matches[0]->seq_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
899 -start => $matches[0]->start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
900 -end => $matches[0]->end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
901 -strand=> $matches[0]->strand );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
902 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
903 $value = $newvalue;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
904 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
905 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
906 elsif (ref $value eq "Bio::Coordinate::Result" && $value->each_match == 1 ){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
907 $value = $value->match;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
908 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
909
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
910
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
911 return $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
912 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
913
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
914 =head2 direction
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
915
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
916 Title : direction
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
917 Usage : $obj->direction('peptide');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
918 Function: Read-only method for the direction of mapping deduced from
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
919 predefined input and output coordinate names.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
920 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
921 Returns : 1 or -1, mapping direction
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
922 Args : new value (optional)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
923
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
924 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
925
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
926 sub direction {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
927 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
928 return $self->{'_direction'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
929 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
930
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
931
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
932 =head2 swap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
933
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
934 Title : swap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
935 Usage : $obj->swap;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
936 Function: Swap the direction of transformation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
937 (input <-> output)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
938 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
939 Returns : 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
940 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
941
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
942 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
943
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
944 sub swap {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
945 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
946
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
947 ($self->{'_in'}, $self->{'_out'}) = ($self->{'_out'}, $self->{'_in'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
948 map { $self->{'_mappers'}->{$_}->swap } keys %{$self->{'_mappers'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
949
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
950 # record the changed direction;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
951 $self->{_direction} *= -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
952
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
953 return 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
954 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
955
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
956
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
957 =head2 to_string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
958
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
959 Title : to_string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
960 Usage : $newpos = $obj->to_string(5);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
961 Function: Dump the internal mapper values into a human readable format
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
962 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
963 Returns : string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
964 Args :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
965
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
966 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
967
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
968 sub to_string {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
969 my ($self) = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
970
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
971 print "-" x 40, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
972
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
973 # chr-gene
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
974 my $mapper_str = 'chr-gene';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
975 my $mapper = $self->_mapper_string2code($mapper_str);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
976
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
977 printf "\n %-12s (%s)\n", $mapper_str, $mapper ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
978 if (defined $self->cds) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
979 my $end = $self->cds->end -1 if defined $self->cds->end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
980 printf "%16s%s: %s (%s)\n", ' ', 'gene offset', $self->cds->start-1 , $end || '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
981 printf "%16s%s: %s\n", ' ', 'gene strand', $self->cds->strand || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
982 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
983
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
984 # gene-intron
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
985 $mapper_str = 'gene-intron';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
986 $mapper = $self->_mapper_string2code($mapper_str);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
987 printf "\n %-12s (%s)\n", $mapper_str, $mapper ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
988
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
989 my $i = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
990 foreach my $pair ( $self->{'_mappers'}->{$mapper}->each_mapper ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
991 printf "%8s :%8s -> %-12s\n", $i, $pair->in->start, $pair->out->start ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
992 printf "%8s :%8s -> %-12s\n", '', $pair->in->end, $pair->out->end ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
993 $i++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
994 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
995
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
996 # intron-negative_intron
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
997 $mapper_str = 'intron-negative_intron';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
998 $mapper = $self->_mapper_string2code($mapper_str);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
999 printf "\n %-12s (%s)\n", $mapper_str, $mapper ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1000
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1001 $i = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1002 foreach my $pair ( $self->{'_mappers'}->{$mapper}->each_mapper ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1003 printf "%8s :%8s -> %-12s\n", $i, $pair->in->start, $pair->out->start ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1004 printf "%8s :%8s -> %-12s\n", '', $pair->in->end, $pair->out->end ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1005 $i++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1006 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1007
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1008
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1009 # gene-exon
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1010 $mapper_str = 'gene-exon';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1011 $mapper = $self->_mapper_string2code($mapper_str);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1012 printf "\n %-12s (%s)\n", $mapper_str, $mapper ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1013
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1014 $i = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1015 foreach my $pair ( $self->{'_mappers'}->{$mapper}->each_mapper ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1016 printf "%8s :%8s -> %-12s\n", $i, $pair->in->start, $pair->out->start ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1017 printf "%8s :%8s -> %-12s\n", '', $pair->in->end, $pair->out->end ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1018 $i++;
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 # gene-cds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1023 $mapper_str = 'gene-cds';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1024 $mapper = $self->_mapper_string2code($mapper_str);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1025 printf "\n %-12s (%s)\n", $mapper_str, $mapper ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1026
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1027 $i = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1028 foreach my $pair ( $self->{'_mappers'}->{$mapper}->each_mapper ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1029 printf "%8s :%8s -> %-12s\n", $i, $pair->in->start, $pair->out->start ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1030 printf "%8s :%8s -> %-12s\n", '', $pair->in->end, $pair->out->end ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1031 $i++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1032 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1033
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1034 # cds-propeptide
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1035 $mapper_str = 'cds-propeptide';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1036 $mapper = $self->_mapper_string2code($mapper_str);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1037 printf "\n %-12s (%s)\n", $mapper_str, $mapper ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1038 printf "%9s%-12s\n", "", '"translate"';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1039
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1040
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1041 # propeptide-peptide
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1042 $mapper_str = 'propeptide-peptide';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1043 $mapper = $self->_mapper_string2code($mapper_str);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1044 printf "\n %-12s (%s)\n", $mapper_str, $mapper ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1045 printf "%16s%s: %s\n", ' ', "peptide offset", $self->peptide_offset;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1046
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1047
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1048
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1049 print "\nin : ", $self->in, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1050 print "out: ", $self->out, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1051 my $dir;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1052 $self->direction ? ($dir='forward') : ($dir='reverse');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1053 printf "direction: %-8s(%s)\n", $dir, $self->direction;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1054 print "\n", "-" x 40, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1055
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1056 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1057 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1058
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1059 sub _mapper_code2string {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1060 my ($self, $code) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1061 my ($a, $b) = $code =~ /(\d+)-(\d+)/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1062 return $COORDINATE_INTS{$a}. '-'. $COORDINATE_INTS{$b};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1063
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1064 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1065
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1066 sub _mapper_string2code {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1067 my ($self, $string) =@_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1068 my ($a, $b) = $string =~ /([^-]+)-(.*)/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1069 return $COORDINATE_SYSTEMS{$a}. '-'. $COORDINATE_SYSTEMS{$b};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1070 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1071
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1072
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1073 =head2 _create_pair
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1074
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1075 Title : _create_pair
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1076 Usage : $mapper = $obj->_create_pair('chr', 'gene', 0, 2555, 10000, -1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1077 Function: Internal helper method to create a mapper between
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1078 two coordinate systems
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1079 Returns : a Bio::Coordinate::Pair object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1080 Args : string, input coordinate system name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1081 string, output coordinate system name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1082 boolean, strict mapping
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1083 positive integer, offset
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1084 positive integer, length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1085 1 || -1 , strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1086
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1087 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1088
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1089 sub _create_pair {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1090 my ($self, $in, $out, $strict, $offset, $length, $strand ) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1091 $strict ||= 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1092 $strand ||= 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1093 $length ||= 20;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1094
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1095 my $match1 = Bio::Location::Simple->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1096 (-seq_id => $in,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1097 -start => $offset+1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1098 -end => $offset+$length, -strand=>1 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1099
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1100 my $match2 = Bio::Location::Simple->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1101 (-seq_id => $out,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1102 -start => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1103 -end => $length, -strand=>$strand );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1104
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1105 my $pair = Bio::Coordinate::ExtrapolatingPair->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1106 (-in => $match1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1107 -out => $match2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1108 -strict => $strict
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1109 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1111 return $pair;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1113 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1114
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1116 =head2 _translate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1118 Title : _translate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1119 Usage : $newpos = $obj->_translate($loc);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1120 Function: Translate the location from the CDS coordinate system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1121 to a new value in the propeptide coordinate system.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1122 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1123 Returns : new location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1124 Args : a Bio::Location::Simple or Bio::Location::SplitLocationI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1126 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1127
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1128 sub _translate {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1129 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1131 $self->throw("Need to pass me a Bio::Location::Simple or ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1132 "Bio::Location::SplitLocationI, not [". ref($value). "]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1133 unless defined $value &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1134 ($value->isa('Bio::Location::Simple') || $value->isa('Bio::Location::SplitLocationI'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1135
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1136 my $seqid = 'propeptide';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1137
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1138 if ($value->isa("Bio::Location::SplitLocationI")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1139 my $split = new Bio::Location::Split(-seq_id=>$seqid);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1140 foreach my $loc ( $value->each_Location(1) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1141
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1142 my $match = new Bio::Location::Simple(-start => int($loc->start / 3 )+1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1143 -end => int($loc->end / 3 )+1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1144 -seq_id => $seqid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1145 -strand => 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1146 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1147 $split->add_sub_Location($match);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1148 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1149 return $split;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1151 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1152 return new Bio::Location::Simple(-start => int($value->start / 3 )+1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1153 -end => int($value->end / 3 )+1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1154 -seq_id => $seqid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1155 -strand => 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1156 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1157 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1158 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1159
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1160 sub _frame {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1161 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1162
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1163 $self->throw("Need to pass me a Bio::Location::Simple or ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1164 "Bio::Location::SplitLocationI, not [". ref($value). "]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1165 unless defined $value &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1166 ($value->isa('Bio::Location::Simple') || $value->isa('Bio::Location::SplitLocationI'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1168 my $seqid = 'propeptide';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1170 if ($value->isa("Bio::Location::SplitLocationI")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1171 my $split = new Bio::Location::Split(-seq_id=>$seqid);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1172 foreach my $loc ( $value->each_Location(1) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1174 my $match = new Bio::Location::Simple(-start => ($value->start-1) % 3 +1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1175 -end => ($value->end-1) % 3 +1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1176 -seq_id => 'frame',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1177 -strand => 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1178 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1179 $split->add_sub_Location($match);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1180 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1181 return $split;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1182 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1183 return new Bio::Location::Simple(-start => ($value->start-1) % 3 +1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1184 -end => ($value->end-1) % 3 +1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1185 -seq_id => 'frame',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1186 -strand => 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1187 );
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
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1192 =head2 _reverse_translate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1194 Title : _reverse_translate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1195 Usage : $newpos = $obj->_reverse_translate(5);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1196 Function: Reverse translate the location from the propeptide
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1197 coordinate system to a new value in the CSD.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1198 Note that a single peptide location expands to cover
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1199 the codon triplet
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1200 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1201 Returns : new location in the CDS coordinate system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1202 Args : a Bio::Location::Simple or Bio::Location::SplitLocationI
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1203
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1204 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1205
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1206 sub _reverse_translate {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1207 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1209
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1210 $self->throw("Need to pass me a Bio::Location::Simple or ".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1211 "Bio::Location::SplitLocationI, not [". ref($value). "]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1212 unless defined $value &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1213 ($value->isa('Bio::Location::Simple') || $value->isa('Bio::Location::SplitLocationI'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1214
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1215 my $seqid = 'cds';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1217 if ($value->isa("Bio::Location::SplitLocationI")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1218 my $split = new Bio::Location::Split(-seq_id=>$seqid);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1219 foreach my $loc ( $value->each_Location(1) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1221 my $match = new Bio::Location::Simple(-start => $value->start * 3 - 2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1222 -end => $value->end * 3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1223 -seq_id => $seqid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1224 -strand => 1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1225 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1226 $split->add_sub_Location($match);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1227 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1228 return $split;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1230 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1231 return new Bio::Location::Simple(-start => $value->start * 3 - 2,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1232 -end => $value->end * 3,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1233 -seq_id => $seqid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1234 -strand => 1
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
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1240 =head2 _check_direction
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1241
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1242 Title : _check_direction
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1243 Usage : $obj->_check_direction();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1244 Function: Check and swap when needed the direction the location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1245 mapping Pairs based on input and output values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1246 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1247 Returns : new location
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1248 Args : a Bio::Location::Simple
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1249
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1250 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1251
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1252 sub _check_direction {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1253 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1254
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1255 my $new_direction = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1256 $new_direction = -1 if $self->{'_in'} > $self->{'_out'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1257
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1258 unless ($new_direction == $self->{_direction} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1259 map { $self->{'_mappers'}->{$_}->swap } keys %{$self->{'_mappers'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1260 # record the changed direction;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1261 $self->{_direction} *= -1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1262 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1263 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1264 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1265
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1266
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1267 =head2 _get_path
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1268
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1269 Title : _get_path
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1270 Usage : $obj->_get_path('peptide');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1271 Function: internal method for finding that shortest path between
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1272 input and output coordinate systems.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1273 Calculations and caching are handled by the graph class.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1274 See L<Bio::Coordinate::Graph>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1275 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1276 Returns : array of the mappers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1277 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1278
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1279 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1281 sub _get_path {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1282 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1283
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1284 my $start = $self->{'_in'} || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1285 my $end = $self->{'_out'} || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1286
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1287 # note the order
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1288 # always go from smaller to bigger: it makes caching more efficient
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1289 my $reverse;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1290 if ($start > $end) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1291 ($start, $end) = ($end, $start );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1292 $reverse++;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1293 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1295 my @mappers;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1296 if (exists $self->{'_previous_path'} and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1297 $self->{'_previous_path'} eq "$start$end" ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1298 # use cache
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1299 @mappers = @{$self->{'_mapper_path'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1300 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1301 my $mapper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1302 my $prev_node = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1303 @mappers =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1304 map { $mapper = "$prev_node-$_"; $prev_node = $_; $mapper; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1305 $self->{'_graph'}->shortest_path($start, $end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1306 shift @mappers;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1307
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1308 $self->{'_previous_path'} = "$start$end";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1309 $self->{'_mapper_path'} = \@mappers;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1310 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1311
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1312 $reverse ? return reverse @mappers : return @mappers;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1313 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1314
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1315
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1316 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1317