annotate dir_plugins/DAS.pm @ 10:f594c6bed58f draft default tip

Uploaded
author dvanzessen
date Tue, 21 Apr 2020 11:40:19 +0000
parents e545d0a25ffe
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
1 =head1 LICENSE
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
2
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
3 Copyright (c) 1999-2015 The European Bioinformatics Institute and
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
5
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
6 This software is distributed under a modified Apache license.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
7 For license details, please see
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
8
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
10
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
11 =head1 CONTACT
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
12
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
13 Ensembl <http://www.ensembl.org/info/about/contact/index.html>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
14
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
15 =cut
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
16
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
17 =head1 NAME
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
18
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
19 DAS
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
20
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
21 =head1 SYNOPSIS
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
22
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
23 mv DAS.pm ~/.vep/Plugins
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
24 ./vep -i variations.vcf --plugin DAS,<DAS_server>,<DAS_source>,<proxy>
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
25
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
26 =head1 DESCRIPTION
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
27
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
28 A simple VEP plugin that checks for DAS features overlapping variants. Currently assumes that
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
29 the assemblies match, and doesn't do any smart fetching of chunks of features (i.e. the plugin
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
30 will query the DAS server once for every variant in the input file).
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
31
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
32 You can run multiple instances of this plugin at the same time so you can query multiple DAS
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
33 servers and sources. If you are querying multiple sources from the same server it is
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
34 convenient to store the server name in an environment variable to avoid specifying it
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
35 multiple times, e.g.:
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
36
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
37 export DAS="http://somewhere/das"
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
38 ./vep -i variations.vcf --plugin DAS,$DAS,source1 --plugin DAS,$DAS,source2
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
39
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
40 Requires the Bio::Das::Lite module from CPAN.
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
41
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
42 =cut
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
43
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
44 package DAS;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
45
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
46 use strict;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
47 use warnings;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
48
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
49 use Bio::Das::Lite;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
50 use Data::Dumper;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
51
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
52 use Bio::EnsEMBL::Variation::Utils::BaseVepPlugin;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
53
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
54 use base qw(Bio::EnsEMBL::Variation::Utils::BaseVepPlugin);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
55
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
56 sub get_header_info {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
57 my $self = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
58 return {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
59 $self->header => $self->{source}." features from DAS server ".$self->{server},
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
60 };
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
61 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
62
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
63 sub feature_types {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
64 return ['Transcript','RegulatoryFeature','MotifFeature','Intergenic'];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
65 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
66
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
67 sub new {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
68 my $class = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
69
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
70 my $self = $class->SUPER::new(@_);
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
71
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
72 my ($server, $source, $proxy) = @{ $self->params };
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
73
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
74 # strip off any trailing slash from the server URL
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
75 $server =~ s/\/$//;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
76
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
77 $self->{das} = Bio::Das::Lite->new({
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
78 timeout => 10000,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
79 dsn => "$server/$source",
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
80 http_proxy => $proxy,
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
81 }) || die "Failed to connect to DAS source: $server/$source";
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
82
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
83 $self->{source} = $source;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
84 $self->{server} = $server;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
85
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
86 return $self;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
87 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
88
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
89 sub header {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
90 my $self = shift;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
91 return 'DAS_'.$self->{source};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
92 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
93
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
94 sub run {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
95 my ($self, $vfoa) = @_;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
96
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
97 my $vf = $vfoa->variation_feature;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
98
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
99 my $segment = $vf->seq_region_name .':'.$vf->seq_region_start.','.$vf->seq_region_end;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
100
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
101 # cache the results on the variation feature, making sure the cache key is unique given
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
102 # that there may be multiple DAS plugins running
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
103
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
104 my $cache_key = '_vep_das_cache_'.$self->{server}.$self->{source};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
105
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
106 unless (exists $vf->{$cache_key}->{$segment}) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
107
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
108 $vf->{$cache_key}->{$segment} = [];
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
109
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
110 if (my $response = $self->{das}->features($segment)) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
111 for my $url (keys %$response) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
112 if (ref $response->{$url} eq 'ARRAY') {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
113 for my $feat (@{ $response->{$url} }) {
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
114 push @{ $vf->{$cache_key}->{$segment} }, $feat->{feature_label}.'('.$feat->{type}.')';
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
115 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
116 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
117 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
118 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
119 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
120
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
121 my $res = join ',', @{ $vf->{$cache_key}->{$segment} };
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
122
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
123 return $res ? {$self->header => $res} : {};
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
124 }
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
125
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
126 1;
e545d0a25ffe Uploaded
dvanzessen
parents:
diff changeset
127