annotate variant_effect_predictor/Bio/EnsEMBL/CircularSlice.pm @ 3:d30fa12e4cc5 default tip

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