annotate variant_effect_predictor/Bio/Map/CytoPosition.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: CytoPosition.pm,v 1.4 2002/10/22 07:38:35 lapp Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module for Bio::Map::CytoPosition
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::Map::CytoPosition - Marker class with cytogenetic band storing attributes
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 $m1 = Bio::Map::CytoPosition->new ( '-id' => 'A1',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 '-value' => '2q1-3'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 $m2 = Bio::Map::CytoPosition->new ( '-id' => 'A2',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 '-value' => '2q2'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 if ($m1->cytorange->overlaps($m2->cytorange)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 print "Makers overlap\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 CytoPosition is marker (Bio::Map::MarkerI compliant) with a location in a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 cytogenetic map. See L<Bio::Map::MarkerI> for more information.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 Cytogenetic locations are names of bands visible in stained mitotic
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 eucaryotic chromosomes. The naming follows strict rules which are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 consistant at least in higher vertebates, e.g. mammals. The chromosome
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 name preceds the band names.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 The shorter arm of the chromosome is called 'p' ('petit') and usually
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 drawn pointing up. The lower arm is called 'q' ('queue'). The bands
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 are named from the region separting these, a centromere (cen), towards
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 the tips or telomeric regions (ter) counting from 1 upwards. Depending
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 of the resolution used the bands are identified with one or more
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 digit. The first digit determines the major band and subsequent digits
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 sub bands: p1 band can be divided into subbands p11, p12 and 13 and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 p11 can furter be divided into subbands p11.1 and p11.2. The dot after
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 second digit makes it easier to read the values. A region between ands
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 is given from the centromere outwards towards the telomere (e.g. 2p2-5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 or 3p21-35) or from a band in the p arm to a band in the q arm.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 Bioperl modules. Send your comments and suggestions preferably to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 Bioperl mailing lists Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 http://bio.perl.org/MailList.html - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 the bugs and their resolution. Bug reports can be submitted via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 bioperl-bugs@bio.perl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 =head1 AUTHOR - Heikki Lehvaslaiho
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 Email: heikki@ebi.ac.uk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 Address:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 EMBL Outstation, European Bioinformatics Institute
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 Wellcome Trust Genome Campus, Hinxton
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 Cambs. CB10 1SD, United Kingdom
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 The rest of the documentation details each of the object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 methods. Internal methods are usually preceded with a _
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 package Bio::Map::CytoPosition;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 use vars qw(@ISA $VERSION);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 use integer;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 $VERSION=1.0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 # Object preamble - inheritance
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 use Bio::Variation::VariantI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 use Bio::RangeI;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 use Bio::Map::Position;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 @ISA = qw( Bio::Map::Position Bio::Variation::VariantI );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 =head2 cytorange
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 Title : cytorange
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 Usage : $obj->cytorange();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 Converts cytogenetic location set by value method into
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 an integer range. The chromosome number determines the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 "millions" in the values. Human X and Y chromosome
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 symbols are represented by values 100 and 101.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 The localization within chromosomes are converted into
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 values between the range of 0 and 200,000:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 pter cen qter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 |------------------------|-------------------------|
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 0 100,000 200,000
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 The values between -100,000 through 0 for centromere to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 100,000 would have reflected the band numbering better but
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 use of positive integers was choosen since the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 transformation is very easy. These values are not metric.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 Each band defines a range in a chromosome. A band string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 is converted into a range by padding it with lower and and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 higher end digits (for q arm: '0' and '9') to the length
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 of five. The arm and chromosome values are added to these:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 e.g. 21000 & 21999 (band 21) + 100,000 (q arm) + 2,000,000
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 (chromosome 2) => 2q21 : 2,121,000 .. 2,121,999. Note that
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 this notation breaks down if there is a band or a subband
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 using digit 9 in its name! This is not the case in human
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 karyotype.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 The full algorithm used for bands:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 if arm is 'q' then
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 pad char for start is '0', for end '9'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 range is chromosome + 100,000 + padded range start or end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 elsif arm is 'p' then
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 pad char for start is '9', for end '0'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 range is chromosome + 100,000 - padded range start or end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 Example : Returns : Bio::Range object or undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 sub cytorange {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 my ($chr, $r, $band, $band2, $arm, $arm2, $lc, $uc, $lcchar, $ucchar) = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 return $r if not defined $self->value; # returns undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 $self->value =~
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 # -----1----- --------2--------- -----3----- -------4------- ---6---
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 m/([XY]|[0-9]+)(cen|qcen|pcen|[pq])?(ter|[.0-9]+)?-?([pq]?(cen|ter)?)?([.0-9]+)?/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 $self->warn("Not a valid value: ". $self->value), return $r
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 if not defined $1 ; # returns undef
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 $chr = uc $1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 $self->chr($chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 $chr = 100 if $chr eq 'X';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 $chr = 101 if $chr eq 'Y';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 $chr *= 1000000;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 $r = new Bio::Range();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 $band = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 if (defined $3 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 $2 || $self->throw("$& does not make sense: 'arm' or 'cen' missing");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 $band = $3;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 $band =~ tr/\.//d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 if (defined $6 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 $arm2 = $4;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 $arm2 = $2 if $4 eq ''; # it is not necessary to repeat the arm [p|q]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 $band2 = $6;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 $band2 =~ tr/\.//d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 #find the correct order
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 # print STDERR "-|$&|----2|$2|-----3|$band|---4|$4|--------arm2|$arm2|-------------\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 if ($band ne '' and (defined $arm2 and $2 ne $arm2 and $arm2 eq 'q') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 $lc = 'start'; $lcchar = '9';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 $uc = 'end'; $ucchar = '9';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 elsif ($band ne 'ter' and $2 ne $arm2 and $arm2 eq 'p') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 $lc = 'end'; $lcchar = '9';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 $uc = 'start'; $ucchar = '9';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 elsif ($band eq 'ter' and $arm2 eq 'p') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 $uc = 'start'; $ucchar = '9';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 } # $2 eq $arm2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 elsif ($arm2 eq 'q') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 if (_pad($band, 5, '0') < _pad($band2, 5, '0')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 $lc = 'start'; $lcchar = '0';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 $uc = 'end'; $ucchar = '9';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 $lc = 'end'; $lcchar = '9';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 $uc = 'start'; $ucchar = '0';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 elsif ($arm2 eq 'p') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 if (_pad($band, 5, '0') < _pad($band2, 5, '0')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 $lc = 'end'; $lcchar = '0';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 $uc = 'start'; $ucchar = '9';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 $lc = 'start'; $lcchar = '9';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 $uc = 'end'; $ucchar = '0';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 $self->throw("How did you end up here? $&");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 #print STDERR "-------$arm2--------$band2---------$ucchar--------------\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 if ( (defined $arm2 and $arm2 eq 'p') or (defined $arm2 and $arm2 eq 'p') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 $r->$uc(-(_pad($band2, 5, $ucchar)) + 100000 + $chr );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 if (defined $3 and $3 eq 'ter') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 $r->end(200000 + $chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 elsif ($2 eq 'cen' or $2 eq 'qcen' or $2 eq 'pcen'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 $r->$lc(100000 + $chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 elsif ($2 eq 'q') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 $r->$lc(_pad($band, 5, $lcchar) + 100000 + $chr );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 $r->$lc(-(_pad($band, 5, $lcchar)) + 100000 + $chr );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 } else { #if:$arm2=q e.g. 9p22-q32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 #print STDERR "-------$arm2--------$band2---------$ucchar--------------\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 $r->$uc(_pad($band2, 5, $ucchar) + 100000 + $chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 if ($2 eq 'cen' or $2 eq 'pcen') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 $r->$lc(100000 + $chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 elsif ($2 eq 'p') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 if ($3 eq 'ter') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 $r->$lc(200000 + $chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 $r->$lc(-(_pad($band, 5, $lcchar)) + 100000 + $chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 } else { #$2.==q
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 $r->$lc(_pad($band, 5, $lcchar) + 100000 + $chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 # e.g. 10p22.1-cen
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 elsif (defined $4 and $4 ne '') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 #print STDERR "$4-----$&----\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 if ($4 eq 'cen' || $4 eq 'qcen' || $4 eq 'pcen') { # e.g. 10p22.1-cen;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 # '10pcen-qter' does not really make sense but lets have it in anyway
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 $r->end(100000 + $chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 if ($2 eq 'p') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 if ($3 eq 'ter') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 $r->start($chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 $r->start(_pad($band, 5, '9') + $chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 elsif ($2 eq 'cen') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 $self->throw("'cen-cen' does not make sense: $&");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 $self->throw("Only order p-cen is valid: $&");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 elsif ($4 eq 'qter' || $4 eq 'ter') { # e.g. 10p22.1-qter, 1p21-qter, 10pcen-qter, 7q34-qter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 $r->end(200000 + $chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 if ($2 eq 'p'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 $r->start(-(_pad($band, 5, '9')) + 100000 + $chr); #??? OK?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 elsif ($2 eq 'q') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 $r->start(_pad($band, 5, '0') + 100000 + $chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 elsif ($2 eq 'cen' || $2 eq 'qcen' || $2 eq 'pcen' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 $r->start(100000 + $chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 elsif ($4 eq 'pter' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 #print STDERR "$2,$3--$4-----$&----\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 $r->start( $chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 if ($2 eq 'p'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 $r->end(-(_pad($band, 5, '0')) + 100000 + $chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 elsif ($2 eq 'q') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 $r->end(_pad($band, 5, '9') + 100000 + $chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 elsif ($2 eq 'cen' || $2 eq 'qcen' || $2 eq 'pcen' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 $r->end(100000 + $chr);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 } else { # -p or -q at the end of the range
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 $self->throw("lone '$4' in $& does not make sense");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 # e.g 10p22.1, 10pter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 elsif (defined $3 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 if ($2 eq 'p') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 if ($3 eq 'ter') { # e.g. 10pter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 $r = new Bio::Range('-start' => $chr,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 '-end' => $chr,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 } else { # e.g 10p22.1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 $r = new Bio::Range('-start' => -(_pad($band, 5, '9')) + 100000 + $chr,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 '-end' => -(_pad($band, 5, '0')) + 100000 + $chr,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 } elsif ($2 eq 'q') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 if ($3 eq 'ter') { # e.g. 10qter
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 $r = new Bio::Range('-start' => 200000 + $chr,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 '-end' => 200000 + $chr,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 } else { # e.g 10q22.1
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 $r = new Bio::Range('-start' => _pad($band, 5, '0') + 100000 + $chr,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 '-end' => _pad($band, 5, '9') + 100000 + $chr,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 } else { # e.g. 10qcen1.1 !
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 $self->throw("'cen' in $& does not make sense");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 # e.g. 10p
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 elsif (defined $2 ) { # e.g. 10p
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 if ($2 eq'p' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 $r = new Bio::Range('-start' => $chr,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 '-end' => 100000 + $chr
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 elsif ($2 eq'q' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 $r = new Bio::Range('-start' => 100000 + $chr,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 '-end' => 200000 + $chr
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 } else { # $2 eq 'cen' || 'qcen'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 $r = new Bio::Range('-start' => 100000 + $chr,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 '-end' => 100000 + $chr
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 # chr only, e.g. X
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 $r = new Bio::Range('-start' => $chr,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 '-end' => 200000 + $chr
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 return $r;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 sub _pad {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 my ($string, $len, $pad_char) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 die "function _pad needs a positive integer length, not [$len]"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 unless $len =~ /^\+?\d+$/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 die "function _pad needs a single character pad_char, not [$pad_char]"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 unless length $pad_char == 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 $string ||= '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 # $padded = $text . $pad_char x ( $pad_len - length( $text ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 return $string . $pad_char x ( $len - length( $string ) );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 # my $slen = length $string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 # my $add = $len - $slen;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 # return $string if $add <= 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 # return $string .= $char x $add;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 =head2 range2value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 Title : range2value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 Usage : $obj->range2value();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 Function:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 Sets and returns the value string based on start and end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 values of the Bio::Range object passes as an argument.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 Returns : string or false
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 Args : Bio::Range object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 sub range2value {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 if( defined $value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 if( ! $value->isa('Bio::Range') ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 $self->throw("Is not a Bio::Range object but a [$value]");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 if( ! $value->start ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 $self->throw("Start is not defined in [$value]");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 if( ! $value->end ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 $self->throw("End is not defined in [$value]");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 if( $value->start < 100000 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 $self->throw("Start value has to be in millions, not ". $value->start);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 if( $value->end < 100000 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 $self->throw("End value has to be in millions, not ". $value->end);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 return undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 my ($chr, $arm, $band) = $value->start =~ /(\d+)(\d)(\d{5})/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 my ($chr2, $arm2, $band2) = $value->end =~ /(\d+)(\d)(\d{5})/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 #print STDERR join ("\t", $value->start, $value->end ),"\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 #print STDERR join ("\t", $chr, $arm, $band, $chr2, $arm2, $band2), "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 my ($chrS, $armS, $bandS, $arm2S, $band2S, $sep) = ('', '', '', '', '', '' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 LOC: {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 # chromosome
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 if ($chr == 100) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 $chrS = 'X';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 elsif ($chr == 100) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 $chrS = 'Y';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 $chrS = $chr;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 last LOC if $arm == 0 and $arm2 == 2 and $band == 0 and $band2 == 0 ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 # arm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 if ($arm == $arm2 ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 if ($arm == 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 $armS = 'p';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 #$armS = 'pter' if $band == 0 and $band2 == 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 $bandS = 'ter' if $band == 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 #$arm2S = 'p'; #?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 elsif ($arm == 2) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 $armS = 'q';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 $bandS = 'ter' if $band == 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 $armS = 'q';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 #$arm2S = 'q'; #?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 $armS = 'cen', if $band == 0;# and $band2 == 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458 if ($arm == 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 $armS = 'p';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 $arm2S = 'q';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 $arm2S = '' if $band == 0 and $band2 == 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463 $armS = 'q';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 $arm2S = 'p';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 $arm2S = '' if $arm2 == 2 and $band == 0 and $band2 == 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 last LOC if $band == $band2 ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 my $c;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 # first band (ter is hadled with the arm)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 if ($bandS ne 'ter') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 if ($armS eq 'p') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 $band = 100000 - $band;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 $c = '9';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 $c = '0';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 $band =~ s/$c+$//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 $bandS = $band;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 $bandS = substr($band, 0, 2). '.'. substr($band, 2) if length $band > 2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 last LOC unless $band2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 # second band
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 if ($arm2 == 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 $arm2S = 'p';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 $band2 = 100000 - $band2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 $c = '0';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 } else { # 1 or 2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 $arm2S = 'q';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 $c = '9';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 if ($band2 == 0) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 if ($arm2 == 1) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 $arm2S = 'p';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 $band2S = 'cen';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 $band2S = 'ter';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 last LOC;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 last LOC if $band eq $band2 and $arm == $arm2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 $band2 =~ s/$c+$//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 $band2S = $band2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 $band2S = substr($band2, 0, 2). '.'. substr($band2, 2) if length $band2 > 2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 } # end of LOC:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 if ($armS eq 'p' and $arm2S eq 'p') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 my $tmp = $band2S;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 $band2S = $bandS;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 $bandS = $tmp;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 $band2S = '' if $bandS eq $band2S ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 $armS = '' if $bandS eq 'cen';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 $arm2S = '' if $armS eq $arm2S and $band2S ne 'ter';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 $sep = '-' if $arm2S || $band2S;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 $self->value( $chrS. $armS. $bandS. $sep. $arm2S. $band2S);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 return $self->value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 =head2 value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 Title : value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 Usage : my $pos = $position->value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 Function: Get/Set the value for this postion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 Returns : scalar, value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 Args : [optional] new value to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 sub value {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 my ($self,$value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 if( defined $value ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 $self->{'_value'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 $self->{'_numeric'} = $self->cytorange($value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 return $self->{'_value'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 =head2 numeric
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 Title : numeric
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 Usage : my $num = $position->numeric;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 Function: Read-only method that is guarantied to return a numeric
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 representation for this position.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 This instanse of the method can also be set, but you better
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 know what you are doing.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 Returns : Bio::RangeI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 Args : optional Bio::RangeI object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 See L<Bio::RangeI> for more information.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 sub numeric {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 my ($self, $value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 if ($value) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 $self->throw("This is not a Bio::RangeI object but a [$value]")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 unless $value->isa('Bio::RangeI');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 $self->{'_numeric'} = $value;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 $self->{'_value'} = $self->range2value($value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 return $self->{'_numeric'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 =head2 chr
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 Title : chr
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 Usage : my $mychr = $position->chr();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 Function: Get/Set method for the chromosome string of the location.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 Returns : chromosome value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 Args : [optional] new chromosome value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 sub chr {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 my ($self,$chr) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 if( defined $chr ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 $self->{'_chr'} = $chr;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 return $self->{'_chr'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 1;