annotate variant_effect_predictor/Bio/EnsEMBL/CircularSlice.pm @ 0:2bc9b66ada89 draft default tip

Uploaded
author mahtabm
date Thu, 11 Apr 2013 06:29:17 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
5
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
8
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
10
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
12
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
15
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
18
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
19 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
20
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
22
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
23 Bio::EnsEMBL::CircularSlice - Arbitary Slice of a genome
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
24
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
25 =head1 SYNOPSIS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
26
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
27 $sa = $db->get_SliceAdaptor;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
28
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
29 $slice =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
30 $sa->fetch_by_region( 'chromosome', 'X', 1_000_000, 2_000_000 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
31
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
32 # get some attributes of the slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
33 my $seqname = $slice->seq_region_name();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
34 my $start = $slice->start();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
35 my $end = $slice->end();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
36
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
37 # get the sequence from the slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
38 my $seq = $slice->seq();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
39
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
40 # get some features from the slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
41 foreach $gene ( @{ $slice->get_all_Genes } ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
42 # do something with a gene
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
43 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
44
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
45 foreach my $feature ( @{ $slice->get_all_DnaAlignFeatures } ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
46 # do something with dna-dna alignments
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
47 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
48
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
49 =head1 DESCRIPTION
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
50
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
51 A Slice object represents a region of a genome. It can be used to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
52 retrieve sequence or features from an area of interest.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
53
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
54 =head1 METHODS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
55
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
56 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
57
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
58 package Bio::EnsEMBL::CircularSlice;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
59 use vars qw(@ISA);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
60 use strict;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
61
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
62 use Bio::PrimarySeqI;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
63
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
64 use Bio::EnsEMBL::Utils::Argument qw(rearrange);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
65 use Bio::EnsEMBL::Utils::Exception
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
66 qw(throw deprecate warning stack_trace_dump);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
67 use Bio::EnsEMBL::RepeatMaskedSlice;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
68 use Bio::EnsEMBL::Utils::Sequence qw(reverse_comp);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
69 use Bio::EnsEMBL::Utils::Scalar qw( assert_ref );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
70 use Bio::EnsEMBL::ProjectionSegment;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
71 use Bio::EnsEMBL::Registry;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
72 use Bio::EnsEMBL::DBSQL::MergedAdaptor;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
73
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
74 use Bio::EnsEMBL::StrainSlice;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
75 #use Bio::EnsEMBL::IndividualSlice;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
76 #use Bio::EnsEMBL::IndividualSliceFactory;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
77 use Bio::EnsEMBL::Mapper::RangeRegistry;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
78 use Bio::EnsEMBL::Slice;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
79 use Data::Dumper;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
80 use Scalar::Util qw(weaken isweak);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
81
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
82 my $reg = "Bio::EnsEMBL::Registry";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
83
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
84 @ISA = qw(Bio::EnsEMBL::Slice);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
85
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
86 =head2 new
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
87
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
88 Arg [...] : List of named arguments
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
89 Bio::EnsEMBL::CoordSystem COORD_SYSTEM
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
90 string SEQ_REGION_NAME,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
91 int START,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
92 int END,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
93 int SEQ_REGION_LENGTH, (optional)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
94 string SEQ (optional)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
95 int STRAND, (optional, defaults to 1)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
96 Bio::EnsEMBL::DBSQL::SliceAdaptor ADAPTOR (optional)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
97 Example :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
98
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
99 $slice =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
100 Bio::EnsEMBL::CircularSlice->new( -coord_system => $cs,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
101 -start => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
102 -end => 10000,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
103 -strand => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
104 -seq_region_name => 'X',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
105 -seq_region_length => 12e6,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
106 -adaptor => $slice_adaptor );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
107
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
108 Description: Creates a new slice object. A slice represents a
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
109 region of sequence in a particular coordinate system.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
110 Slices can be used to retrieve sequence and features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
111 from an area of interest in a genome.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
112
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
113 Coordinates start at 1 and are inclusive. Negative
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
114 coordinates or coordinates exceeding the length of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
115 the seq_region are permitted. Start must be less
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
116 than or equal. to end regardless of the strand.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
117
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
118 Slice objects are immutable. Once instantiated their
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
119 attributes (with the exception of the adaptor) may
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
120 not be altered. To change the attributes a new slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
121 must be created.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
122
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
123 Returntype : Bio::EnsEMBL::CircularSlice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
124 Exceptions : throws if start, end, coordsystem or seq_region_name not
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
125 specified or not of the correct type
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
126 Caller : general, Bio::EnsEMBL::SliceAdaptor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
127 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
128
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
129 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
130
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
131 sub new {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
132 my $caller = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
133
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
134 #new can be called as a class or object method
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
135 my $class = ref($caller) || $caller;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
136
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
137 my ( $seq, $coord_system, $seq_region_name, $seq_region_length,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
138 $start, $end, $strand, $adaptor, $empty )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
139 = rearrange( [
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
140 qw(SEQ COORD_SYSTEM SEQ_REGION_NAME SEQ_REGION_LENGTH
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
141 START END STRAND ADAPTOR EMPTY) ],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
142 @_ );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
143
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
144 #empty is only for backwards compatibility
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
145 if ($empty) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
146 deprecate( "Creation of empty slices is no longer needed "
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
147 . "and is deprecated" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
148 my $self = bless( { 'empty' => 1 }, $class );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
149 $self->adaptor($adaptor);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
150 return $self;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
151 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
152
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
153 if ( !defined($seq_region_name) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
154 throw('SEQ_REGION_NAME argument is required');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
155 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
156 if ( !defined($start) ) { throw('START argument is required') }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
157 if ( !defined($end) ) { throw('END argument is required') }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
158
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
159 if ( !defined($seq_region_length) ) { $seq_region_length = $end }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
160
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
161 if ( $seq_region_length <= 0 ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
162 throw('SEQ_REGION_LENGTH must be > 0');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
163 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
164
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
165 if ( defined($coord_system) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
166 assert_ref( $coord_system, 'Bio::EnsEMBL::CoordSystem' );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
167
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
168 if ( $coord_system->is_top_level() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
169 throw('Cannot create circular slice on toplevel CoordSystem.');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
170 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
171 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
172 warning("CircularSlice without coordinate system");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
173 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
174
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
175 $strand ||= 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
176
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
177 if ( $strand != 1 && $strand != -1 ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
178 throw('STRAND argument must be -1 or 1');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
179 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
180
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
181 if ( defined($adaptor) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
182 assert_ref( $adaptor, 'Bio::EnsEMBL::DBSQL::SliceAdaptor' );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
183 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
184
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
185 my $seq1 = { 'coord_system' => $coord_system,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
186 'seq' => $seq,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
187 'seq_region_name' => $seq_region_name,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
188 'seq_region_length' => $seq_region_length,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
189 'start' => int($start),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
190 'end' => int($end),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
191 'strand' => $strand };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
192
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
193 bless $seq1, $class;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
194 $seq1->adaptor($adaptor);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
195 return $seq1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
196 } ## end sub new
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
197
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
198 =head2 new_fast
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
199
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
200 Arg [1] : hashref to be blessed
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
201 Description: Construct a new Bio::EnsEMBL::Slice using the hashref.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
202 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
203 Returntype : Bio::EnsEMBL::CircularSlice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
204 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
205 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
206
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
207 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
208
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
209 sub new_fast {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
210 my $class = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
211 my $hashref = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
212 my $self = bless $hashref, $class;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
213 weaken($self->{adaptor}) if ( ! isweak($self->{adaptor}) );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
214 return $self;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
215 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
216
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
217 =head2 centrepoint
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
218
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
219 Arg [1] : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
220 Example : $cp = $slice->centrepoint();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
221 Description: Returns the mid position of this slice relative to the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
222 start of the sequence region that it was created on.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
223 Coordinates are inclusive and start at 1.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
224 Returntype : int
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
225 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
226 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
227 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
228
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
229 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
230
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
231 sub centrepoint {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
232 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
233
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
234 my ( $s, $e, $length ) =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
235 ( $self->{'start'}, $self->{'end'}, $self->{'seq_region_length'} );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
236
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
237 if ( $s < $e ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
238 return ( $s + $e )/2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
239 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
240
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
241 my $r1 = $length - $s;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
242 my $r2 = $e;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
243 my $r = ( $r1 + $r2 )/2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
244 my $m = $s + $r;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
245
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
246 if ( $m > $length ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
247 $m = $m - $length;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
248 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
249
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
250 return $m;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
251 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
252
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
253 =head2 length
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
254
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
255 Arg [1] : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
256 Example : $length = $slice->length();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
257 Description: Returns the length of this slice in basepairs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
258 Returntype : int
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
259 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
260 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
261 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
262
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
263 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
264
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
265 sub length {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
266 my ($self) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
267
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
268 if ( $self->{'start'} < $self->{'end'} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
269 return $self->{'end'} - $self->{'start'} + 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
270 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
271
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
272 my $r1 = $self->{'seq_region_length'} - $self->{'start'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
273 my $r2 = $self->{'end'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
274 my $ln = $r1 + $r2 + 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
275
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
276 return $ln;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
277 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
278
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
279 =head2 invert
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
280
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
281 Arg [1] : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
282 Example : $inverted_slice = $slice->invert;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
283 Description: Creates a copy of this slice on the opposite strand and
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
284 returns it.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
285 Returntype : Bio::EnsEMBL::Slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
286 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
287 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
288 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
289
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
290 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
291
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
292 sub invert {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
293 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
294
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
295 # make a shallow copy of the slice via a hash copy and flip the strand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
296 my %s = %$self;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
297 $s{'strand'} = $self->{'strand'}*-1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
298
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
299 # reverse compliment any attached sequence
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
300 reverse_comp( \$s{'seq'} ) if ( $s{'seq'} );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
301
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
302 # bless and return the copy
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
303 return bless \%s, ref $self;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
304 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
305
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
306 =head2 seq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
307
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
308 Arg [1] : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
309 Example : print "SEQUENCE = ", $slice->seq();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
310 Description: Returns the sequence of the region represented by this
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
311 slice formatted as a string.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
312 Returntype : string
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
313 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
314 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
315 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
316
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
317 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
318
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
319 sub seq {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
320 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
321
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
322 # special case for in-between (insert) coordinates
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
323 return '' if ( $self->start() == $self->end() + 1 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
324 return $self->{'seq'} if ( $self->{'seq'} );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
325
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
326 if ( $self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
327
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
328 my $seqAdaptor = $self->adaptor()->db()->get_SequenceAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
329 if ( $self->{'start'} > $self->{'end'} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
330 my $length = $self->{'seq_region_length'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
331
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
332 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
333 Bio::EnsEMBL::Slice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
334 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
335 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
336 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
337 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
338 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
339 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
340 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
341
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
342 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
343 Bio::EnsEMBL::Slice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
344 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
345 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
346 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
347 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
348 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
349 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
350 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
351
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
352 my $seq1 = ${
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
353 $seqAdaptor->fetch_by_Slice_start_end_strand( $sl1, 1, undef,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
354 1 ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
355 my $seq2 = ${
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
356 $seqAdaptor->fetch_by_Slice_start_end_strand( $sl2, 1, undef,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
357 1 ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
358 return $seq1 . $seq2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
359
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
360 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
361 my $seq1 = ${
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
362 $seqAdaptor->fetch_by_Slice_start_end_strand( $self, 1, undef,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
363 1 ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
364 return $seq1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
365 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
366 } ## end if ( $self->adaptor() )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
367
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
368 # no attached sequence, and no db, so just return Ns
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
369 return 'N' x $self->length();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
370 } ## end sub seq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
371
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
372 =head2 subseq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
373
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
374 Arg [1] : int $startBasePair
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
375 relative to start of slice, which is 1.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
376 Arg [2] : int $endBasePair
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
377 relative to start of slice.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
378 Arg [3] : (optional) int $strand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
379 The strand of the slice to obtain sequence from. Default
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
380 value is 1.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
381 Description: returns string of dna sequence
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
382 Returntype : txt
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
383 Exceptions : end should be at least as big as start
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
384 strand must be set
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
385 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
386 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
387
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
388 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
389
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
390 sub subseq {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
391 my ( $self, $start, $end, $strand ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
392
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
393 # handle 'between' case for insertions
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
394 return '' if ( $start == $end + 1 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
395
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
396 $strand = 1 unless ( defined $strand );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
397
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
398 if ( $strand != -1 && $strand != 1 ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
399 throw("Invalid strand [$strand] in call to Slice::subseq.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
400 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
401 my $subseq;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
402 my $length = $self->{'seq_region_length'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
403
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
404 if ( $self->adaptor ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
405
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
406 my $seqAdaptor = $self->adaptor->db->get_SequenceAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
407 if ( $end < $start ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
408 my $subseq1 = ${
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
409 $seqAdaptor->fetch_by_Slice_start_end_strand( $self, $start,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
410 $length, $strand )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
411 };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
412 my $subseq2 = ${
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
413 $seqAdaptor->fetch_by_Slice_start_end_strand( $self, 1, $end,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
414 $strand ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
415 $subseq = $subseq1 . $subseq2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
416
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
417 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
418 $subseq = ${
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
419 $seqAdaptor->fetch_by_Slice_start_end_strand( $self, $start,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
420 $end, $strand ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
421 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
422 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
423 ## check for gap at the beginning and pad it with Ns
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
424 if ( $start < 1 ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
425 $subseq = "N" x ( 1 - $start );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
426 $start = 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
427 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
428 $subseq .= substr( $self->seq(), $start - 1, $end - $start + 1 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
429 ## check for gap at the end and pad it with Ns
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
430 if ( $end > $self->length() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
431 $subseq .= "N" x ( $end - $self->length() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
432 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
433 reverse_comp( \$subseq ) if ( $strand == -1 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
434 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
435 return $subseq;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
436 } ## end sub subseq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
437
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
438 =head2 project
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
439
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
440 Arg [1] : string $name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
441 The name of the coordinate system to project this slice onto
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
442 Arg [2] : string $version
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
443 The version of the coordinate system (such as 'NCBI34') to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
444 project this slice onto
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
445 Example :
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
446 my $clone_projection = $slice->project('clone');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
447
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
448 foreach my $seg (@$clone_projection) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
449 my $clone = $segment->to_Slice();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
450 print $slice->seq_region_name(), ':', $seg->from_start(), '-',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
451 $seg->from_end(), ' -> ',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
452 $clone->seq_region_name(), ':', $clone->start(), '-',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
453 $clone->end(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
454 $clone->strand(), "\n";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
455 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
456 Description: Returns the results of 'projecting' this slice onto another
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
457 coordinate system. Projecting to a coordinate system that
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
458 the slice is assembled from is analagous to retrieving a tiling
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
459 path. This method may also be used to 'project up' to a higher
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
460 level coordinate system, however.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
461
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
462 This method returns a listref of triplets [start,end,slice]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
463 which represents the projection. The start and end defined the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
464 region of this slice which is made up of the third value of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
465 the triplet: a slice in the requested coordinate system.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
466 Returntype : list reference of Bio::EnsEMBL::ProjectionSegment objects which
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
467 can also be used as [$start,$end,$slice] triplets
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
468 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
469 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
470 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
471
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
472 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
473
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
474 sub project {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
475 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
476 my $cs_name = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
477 my $cs_version = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
478
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
479 throw('Coord_system name argument is required') if ( !$cs_name );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
480
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
481 my $slice_adaptor = $self->adaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
482
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
483 if ( !$slice_adaptor ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
484 warning("Cannot project without attached adaptor.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
485 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
486 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
487
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
488 if ( !$self->coord_system() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
489 warning("Cannot project without attached coord system.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
490 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
491 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
492
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
493 my $db = $slice_adaptor->db();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
494 my $csa = $db->get_CoordSystemAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
495 my $cs = $csa->fetch_by_name( $cs_name, $cs_version );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
496
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
497 my $sl01 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
498 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
499 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
500 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
501 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
502 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
503 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
504 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
505 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
506
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
507 my $sl02 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
508 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
509 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
510 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
511 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
512 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
513 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
514 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
515 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
516
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
517 my @projection;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
518 my $current_start = 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
519
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
520 foreach my $sl2 ( $sl01, $sl02 ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
521 my $slice_cs = $sl2->coord_system();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
522
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
523 if ( !$cs ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
524 throw( "Cannot project to unknown coordinate system "
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
525 . "[$cs_name $cs_version]" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
526 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
527
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
528 # no mapping is needed if the requested coord system is the one we are in
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
529 # but we do need to check if some of the slice is outside of defined regions
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
530 if ( $slice_cs->equals($cs) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
531 return $self->_constrain_to_region();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
532 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
533
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
534 # decompose this slice into its symlinked components.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
535 # this allows us to handle haplotypes and PARs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
536 my $normal_slice_proj =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
537 $slice_adaptor->fetch_normalized_slice_projection($sl2);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
538
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
539 foreach my $segment (@$normal_slice_proj) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
540 my $normal_slice = $segment->[2];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
541
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
542 $slice_cs = $normal_slice->coord_system();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
543
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
544 my $asma = $db->get_AssemblyMapperAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
545 my $asm_mapper = $asma->fetch_by_CoordSystems( $slice_cs, $cs );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
546
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
547 # perform the mapping between this slice and the requested system
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
548 my @coords;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
549
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
550 if ( defined $asm_mapper ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
551 @coords = $asm_mapper->map( $normal_slice->seq_region_name(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
552 $normal_slice->start(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
553 $normal_slice->end(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
554 $normal_slice->strand(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
555 $slice_cs );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
556
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
557 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
558 $coords[0] =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
559 Bio::EnsEMBL::Mapper::Gap->new( $normal_slice->start(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
560 $normal_slice->end() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
561 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
562
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
563 #construct a projection from the mapping results and return it
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
564 foreach my $coord (@coords) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
565 my $coord_start = $coord->start();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
566 my $coord_end = $coord->end();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
567 my $length = $coord_end - $coord_start + 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
568
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
569 #skip gaps
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
570 if ( $coord->isa('Bio::EnsEMBL::Mapper::Coordinate') ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
571 my $coord_cs = $coord->coord_system();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
572
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
573 # If the normalised projection just ended up mapping to the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
574 # same coordinate system we were already in then we should just
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
575 # return the original region. This can happen for example, if we
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
576 # were on a PAR region on Y which refered to X and a projection to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
577 # 'toplevel' was requested.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
578
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
579 if ( $coord_cs->equals($slice_cs) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
580 # trim off regions which are not defined
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
581 return $self->_constrain_to_region();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
582 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
583 #create slices for the mapped-to coord system
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
584
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
585 my $slice =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
586 $slice_adaptor->fetch_by_seq_region_id(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
587 $coord->id(), $coord_start,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
588 $coord_end, $coord->strand()
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
589 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
590
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
591 my $current_end = $current_start + $length - 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
592 push @projection,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
593 bless( [ $current_start, $current_end, $slice ],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
594 "Bio::EnsEMBL::ProjectionSegment" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
595 } ## end if ( $coord->isa('Bio::EnsEMBL::Mapper::Coordinate'...))
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
596
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
597 $current_start += $length;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
598 } ## end foreach my $coord (@coords)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
599 } ## end foreach my $segment (@$normal_slice_proj)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
600 } #foreach
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
601
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
602 return \@projection;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
603 } ## end sub project
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
604
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
605 sub project_org {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
606 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
607 my $cs_name = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
608 my $cs_version = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
609
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
610 throw('Coord_system name argument is required') if ( !$cs_name );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
611
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
612 my $slice_adaptor = $self->adaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
613
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
614 if ( !$slice_adaptor ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
615 warning("Cannot project without attached adaptor.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
616 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
617 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
618
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
619 if ( !$self->coord_system() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
620 warning("Cannot project without attached coord system.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
621 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
622 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
623
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
624 my $db = $slice_adaptor->db();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
625 my $csa = $db->get_CoordSystemAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
626 my $cs = $csa->fetch_by_name( $cs_name, $cs_version );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
627 my $slice_cs = $self->coord_system();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
628
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
629 if ( !$cs ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
630 throw( "Cannot project to unknown coordinate system "
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
631 . "[$cs_name $cs_version]" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
632 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
633
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
634 # No mapping is needed if the requested coord system is the one we
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
635 # are in. But we do need to check if some of the slice is outside of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
636 # defined regions.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
637 if ( $slice_cs->equals($cs) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
638 return $self->_constrain_to_region();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
639 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
640
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
641 my @projection;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
642 my $current_start = 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
643
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
644 # Decompose this slice into its symlinked components. This allows us
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
645 # to handle haplotypes and PARs.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
646 my $normal_slice_proj =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
647 $slice_adaptor->fetch_normalized_slice_projection($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
648 foreach my $segment (@$normal_slice_proj) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
649 my $normal_slice = $segment->[2];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
650
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
651 $slice_cs = $normal_slice->coord_system();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
652
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
653 my $asma = $db->get_AssemblyMapperAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
654 my $asm_mapper = $asma->fetch_by_CoordSystems( $slice_cs, $cs );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
655
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
656 # perform the mapping between this slice and the requested system
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
657 my @coords;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
658
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
659 if ( defined $asm_mapper ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
660 @coords = $asm_mapper->map( $normal_slice->seq_region_name(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
661 $normal_slice->start(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
662 $normal_slice->end(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
663 $normal_slice->strand(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
664 $slice_cs );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
665
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
666 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
667 $coords[0] =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
668 Bio::EnsEMBL::Mapper::Gap->new( $normal_slice->start(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
669 $normal_slice->end() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
670 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
671
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
672 #construct a projection from the mapping results and return it
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
673 foreach my $coord (@coords) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
674 my $coord_start = $coord->start();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
675 my $coord_end = $coord->end();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
676 my $length = $coord_end - $coord_start + 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
677
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
678 #skip gaps
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
679 if ( $coord->isa('Bio::EnsEMBL::Mapper::Coordinate') ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
680 my $coord_cs = $coord->coord_system();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
681
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
682 # If the normalised projection just ended up mapping to the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
683 # same coordinate system we were already in then we should just
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
684 # return the original region. This can happen for example,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
685 # if we were on a PAR region on Y which refered to X and a
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
686 # projection to 'toplevel' was requested.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
687
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
688 if ( $coord_cs->equals($slice_cs) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
689 # trim off regions which are not defined
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
690 return $self->_constrain_to_region();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
691 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
692 #create slices for the mapped-to coord system
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
693
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
694 my $slice =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
695 $slice_adaptor->fetch_by_seq_region_id( $coord->id(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
696 $coord_start, $coord_end, $coord->strand() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
697
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
698 my $current_end = $current_start + $length - 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
699
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
700 push @projection,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
701 bless( [ $current_start, $current_end, $slice ],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
702 "Bio::EnsEMBL::ProjectionSegment" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
703 } ## end if ( $coord->isa('Bio::EnsEMBL::Mapper::Coordinate'...))
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
704
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
705 $current_start += $length;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
706 } ## end foreach my $coord (@coords)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
707 } ## end foreach my $segment (@$normal_slice_proj)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
708
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
709 return \@projection;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
710 } ## end sub project_org
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
711
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
712 sub _constrain_to_region {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
713 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
714
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
715 my $entire_len = $self->seq_region_length();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
716
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
717 # If the slice has negative coordinates or coordinates exceeding the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
718 # exceeding length of the sequence region we want to shrink the slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
719 # to the defined region.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
720
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
721 if ( $self->{'start'} > $entire_len || $self->{'end'} < 1 ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
722 #none of this slice is in a defined region
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
723 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
724 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
725
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
726 my $right_contract = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
727 my $left_contract = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
728 if ( $self->{'end'} > $entire_len ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
729 $right_contract = $entire_len - $self->{'end'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
730 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
731 if ( $self->{'start'} < 1 ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
732 $left_contract = $self->{'start'} - 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
733 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
734
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
735 my $new_slice;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
736 if ( $left_contract || $right_contract ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
737 $new_slice = $self->expand( $left_contract, $right_contract );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
738 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
739 $new_slice = $self;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
740 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
741
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
742 return [ bless [ 1 - $left_contract,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
743 $self->length() + $right_contract,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
744 $new_slice ],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
745 "Bio::EnsEMBL::ProjectionSegment" ];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
746 } ## end sub _constrain_to_region
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
747
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
748 =head2 expand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
749
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
750 Arg [1] : (optional) int $five_prime_expand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
751 The number of basepairs to shift this slices five_prime
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
752 coordinate by. Positive values make the slice larger,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
753 negative make the slice smaller.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
754 coordinate left.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
755 Default = 0.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
756 Arg [2] : (optional) int $three_prime_expand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
757 The number of basepairs to shift this slices three_prime
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
758 coordinate by. Positive values make the slice larger,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
759 negative make the slice smaller.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
760 Default = 0.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
761 Arg [3] : (optional) bool $force_expand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
762 if set to 1, then the slice will be contracted even in the case
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
763 when shifts $five_prime_expand and $three_prime_expand overlap.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
764 In that case $five_prime_expand and $three_prime_expand will be set
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
765 to a maximum possible number and that will result in the slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
766 which would have only 2pbs.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
767 Default = 0.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
768 Arg [4] : (optional) int* $fpref
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
769 The reference to a number of basepairs to shift this slices five_prime
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
770 coordinate by. Normally it would be set to $five_prime_expand.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
771 But in case when $five_prime_expand shift can not be applied and
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
772 $force_expand is set to 1, then $$fpref will contain the maximum possible
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
773 shift
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
774 Arg [5] : (optional) int* $tpref
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
775 The reference to a number of basepairs to shift this slices three_prime
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
776 coordinate by. Normally it would be set to $three_prime_expand.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
777 But in case when $five_prime_expand shift can not be applied and
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
778 $force_expand is set to 1, then $$tpref will contain the maximum possible
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
779 shift
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
780 Example : my $expanded_slice = $slice->expand( 1000, 1000);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
781 my $contracted_slice = $slice->expand(-1000,-1000);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
782 my $shifted_right_slice = $slice->expand(-1000, 1000);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
783 my $shifted_left_slice = $slice->expand( 1000,-1000);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
784 my $forced_contracted_slice = $slice->expand(-1000,-1000, 1, \$five_prime_shift, \$three_prime_shift);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
785
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
786 Description: Returns a slice which is a resized copy of this slice. The
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
787 start and end are moved outwards from the center of the slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
788 if positive values are provided and moved inwards if negative
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
789 values are provided. This slice remains unchanged. A slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
790 may not be contracted below 1bp but may grow to be arbitrarily
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
791 large.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
792 Returntype : Bio::EnsEMBL::Slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
793 Exceptions : warning if an attempt is made to contract the slice below 1bp
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
794 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
795 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
796
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
797 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
798
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
799 sub expand {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
800 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
801 my $five_prime_shift = shift || 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
802 my $three_prime_shift = shift || 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
803 my $force_expand = shift || 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
804 my $fpref = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
805 my $tpref = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
806
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
807 if ( $self->{'seq'} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
808 warning(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
809 "Cannot expand a slice which has a manually attached sequence ");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
810 return undef;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
811 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
812
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
813 my $new_start;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
814 my $new_end;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
815 my $sshift = $five_prime_shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
816 my $eshift = $three_prime_shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
817
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
818 if ( $self->{'strand'} != 1 ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
819 $eshift = $five_prime_shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
820 $sshift = $three_prime_shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
821 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
822
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
823 $new_start = $self->{'start'} - $sshift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
824 $new_end = $self->{'end'} + $eshift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
825
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
826 # if($new_start > $new_end) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
827 # if ($force_expand) { # Apply max possible shift, if force_expand is set
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
828 # if ($sshift < 0) { # if we are contracting the slice from the start - move the start just before the end
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
829 # $new_start = $new_end - 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
830 # $sshift = $self->{start} - $new_start;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
831 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
832
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
833 # if($new_start > $new_end) { # if the slice still has a negative length - try to move the end
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
834 # if ($eshift < 0) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
835 # $new_end = $new_start + 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
836 # $eshift = $new_end - $self->{end};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
837 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
838 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
839 # return the values by which the primes were actually shifted
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
840 # $$tpref = $self->{strand} == 1 ? $eshift : $sshift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
841 # $$fpref = $self->{strand} == 1 ? $sshift : $eshift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
842 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
843 # if($new_start > $new_end) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
844 # throw('Slice start cannot be greater than slice end');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
845 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
846 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
847
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
848 #fastest way to copy a slice is to do a shallow hash copy
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
849 my %new_slice = %$self;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
850 $new_slice{'start'} = int($new_start);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
851 $new_slice{'end'} = int($new_end);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
852
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
853 return bless \%new_slice, ref($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
854 } ## end sub expand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
855
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
856 =head2 sub_Slice_same
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
857
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
858 Arg 1 : int $start
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
859 Arg 2 : int $end
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
860 Arge [3] : int $strand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
861 Description: Makes another Slice that covers only part of this slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
862 If a slice is requested which lies outside of the boundaries
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
863 of this function will return undef. This means that
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
864 behaviour will be consistant whether or not the slice is
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
865 attached to the database (i.e. if there is attached sequence
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
866 to the slice). Alternatively the expand() method or the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
867 SliceAdaptor::fetch_by_region method can be used instead.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
868 Returntype : Bio::EnsEMBL::Slice or undef if arguments are wrong
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
869 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
870 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
871 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
872
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
873 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
874
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
875 sub sub_Slice_same {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
876 my ( $self, $start, $end, $strand ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
877
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
878 if ( $start < 1 || $start > $self->{'end'} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
879 # throw( "start argument not valid" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
880 return undef;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
881 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
882
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
883 if ( $end < $start || $end > $self->{'end'} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
884 # throw( "end argument not valid" )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
885 return undef;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
886 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
887
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
888 my ( $new_start, $new_end, $new_strand, $new_seq );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
889 if ( !defined $strand ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
890 $strand = 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
891 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
892
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
893 if ( $self->{'strand'} == 1 ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
894 $new_start = $self->{'start'} + $start - 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
895 $new_end = $self->{'start'} + $end - 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
896 $new_strand = $strand;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
897 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
898 $new_start = $self->{'end'} - $end + 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
899 $new_end = $self->{'end'} - $start + 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
900 $new_strand = -$strand;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
901 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
902
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
903 if ( defined $self->{'seq'} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
904 $new_seq = $self->subseq( $start, $end, $strand );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
905 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
906
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
907 #fastest way to copy a slice is to do a shallow hash copy
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
908 my %new_slice = %$self;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
909 $new_slice{'start'} = int($new_start);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
910 $new_slice{'end'} = int($new_end);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
911 $new_slice{'strand'} = $new_strand;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
912 if ($new_seq) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
913 $new_slice{'seq'} = $new_seq;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
914 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
915
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
916 return bless \%new_slice, ref($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
917 } ## end sub sub_Slice_same
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
918
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
919 =head2 seq_region_Slice_same
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
920
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
921 Arg [1] : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
922 Example : $slice = $slice->seq_region_Slice();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
923 Description: Returns a slice which spans the whole seq_region which this slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
924 is on. For example if this is a slice which spans a small region
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
925 of chromosome X, this method will return a slice which covers the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
926 entire chromosome X. The returned slice will always have strand
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
927 of 1 and start of 1. This method cannot be used if the sequence
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
928 of the slice has been set manually.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
929 Returntype : Bio::EnsEMBL::Slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
930 Exceptions : warning if called when sequence of Slice has been set manually.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
931 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
932 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
933
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
934 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
935
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
936 sub seq_region_Slice_same {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
937 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
938
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
939 if ( $self->{'seq'} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
940 warning(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
941 "Cannot get a seq_region_Slice of a slice which has manually "
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
942 . "attached sequence " );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
943 return undef;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
944 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
945
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
946 # quick shallow copy
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
947 my $slice;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
948 %{$slice} = %{$self};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
949 bless $slice, ref($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
950
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
951 $slice->{'start'} = 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
952 $slice->{'end'} = $slice->{'seq_region_length'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
953 $slice->{'strand'} = 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
954
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
955 return $slice;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
956 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
957
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
958 =head2 get_seq_region_id_same
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
959
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
960 Arg [1] : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
961 Example : my $seq_region_id = $slice->get_seq_region_id();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
962 Description: Gets the internal identifier of the seq_region that this slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
963 is on. Note that this function will not work correctly if this
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
964 slice does not have an attached adaptor. Also note that it may
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
965 be better to go through the SliceAdaptor::get_seq_region_id
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
966 method if you are working with multiple databases since is
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
967 possible to work with slices from databases with different
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
968 internal seq_region identifiers.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
969 Returntype : int or undef if slices does not have attached adaptor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
970 Exceptions : warning if slice is not associated with a SliceAdaptor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
971 Caller : assembly loading scripts, general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
972 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
973
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
974 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
975
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
976 sub get_seq_region_id_same {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
977 my ($self) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
978
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
979 if ( $self->adaptor ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
980 return $self->adaptor->get_seq_region_id($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
981 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
982 warning('Cannot retrieve seq_region_id without attached adaptor.');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
983 return undef;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
984 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
985 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
986
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
987 =head2 get_all_Attributes
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
988
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
989 Arg [1] : optional string $attrib_code
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
990 The code of the attribute type to retrieve values for.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
991 Example : ($htg_phase) = @{$slice->get_all_Attributes('htg_phase')};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
992 @slice_attributes = @{$slice->get_all_Attributes()};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
993 Description: Gets a list of Attributes of this slice''s seq_region.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
994 Optionally just get Attrubutes for given code.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
995 Returntype : listref Bio::EnsEMBL::Attribute
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
996 Exceptions : warning if slice does not have attached adaptor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
997 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
998 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
999
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1000 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1001
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1002 sub get_all_Attributes {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1003 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1004 my $attrib_code = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1005
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1006 my $result;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1007 my @results;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1008
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1009 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1010 warning('Cannot get attributes without an adaptor.');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1011 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1012 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1013
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1014 my $attribute_adaptor = $self->adaptor->db->get_AttributeAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1015
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1016 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1017 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1018 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1019 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1020 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1021 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1022 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1023 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1024 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1025 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1026
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1027 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1028 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1029 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1030 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1031 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1032 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1033 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1034 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1035 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1036 my $pta_ref = [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1037
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1038 if ( defined $attrib_code ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1039 my @res1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1040 grep { uc( $_->code() ) eq uc($attrib_code) }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1041 @{ $attribute_adaptor->fetch_all_by_Slice($sl1) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1042 my @res2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1043 grep { uc( $_->code() ) eq uc($attrib_code) }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1044 @{ $attribute_adaptor->fetch_all_by_Slice($sl2) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1045 my @res;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1046 push @res, @res1, @res2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1047 $result = \@res;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1048 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1049 my @res1 = @{ $attribute_adaptor->fetch_all_by_Slice($sl1) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1050 my @res2 = @{ $attribute_adaptor->fetch_all_by_Slice($sl2) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1051 my @res;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1052 push @res, @res1, @res2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1053 $result = \@res;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1054 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1055
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1056 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1057
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1058 # if( defined $attrib_code ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1059 # @results = grep { uc($_->code()) eq uc($attrib_code) }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1060 # @{$attribute_adaptor->fetch_all_by_Slice( $self )};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1061 # $result = \@results;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1062 # } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1063 # $result = $attribute_adaptor->fetch_all_by_Slice( $self );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1064 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1065
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1066 return $result;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1067 } ## end sub get_all_Attributes
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1068
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1069 =head2 get_all_PredictionTranscripts
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1070
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1071 Arg [1] : (optional) string $logic_name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1072 The name of the analysis used to generate the prediction
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1073 transcripts obtained.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1074 Arg [2] : (optional) boolean $load_exons
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1075 If set to true will force loading of all PredictionExons
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1076 immediately rather than loading them on demand later. This
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1077 is faster if there are a large number of PredictionTranscripts
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1078 and the exons will be used.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1079 Example : @transcripts = @{$slice->get_all_PredictionTranscripts};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1080 Description: Retrieves the list of prediction transcripts which overlap
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1081 this slice with logic_name $logic_name. If logic_name is
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1082 not defined then all prediction transcripts are retrieved.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1083 Returntype : listref of Bio::EnsEMBL::PredictionTranscript
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1084 Exceptions : warning if slice does not have attached adaptor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1085 Caller : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1086 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1087
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1088 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1089
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1090 sub get_all_PredictionTranscripts {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1091 my ( $self, $logic_name, $load_exons ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1092
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1093 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1094 warning(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1095 'Cannot get PredictionTranscripts without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1096 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1097 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1098 my $pta = $self->adaptor()->db()->get_PredictionTranscriptAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1099
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1100 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1101 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1102 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1103 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1104 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1105 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1106 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1107 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1108 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1109 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1110
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1111 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1112 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1113 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1114 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1115 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1116 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1117 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1118 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1119 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1120
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1121 my ( @arr, @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1122 @arr1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1123 @{ $pta->fetch_all_by_Slice( $sl1, $logic_name, $load_exons ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1124 @arr2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1125 @{ $pta->fetch_all_by_Slice( $sl2, $logic_name, $load_exons ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1126 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1127 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1128 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1129
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1130 #return $pta->fetch_all_by_Slice($sl1, $logic_name, $load_exons);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1131 } ## end sub get_all_PredictionTranscripts
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1132
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1133 =head2 get_all_DnaAlignFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1134
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1135 Arg [1] : (optional) string $logic_name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1136 The name of the analysis performed on the dna align features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1137 to obtain.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1138 Arg [2] : (optional) float $score
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1139 The mimimum score of the features to retrieve
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1140 Arg [3] : (optional) string $dbtype
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1141 The name of an attached database to retrieve the features from
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1142 instead, e.g. 'otherfeatures'.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1143 Arg [4] : (optional) float hcoverage
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1144 The minimum hcoverage od the featurs to retrieve
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1145 Example : @dna_dna_align_feats = @{$slice->get_all_DnaAlignFeatures};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1146 Description: Retrieves the DnaDnaAlignFeatures which overlap this slice with
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1147 logic name $logic_name and with score above $score. If
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1148 $logic_name is not defined features of all logic names are
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1149 retrieved. If $score is not defined features of all scores are
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1150 retrieved.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1151 Returntype : listref of Bio::EnsEMBL::DnaDnaAlignFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1152 Exceptions : warning if slice does not have attached adaptor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1153 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1154 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1155
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1156 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1157
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1158 sub get_all_DnaAlignFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1159 my ( $self, $logic_name, $score, $dbtype, $hcoverage ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1160
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1161 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1162 warning('Cannot get DnaAlignFeatures without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1163 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1164 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1165
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1166 my $db;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1167
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1168 if ($dbtype) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1169 $db = $self->adaptor->db->get_db_adaptor($dbtype);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1170 if ( !$db ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1171 warning("Don't have db $dbtype returning empty list\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1172 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1173 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1174 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1175 $db = $self->adaptor->db;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1176 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1177
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1178 my $dafa = $db->get_DnaAlignFeatureAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1179
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1180 if ( defined($score) and defined($hcoverage) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1181 warning "cannot specify score and hcoverage. Using score only";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1182 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1183
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1184 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1185 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1186 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1187 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1188 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1189 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1190 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1191 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1192 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1193 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1194
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1195 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1196 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1197 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1198 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1199 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1200 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1201 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1202 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1203 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1204
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1205 my ( @arr, @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1206 my %union;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1207 if ( defined($score) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1208 @arr1 = @{ $dafa->fetch_all_by_Slice_and_score( $sl1, $score,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1209 $logic_name ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1210 @arr2 = @{ $dafa->fetch_all_by_Slice_and_score( $sl2, $score,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1211 $logic_name ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1212 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1213 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1214 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1215 @arr1 = @{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1216 $dafa->fetch_all_by_Slice_and_hcoverage( $sl1, $hcoverage,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1217 $logic_name ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1218 @arr2 = @{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1219 $dafa->fetch_all_by_Slice_and_hcoverage( $sl2, $hcoverage,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1220 $logic_name ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1221 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1222 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1223
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1224 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1225
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1226 # if(defined($score)){
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1227 # return $dafa->fetch_all_by_Slice_and_score($self,$score, $logic_name);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1228 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1229 # return $dafa->fetch_all_by_Slice_and_hcoverage($self,$hcoverage, $logic_name);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1230 } ## end sub get_all_DnaAlignFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1231
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1232 =head2 get_all_ProteinAlignFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1233
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1234 Arg [1] : (optional) string $logic_name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1235 The name of the analysis performed on the protein align features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1236 to obtain.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1237 Arg [2] : (optional) float $score
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1238 The mimimum score of the features to retrieve
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1239 Arg [3] : (optional) string $dbtype
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1240 The name of an attached database to retrieve features from
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1241 instead.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1242 Arg [4] : (optional) float hcoverage
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1243 The minimum hcoverage od the featurs to retrieve
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1244 Example : @dna_pep_align_feats = @{$slice->get_all_ProteinAlignFeatures};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1245 Description: Retrieves the DnaPepAlignFeatures which overlap this slice with
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1246 logic name $logic_name and with score above $score. If
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1247 $logic_name is not defined features of all logic names are
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1248 retrieved. If $score is not defined features of all scores are
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1249 retrieved.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1250 Returntype : listref of Bio::EnsEMBL::DnaPepAlignFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1251 Exceptions : warning if slice does not have attached adaptor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1252 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1253 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1254
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1255 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1256
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1257 sub get_all_ProteinAlignFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1258 my ( $self, $logic_name, $score, $dbtype, $hcoverage ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1259 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1260 warning('Cannot get ProteinAlignFeatures without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1261 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1262 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1263 my $db;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1264 if ($dbtype) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1265 $db = $self->adaptor->db->get_db_adaptor($dbtype);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1266 if ( !$db ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1267 warning("Don't have db $dbtype returning empty list\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1268 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1269 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1270 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1271 $db = $self->adaptor->db;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1272 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1273
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1274 my $pafa = $db->get_ProteinAlignFeatureAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1275
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1276 if ( defined($score) and defined($hcoverage) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1277 warning "cannot specify score and hcoverage. Using score only";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1278 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1279
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1280 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1281 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1282 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1283 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1284 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1285 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1286 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1287 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1288 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1289
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1290 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1291 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1292 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1293 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1294 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1295 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1296 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1297 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1298 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1299 my ( @arr, @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1300 if ( defined($score) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1301 @arr1 = @{ $pafa->fetch_all_by_Slice_and_score( $sl1, $score,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1302 $logic_name ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1303 @arr2 = @{ $pafa->fetch_all_by_Slice_and_score( $sl2, $score,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1304 $logic_name ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1305
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1306 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1307 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1308 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1309
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1310 @arr1 = @{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1311 $pafa->fetch_all_by_Slice_and_hcoverage( $sl1, $hcoverage,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1312 $logic_name ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1313 @arr2 = @{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1314 $pafa->fetch_all_by_Slice_and_hcoverage( $sl2, $hcoverage,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1315 $logic_name ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1316
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1317 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1318 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1319
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1320 # if(defined($score)){
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1321 # return $pafa->fetch_all_by_Slice_and_score($self,$score, $logic_name);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1322 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1323 # return $pafa->fetch_all_by_Slice_and_hcoverage($self,$hcoverage, $logic_name);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1324
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1325 } ## end sub get_all_ProteinAlignFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1326
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1327 =head2 get_all_SimilarityFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1328
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1329 Arg [1] : (optional) string $logic_name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1330 the name of the analysis performed on the features to retrieve
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1331 Arg [2] : (optional) float $score
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1332 the lower bound of the score of the features to be retrieved
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1333 Example : @feats = @{$slice->get_all_SimilarityFeatures};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1334 Description: Retrieves all dna_align_features and protein_align_features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1335 with analysis named $logic_name and with score above $score.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1336 It is probably faster to use get_all_ProteinAlignFeatures or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1337 get_all_DnaAlignFeatures if a sepcific feature type is desired.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1338 If $logic_name is not defined features of all logic names are
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1339 retrieved. If $score is not defined features of all scores are
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1340 retrieved.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1341 Returntype : listref of Bio::EnsEMBL::BaseAlignFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1342 Exceptions : warning if slice does not have attached adaptor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1343 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1344 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1345
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1346 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1347
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1348 sub get_all_SimilarityFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1349 my ( $self, $logic_name, $score ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1350
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1351 my @out = ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1352
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1353 push @out,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1354 @{ $self->get_all_ProteinAlignFeatures( $logic_name, $score ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1355 push @out,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1356 @{ $self->get_all_DnaAlignFeatures( $logic_name, $score ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1357
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1358 return \@out;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1359 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1360
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1361 =head2 get_all_SimpleFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1362
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1363 Arg [1] : (optional) string $logic_name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1364 The name of the analysis performed on the simple features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1365 to obtain.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1366 Arg [2] : (optional) float $score
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1367 The mimimum score of the features to retrieve
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1368 Example : @simple_feats = @{$slice->get_all_SimpleFeatures};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1369 Description: Retrieves the SimpleFeatures which overlap this slice with
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1370 logic name $logic_name and with score above $score. If
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1371 $logic_name is not defined features of all logic names are
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1372 retrieved. If $score is not defined features of all scores are
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1373 retrieved.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1374 Returntype : listref of Bio::EnsEMBL::SimpleFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1375 Exceptions : warning if slice does not have attached adaptor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1376 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1377 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1378
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1379 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1380
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1381 sub get_all_SimpleFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1382 my ( $self, $logic_name, $score, $dbtype ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1383
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1384 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1385 warning('Cannot get SimpleFeatures without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1386 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1387 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1388
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1389 my $db;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1390 if ($dbtype) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1391 $db = $self->adaptor->db->get_db_adaptor($dbtype);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1392 if ( !$db ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1393 warning("Don't have db $dbtype returning empty list\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1394 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1395 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1396 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1397 $db = $self->adaptor->db;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1398 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1399
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1400 my $sfa = $db->get_SimpleFeatureAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1401
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1402 return $sfa->fetch_all_by_Slice_and_score( $self, $score,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1403 $logic_name );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1404 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1405
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1406 #### STOP !!! ########################################
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1407
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1408 =head2 get_all_RepeatFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1409
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1410 Arg [1] : (optional) string $logic_name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1411 The name of the analysis performed on the repeat features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1412 to obtain.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1413 Arg [2] : (optional) string $repeat_type
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1414 Limits features returned to those of the specified repeat_type
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1415 Arg [3] : (optional) string $db
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1416 Key for database e.g. core/vega/cdna/....
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1417 Example : @repeat_feats = @{$slice->get_all_RepeatFeatures(undef,'LTR')};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1418 Description: Retrieves the RepeatFeatures which overlap with
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1419 logic name $logic_name and with score above $score. If
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1420 $logic_name is not defined features of all logic names are
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1421 retrieved.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1422 Returntype : listref of Bio::EnsEMBL::RepeatFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1423 Exceptions : warning if slice does not have attached adaptor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1424 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1425 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1426
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1427 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1428
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1429 sub get_all_RepeatFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1430 my ( $self, $logic_name, $repeat_type, $dbtype ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1431
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1432 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1433 warning('Cannot get RepeatFeatures without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1434 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1435 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1436
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1437 my $db;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1438 if ($dbtype) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1439 $db = $self->adaptor->db->get_db_adaptor($dbtype);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1440 if ( !$db ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1441 warning("Don't have db $dbtype returning empty list\n");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1442 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1443 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1444 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1445 $db = $self->adaptor->db;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1446 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1447
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1448 my $rpfa = $db->get_RepeatFeatureAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1449
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1450 return $rpfa->fetch_all_by_Slice( $self, $logic_name, $repeat_type );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1451 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1452
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1453 =head2 get_all_LD_values
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1454
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1455 Arg [1] : (optional) Bio::EnsEMBL::Variation::Population $population
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1456 Description : returns all LD values on this slice. This function will only work correctly if the variation
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1457 database has been attached to the core database. If the argument is passed, will return the LD information
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1458 in that population
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1459 ReturnType : Bio::EnsEMBL::Variation::LDFeatureContainer
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1460 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1461 Caller : contigview, snpview
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1462 Status : At Risk
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1463 : Variation database is under development.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1464
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1465 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1466
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1467 sub get_all_LD_values {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1468 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1469 my $population = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1470
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1471 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1472 warning('Cannot get LDFeatureContainer without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1473 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1474 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1475
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1476 my $variation_db = $self->adaptor->db->get_db_adaptor('variation');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1477
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1478 unless ($variation_db) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1479 warning( "Variation database must be attached to core database to "
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1480 . "retrieve variation information" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1481 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1482 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1483
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1484 my $ld_adaptor = $variation_db->get_LDFeatureContainerAdaptor;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1485
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1486 if ($ld_adaptor) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1487 return $ld_adaptor->fetch_by_Slice( $self, $population );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1488 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1489 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1490
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1491 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1492
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1493 # my $ld_adaptor = Bio::EnsEMBL::DBSQL::MergedAdaptor->new(-species => $self->adaptor()->db()->species, -type => "LDFeatureContainer");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1494
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1495 # if( $ld_adaptor ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1496 # my $ld_values = $ld_adaptor->fetch_by_Slice($self,$population);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1497 # if (@{$ld_values} > 1){
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1498 # warning("More than 1 variation database attached. Trying to merge LD results");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1499 # my $ld_value_merged = shift @{$ld_values};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1500 # #with more than 1 variation database attached, will try to merge in one single LDContainer object.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1501 # foreach my $ld (@{$ld_values}){
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1502 # #copy the ld values to the result hash
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1503 # foreach my $key (keys %{$ld->{'ldContainer'}}){
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1504 # $ld_value_merged->{'ldContainer'}->{$key} = $ld->{'ldContainer'}->{$key};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1505 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1506 # #and copy the variationFeatures as well
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1507 # foreach my $key (keys %{$ld->{'variationFeatures'}}){
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1508 # $ld_value_merged->{'variationFeatures'}->{$key} = $ld->{'variationFeatures'}->{$key};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1509 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1510
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1511 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1512 # return $ld_value_merged;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1513 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1514 # else{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1515 # return shift @{$ld_values};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1516 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1517 # } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1518 # warning("Variation database must be attached to core database to " .
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1519 # "retrieve variation information" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1520 # return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1521 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1522 } ## end sub get_all_LD_values
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1523
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1524 =head2 get_all_VariationFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1525
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1526 Args : $filter [optional]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1527 Description:returns all variation features on this slice. This function will only work
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1528 correctly if the variation database has been attached to the core database.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1529 If $filter is "genotyped" return genotyped Snps only... (nice likkle hack);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1530 ReturnType : listref of Bio::EnsEMBL::Variation::VariationFeature
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1531 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1532 Caller : contigview, snpview
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1533 Status : At Risk
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1534 : Variation database is under development.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1535
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1536 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1537
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1538 sub get_all_VariationFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1539 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1540 my $filter = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1541
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1542 $filter ||= '';
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1543 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1544 warning('Cannot get variation features without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1545 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1546 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1547
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1548 my $vf_adaptor =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1549 Bio::EnsEMBL::DBSQL::MergedAdaptor->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1550 -species => $self->adaptor()->db()->species,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1551 -type => "VariationFeature" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1552 if ($vf_adaptor) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1553 if ( $filter eq 'genotyped' ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1554 return $vf_adaptor->fetch_all_genotyped_by_Slice($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1555 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1556 return $vf_adaptor->fetch_all_by_Slice($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1557 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1558 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1559 warning( "Variation database must be attached to core database to "
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1560 . "retrieve variation information" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1561 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1562 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1563 } ## end sub get_all_VariationFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1564
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1565 =head2 get_all_IndividualSlice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1566
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1567 Args : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1568 Example : my $individualSlice = $slice->get_by_Population($population);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1569 Description : Gets the specific Slice for all the individuls in the population
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1570 ReturnType : listref of Bio::EnsEMB::IndividualSlice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1571 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1572 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1573
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1574 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1575
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1576 sub get_all_IndividualSlice {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1577 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1578
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1579 my $individualSliceFactory =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1580 Bio::EnsEMBL::IndividualSliceFactory->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1581 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1582 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1583 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1584 -ADAPTOR => $self->adaptor(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1585 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1586 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1587 -COORD_SYSTEM => $self->{'coord_system'}, );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1588 return $individualSliceFactory->get_all_IndividualSlice();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1589 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1590
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1591 =head2 get_by_Individual
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1592
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1593 Arg[1] : Bio::EnsEMBL::Variation::Individual $individual
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1594 Example : my $individualSlice = $slice->get_by_Individual($individual);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1595 Description : Gets the specific Slice for the individual
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1596 ReturnType : Bio::EnsEMB::IndividualSlice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1597 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1598 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1599
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1600 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1601
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1602 sub get_by_Individual {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1603 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1604 my $individual = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1605
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1606 return Bio::EnsEMBL::IndividualSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1607 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1608 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1609 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1610 -ADAPTOR => $self->adaptor(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1611 # -SEQ => $self->{'seq'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1612 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1613 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1614 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1615 -INDIVIDUAL => $individual );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1616
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1617 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1618
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1619 =head2 get_by_strain
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1620
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1621 Arg[1] : string $strain
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1622 Example : my $strainSlice = $slice->get_by_strain($strain);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1623 Description : Gets the specific Slice for the strain
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1624 ReturnType : Bio::EnsEMB::StrainSlice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1625 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1626 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1627
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1628 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1629
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1630 sub get_by_strain {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1631 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1632 my $strain_name = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1633
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1634 return
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1635 Bio::EnsEMBL::StrainSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1636 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1637 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1638 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1639 -ADAPTOR => $self->adaptor(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1640 -SEQ => $self->{'seq'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1641 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1642 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1643 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1644 -STRAIN_NAME => $strain_name );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1645
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1646 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1647
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1648 sub calculate_theta {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1649 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1650 my $strains = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1651 my $feature = shift
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1652 ; #optional parameter. Name of the feature in the Slice you want to calculate
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1653
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1654 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1655 warning('Cannot get variation features without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1656 return 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1657 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1658 my $variation_db = $self->adaptor->db->get_db_adaptor('variation');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1659
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1660 unless ($variation_db) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1661 warning( "Variation database must be attached to core database to "
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1662 . "retrieve variation information" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1663 return 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1664 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1665
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1666 #need to get coverage regions for the slice in the different strains
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1667 my $coverage_adaptor = $variation_db->get_ReadCoverageAdaptor;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1668 my $strain;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1669 my $differences = [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1670 my $slices = [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1671 if ($coverage_adaptor) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1672 my $num_strains = scalar( @{$strains} ) + 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1673 if ( !defined $feature ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1674 #we want to calculate for the whole slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1675 push @{$slices},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1676 $self; #add the slice as the slice to calculate the theta value
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1677 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1678 #we have features, get the slices for the different features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1679 my $features = $self->get_all_Exons();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1680 map { push @{$slices}, $_->feature_Slice }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1681 @{$features}; #add the slices of the features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1682 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1683 my $length_regions = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1684 my $snps = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1685 my $theta = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1686 my $last_position = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1687 #get all the differences in the slice coordinates
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1688 foreach my $strain_name ( @{$strains} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1689 my $strain = $self->get_by_strain($strain_name)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1690 ; #get the strainSlice for the strain
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1691
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1692 my $results = $strain->get_all_differences_Slice;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1693 push @{$differences}, @{$results} if ( defined $results );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1694 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1695 #when we finish, we have, in max_level, the regions covered by all the sample
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1696 #sort the differences by the genomic position
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1697 my @differences_sorted =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1698 sort { $a->start <=> $b->start } @{$differences};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1699 foreach my $slice ( @{$slices} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1700 my $regions_covered =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1701 $coverage_adaptor->fetch_all_regions_covered( $slice,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1702 $strains );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1703 if ( defined $regions_covered ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1704 foreach my $range ( @{$regions_covered} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1705 $length_regions +=
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1706 ( $range->[1] - $range->[0] ) +
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1707 1; #add the length of the genomic region
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1708 for ( my $i = $last_position; $i < @differences_sorted; $i++ )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1709 {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1710 if ( $differences_sorted[$i]->start >= $range->[0]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1711 && $differences_sorted[$i]->end <= $range->[1] )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1712 {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1713 $snps++; #count differences in the region
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1714 } elsif ( $differences_sorted[$i]->end > $range->[1] ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1715 $last_position = $i;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1716 last;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1717 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1718 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1719 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1720 #when all the ranges have been iterated, calculate rho
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1721 #this is an intermediate variable called a in the formula
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1722 # a = sum i=2..strains 1/i-1
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1723 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1724 } ## end foreach my $slice ( @{$slices...})
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1725 my $a = _calculate_a($num_strains);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1726 $theta = $snps/( $a*$length_regions );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1727 return $theta;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1728 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1729 return 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1730 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1731 } ## end sub calculate_theta
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1732
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1733 sub _calculate_a {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1734 my $max_level = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1735
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1736 my $a = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1737 for ( my $i = 2; $i <= $max_level + 1; $i++ ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1738 $a += 1/( $i - 1 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1739 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1740 return $a;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1741 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1742
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1743 sub calculate_pi {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1744 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1745 my $strains = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1746 my $feature = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1747
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1748 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1749 warning('Cannot get variation features without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1750 return 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1751 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1752 my $variation_db = $self->adaptor->db->get_db_adaptor('variation');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1753
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1754 unless ($variation_db) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1755 warning( "Variation database must be attached to core database to "
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1756 . "retrieve variation information" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1757 return 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1758 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1759
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1760 #need to get coverage regions for the slice in the different strains
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1761 my $coverage_adaptor = $variation_db->get_ReadCoverageAdaptor;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1762 my $differences = [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1763 my $slices = [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1764 if ($coverage_adaptor) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1765 my $num_strains = scalar( @{$strains} ) + 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1766 if ( !defined $feature ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1767 #we want to calculate for the whole slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1768 push @{$slices},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1769 $self; #add the slice as the slice to calculate the theta value
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1770 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1771 #we have features, get the slices for the different features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1772 my $features = $self->get_all_Exons();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1773 map { push @{$slices}, $_->feature_Slice }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1774 @{$features}; #add the slices of the features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1775 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1776 my @range_differences = ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1777 my $pi = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1778 my $regions = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1779 my $last_position =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1780 0; #last position visited in the sorted list of differences
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1781 my $triallelic = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1782 my $is_triallelic = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1783 foreach my $slice ( @{$slices} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1784
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1785 foreach my $strain_name ( @{$strains} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1786 my $strain = $slice->get_by_strain($strain_name)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1787 ; #get the strainSlice for the strain
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1788 my $results = $strain->get_all_differences_Slice;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1789 push @{$differences}, @{$results} if ( defined $results );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1790 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1791 my @differences_sorted =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1792 sort { $a->start <=> $b->start } @{$differences};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1793
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1794 my $regions_covered =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1795 $coverage_adaptor->fetch_all_regions_covered( $slice,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1796 $strains );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1797 #when we finish, we have, in max_level, the regions covered by all the sample
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1798 #sort the differences
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1799 if ( defined $regions_covered ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1800 foreach my $range ( @{$regions_covered} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1801 for ( my $i = $last_position; $i < @differences_sorted; $i++ )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1802 {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1803 if ( $differences_sorted[$i]->start >= $range->[0]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1804 && $differences_sorted[$i]->end <= $range->[1] )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1805 {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1806 #check wether it is the same region or different
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1807 if ( !defined $range_differences[0]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1808 || ( $differences_sorted[$i]->start ==
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1809 $range_differences[0]->start ) )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1810 {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1811 if ( defined $range_differences[0]
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1812 && ( $differences_sorted[$i]->allele_string ne
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1813 $range_differences[0]->allele_string ) )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1814 {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1815 $is_triallelic = 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1816 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1817 push @range_differences, $differences_sorted[$i];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1818 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1819 #new site, calc pi for the previous one
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1820 $pi +=
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1821 2*
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1822 ( @range_differences/($num_strains) )*
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1823 ( 1 - ( @range_differences/$num_strains ) );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1824 if ($is_triallelic) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1825 $triallelic++;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1826 $is_triallelic = 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1827 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1828 $regions++;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1829 @range_differences = ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1830 #and start a new range
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1831 push @range_differences, $differences_sorted[$i];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1832 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1833 } elsif ( $differences_sorted[$i]->end > $range->[1] ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1834 $last_position = $i;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1835 last;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1836 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1837 } ## end for ( my $i = $last_position...)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1838 #calculate pi for last site, if any
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1839 if ( defined $range_differences[0] ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1840 $pi +=
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1841 2*
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1842 ( @range_differences/$num_strains )*
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1843 ( 1 - ( @range_differences/$num_strains ) );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1844 $regions++;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1845 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1846 } ## end foreach my $range ( @{$regions_covered...})
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1847 } ## end if ( defined $regions_covered)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1848 $pi = $pi/$regions; #calculate average pi
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1849 print
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1850 "Regions with variations in region $regions and triallelic $triallelic\n\n";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1851 } ## end foreach my $slice ( @{$slices...})
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1852 return $pi;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1853 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1854 return 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1855 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1856
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1857 } ## end sub calculate_pi
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1858
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1859 =head2 get_all_genotyped_VariationFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1860
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1861 Args : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1862 Description: returns all variation features on this slice that have been genotyped.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1863 This function will only work correctly if the variation database has
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1864 been attached to the core database.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1865 ReturnType : listref of Bio::EnsEMBL::Variation::VariationFeature
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1866 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1867 Caller : contigview, snpview, ldview
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1868 Status : At Risk
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1869 : Variation database is under development.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1870
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1871 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1872
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1873 sub get_all_genotyped_VariationFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1874 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1875 my $vfa;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1876 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1877 warning('Cannot get variation features without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1878 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1879 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1880
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1881 my $vf_adaptor =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1882 Bio::EnsEMBL::DBSQL::MergedAdaptor->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1883 -species => $self->adaptor()->db()->species,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1884 -type => "VariationFeature" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1885
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1886 if ($vf_adaptor) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1887 return $vf_adaptor->fetch_all_genotyped_by_Slice($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1888 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1889 warning( "Variation database must be attached to core database to "
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1890 . "retrieve variation information" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1891 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1892 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1893 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1894
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1895 =head2 get_all_SNPs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1896
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1897 Description: DEPRECATED. Use get_all_VariationFeatures instead
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1898
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1899 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1900
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1901 sub get_all_SNPs {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1902 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1903
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1904 deprecate('Use get_all_VariationFeatures() instead.');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1905
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1906 my $snps;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1907 my $vf = $self->get_all_genotyped_VariationFeatures();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1908 if ( $vf->[0] ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1909 #necessary to convert the VariationFeatures into SNP objects
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1910 foreach my $variation_feature ( @{$vf} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1911 push @{$snps}, $variation_feature->convert_to_SNP();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1912 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1913 return $snps;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1914 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1915 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1916 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1917 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1918
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1919 =head2 get_all_genotyped_SNPs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1920
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1921 Description : DEPRECATED. Use get_all_genotyped_VariationFeatures instead
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1922
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1923 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1924
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1925 sub get_all_genotyped_SNPs {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1926 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1927
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1928 deprecate("Use get_all_genotyped_VariationFeatures instead");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1929 my $vf = $self->get_all_genotyped_VariationFeatures;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1930 my $snps;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1931 if ( $vf->[0] ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1932 foreach my $variation_feature ( @{$vf} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1933 push @{$snps}, $variation_feature->convert_to_SNP();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1934 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1935 return $snps;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1936 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1937 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1938 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1939 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1940
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1941 sub get_all_SNPs_transcripts {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1942 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1943
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1944 deprecate("DEPRECATED");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1945
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1946 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1947
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1948 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1949
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1950 =head2 get_all_Genes
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1951
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1952 Arg [1] : (optional) string $logic_name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1953 The name of the analysis used to generate the genes to retrieve
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1954 Arg [2] : (optional) string $dbtype
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1955 The dbtype of genes to obtain. This assumes that the db has
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1956 been added to the DBAdaptor under this name (using the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1957 DBConnection::add_db_adaptor method).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1958 Arg [3] : (optional) boolean $load_transcripts
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1959 If set to true, transcripts will be loaded immediately rather
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1960 than being lazy-loaded on request. This will result in a
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1961 significant speed up if the Transcripts and Exons are going to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1962 be used (but a slow down if they are not).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1963 Arg [4] : (optional) string $source
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1964 The source of the genes to retrieve.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1965 Arg [5] : (optional) string $biotype
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1966 The biotype of the genes to retrieve.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1967 Example : @genes = @{$slice->get_all_Genes};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1968 Description: Retrieves all genes that overlap this slice.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1969 Returntype : listref of Bio::EnsEMBL::Genes
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1970 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1971 Caller : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1972 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1973
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1974 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1975
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1976 sub get_all_Genes {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1977 my ( $self, $logic_name, $dbtype, $load_transcripts, $source,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1978 $biotype )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1979 = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1980
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1981 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1982 warning('Cannot get Genes without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1983 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1984 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1985
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1986 my $ga;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1987 if ($dbtype) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1988 my $db = $reg->get_db( $self->adaptor()->db(), $dbtype );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1989 if ( defined($db) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1990 $ga = $reg->get_adaptor( $db->species(), $db->group(), "Gene" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1991 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1992 $ga = $reg->get_adaptor( $self->adaptor()->db()->species(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1993 $dbtype, "Gene" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1994 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1995 if ( !defined $ga ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1996 warning("$dbtype genes not available");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1997 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1998 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
1999 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2000 $ga = $self->adaptor->db->get_GeneAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2001 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2002
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2003 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2004 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2005 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2006 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2007 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2008 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2009 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2010 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2011 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2012 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2013
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2014 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2015 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2016 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2017 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2018 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2019 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2020 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2021 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2022 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2023
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2024 my ( @arr, @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2025 @arr1 = @{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2026 $ga->fetch_all_by_Slice( $sl1, $logic_name, $load_transcripts,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2027 $source, $biotype ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2028 @arr2 = @{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2029 $ga->fetch_all_by_Slice( $sl2, $logic_name, $load_transcripts,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2030 $source, $biotype ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2031 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2032 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2033
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2034 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2035
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2036 } ## end sub get_all_Genes
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2037
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2038 =head2 get_all_Genes_by_type
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2039
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2040 Arg [1] : string $type
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2041 The biotype of genes wanted.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2042 Arg [2] : (optional) string $logic_name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2043 Arg [3] : (optional) boolean $load_transcripts
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2044 If set to true, transcripts will be loaded immediately rather
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2045 than being lazy-loaded on request. This will result in a
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2046 significant speed up if the Transcripts and Exons are going to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2047 be used (but a slow down if they are not).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2048 Example : @genes = @{$slice->get_all_Genes_by_type('protein_coding',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2049 'ensembl')};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2050 Description: Retrieves genes that overlap this slice of biotype $type.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2051 This is primarily used by the genebuilding code when several
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2052 biotypes of genes are used.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2053
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2054 The logic name is the analysis of the genes that are retrieved.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2055 If not provided all genes will be retrieved instead.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2056
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2057 Returntype : listref of Bio::EnsEMBL::Genes
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2058 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2059 Caller : genebuilder, general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2060 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2061
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2062 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2063
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2064 sub get_all_Genes_by_type {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2065 my ( $self, $type, $logic_name, $load_transcripts ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2066
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2067 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2068 warning('Cannot get Genes without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2069 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2070 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2071
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2072 return
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2073 $self->get_all_Genes( $logic_name, undef, $load_transcripts, undef,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2074 $type );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2075 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2076
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2077 =head2 get_all_Genes_by_source
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2078
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2079 Arg [1] : string source
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2080 Arg [2] : (optional) boolean $load_transcripts
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2081 If set to true, transcripts will be loaded immediately rather
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2082 than being lazy-loaded on request. This will result in a
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2083 significant speed up if the Transcripts and Exons are going to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2084 be used (but a slow down if they are not).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2085 Example : @genes = @{$slice->get_all_Genes_by_source('ensembl')};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2086 Description: Retrieves genes that overlap this slice of source $source.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2087
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2088 Returntype : listref of Bio::EnsEMBL::Genes
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2089 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2090 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2091 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2092
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2093 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2094
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2095 sub get_all_Genes_by_source {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2096 my ( $self, $source, $load_transcripts ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2097
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2098 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2099 warning('Cannot get Genes without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2100 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2101 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2102
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2103 return $self->get_all_Genes( undef, undef, $load_transcripts,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2104 $source );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2105 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2106
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2107 =head2 get_all_Transcripts
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2108
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2109 Arg [1] : (optional) boolean $load_exons
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2110 If set to true exons will not be lazy-loaded but will instead
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2111 be loaded right away. This is faster if the exons are
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2112 actually going to be used right away.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2113 Arg [2] : (optional) string $logic_name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2114 the logic name of the type of features to obtain
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2115 Arg [3] : (optional) string $db_type
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2116 Example : @transcripts = @{$slice->get_all_Transcripts)_};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2117 Description: Gets all transcripts which overlap this slice. If you want to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2118 specify a particular analysis or type, then you are better off
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2119 using get_all_Genes or get_all_Genes_by_type and iterating
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2120 through the transcripts of each gene.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2121 Returntype : reference to a list of Bio::EnsEMBL::Transcripts
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2122 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2123 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2124 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2125
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2126 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2127
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2128 sub get_all_Transcripts {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2129 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2130 my $load_exons = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2131 my $logic_name = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2132 my $dbtype = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2133 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2134 warning('Cannot get Transcripts without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2135 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2136 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2137
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2138 my $ta;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2139 if ($dbtype) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2140 my $db = $reg->get_db( $self->adaptor()->db(), $dbtype );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2141 if ( defined($db) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2142 $ta =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2143 $reg->get_adaptor( $db->species(), $db->group(), "Transcript" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2144 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2145 $ta = $reg->get_adaptor( $self->adaptor()->db()->species(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2146 $dbtype, "Transcript" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2147 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2148 if ( !defined $ta ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2149 warning("$dbtype genes not available");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2150 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2151 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2152 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2153 $ta = $self->adaptor->db->get_TranscriptAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2154 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2155
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2156 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2157 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2158 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2159 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2160 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2161 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2162 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2163 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2164 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2165 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2166
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2167 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2168 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2169 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2170 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2171 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2172 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2173 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2174 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2175 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2176
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2177 my ( @arr, @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2178 @arr1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2179 @{ $ta->fetch_all_by_Slice( $sl1, $load_exons, $logic_name ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2180 @arr2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2181 @{ $ta->fetch_all_by_Slice( $sl2, $load_exons, $logic_name ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2182 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2183 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2184 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2185 #return $ta->fetch_all_by_Slice($self, $load_exons, $logic_name);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2186 } ## end sub get_all_Transcripts
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2187
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2188 =head2 get_all_Exons
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2189
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2190 Arg [1] : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2191 Example : @exons = @{$slice->get_all_Exons};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2192 Description: Gets all exons which overlap this slice. Note that these exons
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2193 will not be associated with any transcripts, so this may not
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2194 be terribly useful.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2195 Returntype : reference to a list of Bio::EnsEMBL::Exons
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2196 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2197 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2198 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2199
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2200 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2201
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2202 sub get_all_Exons {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2203 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2204
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2205 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2206 warning('Cannot get Exons without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2207 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2208 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2209
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2210 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2211 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2212 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2213 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2214 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2215 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2216 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2217 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2218 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2219 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2220
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2221 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2222 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2223 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2224 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2225 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2226 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2227 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2228 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2229 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2230
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2231 my ( @arr, @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2232 @arr1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2233 @{ $sl1->adaptor->db->get_ExonAdaptor->fetch_all_by_Slice($sl1) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2234 @arr2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2235 @{ $sl2->adaptor->db->get_ExonAdaptor->fetch_all_by_Slice($sl2) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2236 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2237 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2238 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2239
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2240 #rturn $self->adaptor->db->get_ExonAdaptor->fetch_all_by_Slice($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2241 } ## end sub get_all_Exons
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2242
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2243 =head2 get_all_QtlFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2244
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2245 Args : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2246 Description: returns overlapping QtlFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2247 Returntype : listref Bio::EnsEMBL::Map::QtlFeature
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2248 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2249 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2250 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2251
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2252 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2253
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2254 sub get_all_QtlFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2255 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2256
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2257 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2258 warning('Cannot get QtlFeatures without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2259 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2260 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2261
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2262 my $qfAdaptor;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2263 if ( $self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2264 $qfAdaptor = $self->adaptor()->db()->get_QtlFeatureAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2265 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2266 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2267 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2268
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2269 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2270 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2271 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2272 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2273 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2274 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2275 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2276 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2277 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2278 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2279
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2280 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2281 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2282 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2283 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2284 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2285 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2286 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2287 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2288 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2289
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2290 my ( @arr, @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2291 @arr1 = @{ $qfAdaptor->fetch_all_by_Slice_constraint($sl1) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2292 @arr2 = @{ $qfAdaptor->fetch_all_by_Slice_constraint($sl2) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2293 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2294 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2295 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2296
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2297 #return $qfAdaptor->fetch_all_by_Slice_constraint( $self );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2298 } ## end sub get_all_QtlFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2299
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2300 =head2 get_all_KaryotypeBands
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2301
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2302 Arg [1] : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2303 Example : @kary_bands = @{$slice->get_all_KaryotypeBands};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2304 Description: Retrieves the karyotype bands which this slice overlaps.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2305 Returntype : listref oif Bio::EnsEMBL::KaryotypeBands
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2306 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2307 Caller : general, contigview
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2308 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2309
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2310 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2311
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2312 sub get_all_KaryotypeBands {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2313 my ($self) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2314
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2315 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2316 warning('Cannot get KaryotypeBands without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2317 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2318 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2319
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2320 my $kadp = $self->adaptor->db->get_KaryotypeBandAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2321
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2322 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2323 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2324 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2325 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2326 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2327 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2328 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2329 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2330 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2331 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2332
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2333 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2334 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2335 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2336 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2337 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2338 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2339 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2340 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2341 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2342
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2343 my ( @arr, @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2344 @arr1 = @{ $kadp->fetch_all_by_Slice($sl1) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2345 @arr2 = @{ $kadp->fetch_all_by_Slice($sl2) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2346 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2347 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2348 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2349
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2350 #return $kadp->fetch_all_by_Slice($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2351 } ## end sub get_all_KaryotypeBands
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2352
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2353 =head2 get_repeatmasked_seq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2354
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2355 Arg [1] : listref of strings $logic_names (optional)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2356 Arg [2] : int $soft_masking_enable (optional)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2357 Arg [3] : hash reference $not_default_masking_cases (optional, default is {})
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2358 The values are 0 or 1 for hard and soft masking respectively
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2359 The keys of the hash should be of 2 forms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2360 "repeat_class_" . $repeat_consensus->repeat_class,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2361 e.g. "repeat_class_SINE/MIR"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2362 "repeat_name_" . $repeat_consensus->name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2363 e.g. "repeat_name_MIR"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2364 depending on which base you want to apply the not default
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2365 masking either the repeat_class or repeat_name. Both can be
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2366 specified in the same hash at the same time, but in that case,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2367 repeat_name setting has priority over repeat_class. For example,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2368 you may have hard masking as default, and you may want soft
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2369 masking of all repeat_class SINE/MIR, but repeat_name AluSp
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2370 (which are also from repeat_class SINE/MIR).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2371 Your hash will be something like {"repeat_class_SINE/MIR" => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2372 "repeat_name_AluSp" => 0}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2373 Example : $rm_slice = $slice->get_repeatmasked_seq();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2374 $softrm_slice = $slice->get_repeatmasked_seq(['RepeatMask'],1);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2375 Description: Returns Bio::EnsEMBL::Slice that can be used to create repeat
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2376 masked sequence instead of the regular sequence.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2377 Sequence returned by this new slice will have repeat regions
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2378 hardmasked by default (sequence replaced by N) or
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2379 or soft-masked when arg[2] = 1 (sequence in lowercase)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2380 Will only work with database connection to get repeat features.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2381 Returntype : Bio::EnsEMBL::RepeatMaskedSlice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2382 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2383 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2384 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2385
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2386 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2387
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2388 sub get_repeatmasked_seq {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2389 my ( $self, $logic_names, $soft_mask, $not_default_masking_cases ) =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2390 @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2391
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2392 return
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2393 Bio::EnsEMBL::RepeatMaskedSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2394 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2395 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2396 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2397 -ADAPTOR => $self->adaptor(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2398 -SEQ => $self->{'seq'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2399 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2400 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2401 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2402 -REPEAT_MASK => $logic_names,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2403 -SOFT_MASK => $soft_mask,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2404 -NOT_DEFAULT_MASKING_CASES => $not_default_masking_cases
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2405 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2406 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2407
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2408 =head2 _mask_features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2409
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2410 Arg [1] : reference to a string $dnaref
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2411 Arg [2] : array_ref $repeats
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2412 reference to a list Bio::EnsEMBL::RepeatFeature
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2413 give the list of coordinates to replace with N or with
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2414 lower case
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2415 Arg [3] : int $soft_masking_enable (optional)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2416 Arg [4] : hash reference $not_default_masking_cases (optional, default is {})
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2417 The values are 0 or 1 for hard and soft masking respectively
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2418 The keys of the hash should be of 2 forms
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2419 "repeat_class_" . $repeat_consensus->repeat_class,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2420 e.g. "repeat_class_SINE/MIR"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2421 "repeat_name_" . $repeat_consensus->name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2422 e.g. "repeat_name_MIR"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2423 depending on which base you want to apply the not default masking either
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2424 the repeat_class or repeat_name. Both can be specified in the same hash
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2425 at the same time, but in that case, repeat_name setting has priority over
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2426 repeat_class. For example, you may have hard masking as default, and
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2427 you may want soft masking of all repeat_class SINE/MIR,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2428 but repeat_name AluSp (which are also from repeat_class SINE/MIR).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2429 Your hash will be something like {"repeat_class_SINE/MIR" => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2430 "repeat_name_AluSp" => 0}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2431 Description: replaces string positions described in the RepeatFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2432 with Ns (default setting), or with the lower case equivalent
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2433 (soft masking). The reference to a dna string which is passed
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2434 is changed in place.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2435 Returntype : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2436 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2437 Caller : seq
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2438 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2439
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2440 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2441
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2442 sub _mask_features {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2443 my ( $self, $dnaref, $repeats, $soft_mask,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2444 $not_default_masking_cases ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2445
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2446 $soft_mask = 0 unless ( defined $soft_mask );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2447 $not_default_masking_cases = {}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2448 unless ( defined $not_default_masking_cases );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2449
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2450 # explicit CORE::length call, to avoid any confusion with the Slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2451 # length method
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2452 my $dnalen = CORE::length($$dnaref);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2453
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2454 REP: foreach my $old_f ( @{$repeats} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2455 my $f = $old_f->transfer($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2456 my $start = $f->start;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2457 my $end = $f->end;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2458 my $length = ( $end - $start ) + 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2459
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2460 # check if we get repeat completely outside of expected slice range
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2461 if ( $end < 1 || $start > $dnalen ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2462 # warning("Unexpected: Repeat completely outside slice coordinates.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2463 next REP;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2464 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2465
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2466 # repeat partly outside slice range, so correct
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2467 # the repeat start and length to the slice size if needed
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2468 if ( $start < 1 ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2469 $start = 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2470 $length = ( $end - $start ) + 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2471 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2472
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2473 # repeat partly outside slice range, so correct
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2474 # the repeat end and length to the slice size if needed
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2475 if ( $end > $dnalen ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2476 $end = $dnalen;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2477 $length = ( $end - $start ) + 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2478 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2479
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2480 $start--;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2481
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2482 my $padstr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2483 # if we decide to define masking on the base of the repeat_type, we'll need
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2484 # to add the following, and the other commented line few lines below.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2485 # my $rc_type = "repeat_type_" . $f->repeat_consensus->repeat_type;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2486 my $rc_class = "repeat_class_" . $f->repeat_consensus->repeat_class;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2487 my $rc_name = "repeat_name_" . $f->repeat_consensus->name;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2488
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2489 my $masking_type;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2490 # $masking_type = $not_default_masking_cases->{$rc_type} if (defined $not_default_masking_cases->{$rc_type});
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2491 $masking_type = $not_default_masking_cases->{$rc_class}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2492 if ( defined $not_default_masking_cases->{$rc_class} );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2493 $masking_type = $not_default_masking_cases->{$rc_name}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2494 if ( defined $not_default_masking_cases->{$rc_name} );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2495
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2496 $masking_type = $soft_mask unless ( defined $masking_type );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2497
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2498 if ($masking_type) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2499 $padstr = lc substr( $$dnaref, $start, $length );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2500 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2501 $padstr = 'N' x $length;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2502 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2503 substr( $$dnaref, $start, $length ) = $padstr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2504 } ## end foreach my $old_f ( @{$repeats...})
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2505 } ## end sub _mask_features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2506
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2507 =head2 get_all_SearchFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2508
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2509 Arg [1] : scalar $ticket_ids
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2510 Example : $slice->get_all_SearchFeatures('BLA_KpUwwWi5gY');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2511 Description: Retreives all search features for stored blast
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2512 results for the ticket that overlap this slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2513 Returntype : listref of Bio::EnsEMBL::SeqFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2514 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2515 Caller : general (webby!)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2516 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2517
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2518 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2519
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2520 sub get_all_SearchFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2521 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2522 my $ticket = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2523 local $_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2524 unless ($ticket) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2525 throw("ticket argument is required");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2526 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2527
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2528 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2529 warning("Cannot get SearchFeatures without an attached adaptor");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2530 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2531 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2532
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2533 my $sfa = $self->adaptor()->db()->get_db_adaptor('blast');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2534
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2535 my $offset = $self->start - 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2536
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2537 my $features = $sfa
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2538 ? $sfa->get_all_SearchFeatures( $ticket, $self->seq_region_name,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2539 $self->start, $self->end )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2540 : [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2541
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2542 foreach (@$features) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2543 $_->start( $_->start - $offset );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2544 $_->end( $_->end - $offset );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2545 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2546 return $features;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2547
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2548 } ## end sub get_all_SearchFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2549
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2550 =head2 get_all_AssemblyExceptionFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2551
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2552 Arg [1] : string $set (optional)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2553 Example : $slice->get_all_AssemblyExceptionFeatures();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2554 Description: Retreives all misc features which overlap this slice. If
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2555 a set code is provided only features which are members of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2556 the requested set are returned.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2557 Returntype : listref of Bio::EnsEMBL::AssemblyExceptionFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2558 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2559 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2560 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2561
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2562 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2563
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2564 sub get_all_AssemblyExceptionFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2565 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2566 my $misc_set = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2567
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2568 my $adaptor = $self->adaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2569
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2570 if ( !$adaptor ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2571 warning('Cannot retrieve features without attached adaptor.');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2572 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2573 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2574
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2575 my $aefa = $adaptor->db->get_AssemblyExceptionFeatureAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2576
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2577 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2578 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2579 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2580 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2581 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2582 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2583 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2584 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2585 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2586 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2587
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2588 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2589 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2590 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2591 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2592 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2593 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2594 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2595 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2596 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2597
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2598 my ( @arr, @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2599 @arr1 = @{ $aefa->fetch_all_by_Slice($sl1) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2600 @arr2 = @{ $aefa->fetch_all_by_Slice($sl2) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2601 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2602 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2603 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2604 #return $aefa->fetch_all_by_Slice($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2605 } ## end sub get_all_AssemblyExceptionFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2606
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2607 =head2 get_all_MiscFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2608
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2609 Arg [1] : string $set (optional)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2610 Arg [2] : string $database (optional)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2611 Example : $slice->get_all_MiscFeatures('cloneset');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2612 Description: Retreives all misc features which overlap this slice. If
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2613 a set code is provided only features which are members of
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2614 the requested set are returned.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2615 Returntype : listref of Bio::EnsEMBL::MiscFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2616 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2617 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2618 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2619
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2620 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2621
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2622 sub get_all_MiscFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2623 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2624 my $misc_set = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2625 my $dbtype = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2626 my $msa;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2627
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2628 my $adaptor = $self->adaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2629 if ( !$adaptor ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2630 warning('Cannot retrieve features without attached adaptor.');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2631 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2632 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2633
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2634 my $mfa;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2635 if ($dbtype) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2636 my $db = $reg->get_db( $adaptor->db(), $dbtype );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2637 if ( defined($db) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2638 $mfa = $reg->get_adaptor( lc( $db->species() ),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2639 $db->group(), "miscfeature" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2640 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2641 $mfa = $reg->get_adaptor( $adaptor->db()->species(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2642 $dbtype, "miscfeature" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2643 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2644 if ( !defined $mfa ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2645 warning("$dbtype misc features not available");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2646 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2647 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2648 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2649 $mfa = $adaptor->db->get_MiscFeatureAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2650 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2651
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2652 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2653 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2654 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2655 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2656 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2657 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2658 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2659 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2660 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2661 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2662
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2663 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2664 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2665 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2666 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2667 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2668 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2669 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2670 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2671 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2672
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2673 my ( @arr, @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2674
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2675 if ($misc_set) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2676 @arr1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2677 @{ $mfa->fetch_all_by_Slice_and_set_code( $sl1, $misc_set ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2678 @arr2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2679 @{ $mfa->fetch_all_by_Slice_and_set_code( $sl2, $misc_set ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2680 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2681 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2682 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2683 @arr1 = @{ $mfa->fetch_all_by_Slice($sl1) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2684 @arr2 = @{ $mfa->fetch_all_by_Slice($sl2) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2685 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2686 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2687 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2688
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2689 # if($misc_set) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2690 # return $mfa->fetch_all_by_Slice_and_set_code($self,$misc_set);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2691 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2692
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2693 # return $mfa->fetch_all_by_Slice($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2694 } ## end sub get_all_MiscFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2695
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2696 =head2 get_all_AffyFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2697
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2698 Args : (optional) list of strings - array names
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2699 Example : $slice->get_all_AffyFeatures();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2700 Description: Retrieves all AffyFeature objects which overlap this slice.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2701 Returntype : listref of Bio::EnsEMBL::AffyFeature objects
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2702 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2703 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2704 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2705
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2706 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2707
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2708 sub get_all_AffyFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2709 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2710 my @arraynames = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2711
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2712 my $sa = $self->adaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2713 if ( !$sa ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2714 warning("Cannot retrieve features without attached adaptor.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2715 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2716 my $fa = $sa->db()->get_AffyFeatureAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2717 my $features;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2718
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2719 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2720 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2721 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2722 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2723 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2724 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2725 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2726 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2727 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2728 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2729
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2730 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2731 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2732 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2733 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2734 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2735 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2736 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2737 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2738 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2739
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2740 my ( @arr, @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2741
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2742 if (@arraynames) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2743 @arr1 = @{ $fa->fetch_all_by_Slice_arrayname( $sl1, @arraynames ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2744 @arr2 = @{ $fa->fetch_all_by_Slice_arrayname( $sl2, @arraynames ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2745 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2746 @arr1 = @{ $fa->fetch_all_by_Slice($sl1) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2747 @arr2 = @{ $fa->fetch_all_by_Slice($sl2) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2748 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2749 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2750 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2751 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2752
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2753 # if ( @arraynames ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2754 # $features = $fa->fetch_all_by_Slice_arrayname( $self, @arraynames );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2755 # } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2756 # $features = $fa->fetch_all_by_Slice( $self );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2757 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2758 # return $features;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2759 } ## end sub get_all_AffyFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2760
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2761 =head2 get_all_OligoFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2762
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2763 Args : (optional) list of strings - array names
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2764 Example : $slice->get_all_OligoFeatures();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2765 Description: Retrieves all OligoFeature objects which overlap this slice.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2766 Optionally just retrieve OligoFeature objects generated by
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2767 probes from named arrays.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2768 Returntype : listref of Bio::EnsEMBL::OligoFeature objects
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2769 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2770 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2771 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2772
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2773 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2774
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2775 sub get_all_OligoFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2776 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2777 my @arraynames = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2778
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2779 my $sa = $self->adaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2780 if ( !$sa ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2781 warning("Cannot retrieve features without attached adaptor.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2782 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2783 my $fa = $sa->db()->get_OligoFeatureAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2784 my $features;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2785
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2786 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2787 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2788 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2789 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2790 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2791 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2792 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2793 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2794 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2795 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2796
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2797 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2798 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2799 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2800 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2801 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2802 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2803 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2804 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2805 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2806
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2807 my ( @arr, @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2808
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2809 if (@arraynames) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2810 @arr1 = @{ $fa->fetch_all_by_Slice_arrayname( $sl1, @arraynames ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2811 @arr2 = @{ $fa->fetch_all_by_Slice_arrayname( $sl2, @arraynames ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2812 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2813 @arr1 = @{ $fa->fetch_all_by_Slice($sl1) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2814 @arr2 = @{ $fa->fetch_all_by_Slice($sl2) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2815 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2816 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2817 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2818 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2819
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2820 # if ( @arraynames ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2821 # $features = $fa->fetch_all_by_Slice_arrayname( $self, @arraynames );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2822 # } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2823 # $features = $fa->fetch_all_by_Slice( $self );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2824 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2825 # return $features;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2826 } ## end sub get_all_OligoFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2827
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2828 =head2 get_all_OligoFeatures_by_type
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2829
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2830 Arg [1] : string - type of array (e.g. AFFY or OLIGO)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2831 Arg [2] : (optional) string - logic name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2832 Example : $slice->get_all_OligoFeatures_by_type('OLIGO');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2833 Description: Retrieves all OligoFeature objects which overlap this slice and
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2834 were created by probes from the specified type of array.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2835 Returntype : listref of Bio::EnsEMBL::OligoFeature objects
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2836 Exceptions : throws if no type
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2837 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2838 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2839
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2840 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2841
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2842 sub get_all_OligoFeatures_by_type {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2843 my ( $self, $type, $logic_name ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2844
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2845 throw('Need type as parameter') if !$type;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2846
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2847 my $sa = $self->adaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2848 if ( !$sa ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2849 warning("Cannot retrieve features without attached adaptor.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2850 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2851 my $fa = $sa->db()->get_OligoFeatureAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2852
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2853 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2854 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2855 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2856 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2857 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2858 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2859 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2860 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2861 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2862 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2863
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2864 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2865 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2866 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2867 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2868 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2869 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2870 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2871 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2872 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2873
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2874 my ( @arr, @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2875 @arr1 = @{ $fa->fetch_all_by_Slice_type( $sl1, $type, $logic_name ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2876 @arr2 = @{ $fa->fetch_all_by_Slice_type( $sl2, $type, $logic_name ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2877 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2878 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2879 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2880
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2881 #my $features = $fa->fetch_all_by_Slice_type( $self, $type, $logic_name );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2882 #return $features;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2883 } ## end sub get_all_OligoFeatures_by_type
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2884
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2885 =head2 get_all_MarkerFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2886
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2887 Arg [1] : (optional) string logic_name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2888 The logic name of the marker features to retrieve
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2889 Arg [2] : (optional) int $priority
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2890 Lower (exclusive) priority bound of the markers to retrieve
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2891 Arg [3] : (optional) int $map_weight
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2892 Upper (exclusive) priority bound of the markers to retrieve
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2893 Example : my @markers = @{$slice->get_all_MarkerFeatures(undef,50, 2)};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2894 Description: Retrieves all markers which lie on this slice fulfilling the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2895 specified map_weight and priority parameters (if supplied).
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2896 Returntype : reference to a list of Bio::EnsEMBL::MarkerFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2897 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2898 Caller : contigview, general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2899 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2900
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2901 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2902
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2903 sub get_all_MarkerFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2904 my ( $self, $logic_name, $priority, $map_weight ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2905
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2906 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2907 warning('Cannot retrieve MarkerFeatures without attached adaptor.');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2908 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2909 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2910
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2911 my $ma = $self->adaptor->db->get_MarkerFeatureAdaptor;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2912
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2913 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2914 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2915 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2916 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2917 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2918 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2919 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2920 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2921 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2922 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2923
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2924 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2925 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2926 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2927 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2928 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2929 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2930 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2931 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2932 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2933
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2934 my ( @arr, @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2935 @arr1 = @{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2936 $ma->fetch_all_by_Slice_and_priority( $sl1, $priority, $map_weight,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2937 $logic_name ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2938 @arr2 = @{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2939 $ma->fetch_all_by_Slice_and_priority( $sl2, $priority, $map_weight,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2940 $logic_name ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2941 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2942 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2943 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2944
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2945 # my $feats = $ma->fetch_all_by_Slice_and_priority($self, $priority, $map_weight, $logic_name);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2946 # return $feats;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2947 } ## end sub get_all_MarkerFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2948
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2949 =head2 get_all_compara_DnaAlignFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2950
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2951 Arg [1] : string $qy_species
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2952 The name of the species to retrieve similarity features from
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2953 Arg [2] : string $qy_assembly
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2954 The name of the assembly to retrieve similarity features from
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2955 Arg [3] : string $type
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2956 The type of the alignment to retrieve similarity features from
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2957 Arg [4] : <optional> compara dbadptor to use.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2958 Example : $fs = $slc->get_all_compara_DnaAlignFeatures('Mus musculus',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2959 'MGSC3',
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2960 'WGA');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2961 Description: Retrieves a list of DNA-DNA Alignments to the species specified
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2962 by the $qy_species argument.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2963 The compara database must be attached to the core database
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2964 for this call to work correctly. As well the compara database
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2965 must have the core dbadaptors for both this species, and the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2966 query species added to function correctly.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2967 Returntype : reference to a list of Bio::EnsEMBL::DnaDnaAlignFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2968 Exceptions : warning if compara database is not available
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2969 Caller : contigview
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2970 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2971
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2972 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2973
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2974 sub get_all_compara_DnaAlignFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2975 my ( $self, $qy_species, $qy_assembly, $alignment_type, $compara_db )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2976 = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2977
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2978 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2979 warning(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2980 "Cannot retrieve DnaAlignFeatures without attached adaptor");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2981 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2982 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2983
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2984 unless ( $qy_species && $alignment_type # && $qy_assembly
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2985 )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2986 {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2987 throw(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2988 "Query species and assembly and alignmemt type arguments are required"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2989 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2990 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2991
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2992 if ( !defined($compara_db) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2993 $compara_db =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2994 Bio::EnsEMBL::Registry->get_DBAdaptor( "compara", "compara" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2995 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2996 unless ($compara_db) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2997 warning(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2998 "Compara database must be attached to core database or passed "
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
2999 . "as an argument to "
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3000 . "retrieve compara information" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3001 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3002 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3003
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3004 my $dafa = $compara_db->get_DnaAlignFeatureAdaptor;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3005 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3006 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3007 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3008 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3009 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3010 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3011 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3012 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3013 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3014 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3015
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3016 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3017 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3018 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3019 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3020 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3021 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3022 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3023 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3024 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3025
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3026 my ( @arr, @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3027 @arr1 = @{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3028 $dafa->fetch_all_by_Slice( $sl1, $qy_species, $qy_assembly,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3029 $alignment_type ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3030 @arr2 = @{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3031 $dafa->fetch_all_by_Slice( $sl2, $qy_species, $qy_assembly,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3032 $alignment_type ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3033 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3034 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3035 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3036 #return $dafa->fetch_all_by_Slice($self, $qy_species, $qy_assembly, $alignment_type);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3037 } ## end sub get_all_compara_DnaAlignFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3038
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3039 =head2 get_all_compara_Syntenies
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3040
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3041 Arg [1] : string $query_species e.g. "Mus_musculus" or "Mus musculus"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3042 Arg [2] : string $method_link_type, default is "SYNTENY"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3043 Arg [3] : <optional> compara dbadaptor to use.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3044 Description: gets all the compara syntenyies for a specfic species
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3045 Returns : arrayref of Bio::EnsEMBL::Compara::SyntenyRegion
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3046 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3047
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3048 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3049
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3050 sub get_all_compara_Syntenies {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3051 my ( $self, $qy_species, $method_link_type, $compara_db ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3052
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3053 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3054 warning("Cannot retrieve features without attached adaptor");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3055 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3056 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3057
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3058 unless ($qy_species) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3059 throw("Query species and assembly arguments are required");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3060 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3061
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3062 unless ( defined $method_link_type ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3063 $method_link_type = "SYNTENY";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3064 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3065
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3066 if ( !defined($compara_db) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3067 $compara_db =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3068 Bio::EnsEMBL::Registry->get_DBAdaptor( "compara", "compara" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3069 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3070 unless ($compara_db) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3071 warning(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3072 "Compara database must be attached to core database or passed "
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3073 . "as an argument to "
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3074 . "retrieve compara information" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3075 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3076 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3077 my $gdba = $compara_db->get_GenomeDBAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3078 my $mlssa = $compara_db->get_MethodLinkSpeciesSetAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3079 my $dfa = $compara_db->get_DnaFragAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3080 my $sra = $compara_db->get_SyntenyRegionAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3081
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3082 my $this_gdb =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3083 $gdba->fetch_by_core_DBAdaptor( $self->adaptor()->db() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3084 my $query_gdb = $gdba->fetch_by_registry_name($qy_species);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3085 my $mlss =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3086 $mlssa->fetch_by_method_link_type_GenomeDBs( $method_link_type,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3087 [ $this_gdb, $query_gdb ] );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3088
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3089 my $cs = $self->coord_system()->name();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3090 my $sr = $self->seq_region_name();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3091 my ($dnafrag) =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3092 @{ $dfa->fetch_all_by_GenomeDB_region( $this_gdb, $cs, $sr ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3093
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3094 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3095 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3096 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3097 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3098 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3099 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3100 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3101 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3102 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3103 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3104
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3105 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3106 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3107 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3108 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3109 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3110 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3111 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3112 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3113 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3114
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3115 my ( @arr, @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3116 @arr1 = @{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3117 $sra->fetch_all_by_MethodLinkSpeciesSet_DnaFrag( $mlss, $dnafrag,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3118 $sl1->start, $sl1->end )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3119 };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3120 @arr2 = @{
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3121 $sra->fetch_all_by_MethodLinkSpeciesSet_DnaFrag( $mlss, $dnafrag,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3122 $sl2->start, $sl2->end )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3123 };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3124 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3125 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3126 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3127 #return $sra->fetch_all_by_MethodLinkSpeciesSet_DnaFrag($mlss, $dnafrag, $self->start, $self->end);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3128 } ## end sub get_all_compara_Syntenies
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3129
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3130 =head2 get_all_Haplotypes
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3131
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3132 Arg [1] : (optional) boolean $lite_flag
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3133 if true lightweight haplotype objects are used
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3134 Example : @haplotypes = $slice->get_all_Haplotypes;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3135 Description: Retrieves all of the haplotypes on this slice. Only works
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3136 if the haplotype adaptor has been attached to the core adaptor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3137 via $dba->add_db_adaptor('haplotype', $hdba);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3138 Returntype : listref of Bio::EnsEMBL::External::Haplotype::Haplotypes
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3139 Exceptions : warning is Haplotype database is not available
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3140 Caller : contigview, general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3141 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3142
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3143 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3144
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3145 sub get_all_Haplotypes {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3146 my ( $self, $lite_flag ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3147
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3148 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3149 warning("Cannot retrieve features without attached adaptor");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3150 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3151 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3152
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3153 my $haplo_db = $self->adaptor->db->get_db_adaptor('haplotype');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3154
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3155 unless ($haplo_db) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3156 warning( "Haplotype database must be attached to core database to "
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3157 . "retrieve haplotype information" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3158 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3159 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3160
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3161 my $haplo_adaptor = $haplo_db->get_HaplotypeAdaptor;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3162
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3163 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3164 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3165 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3166 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3167 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3168 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3169 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3170 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3171 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3172 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3173
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3174 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3175 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3176 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3177 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3178 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3179 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3180 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3181 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3182 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3183
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3184 my ( @arr, @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3185 @arr1 = @{ $haplo_adaptor->fetch_all_by_Slice( $sl1, $lite_flag ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3186 @arr2 = @{ $haplo_adaptor->fetch_all_by_Slice( $sl2, $lite_flag ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3187 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3188 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3189 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3190
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3191 #my $haplotypes = $haplo_adaptor->fetch_all_by_Slice($self, $lite_flag);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3192 #return $haplotypes;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3193 } ## end sub get_all_Haplotypes
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3194
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3195 sub get_all_DASFactories {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3196 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3197 return [ $self->adaptor()->db()->_each_DASFeatureFactory ];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3198 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3199
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3200
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3201 sub get_all_DASFeatures_dsn {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3202 my ( $self, $source_type, $dsn ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3203
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3204 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3205 warning("Cannot retrieve features without attached adaptor");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3206 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3207 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3208 my @X =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3209 grep { $_->adaptor->dsn eq $dsn }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3210 $self->adaptor()->db()->_each_DASFeatureFactory;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3211
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3212 return [ $X[0]->fetch_all_Features( $self, $source_type ) ];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3213 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3214
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3215 sub get_all_DAS_Features {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3216 my ($self) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3217
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3218 $self->{_das_features} ||= {}; # Cache
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3219 $self->{_das_styles} ||= {}; # Cache
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3220 $self->{_das_segments} ||= {}; # Cache
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3221 my %das_features;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3222 my %das_styles;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3223 my %das_segments;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3224 my $slice = $self;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3225
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3226 foreach my $dasfact ( @{ $self->get_all_DASFactories } ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3227 my $dsn = $dasfact->adaptor->dsn;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3228 my $name = $dasfact->adaptor->name;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3229 # my $type = $dasfact->adaptor->type;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3230 my $url = $dasfact->adaptor->url;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3231
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3232 my ($type) = $dasfact->adaptor->mapping;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3233 if ( ref $type eq 'ARRAY' ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3234 $type = shift @$type;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3235 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3236 $type ||= $dasfact->adaptor->type;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3237 # Construct a cache key : SOURCE_URL/TYPE
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3238 # Need the type to handle sources that serve multiple types of features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3239
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3240 my $key = join( '/', $name, $type );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3241 if ( $self->{_das_features}->{$key} ) { # Use cached
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3242 $das_features{$name} = $self->{_das_features}->{$key};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3243 $das_styles{$name} = $self->{_das_styles}->{$key};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3244 $das_segments{$name} = $self->{_das_segments}->{$key};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3245 } else { # Get fresh data
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3246 my ( $featref, $styleref, $segref ) =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3247 $dasfact->fetch_all_Features( $slice, $type );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3248 $self->{_das_features}->{$key} = $featref;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3249 $self->{_das_styles}->{$key} = $styleref;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3250 $self->{_das_segments}->{$key} = $segref;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3251 $das_features{$name} = $featref;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3252 $das_styles{$name} = $styleref;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3253 $das_segments{$name} = $segref;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3254 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3255 } ## end foreach my $dasfact ( @{ $self...})
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3256
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3257 return ( \%das_features, \%das_styles, \%das_segments );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3258 } ## end sub get_all_DAS_Features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3259
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3260 =head2 get_all_DASFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3261
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3262 Arg [1] : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3263 Example : $features = $slice->get_all_DASFeatures;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3264 Description: Retreives a hash reference to a hash of DAS feature
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3265 sets, keyed by the DNS, NOTE the values of this hash
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3266 are an anonymous array containing:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3267 (1) a pointer to an array of features;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3268 (2) a pointer to the DAS stylesheet
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3269 Returntype : hashref of Bio::SeqFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3270 Exceptions : ?
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3271 Caller : webcode
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3272 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3273
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3274 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3275 sub get_all_DASFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3276 my ( $self, $source_type ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3277
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3278 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3279 warning("Cannot retrieve features without attached adaptor");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3280 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3281 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3282
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3283 my %genomic_features = map {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3284 ( $_->adaptor->dsn =>
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3285 [ $_->fetch_all_Features( $self, $source_type ) ] )
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3286 } $self->adaptor()->db()->_each_DASFeatureFactory;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3287 return \%genomic_features;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3288
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3289 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3290
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3291 sub old_get_all_DASFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3292 my ( $self, @args ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3293
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3294 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3295 warning("Cannot retrieve features without attached adaptor");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3296 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3297 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3298
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3299 my %genomic_features =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3300 map { ( $_->adaptor->dsn => [ $_->fetch_all_by_Slice($self) ] ) }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3301 $self->adaptor()->db()->_each_DASFeatureFactory;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3302 return \%genomic_features;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3303
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3304 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3305
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3306 =head2 get_all_ExternalFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3307
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3308 Arg [1] : (optional) string $track_name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3309 If specified only features from ExternalFeatureAdaptors with
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3310 the track name $track_name are retrieved.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3311 If not set, all features from every ExternalFeatureAdaptor are
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3312 retrieved.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3313 Example : @x_features = @{$slice->get_all_ExternalFeatures}
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3314 Description: Retrieves features on this slice from external feature adaptors
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3315 Returntype : listref of Bio::SeqFeatureI implementing objects in slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3316 coordinates
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3317 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3318 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3319 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3320
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3321 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3322
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3323 sub get_all_ExternalFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3324 my ( $self, $track_name ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3325 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3326 warning("Cannot retrieve features without attached adaptor");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3327 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3328 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3329 my $features = [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3330 my $xfa_hash = $self->adaptor->db->get_ExternalFeatureAdaptors;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3331 my @xf_adaptors = ();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3332 if ($track_name) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3333 #use a specific adaptor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3334 if ( exists $xfa_hash->{$track_name} ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3335 push @xf_adaptors, $xfa_hash->{$track_name};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3336 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3337 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3338 #use all of the adaptors
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3339 push @xf_adaptors, values %$xfa_hash;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3340 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3341
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3342 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3343 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3344 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3345 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3346 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3347 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3348 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3349 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3350 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3351 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3352
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3353 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3354 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3355 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3356 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3357 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3358 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3359 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3360 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3361 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3362
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3363 foreach my $xfa (@xf_adaptors) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3364 push @$features, @{ $xfa->fetch_all_by_Slice($sl1) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3365 push @$features, @{ $xfa->fetch_all_by_Slice($sl2) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3366 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3367 return $features;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3368 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3369 } ## end sub get_all_ExternalFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3370
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3371 =head2 get_all_DitagFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3372
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3373 Arg [1] : (optional) string ditag type
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3374 Arg [1] : (optional) string logic_name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3375 Example : @dna_dna_align_feats = @{$slice->get_all_DitagFeatures};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3376 Description: Retrieves the DitagFeatures of a specific type which overlap
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3377 this slice with. If type is not defined, all features are
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3378 retrieved.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3379 Returntype : listref of Bio::EnsEMBL::DitagFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3380 Exceptions : warning if slice does not have attached adaptor
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3381 Caller : general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3382 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3383
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3384 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3385
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3386 sub get_all_DitagFeatures {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3387 my ( $self, $type, $logic_name ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3388
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3389 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3390 warning('Cannot get DitagFeatures without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3391 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3392 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3393
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3394 my $dfa = $self->adaptor->db->get_DitagFeatureAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3395
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3396 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3397 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3398 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3399 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3400 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3401 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3402 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3403 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3404 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3405 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3406
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3407 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3408 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3409 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3410 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3411 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3412 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3413 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3414 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3415 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3416
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3417 my ( @arr, @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3418 @arr1 = @{ $dfa->fetch_all_by_Slice( $sl1, $type, $logic_name ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3419 @arr2 = @{ $dfa->fetch_all_by_Slice( $sl2, $type, $logic_name ) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3420 push @arr, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3421 return \@arr;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3422 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3423 #return $dfa->fetch_all_by_Slice($self, $type, $logic_name);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3424 } ## end sub get_all_DitagFeatures
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3425
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3426 # GENERIC FEATURES (See DBAdaptor.pm)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3427
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3428 =head2 get_generic_features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3429
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3430 Arg [1] : (optional) List of names of generic feature types to return.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3431 If no feature names are given, all generic features are
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3432 returned.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3433 Example : my %features = %{$slice->get_generic_features()};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3434 Description: Gets generic features via the generic feature adaptors that
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3435 have been added via DBAdaptor->add_GenricFeatureAdaptor (if
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3436 any)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3437 Returntype : Hash of named features.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3438 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3439 Caller : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3440 Status : Stable
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3441
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3442 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3443
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3444 sub get_generic_features {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3445
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3446 my ( $self, @names ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3447
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3448 if ( !$self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3449 warning('Cannot retrieve features without attached adaptor');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3450 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3451 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3452
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3453 my $db = $self->adaptor()->db();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3454
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3455 my %features = (); # this will hold the results
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3456
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3457 # get the adaptors for each feature
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3458 my %adaptors = %{ $db->get_GenericFeatureAdaptors(@names) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3459
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3460 foreach my $adaptor_name ( keys(%adaptors) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3461
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3462 my $adaptor_obj = $adaptors{$adaptor_name};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3463 # get the features and add them to the hash
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3464 ## circular BOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3465 my $sl1 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3466 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3467 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3468 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3469 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3470 -START => $self->{'start'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3471 -END => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3472 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3473 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3474
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3475 my $sl2 =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3476 Bio::EnsEMBL::CircularSlice->new(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3477 -COORD_SYSTEM => $self->{'coord_system'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3478 -SEQ_REGION_NAME => $self->{'seq_region_name'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3479 -SEQ_REGION_LENGTH => $self->{'seq_region_length'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3480 -START => 1,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3481 -END => $self->{'end'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3482 -STRAND => $self->{'strand'},
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3483 -ADAPTOR => $self->adaptor() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3484
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3485 my ( @arr1, @arr2 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3486 my $features_ref;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3487 @arr1 = @{ $adaptor_obj->fetch_all_by_Slice($sl1) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3488 @arr2 = @{ $adaptor_obj->fetch_all_by_Slice($sl2) };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3489 push @{$features_ref}, @arr1, @arr2;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3490 ## circular EOF
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3491 #my $features_ref = $adaptor_obj->fetch_all_by_Slice($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3492
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3493 # add each feature to the hash to be returned
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3494 foreach my $feature (@$features_ref) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3495 $features{$adaptor_name} = $feature;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3496 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3497 } ## end foreach my $adaptor_name ( ...)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3498
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3499 return \%features;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3500
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3501 } ## end sub get_generic_features
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3502
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3503 =head2 project_to_slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3504
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3505 Arg [1] : Slice to project to.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3506 Example : my $chr_projection = $clone_slice->project_to_slice($chrom_slice);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3507 foreach my $segment ( @$chr_projection ){
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3508 $chr_slice = $segment->to_Slice();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3509 print $clone_slice->seq_region_name(). ':'. $segment->from_start(). '-'.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3510 $segment->from_end(). ' -> '.$chr_slice->seq_region_name(). ':'. $chr_slice->start().
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3511 '-'.$chr_slice->end().
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3512 $chr_slice->strand(). " length: ".($chr_slice->end()-$chr_slice->start()+1). "\n";
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3513 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3514 Description: Projection of slice to another specific slice. Needed for where we have multiple mappings
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3515 and we want to state which one to project to.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3516 Returntype : list reference of Bio::EnsEMBL::ProjectionSegment objects which
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3517 can also be used as [$start,$end,$slice] triplets.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3518 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3519 Caller : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3520 Status : At Risk
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3521
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3522 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3523
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3524 sub project_to_slice {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3525 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3526 my $to_slice = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3527
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3528 throw('Slice argument is required') if ( !$to_slice );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3529
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3530 my $slice_adaptor = $self->adaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3531
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3532 if ( !$slice_adaptor ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3533 warning("Cannot project without attached adaptor.");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3534 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3535 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3536
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3537 my $mapper_aptr = $slice_adaptor->db->get_AssemblyMapperAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3538
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3539 my $cs = $to_slice->coord_system();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3540 my $slice_cs = $self->coord_system();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3541
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3542 my @projection;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3543 my $current_start = 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3544
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3545 # decompose this slice into its symlinked components.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3546 # this allows us to handle haplotypes and PARs
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3547 my $normal_slice_proj =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3548 $slice_adaptor->fetch_normalized_slice_projection($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3549 foreach my $segment (@$normal_slice_proj) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3550 my $normal_slice = $segment->[2];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3551
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3552 $slice_cs = $normal_slice->coord_system();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3553
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3554 my $asma = $self->adaptor->db->get_AssemblyMapperAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3555 my $asm_mapper = $asma->fetch_by_CoordSystems( $slice_cs, $cs );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3556
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3557 # perform the mapping between this slice and the requested system
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3558 my @coords;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3559
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3560 if ( defined $asm_mapper ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3561 @coords = $asm_mapper->map( $normal_slice->seq_region_name(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3562 $normal_slice->start(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3563 $normal_slice->end(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3564 $normal_slice->strand(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3565 $slice_cs,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3566 undef,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3567 $to_slice );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3568 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3569 $coords[0] =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3570 Bio::EnsEMBL::Mapper::Gap->new( $normal_slice->start(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3571 $normal_slice->end() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3572 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3573
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3574 #construct a projection from the mapping results and return it
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3575 foreach my $coord (@coords) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3576 my $coord_start = $coord->start();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3577 my $coord_end = $coord->end();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3578 my $length = $coord_end - $coord_start + 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3579
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3580 #skip gaps
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3581 if ( $coord->isa('Bio::EnsEMBL::Mapper::Coordinate') ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3582 my $coord_cs = $coord->coord_system();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3583
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3584 # If the normalised projection just ended up mapping to the
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3585 # same coordinate system we were already in then we should just
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3586 # return the original region. This can happen for example, if we
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3587 # were on a PAR region on Y which refered to X and a projection to
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3588 # 'toplevel' was requested.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3589 # if($coord_cs->equals($slice_cs)) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3590 # # trim off regions which are not defined
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3591 # return $self->_constrain_to_region();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3592 # }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3593
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3594 #create slices for the mapped-to coord system
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3595 my $slice =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3596 $slice_adaptor->fetch_by_seq_region_id( $coord->id(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3597 $coord_start, $coord_end, $coord->strand() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3598
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3599 my $current_end = $current_start + $length - 1;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3600
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3601 push @projection,
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3602 bless( [ $current_start, $current_end, $slice ],
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3603 "Bio::EnsEMBL::ProjectionSegment" );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3604 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3605
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3606 $current_start += $length;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3607 } ## end foreach my $coord (@coords)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3608 } ## end foreach my $segment (@$normal_slice_proj)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3609
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3610 # delete the cache as we may want to map to different set next time and old
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3611 # results will be cached.
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3612
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3613 $mapper_aptr->delete_cache;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3614
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3615 return \@projection;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3616 } ## end sub project_to_slice
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3617
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3618 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3619 # Bioperl Bio::PrimarySeqI methods:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3620 #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3621
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3622 =head2 id
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3623
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3624 Description: Included for Bio::PrimarySeqI interface compliance (0.7)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3625
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3626 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3627
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3628 sub id { name(@_); }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3629
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3630 =head2 display_id
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3631
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3632 Description: Included for Bio::PrimarySeqI interface compliance (1.2)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3633
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3634 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3635
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3636 sub display_id { name(@_); }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3637
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3638 =head2 primary_id
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3639
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3640 Description: Included for Bio::PrimarySeqI interface compliance (1.2)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3641
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3642 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3643
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3644 sub primary_id { name(@_); }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3645
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3646 =head2 desc
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3647
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3648 Description: Included for Bio::PrimarySeqI interface compliance (1.2)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3649
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3650 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3651
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3652 sub desc {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3653 return $_[0]->coord_system->name() . ' ' . $_[0]->seq_region_name();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3654 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3655
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3656 =head2 moltype
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3657
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3658 Description: Included for Bio::PrimarySeqI interface compliance (0.7)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3659
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3660 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3661
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3662 sub moltype { return 'dna'; }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3663
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3664 =head2 alphabet
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3665
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3666 Description: Included for Bio::PrimarySeqI interface compliance (1.2)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3667
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3668 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3669
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3670 sub alphabet { return 'dna'; }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3671
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3672 =head2 accession_number
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3673
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3674 Description: Included for Bio::PrimarySeqI interface compliance (1.2)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3675
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3676 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3677
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3678 sub accession_number { name(@_); }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3679
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3680 =head2 is_circular
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3681
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3682 Description: Included for Bio::PrimarySeqI interface compliance (1.2)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3683
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3684 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3685
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3686 sub is_circular {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3687 my ($self) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3688
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3689 if ( !defined( $self->{'circular'} ) ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3690 my @attrs =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3691 grep { $_ } @{ $self->get_all_Attributes('circular_seq') };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3692 $self->{'circular'} = @attrs ? 1 : 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3693 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3694
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3695 return $self->{'circular'};
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3696 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3697
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3698 # sub DEPRECATED METHODS #
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3699 ###############################################################################
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3700
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3701 =head1 DEPRECATED METHODS
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3702
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3703 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3704
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3705 =head2 get_all_supercontig_Slices
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3706
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3707 DEPRECATED use get_tiling_path("NTcontig") instead
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3708
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3709 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3710
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3711 sub get_all_supercontig_Slices {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3712 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3713
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3714 deprecate("Use get_tiling_path('NTcontig') instead");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3715
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3716 my $result = [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3717
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3718 if ( $self->adaptor() ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3719 my $superctg_names =
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3720 $self->adaptor()->list_overlapping_supercontigs($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3721
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3722 for my $name (@$superctg_names) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3723 my $slice;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3724 $slice = $self->adaptor()->fetch_by_supercontig_name($name);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3725 $slice->name($name);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3726 push( @$result, $slice );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3727 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3728 } else {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3729 warning(
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3730 "Slice needs to be attached to a database to get supercontigs");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3731 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3732
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3733 return $result;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3734 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3735
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3736 =head2 get_Chromosome
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3737
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3738 DEPRECATED use this instead:
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3739 $slice_adp->fetch_by_region('chromosome',$slice->seq_region_name)
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3740
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3741 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3742
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3743 sub get_Chromosome {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3744 my $self = shift @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3745
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3746 deprecate( "Use SliceAdaptor::fetch_by_region('chromosome',"
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3747 . '$slice->seq_region_name) instead' );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3748
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3749 my $csa = $self->adaptor->db->get_CoordSystemAdaptor();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3750 my ($top_cs) = @{ $csa->fetch_all() };
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3751
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3752 return
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3753 $self->adaptor->fetch_by_region( $top_cs->name(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3754 $self->seq_region_name(),
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3755 undef, undef, undef, $top_cs->version() );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3756 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3757
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3758 =head2 chr_name
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3759
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3760 DEPRECATED use seq_region_name() instead
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3761
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3762 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3763
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3764 sub chr_name {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3765 deprecate("Use seq_region_name() instead");
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3766 seq_region_name(@_);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3767 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3768
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3769 =head2 chr_start
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3770
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3771 DEPRECATED use start() instead
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3772
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3773 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3774
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3775 sub chr_start {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3776 deprecate('Use start() instead');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3777 start(@_);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3778 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3779
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3780 =head2 chr_end
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3781
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3782 DEPRECATED use end() instead
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3783
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3784 Returntype : int
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3785 Exceptions : none
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3786 Caller : SliceAdaptor, general
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3787
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3788 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3789
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3790 sub chr_end {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3791 deprecate('Use end() instead');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3792 end(@_);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3793 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3794
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3795 =head2 assembly_type
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3796
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3797 DEPRECATED use version instead
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3798
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3799 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3800
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3801 sub assembly_type {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3802 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3803 deprecate('Use $slice->coord_system()->version() instead.');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3804 return $self->coord_system->version();
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3805 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3806
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3807 =head2 get_tiling_path
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3808
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3809 DEPRECATED use project instead
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3810
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3811 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3812
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3813 sub get_tiling_path {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3814 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3815 deprecate('Use $slice->project("seqlevel") instead.');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3816 return [];
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3817 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3818
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3819 =head2 dbID
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3820
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3821 Description: DEPRECATED use SliceAdaptor::get_seq_region_id instead
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3822
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3823 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3824
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3825 sub dbID {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3826 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3827 deprecate('Use SliceAdaptor::get_seq_region_id instead.');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3828 if ( !$self->adaptor ) {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3829 warning('Cannot retrieve seq_region_id without attached adaptor.');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3830 return 0;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3831 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3832 return $self->adaptor->get_seq_region_id($self);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3833 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3834
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3835 =head2 get_all_MapFrags
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3836
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3837 DEPRECATED use get_all_MiscFeatures instead
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3838
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3839 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3840
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3841 sub get_all_MapFrags {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3842 my $self = shift;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3843 deprecate('Use get_all_MiscFeatures instead');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3844 return $self->get_all_MiscFeatures(@_);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3845 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3846
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3847 =head2 has_MapSet
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3848
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3849 DEPRECATED use get_all_MiscFeatures instead
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3850
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3851 =cut
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3852
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3853 sub has_MapSet {
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3854 my ( $self, $mapset_name ) = @_;
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3855 deprecate('Use get_all_MiscFeatures instead');
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3856 my $mfs = $self->get_all_MiscFeatures($mapset_name);
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3857 return ( @$mfs > 0 );
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3858 }
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3859
2bc9b66ada89 Uploaded
mahtabm
parents:
diff changeset
3860 1;