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

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 Bio::EnsEMBL::Utils::Argument - Utility functions for argument handling
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 use Bio::EnsEMBL::Utils::Argument qw(rearrange)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 package Feature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 my $class = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 my ( $start, $end, $strand ) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 rearrange( [ 'START', 'END', 'STRAND' ], @_ );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 return
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 bless( { 'start' => $start, 'end' => $end, 'strand' => $strand },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 $class );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 This is derived from the Bio::Root module in BioPerl. The _rearrange
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 object method taken from BioPerl has been renamed rearrange and is now
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 a static class method. This method was originally written by Lincoln
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 Stein, and has since been refactored several times by various people (as
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 described below).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 It is recommended that this package be used instead of inheriting
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 unnecessarily from the Bio::EnsEMBL::Root or Bio::Root object.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 =head1 METHODS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 package Bio::EnsEMBL::Utils::Argument;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 use Exporter;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 use vars qw(@ISA @EXPORT);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 @ISA = qw(Exporter);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 @EXPORT = qw(rearrange);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 =head2 rearrange
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 Usage : rearrange( array_ref, list_of_arguments)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 Purpose : Rearranges named parameters to requested order.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 Example : use Bio::EnsEMBL::Utils::Argument qw(rearrange);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 : rearrange([qw(SEQUENCE ID DESC)],@param);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 : Where @param = (-sequence => $s,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 : -id => $i,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 : -desc => $d);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 Returns : @params - an array of parameters in the requested order.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 : The above example would return ($s, $i, $d)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 Argument : $order : a reference to an array which describes the desired
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 : order of the named parameters.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 : @param : an array of parameters, either as a list (in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84 : which case the function simply returns the list),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 : or as an associative array with hyphenated tags
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 : (in which case the function sorts the values
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 : according to @{$order} and returns that new array.)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 : The tags can be upper, lower, or mixed case
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 : but they must start with a hyphen (at least the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 : first one should be hyphenated.)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 Source : This function was taken from CGI.pm, written by Dr. Lincoln
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 : Stein, and adapted for use in Bio::Seq by Richard Resnick and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 : then adapted for use in Bio::Root::Object.pm by Steve A. Chervitz.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 : This has since been adapted as an exported static method in this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 class Bio::EnsEMBL::Utils::Argument
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 Comments : (SAC)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 : This method may not be appropriate for method calls that are
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 : within in an inner loop if efficiency is a concern.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 : Parameters can be specified using any of these formats:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 : @param = (-name=>'me', -color=>'blue');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 : @param = (-NAME=>'me', -COLOR=>'blue');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 : @param = (-Name=>'me', -Color=>'blue');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 : A leading hyphenated argument is used by this function to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 : indicate that named parameters are being used.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 : Therefore, a ('me', 'blue') list will be returned as-is.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 : Note that Perl will confuse unquoted, hyphenated tags as
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 : function calls if there is a function of the same name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 : in the current namespace:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 : -name => 'foo' is interpreted as -&name => 'foo'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 : For ultimate safety, put single quotes around the tag:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 : ('-name'=>'me', '-color' =>'blue');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 : This can be a bit cumbersome and I find not as readable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 : as using all uppercase, which is also fairly safe:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 : (-NAME=>'me', -COLOR =>'blue');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 : Personal note (SAC): I have found all uppercase tags to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 : be more managable: it involves less single-quoting,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 : the code is more readable, and there are no method naming
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 : conlicts.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 : Regardless of the style, it greatly helps to line
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 : the parameters up vertically for long/complex lists.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 sub rearrange {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 my $order = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 if ( $order eq "Bio::EnsEMBL::Utils::Argument" ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 # skip object if one provided
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 $order = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 # If we've got parameters, we need to check to see whether
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 # they are named or simply listed. If they are listed, we
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 # can just return them.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 unless ( @_ && $_[0] && substr( $_[0], 0, 1 ) eq '-' ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 return @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 # Push undef onto the end if % 2 != 0 to stop warnings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 push @_,undef unless $#_ %2;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 my %param;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 while( @_ ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 #deletes all dashes & uppercases at the same time
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 (my $key = shift) =~ tr/a-z\055/A-Z/d;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 $param{$key} = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 # What we intend to do is loop through the @{$order} variable,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 # and for each value, we use that as a key into our associative
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 # array, pushing the value at that key onto our return array.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 return map { $param{uc($_)} } @$order;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161