annotate variant_effect_predictor/Bio/EnsEMBL/Utils/Argument.pm @ 1:d6778b5d8382 draft default tip

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