annotate variant_effect_predictor/Bio/EnsEMBL/MappedSliceContainer.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 =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::MappedSliceContainer - container for mapped slices
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 # get a reference slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 my $slice =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 $slice_adaptor->fetch_by_region( 'chromosome', 14, 900000, 950000 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 # create MappedSliceContainer based on the reference slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 my $msc = Bio::EnsEMBL::MappedSliceContainer->new( -SLICE => $slice );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 # set the adaptor for fetching AssemblySlices
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 my $asa = $slice->adaptor->db->get_AssemblySliceAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 $msc->set_AssemblySliceAdaptor($asa);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 # add an AssemblySlice to your MappedSliceContainer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 $msc->attach_AssemblySlice('NCBIM36');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 foreach my $mapped_slice ( @{ $msc->get_all_MappedSlices } ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 print $mapped_slice->name, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 foreach my $sf ( @{ $mapped_slice->get_all_SimpleFeatures } ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 print " ", &to_string($sf), "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 NOTE: this code is under development and not fully functional nor tested
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 yet. Use only for development.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 A MappedSliceContainer holds a collection of one or more
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 Bio::EnsEMBL::MappedSlices. It is based on a real reference slice and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 contains an artificial "container slice" which defines the common
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 coordinate system used by all attached MappedSlices. There is also a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 mapper to convert coordinates between the reference and the container
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 slice.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 Attaching MappedSlices to the container is delegated to adaptors
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 (which act more as object factories than as traditional Ensembl db
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 adaptors). The adaptors will also modify the container slice and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 associated mapper if required. This design allows us to keep the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 MappedSliceContainer generic and encapsulate the data source specific
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 code in the adaptor/factory module.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 In the simplest use case, all required MappedSlices are attached to the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 MappedSliceContainer at once (by a single call to the adaptor). This
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 object should also allow "hot-plugging" of MappedSlices (e.g. attach a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 MappedSlice representing a strain to a container that already contains a
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 multi-species alignment). The methods for attaching new MappedSlice will
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 be responsable to perform the necessary adjustments to coordinates and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 mapper on the existing MappedSlices.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 set_adaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 get_adaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 set_AssemblySliceAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 get_AssemblySliceAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 set_AlignSliceAdaptor (not implemented yet)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 get_AlignSliceAdaptor (not implemented yet)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 set_StrainSliceAdaptor (not implemented yet)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 get_StrainSliceAdaptor (not implemented yet)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 attach_AssemblySlice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 attach_AlignSlice (not implemented yet)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 attach_StrainSlice (not implemented yet)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 get_all_MappedSlices
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 sub_MappedSliceContainer (not implemented yet)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 ref_slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 container_slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 mapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 expanded
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 =head1 RELATED MODULES
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 Bio::EnsEMBL::MappedSlice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 Bio::EnsEMBL::DBSQL::AssemblySliceAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 Bio::EnsEMBL::Compara::AlignSlice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 Bio::EnsEMBL::Compara::AlignSlice::Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 Bio::EnsEMBL::AlignStrainSlice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 Bio::EnsEMBL::StrainSlice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 package Bio::EnsEMBL::MappedSliceContainer;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 no warnings 'uninitialized';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 use Bio::EnsEMBL::Utils::Argument qw(rearrange);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 use Bio::EnsEMBL::Utils::Exception qw(throw warning);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 use Bio::EnsEMBL::CoordSystem;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 use Bio::EnsEMBL::Slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 use Bio::EnsEMBL::Mapper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 # define avalable adaptormajs to use with this container
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 my %adaptors = map { $_ => 1 } qw(assembly align strain);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 =head2 new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 Arg [SLICE] : Bio::EnsEMBL::Slice $slice - the reference slice for this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 container
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 Arg [EXPANDED] : (optional) Boolean $expanded - set expanded mode (default:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 collapsed)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 Example : my $slice = $slice_adaptor->fetch_by_region('chromosome', 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 9000000, 9500000);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 my $msc = Bio::EnsEMBL::MappedSliceContainer->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 -SLICE => $slice,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 -EXPANDED => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 Description : Constructor. See the general documentation of this module for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 details about this object. Note that the constructor creates an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 empty container, so you'll have to attach MappedSlices to it to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 be useful (this is usually done by an adaptor/factory).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 Return type : Bio::EnsEMBL::MappedSliceContainer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 Exceptions : thrown on wrong or missing argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 my $caller = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 my $class = ref($caller) || $caller;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 my ($ref_slice, $expanded) = rearrange([qw(SLICE EXPANDED)], @_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 # argument check
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 unless ($ref_slice and ref($ref_slice) and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 ($ref_slice->isa('Bio::EnsEMBL::Slice') or $ref_slice->isa('Bio::EnsEMBL::LRGSlice')) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 throw("You must provide a reference slice.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 my $self = {};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 bless ($self, $class);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 # initialise object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 $self->{'ref_slice'} = $ref_slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 $self->{'expanded'} = $expanded || 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 $self->{'mapped_slices'} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 # create the container slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 $self->_create_container_slice($ref_slice);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 # Create an artificial slice which represents the common coordinate system used
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 # for this MappedSliceContainer
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 sub _create_container_slice {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 my $ref_slice = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 # argument check
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 unless ($ref_slice and ref($ref_slice) and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 ($ref_slice->isa('Bio::EnsEMBL::Slice') or $ref_slice->isa('Bio::EnsEMBL::LRGSlice')) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 throw("You must provide a reference slice.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 # create an artificial coordinate system for the container slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 my $cs = Bio::EnsEMBL::CoordSystem->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 -NAME => 'container',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 -RANK => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 # Create a new artificial slice spanning your container. Initially this will
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 # simply span your reference slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 my $container_slice = Bio::EnsEMBL::Slice->new(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 -COORD_SYSTEM => $cs,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 -START => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 -END => $ref_slice->length,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 -STRAND => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 -SEQ_REGION_NAME => 'container',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 $self->{'container_slice'} = $container_slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 # Create an Mapper to map to/from the reference slice to the container coord
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 # system.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 my $mapper = Bio::EnsEMBL::Mapper->new('ref_slice', 'container');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 $mapper->add_map_coordinates(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 $ref_slice->seq_region_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 $ref_slice->start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 $ref_slice->end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 $container_slice->seq_region_name,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 $container_slice->start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 $container_slice->end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 $self->{'mapper'} = $mapper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 =head2 set_adaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 Arg[1] : String $type - the type of adaptor to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 Arg[2] : Adaptor $adaptor - the adaptor to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 Example : my $adaptor = Bio::EnsEMBL::DBSQL::AssemblySliceAdaptor->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 $msc->set_adaptor('assembly', $adaptor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 Description : Parameterisable wrapper for all methods that set adaptors (see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 below).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 Return type : same as Arg 2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 Exceptions : thrown on missing type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 sub set_adaptor {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 my $type = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 my $adaptor = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 # argument check
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 unless ($type and $adaptors{$type}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 throw("Missing or unknown adaptor type.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 $type = ucfirst($type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 my $method = "set_${type}SliceAdaptor";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 return $self->$method($adaptor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 =head2 get_adaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 Arg[1] : String $type - the type of adaptor to get
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 Example : my $assembly_slice_adaptor = $msc->get_adaptor('assembly');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 Description : Parameterisable wrapper for all methods that get adaptors (see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 below).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 Return type : An adaptor for the requested type of MappedSlice.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 Exceptions : thrown on missing type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 sub get_adaptor {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 my $type = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 # argument check
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 unless ($type and $adaptors{$type}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 throw("Missing or unknown adaptor type.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 $type = ucfirst($type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 my $method = "get_${type}SliceAdaptor";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 return $self->$method;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 =head2 set_AssemblySliceAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 Arg[1] : Bio::EnsEMBL::DBSQL::AssemblySliceAdaptor - the adaptor to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 Example : my $adaptor = Bio::EnsEMBL::DBSQL::AssemblySliceAdaptor->new;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294 $msc->set_AssemblySliceAdaptor($adaptor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 Description : Sets an AssemblySliceAdaptor for this container. The adaptor can
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 be used to attach MappedSlice for alternative assemblies.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 Return type : Bio::EnsEMBL::DBSQL::AssemblySliceAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 Exceptions : thrown on wrong or missing argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 Caller : general, $self->get_adaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 sub set_AssemblySliceAdaptor {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 my $assembly_slice_adaptor = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 unless ($assembly_slice_adaptor and ref($assembly_slice_adaptor) and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 $assembly_slice_adaptor->isa('Bio::EnsEMBL::DBSQL::AssemblySliceAdaptor')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 throw("Need a Bio::EnsEMBL::AssemblySliceAdaptor.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 $self->{'adaptors'}->{'AssemblySlice'} = $assembly_slice_adaptor;
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 get_AssemblySliceAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 Example : my $assembly_slice_adaptor = $msc->get_AssemblySliceAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 Description : Gets a AssemblySliceAdaptor from this container. The adaptor can
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 be used to attach MappedSlice for alternative assemblies.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 Return type : Bio::EnsEMBL::DBSQL::AssemblySliceAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 Exceptions : thrown on wrong or missing argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 Caller : general, $self->get_adaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 sub get_AssemblySliceAdaptor {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 unless ($self->{'adaptors'}->{'AssemblySlice'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 warning("No AssemblySliceAdaptor attached to MappedSliceContainer.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 return $self->{'adaptors'}->{'AssemblySlice'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 # [todo]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 sub set_AlignSliceAdaptor {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 throw("Not implemented yet!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 # [todo]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 sub get_AlignSliceAdaptor {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 throw("Not implemented yet!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 # [todo]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 sub set_StrainSliceAdaptor {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 my $strain_slice_adaptor = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 unless ($strain_slice_adaptor and ref($strain_slice_adaptor) and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 $strain_slice_adaptor->isa('Bio::EnsEMBL::DBSQL::StrainSliceAdaptor')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 throw("Need a Bio::EnsEMBL::StrainSliceAdaptor.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 $self->{'adaptors'}->{'StrainSlice'} = $strain_slice_adaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 # [todo]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 sub get_StrainSliceAdaptor {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 unless ($self->{'adaptors'}->{'StrainSlice'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 warning("No StrainSliceAdaptor attached to MappedSliceContainer.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 return $self->{'adaptors'}->{'StrainSlice'};
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 attach_AssemblySlice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 Arg[1] : String $version - assembly version to attach
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 Example : $msc->attach_AssemblySlice('NCBIM36');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 Description : Attaches a MappedSlice for an alternative assembly to this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 container.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 Exceptions : thrown on missing argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 Caller : general, Bio::EnsEMBL::DBSQL::AssemblySliceAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 sub attach_AssemblySlice {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 my $version = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 throw("Need a version.") unless ($version);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 my $asa = $self->get_AssemblySliceAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 return unless ($asa);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 my @mapped_slices = @{ $asa->fetch_by_version($self, $version) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 push @{ $self->{'mapped_slices'} }, @mapped_slices;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 =head2 attach_StrainSlice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 Arg[1] : String $strain - name of strain to attach
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 Example : $msc->attach_StrainSlice('Watson');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 Description : Attaches a MappedSlice for an alternative strain to this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 container.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 Return type : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 Exceptions : thrown on missing argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 Caller : general, Bio::EnsEMBL::DBSQL::StrainSliceAdaptor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 sub attach_StrainSlice {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 my $strain = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 throw("Need a strain.") unless ($strain);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 my $ssa = $self->get_StrainSliceAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 return unless ($ssa);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 my @mapped_slices = @{ $ssa->fetch_by_name($self, $strain) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 push @{ $self->{'mapped_slices'} }, @mapped_slices;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 =head2 get_all_MappedSlices
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 Example : foreach my $mapped_slice (@{ $msc->get_all_MappedSlices }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 print $mapped_slice->name, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 Description : Returns all MappedSlices attached to this container.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 Return type : listref of Bio::EnsEMBL::MappedSlice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 sub get_all_MappedSlices {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 return $self->{'mapped_slices'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 # [todo]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 sub sub_MappedSliceContainer {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 throw("Not implemented yet!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 =head2 ref_slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 Arg[1] : (optional) Bio::EnsEMBL::Slice - the reference slice to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 Example : my $ref_slice = $mapped_slice_container->ref_slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 print "This MappedSliceContainer is based on the reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 slice ", $ref_slice->name, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 Description : Getter/setter for the reference slice.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 Return type : Bio::EnsEMBL::Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 Exceptions : thrown on wrong argument type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 sub ref_slice {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 if (@_) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 my $slice = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 unless (ref($slice) and ($slice->isa('Bio::EnsEMBL::Slice') or $slice->isa('Bio::EnsEMBL::LRGSlice'))) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 throw("Need a Bio::EnsEMBL::Slice.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 $self->{'ref_slice'} = $slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 return $self->{'ref_slice'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 =head2 container_slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 Arg[1] : (optional) Bio::EnsEMBL::Slice - the container slice to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 Example : my $container_slice = $mapped_slice_container->container_slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 print "The common slice used by this MappedSliceContainer is ",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 $container_slice->name, "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 Description : Getter/setter for the container slice. This is an artificial
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 slice which defines the common coordinate system used by the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 MappedSlices attached to this container.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 Return type : Bio::EnsEMBL::Slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 Exceptions : thrown on wrong argument type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 sub container_slice {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 if (@_) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 my $slice = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520 unless (ref($slice) and ($slice->isa('Bio::EnsEMBL::Slice') or $slice->isa('Bio::EnsEMBL::LRGSlice')) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 throw("Need a Bio::EnsEMBL::Slice.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 $self->{'container_slice'} = $slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527 return $self->{'container_slice'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 =head2 mapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 Arg[1] : (optional) Bio::EnsEMBL::Mapper - the mapper to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534 Example : my $mapper = Bio::EnsEMBL::Mapper->new('ref', 'mapped');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 $mapped_slice_container->mapper($mapper);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 Description : Getter/setter for the mapper to map between reference slice and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 the artificial container coord system.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 Return type : Bio::EnsEMBL::Mapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 Exceptions : thrown on wrong argument type
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 Caller : internal, Bio::EnsEMBL::MappedSlice->AUTOLOAD
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 sub mapper {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 if (@_) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 my $mapper = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 unless (ref($mapper) and $mapper->isa('Bio::EnsEMBL::Mapper')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 throw("Need a Bio::EnsEMBL::Mapper.");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 $self->{'mapper'} = $mapper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 return $self->{'mapper'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 =head2 expanded
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 Arg[1] : (optional) Boolean - expanded mode to set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 Example : if ($mapped_slice_container->expanded) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 # do more elaborate mapping than in collapsed mode
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 [...]
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 Description : Getter/setter for expanded mode.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 By default, MappedSliceContainer use collapsed mode, which
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 means that no inserts in the reference sequence are allowed
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 when constructing the MappedSlices. in this mode, the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 mapped_slice artificial coord system will be identical with the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 ref_slice coord system.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 By setting expanded mode, you allow inserts in the reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 sequence.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 Return type : Boolean
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 sub expanded {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 $self->{'expanded'} = shift if (@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 return $self->{'expanded'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 =head2 seq
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 Example : my $seq = $container->seq()
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 Description : Retrieves the expanded sequence of the artificial container
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598 slice, including "-" characters where there are inserts in any
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 of the attached mapped slices.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 Return type : String
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 Exceptions : none
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 Caller : general
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 Status : At Risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604 : under development
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 sub seq {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 my $container_seq = '';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 # check there's a mapper
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 if(defined($self->mapper)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 my $start = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 my $slice = $self->ref_slice();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 my $seq = $slice->seq();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 foreach my $coord($self->mapper->map_coordinates($slice->seq_region_name, $slice->start, $slice->end, $slice->strand, 'ref_slice')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 # if it is a normal coordinate insert sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 if(!$coord->isa('Bio::EnsEMBL::Mapper::IndelCoordinate')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 $container_seq .= substr($seq, $start, $coord->length());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 $start += $coord->length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 # if it is a gap or indel insert "-"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 $container_seq .= '-' x $coord->length();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 return $container_seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638