annotate variant_effect_predictor/Bio/EnsEMBL/TopLevelAssemblyMapper.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 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 Bio::EnsEMBL::TopLevelAssemblyMapper -
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 Handles mapping between a given coordinate system and the toplevel
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 pseudo coordinate system.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 $db = Bio::EnsEMBL::DBSQL::DBAdaptor->new(...);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 $asma = $db->get_AssemblyMapperAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 $csa = $db->get_CoordSystemAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 my $toplevel = $cs_adaptor->fetch_by_name('toplevel');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 my $ctg_cs = $cs_adaptor->fetch_by_name('contig');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 $asm_mapper = $map_adaptor->fetch_by_CoordSystems( $cs1, $cs2 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 # map to toplevel coord system for this region
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 @chr_coords =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 $asm_mapper->map( 'AL30421.1.200.92341', 100, 10000, -1, $ctg_cs );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 # list toplevel seq_region_ids for this region
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 @chr_ids =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 $asm_mapper->list_ids( 'AL30421.1.200.92341', 1, 1000, -1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 $ctg_cs );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 The TopLevelAssemblyMapper performs mapping between a provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 coordinate system and the toplevel pseudo cooordinate system. The
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 toplevel coordinate system is not a real coordinate system, but
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 represents the highest coordinate system that can be mapped to in a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 given region. It is only possible to perform unidirectional mapping
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 using this mapper, because it does not make sense to map from the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 toplevel coordinate system to another coordinate system.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 package Bio::EnsEMBL::TopLevelAssemblyMapper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 use Bio::EnsEMBL::Utils::Exception qw(throw);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 use Bio::EnsEMBL::Mapper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 use Bio::EnsEMBL::CoordSystem;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 use Scalar::Util qw(weaken);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 Arg [1] : Bio::EnsEMBL::DBAdaptor $dbadaptor the adaptor for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 the database this mapper is using.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 Arg [2] : Toplevel CoordSystem
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 Arg [3] : Other CoordSystem
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 Description: Creates a new TopLevelAssemblyMapper object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 Returntype : Bio::EnsEMBL::DBSQL::TopLevelAssemblyMapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 Exceptions : throws if any of the 3 arguments are missing/ not
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 : of the correct type.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 Caller : Bio::EnsEMBL::DBSQL::AssemblyMapperAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 my ($caller, $adaptor, $toplevel_cs, $other_cs) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 my $class = ref($caller) || $caller;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 if(!ref($toplevel_cs)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 throw('Toplevel CoordSystem argument expected.');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 if(!ref($other_cs)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 throw('Other CoordSystem argument expected.');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 if(!$toplevel_cs->is_top_level()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 throw($toplevel_cs->name() . " is not the toplevel CoordSystem.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 if($other_cs->is_top_level()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 throw("Other CoordSystem argument should not be toplevel CoordSystem.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 my $cs_adaptor = $adaptor->db()->get_CoordSystemAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 my $coord_systems = $cs_adaptor->fetch_all();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 my $self = bless {'coord_systems' => $coord_systems,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 'toplevel_cs' => $toplevel_cs,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 'other_cs' => $other_cs}, $class;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 $self->adaptor($adaptor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 sub adaptor {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 weaken($self->{'adaptor'} = shift) if(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 return $self->{'adaptor'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 =head2 map
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 Arg [1] : string $frm_seq_region
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 The name of the sequence region to transform FROM
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 Arg [2] : int $frm_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 The start of the region to transform FROM
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 Arg [3] : int $frm_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 The end of the region to transform FROM
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 Arg [4] : int $strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 The strand of the region to transform FROM
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 Arg [5] : Bio::EnsEMBL::CoordSystem
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 The coordinate system to transform FROM
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 Arg [6] : if set will do a fastmap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 Example : @coords = $mapper->map('X', 1_000_000, 2_000_000,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 1, $chr_cs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 Description: Transforms coordinates from one coordinate system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 to another.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 Returntype : List of Bio::EnsEMBL::Mapper::Coordinate and/or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 Bio::EnsEMBL::Mapper:Gap objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 Exceptions : thrown if if the specified TO coordinate system is not one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 of the coordinate systems associated with this mapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 sub map {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 throw('Incorrect number of arguments.') if(@_ != 6 && @_ != 7);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 my($self, $frm_seq_region_name, $frm_start, $frm_end, $frm_strand, $frm_cs,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 $fastmap) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 if($frm_cs->is_top_level()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 throw("The toplevel CoordSystem can only be mapped TO, not FROM.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 my @tmp;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 push @tmp, $frm_seq_region_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 my $seq_region_id = @{$self->adaptor()->seq_regions_to_ids($frm_cs, \@tmp)}[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 my $mapper = $self->{'mapper'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 my $toplevel_cs = $self->{'toplevel_cs'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 my $other_cs = $self->{'other_cs'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 my $adaptor = $self->adaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 if($frm_cs != $other_cs && !$frm_cs->equals($other_cs)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 throw("Coordinate system " . $frm_cs->name . " " . $frm_cs->version .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 " is neither the assembled nor the component coordinate system " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 " of this AssemblyMapper");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 my $coord_systems = $self->{'coord_systems'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 my $csa = $self->adaptor()->db()->get_CoordSystemAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 # TBD try to make this more efficient
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 my $from_rank = $other_cs->rank();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 foreach my $cs (@$coord_systems) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 last if($cs->rank >= $from_rank);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 #check if a mapping path even exists to this coordinate system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 my @mapping_path = @{ $csa->get_mapping_path( $cs, $other_cs ) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 if(@mapping_path) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 # Try to map to this coord system. If we get back any coordinates then
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 # it is our 'toplevel' that we were looking for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 my $mapper = $adaptor->fetch_by_CoordSystems($other_cs, $cs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 if($fastmap) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 my @result = $mapper->fastmap($frm_seq_region_name, $frm_start, $frm_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 $frm_strand, $frm_cs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 return @result if(@result);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 my @coords = $mapper->map($frm_seq_region_name, $frm_start, $frm_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 $frm_strand, $frm_cs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 if(@coords > 1 || !$coords[0]->isa('Bio::EnsEMBL::Mapper::Gap')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 return @coords;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 # the toplevel coordinate system for the region requested *is* the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 # requested region.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 if($fastmap) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 return ($seq_region_id,$frm_start, $frm_end, $frm_strand, $other_cs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 return Bio::EnsEMBL::Mapper::Coordinate->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 ($seq_region_id,$frm_start,$frm_end, $frm_strand, $other_cs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 # for polymorphism with AssemblyMapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 =head2 flush
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 Args : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 Example : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 Description: polymorphism with AssemblyMapper, does nothing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 Returntype : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 sub flush {}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 =head2 fastmap
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 Arg [1] : string $frm_seq_region
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 The name of the sequence region to transform FROM
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 Arg [2] : int $frm_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 The start of the region to transform FROM
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 Arg [3] : int $frm_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 The end of the region to transform FROM
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 Arg [4] : int $strand
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 The strand of the region to transform FROM
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 Arg [5] : Bio::EnsEMBL::CoordSystem
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 The coordinate system to transform FROM
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 Example : @coords = $mapper->fastmap('X', 1_000_000, 2_000_000,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 1, $chr_cs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 Description: Transforms coordinates from one coordinate system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 to another.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 Returntype : List of Bio::EnsEMBL::Mapper::Coordinate and/or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 Bio::EnsEMBL::Mapper:Gap objects
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 Exceptions : thrown if if the specified TO coordinate system is not one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 of the coordinate systems associated with this mapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 sub fastmap {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 return $self->map(@_,1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 =head2 assembled_CoordSystem
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 Example : $cs = $mapper->assembled_CoordSystem
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 Description: Retrieves the assembled CoordSystem from this mapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 Returntype : Bio::EnsEMBL::CoordSystem
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 Caller : internal, AssemblyMapperAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 sub assembled_CoordSystem {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 return $self->{'toplevel_cs'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 =head2 component_CoordSystem
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 Arg [1] : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 Example : $cs = $mapper->component_CoordSystem
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 Description: Retrieves the component CoordSystem from this mapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 Returntype : Bio::EnsEMBL::CoordSystem
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 Caller : internal, AssemblyMapperAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 sub component_CoordSystem {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 return $self->{'other_cs'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 sub _list {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 my($self, $frm_seq_region_name, $frm_start, $frm_end, $frm_cs, $seq_regions) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 my $mapper = $self->{'mapper'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 my $toplevel_cs = $self->{'toplevel_cs'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 my $other_cs = $self->{'other_cs'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 my $adaptor = $self->adaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 if($frm_cs->is_top_level()) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 throw("The toplevel CoordSystem can only be mapped TO, not FROM.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 if($frm_cs != $other_cs && !$frm_cs->equals($other_cs)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 throw("Coordinate system " . $frm_cs->name . " " . $frm_cs->version .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 " is neither the assembled nor the component coordinate system " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 " of this AssemblyMapper");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 my $coord_systems = $self->{'coord_systems'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 my $csa = $self->adaptor()->db()->get_CoordSystemAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 # TBD try to make this more efficient
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 my $from_rank = $other_cs->rank();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 foreach my $cs (@$coord_systems) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 last if($cs->rank >= $from_rank);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 #check if a mapping path even exists to this coordinate system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 my @mapping_path = @{ $csa->get_mapping_path( $cs, $other_cs ) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 if(@mapping_path) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 # Try to map to this coord system. If we get back any coordinates then
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 # it is our 'toplevel' that we were looking for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 my $mapper = $adaptor->fetch_by_CoordSystems($other_cs, $cs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 my @result;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 my @tmp;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 push @tmp, $frm_seq_region_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 my $seq_region_id = @{$self->adaptor()->seq_regions_to_ids($frm_cs, \@tmp)}[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 if($seq_regions) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 @result = $mapper->list_seq_regions($frm_seq_region_name, $frm_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 $frm_end, $frm_cs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 @result = $mapper->list_ids($frm_seq_region_name, $frm_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 $frm_end, $frm_cs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 return @result if(@result);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 # the toplevel coordinate system for the region requested *is* the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 return ($frm_seq_region_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 # requested region.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 if($seq_regions) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 return ($frm_seq_region_name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 #this seems a bit silly and inefficient, but it is probably never
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 #called anyway.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 my $slice_adaptor = $adaptor->db()->get_SliceAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 my $slice = $slice_adaptor->fetch_by_region($other_cs->name(),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 $frm_seq_region_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 undef,undef,undef,$other_cs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 return ($slice_adaptor->get_seq_region_id($slice));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 =head2 list_seq_regions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 Arg [1] : string $frm_seq_region
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 The name of the sequence region of interest
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 Arg [2] : int $frm_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 The start of the region of interest
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 Arg [3] : int $frm_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 The end of the region to transform of interest
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 Arg [5] : Bio::EnsEMBL::CoordSystem $frm_cs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 The coordinate system to obtain overlapping ids of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 Example : foreach $id ($asm_mapper->list_ids('X',1,1000,$ctg_cs)) {...}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 Description: Retrieves a list of overlapping seq_region names
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 of another coordinate system. This is the same as the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 list_ids method but uses seq_region names rather internal ids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 Returntype : List of strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 sub list_seq_regions {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 throw('Incorrect number of arguments.') if(@_ != 5);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 return _list(@_,1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404 =head2 list_ids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 Arg [1] : string $frm_seq_region
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 The name of the sequence region of interest.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 Arg [2] : int $frm_start
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 The start of the region of interest
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 Arg [3] : int $frm_end
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 The end of the region to transform of interest
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 Arg [5] : Bio::EnsEMBL::CoordSystem $frm_cs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 The coordinate system to obtain overlapping ids of
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 Example : foreach $id ($asm_mapper->list_ids('X',1,1000,$chr_cs)) {...}
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 Description: Retrieves a list of overlapping seq_region internal identifiers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 of another coordinate system. This is the same as the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 list_seq_regions method but uses internal identfiers rather
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 than seq_region strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 Returntype : List of ints
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 Exceptions : thrown if the from CoordSystem is the toplevel coord system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 thrown if the from CoordSystem is not the one used in the mapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 Status : Stable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 sub list_ids {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 throw('Incorrect number of arguments.') if(@_ != 5);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 return _list(@_,0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 1;