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

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