annotate variant_effect_predictor/Bio/EnsEMBL/Variation/Utils/EnsEMBL2GFF3.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
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
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 package Bio::EnsEMBL::Variation::Utils::EnsEMBL2GFF3;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 # This module allows conversion of ensembl objects to GFF3 and GVF by inserting
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 # to_gff (and supporting _gff_hash) methods into the necessary feature classes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 package Bio::EnsEMBL::Slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 sub gff_version {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 return "##gff-version 3\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 sub gff_header {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40 my %args = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 # build up a date string in the format specified by the GFF spec
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 my ( $sec, $min, $hr, $mday, $mon, $year ) = localtime;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 $year += 1900; # correct the year
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 $mon++; # correct the month
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 my $date = sprintf "%4d-%02d-%02d", $year, $mon, $mday;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 my $region = $self->seq_region_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 my $start = $self->start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 my $end = $self->end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 my $assembly = $self->coord_system->version;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 my $mca = $self->adaptor->db->get_MetaContainerAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 my $tax_id = $mca->get_taxonomy_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 my $hdr =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 "##file-date $date\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 . "##genome-build ensembl $assembly\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 . "##species http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=$tax_id\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 $hdr .= "##sequence-region $region $start $end\n" unless $args{no_sequence_region};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 return $hdr;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 sub gvf_version {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 return "##gvf-version 1.06\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 sub gvf_header {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 my %args = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 my $hdr = $self->gff_version;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 $hdr .= $self->gvf_version;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 $hdr .= $self->gff_header(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 my $mca = $self->adaptor->db->get_MetaContainerAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 my $schema_version = $mca->get_schema_version;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 my $species_name = $mca->get_scientific_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 $species_name =~ s/ /_/g;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 my $url = 'http://e'.$schema_version.'.ensembl.org/'.$species_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 $hdr .= "##feature-ontology http://song.cvs.sourceforge.net/viewvc/song/ontology/so.obo?revision=1.283\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 $hdr .= "##data-source Source=ensembl;version=$schema_version;url=$url\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 $hdr .= "##file-version $schema_version\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 if (my $individual = $args{individual}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 $hdr .= "##individual-id ".$individual->to_gvf."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 if (my $population = $args{population}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 $hdr .= "##attribute-method ".$population->to_gvf."\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 return $hdr;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 package Bio::EnsEMBL::Feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 sub to_gff {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 my %args = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 # This parameter is assumed to be a hashref which includes extra attributes you'd
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 # like to have appended onto the gff line for the feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 my $extra_attrs = $args{extra_attrs};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 my $gff = $self->_gff_hash(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 return undef unless defined $gff;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 # default optional columns, and check that all required columns are present
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 $gff->{score} = '.' unless defined $gff->{score};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 $gff->{strand} = '.' unless defined $gff->{strand};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 $gff->{phase} = '.' unless defined $gff->{phase};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 for my $req (qw(source type start end)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 die "'$req' attribute required for GFF" unless $gff->{$req};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 # order as per GFF3 spec: http://www.sequenceontology.org/gff3.shtml
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 my $gff_str = join( "\t",
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 $gff->{seqid}, $gff->{source}, $gff->{type}, $gff->{start},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 $gff->{end}, $gff->{score}, $gff->{strand}, $gff->{phase},
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 if ($extra_attrs) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 # combine the extra attributes with any existing ones (duplicate keys will get squashed,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 # so attributes specified in the extra_attrs hash will override existing ones)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 $gff->{attributes} = {} unless defined $gff->{attributes};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 @{ $gff->{attributes} }{ keys %$extra_attrs } = values %$extra_attrs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 if ( $gff->{attributes} ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 my @attrs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 for my $key (keys %{ $gff->{attributes} }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 my $val = $gff->{attributes}->{$key};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 if (ref $val eq 'ARRAY') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 push @attrs, map { $key . '='. $_ } @$val;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 push @attrs, $key . '=' . $val;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 $gff_str .= "\t" . join( ';', @attrs );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 return $gff_str;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 sub _gff_hash {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 my %args = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 my $rebase = $args{rebase}; # use absolute or slice-relative coordinates
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 my $gff_seqid = $args{gff_seqid} || $self->slice->seq_region_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 my $gff_source = $args{gff_source} || $self->_gff_source;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 my $seqid = $rebase ? $gff_seqid.'_'.$self->slice->start.'-'.$self->slice->end : $gff_seqid;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 my $start = $rebase ? $self->start : $self->seq_region_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 my $end = $rebase ? $self->end : $self->seq_region_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 # GFF3 does not allow start > end, and mandates that for zero-length features (e.g. insertions)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 # start = end and the implied insertion site is to the right of the specified base, so we use the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 # smaller of the two values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 if ($start > $end) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 $start = $end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 my $gff = {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 seqid => $gff_seqid,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 source => $gff_source,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 type => $self->_gff_type,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 start => $start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 end => $end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 strand => (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 $self->strand == 1 ? '+' : ( $self->strand == -1 ? '-' : '.' )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 return $gff;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 sub _gff_source {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 if ($self->analysis) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 return
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 $self->analysis->gff_source
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 || $self->analysis->logic_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 return ref($self);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 sub _gff_type {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 return
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 ( $self->analysis && $self->analysis->gff_feature )
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 || 'misc_feature';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 package Bio::EnsEMBL::Variation::VariationFeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 use Bio::EnsEMBL::Utils::Sequence qw(expand);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 my $REFERENCE_ALLELE_IDENTIFIER = '@';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 sub to_gvf {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 return $self->to_gff(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 sub _gff_hash {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 my $gff = $self->SUPER::_gff_hash(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 my %args = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 my $include_consequences = $args{include_consequences};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 my $include_coding_details = $args{include_coding_details};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 my $include_global_maf = $args{include_global_maf};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 $gff->{source} = $self->source;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 $gff->{type} = $self->class_SO_term;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 my $source = $self->source;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 $source .= '_'.$self->source_version if defined $self->source_version;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 $gff->{attributes}->{Dbxref} = "$source:".$self->variation_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 $gff->{attributes}->{ID} = $self->dbID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 # the Variant_seq attribute requires a comma separated list of alleles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 my @alleles = split '/', $self->allele_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 my $ref_seq = shift @alleles unless @alleles == 1; # shift off the reference allele
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 $gff->{attributes}->{Variant_seq} = join ',', @alleles;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 my $index = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 # expand tandem repeat alleles, because TranscriptVariationAlleles use the expanded sequence
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 map { expand(\$_) } @alleles;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 # if you expand e.g. (T)0 you get an empty string, which we treat as a deletion, so default to '-'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 my %allele_index = map { ($_ || '-') => $index++ } @alleles;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 if ($include_global_maf) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 my $var = $self->variation;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 if (defined $var->minor_allele_frequency) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 my $allele_idx;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 if ($var->minor_allele eq $ref_seq) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 $allele_idx = $REFERENCE_ALLELE_IDENTIFIER;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 $allele_idx = $allele_index{$var->minor_allele};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 if (defined $allele_idx) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 $gff->{attributes}->{global_minor_allele_frequency} =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 join (' ',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 $allele_idx,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 $var->minor_allele_frequency,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 $var->minor_allele_count
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 # the reference sequence should be set to '~' if the sequence is longer than 50 nucleotides
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 $ref_seq = '~' if (not $ref_seq) || (CORE::length($ref_seq) > 50);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 $gff->{attributes}->{Reference_seq} = $ref_seq;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 # Hack for HGMD mutations
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 if ($self->allele_string eq 'HGMD_MUTATION') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 $gff->{attributes}->{Reference_seq} = '~';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 $gff->{attributes}->{Variant_seq} = '~';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 $allele_index{$self->allele_string} = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 if ($include_consequences || $include_coding_details) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 for my $tv (@{ $self->get_all_TranscriptVariations }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 unless ($tv->get_all_alternate_TranscriptVariationAlleles) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 warn $self->variation_name." has no alternate alleles?";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 if ($include_coding_details) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 my $ref_tva = $tv->get_reference_TranscriptVariationAllele;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 if (my $pep = $ref_tva->peptide) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 $gff->{attributes}->{reference_peptide} = $pep;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 for my $tva (@{ $tv->get_all_alternate_TranscriptVariationAlleles }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 my $allele_idx = $allele_index{$tva->variation_feature_seq};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 if (defined $allele_idx) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 if ($include_consequences) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 for my $oc (@{ $tva->get_all_OverlapConsequences }) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 push @{ $gff->{attributes}->{Variant_effect} ||= [] },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 join(' ',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 $oc->SO_term,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 $allele_idx,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 $oc->feature_SO_term,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 $tv->transcript_stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 if ($include_coding_details) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 if ($tva->pep_allele_string) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 push @{ $gff->{attributes}->{variant_peptide} ||= [] },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 join(' ',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 $allele_idx,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 $tva->peptide,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 $tv->transcript_stable_id,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 for my $tool (qw(sift polyphen)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 my $pred_meth = $tool.'_prediction';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 my $score_meth = $tool.'_score';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 if (my $pred = $tva->$pred_meth) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 $pred =~ s/\s/_/g;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 push @{ $gff->{attributes}->{polyphen_prediction} ||= [] },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 join(' ',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 $allele_idx,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 $pred,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 $tva->$score_meth,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 $tv->transcript_stable_id
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 warn "No allele_index entry for allele: ".$tva->variation_feature_seq.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 " of ".$self->variation_name."? Is reference " . $tva->is_reference . " ref seq " . $ref_seq . "\n";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 return $gff;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 package Bio::EnsEMBL::Variation::StructuralVariationFeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 sub _gff_hash {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 my $gff = $self->SUPER::_gff_hash(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403 $gff->{attributes}->{ID} = $self->variation_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 $gff->{source} = $self->source;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 my $sv = $self->structural_variation;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 $gff->{attributes}->{Dbxref} = $self->source . ':' . $self->variation_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 $gff->{attributes}->{study_accession} = $sv->study->name if $sv->study->name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 $gff->{type} = $self->class_SO_term;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 #$gff->{attributes}->{Reference_seq} = $self->end > $self->start+50 ? '~' : $self->get_reference_sequence;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 if ( (defined $self->inner_start) && (defined $self->outer_start) && ($self->inner_start != $self->outer_start) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 $gff->{attributes}->{Start_range} = join ',', $self->outer_start, $self->inner_start;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 if ( (defined $self->inner_end) && (defined $self->outer_end) && ($self->inner_end != $self->outer_end) ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 $gff->{attributes}->{End_range} = join ',', $self->inner_end, $self->outer_end;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 if (my $sv = $self->structural_variation) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426 if (ref $sv eq 'Bio::EnsEMBL::Variation::SupportingStructuralVariation') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 if (my $parents = $sv->get_all_StructuralVariations) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 $gff->{attributes}->{Parent} = join ',', map { $_->variation_name } @$parents;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 return $gff;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 sub to_gvf {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 return $self->to_gff(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 package Bio::EnsEMBL::Variation::Individual;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 sub _gff_hash {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 my $gff;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 $gff->{Gender} = $self->gender;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 $gff->{Display_name} = $self->name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 $gff->{ensembl_description} = $self->description;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 $gff->{Type} = $self->type_description;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 $gff->{Population} = join ',', map { $_->name } @{ $self->get_all_Populations };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 return $gff;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 sub to_gvf {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 my $attrs = $self->_gff_hash(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 # get rid of any empty attributes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 map { delete $attrs->{$_} unless $attrs->{$_} } keys %$attrs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 return join ';', map { $_.'='.$attrs->{$_} } keys %$attrs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 package Bio::EnsEMBL::Variation::Population;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 sub _gff_hash {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 my $gff;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 $gff->{Attribute} = 'Variant_freq';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 $gff->{population} = $self->name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 $gff->{population_size} = $self->size;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 $gff->{Comment} = $self->description;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 return $gff;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 sub to_gvf {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 my $attrs = $self->_gff_hash(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 # get rid of any empty attributes
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 map { delete $attrs->{$_} unless $attrs->{$_} } keys %$attrs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 return join ';', map { $_.'='.$attrs->{$_} } keys %$attrs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511