annotate variant_effect_predictor/Bio/EnsEMBL/LRGSlice.pm @ 0:21066c0abaf5 draft

Uploaded
author willmclaren
date Fri, 03 Aug 2012 10:04:48 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
1 =head1 LICENSE
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
2
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
5
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
6 This software is distributed under a modified Apache license.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
7 For license details, please see
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
8
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
10
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
11 =head1 CONTACT
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
12
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
15
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
17 <helpdesk@ensembl.org>.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
18
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
19 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
20
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
21 =head1 NAME
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
22
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
23 Bio::EnsEMBL::LRGSlice - Arbitary Slice of a genome
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
24
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
25 =head1 SYNOPSIS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
26
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
27 $sa = $db->get_SliceAdaptor;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
28
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
29 $slice =
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
30 $sa->fetch_by_region( 'LRG', 'LRG3');
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
31
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
32 # get some attributes of the slice
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
33 my $seqname = $slice->seq_region_name();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
34 my $start = $slice->start();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
35 my $end = $slice->end();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
36
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
37 # get the sequence from the slice
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
38 my $seq = $slice->seq();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
39
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
40 # get some features from the slice
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
41 foreach $gene ( @{ $slice->get_all_Genes } ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
42 # do something with a gene
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
43 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
44
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
45 foreach my $feature ( @{ $slice->get_all_DnaAlignFeatures } ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
46 # do something with dna-dna alignments
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
47 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
48
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
49 =head1 DESCRIPTION
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
50
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
51 A LRG Slice object represents a region of a genome. It can be used to retrieve
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
52 sequence or features from an area of interest.
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
53
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
54 =head1 METHODS
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
55
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
56 =cut
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
57
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
58 package Bio::EnsEMBL::LRGSlice;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
59 use vars qw(@ISA);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
60 use strict;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
61
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
62 use Bio::PrimarySeqI;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
63
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
64 use Bio::EnsEMBL::Slice;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
65
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
66 use vars qw(@ISA);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
67
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
68 @ISA = qw(Bio::EnsEMBL::Slice);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
69
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
70 sub new{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
71 my $class = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
72
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
73 my $self = bless {}, $class ;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
74
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
75 my $slice = $self = $class->SUPER::new( @_);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
76
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
77 return $self;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
78 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
79
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
80 sub stable_id {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
81 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
82 return $self->seq_region_name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
83 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
84
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
85
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
86 sub display_xref {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
87 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
88 return $self->seq_region_name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
89 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
90
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
91 sub feature_Slice {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
92 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
93 return $self->{_chrom_slice} if defined($self->{_chrom_slice});
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
94
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
95 my $max=-99999999999;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
96 my $min=9999999999;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
97 my $chrom;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
98 my $strand;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
99
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
100 # print STDERR "working out feature slcie\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
101 foreach my $segment (@{$self->project('chromosome')}) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
102 my $from_start = $segment->from_start();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
103 my $from_end = $segment->from_end();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
104 my $to_name = $segment->to_Slice->seq_region_name();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
105 $chrom = $to_name;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
106
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
107 my $to_start = $segment->to_Slice->start();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
108 my $to_end = $segment->to_Slice->end();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
109 if($to_start > $max){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
110 $max = $to_start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
111 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
112 if($to_start < $min){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
113 $min = $to_start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
114 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
115 if($to_end > $max){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
116 $max = $to_end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
117 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
118 if($to_end < $min){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
119 $min = $to_end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
120 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
121 my $ori = $segment->to_Slice->strand();
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
122 $strand = $ori;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
123 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
124 if(!defined($chrom)){
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
125 warn "Could not project to chromosome for ".$self->name."??\n";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
126 return undef;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
127 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
128 my $chrom_slice = $self->adaptor->fetch_by_region("chromosome",$chrom, $min, $max, $strand);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
129 $self->{_chrom_slice} = $chrom_slice;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
130 return $self->{_chrom_slice};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
131 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
132
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
133 sub DESTROY{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
134 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
135
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
136 sub get_all_differences{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
137 my $self = shift;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
138
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
139 my @results;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
140
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
141 # get seq_region_attrib diffs (always same-length substitutions)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
142 ################################################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
143
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
144 my $sth = $self->adaptor->prepare(qq{
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
145 SELECT sra.value
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
146 FROM seq_region_attrib sra, attrib_type at
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
147 WHERE at.code = '_rna_edit'
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
148 AND at.attrib_type_id = sra.attrib_type_id
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
149 AND sra.seq_region_id = ?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
150 });
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
151
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
152 $sth->execute($self->get_seq_region_id);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
153
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
154 my $edit_string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
155
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
156 $sth->bind_columns(\$edit_string);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
157
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
158 while($sth->fetch()) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
159 my ($start, $end, $edit) = split " ", $edit_string;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
160
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
161 my $slice = $self->sub_Slice($start, $end);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
162 my $chr_proj = $slice->project("chromosome");
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
163 my $ref_seq = '-';
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
164 if(scalar @$chr_proj == 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
165 $ref_seq = $chr_proj->[0]->[2]->seq;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
166 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
167
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
168
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
169 my $diff = {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
170 'start' => $start,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
171 'end' => $end,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
172 'type' => 'substitution',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
173 'seq' => $edit,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
174 'ref' => $ref_seq,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
175 };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
176
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
177 push @results, $diff;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
178 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
179
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
180 # get more complex differences via projections
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
181 ##############################################
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
182
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
183 # project the LRG slice to contig coordinates
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
184 my @segs = @{$self->project("contig")};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
185
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
186 # if the LRG projects into more than one segment
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
187 if(scalar @segs > 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
188
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
189 my ($prev_end, $prev_chr_start, $prev_chr_end, $prev_was_chr);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
190
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
191 foreach my $seg(@segs) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
192
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
193 # is this a novel LRG contig, or does it project to a chromosome?
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
194 my @chr_proj = @{$seg->[2]->project("chromosome")};
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
195
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
196 # if it is a normal contig
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
197 if(scalar @chr_proj) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
198
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
199 # check if there has been a deletion in LRG
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
200 if($prev_was_chr && $prev_end == $seg->[0] - 1) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
201
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
202 # check it's not just a break in contigs
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
203 unless(
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
204 ($chr_proj[0]->[2]->strand != $self->strand && $prev_chr_start == $chr_proj[0]->[2]->end + 1) ||
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
205 ($chr_proj[0]->[2]->strand != $self->strand && $prev_chr_end == $chr_proj[0]->[2]->start - 1)
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
206 ) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
207
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
208 # now get deleted slice coords, depends on the strand rel to LRG
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
209 my ($s, $e);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
210
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
211 # opposite strand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
212 if($chr_proj[0]->[2]->strand != $self->strand) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
213 ($s, $e) = ($prev_chr_start - 1, $chr_proj[0]->[2]->end + 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
214 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
215
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
216 # same strand
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
217 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
218 ($s, $e) = ($prev_chr_end + 1, $chr_proj[0]->[2]->start - 1);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
219 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
220
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
221 if($s > $e) {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
222 warn "Oops, trying to create a slice from $s to $e (could have been ", $prev_chr_start - 1, "-", $chr_proj[0]->[2]->end + 1, " or ", $prev_chr_end + 1, "-", $chr_proj[0]->[2]->start - 1, ")";
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
223 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
224
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
225 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
226 # get a slice representing the sequence that was deleted
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
227 my $deleted_slice = $self->adaptor->fetch_by_region("chromosome", $chr_proj[0]->[2]->seq_region_name, $s, $e);
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
228
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
229 my $diff = {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
230 'start' => $seg->[0],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
231 'end' => $prev_end,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
232 'type' => 'deletion',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
233 'seq' => '-',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
234 'ref' => $deleted_slice->seq." ".$deleted_slice->start.'-'.$deleted_slice->end,
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
235 };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
236
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
237 push @results, $diff;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
238 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
239 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
240 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
241
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
242 $prev_was_chr = 1;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
243
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
244 $prev_chr_start = $chr_proj[0]->[2]->start;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
245 $prev_chr_end = $chr_proj[0]->[2]->end;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
246 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
247
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
248 # if it is an LRG made-up contig for an insertion
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
249 else {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
250 $prev_was_chr = 0;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
251
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
252 my $diff = {
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
253 'start' => $seg->[0],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
254 'end' => $seg->[1],
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
255 'type' => 'insertion',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
256 'seq' => substr($self->seq, $seg->[0] - 1, $seg->[1] - $seg->[0] + 1),
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
257 'ref' => '-',
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
258 };
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
259
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
260 push @results, $diff;
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
261 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
262
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
263 $prev_end = $seg->[1];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
264 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
265 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
266
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
267 # return results sorted by start, then end position
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
268 return [sort {$a->{start} <=> $b->{start} || $a->{end} <=> $b->{end}} @results];
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
269 }
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
270
21066c0abaf5 Uploaded
willmclaren
parents:
diff changeset
271 1;