comparison variant_effect_predictor/Bio/Factory/EMBOSS.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1f6dce3d34e0
1 # $Id: EMBOSS.pm,v 1.10 2002/10/22 07:38:32 lapp Exp $
2 #
3 # BioPerl module for Bio::Factory::EMBOSS
4 #
5 #
6 # Cared for by Heikki Lehvaslaiho <heikki@ebi.ac.uk>
7 #
8 # Copyright Heikki Lehvaslaiho
9 #
10 # You may distribute this module under the same terms as perl itself
11
12 # POD documentation - main docs before the code
13
14 =head1 NAME
15
16 Bio::Factory::EMBOSS - EMBOSS appliaction factory class
17
18 =head1 SYNOPSIS
19
20 # get an EMBOSS factory
21 use Bio::Factory::EMBOSS;
22 $f = Bio::Factory::EMBOSS -> new();
23 # get an EMBOSS application object from the factory
24 $water = $f->program('water');
25
26 # here is an example of running the application
27 # water can compare 1 seq against 1->many sequences
28 # in a database using Smith-Waterman
29 my $seq_to_test; # this would have a seq here
30 my @seqs_to_check; # this would be a list of seqs to compare
31 # (could be just 1)
32 my $wateroutfile = 'out.water';
33 $water->run({ '-sequencea' => $seq_to_test,
34 '-seqall' => \@seqs_to_check,
35 '-gapopen' => '10.0',
36 '-gapextend' => '0.5',
37 '-outfile' => $wateroutfile});
38 # now you might want to get the alignment
39 use Bio::AlignIO;
40 my $alnin = new Bio::AlignIO(-format => 'emboss',
41 -file => $wateroutfile);
42
43 while( my $aln = $alnin->next_aln ) {
44 # process the alignment -- these will be Bio::SimpleAlign objects
45 }
46
47 =head1 DESCRIPTION
48
49 The EMBOSS factory class encapsulates access to EMBOSS programs. A
50 factory object allows creation of only known applications.
51
52 If you want to check command line options before sending them to the
53 program set $factory-E<gt>verbose to positive integer. The value is
54 passed on to programs objects and the ADC description of the available
55 command line options is parsed and compared to input.
56
57 See also L<Bio::Tools::Run::EMBOSSApplication> and
58 L<Bio::Tools::Run::EMBOSSacd>.
59
60 =head1 FEEDBACK
61
62 =head2 Mailing Lists
63
64 User feedback is an integral part of the evolution of this and other
65 Bioperl modules. Send your comments and suggestions preferably to the
66 Bioperl mailing lists Your participation is much appreciated.
67
68 bioperl-l@bioperl.org - General discussion
69 http://bio.perl.org/MailList.html - About the mailing lists
70
71 =head2 Reporting Bugs
72
73 report bugs to the Bioperl bug tracking system to help us keep track
74 the bugs and their resolution. Bug reports can be submitted via
75 email or the web:
76
77 bioperl-bugs@bio.perl.org
78 http://bugzilla.bioperl.org/
79
80 =head1 AUTHOR - Heikki Lehvaslaiho
81
82 Email: heikki@ebi.ac.uk
83 Address:
84
85 EMBL Outstation, European Bioinformatics Institute
86 Wellcome Trust Genome Campus, Hinxton
87 Cambs. CB10 1SD, United Kingdom
88
89 =head1 APPENDIX
90
91 The rest of the documentation details each of the object
92 methods. Internal methods are usually preceded with a _
93
94 =cut
95
96 # Let the code begin...
97
98 package Bio::Factory::EMBOSS;
99 use vars qw(@ISA $EMBOSSVERSION);
100 use strict;
101
102 use Bio::Root::Root;
103 use Bio::Tools::Run::EMBOSSApplication;
104 use Bio::Factory::ApplicationFactoryI;
105 @ISA = qw(Bio::Root::Root Bio::Factory::ApplicationFactoryI );
106
107 $EMBOSSVERSION = "2.0.0";
108
109 sub new {
110 my($class,@args) = @_;
111 my $self = $class->SUPER::new(@args);
112 # set up defaults
113
114 my($location) =
115 $self->_rearrange([qw(LOCATION )],
116 @args);
117
118 $self->{ '_programs' } = {};
119 $self->{ '_programgroup' } = {};
120 $self->{ '_groups' } = {};
121
122 $self->location($location) if $location;
123
124 $self->_program_list; # retrieve info about available programs
125
126 return $self;
127
128 }
129
130 =head2 location
131
132 Title : location
133 Usage : $embossfactory->location
134 Function: get/set the location of EMBOSS programs.
135 Valid values are 'local' and 'novella'.
136 Returns : string, defaults to 'local'
137 Args : string
138
139 =cut
140
141 sub location {
142 my ($self, $value) = @_;
143 my %location = ('local' => '1',
144 'novella' => '1'
145 );
146 if (defined $value) {
147 $value = lc $value;
148 if ($location{$value}) {
149 $self->{'_location'} = $value;
150 } else {
151 $self->warn("Value [$value] not a valid value for ".
152 "location(). Defaulting to [local]");
153 $self->{'_location'} = 'local';
154 }
155 }
156 $self->{'_location'} ||= 'local';
157 return $self->{'_location'};
158 }
159
160
161 =head2 program
162
163 Title : program
164 Usage : $embossfactory->program('program_name')
165 Function: Creates a representation of a single EMBOSS program
166 Returns : Bio::Tools::Run::EMBOSSApplication object
167 Args : string, program name
168
169 =cut
170
171 sub program {
172 my ($self, $value) = @_;
173
174 unless( $self->{'_programs'}->{$value} ) {
175 $self->warn("Application [$value] is not available!");
176 return undef;
177 }
178 my $attr = {};
179 $attr->{name} = $value;
180 $attr->{verbose} = $self->verbose;
181
182 my $appl = Bio::Tools::Run::EMBOSSApplication ->new($attr);
183 return $appl;
184 }
185
186 =head2 version
187
188 Title : $self->version
189 Usage : $embossfactory->version()
190 Function: gets the version of EMBOSS programs
191 Throws : if EMBOSS suite is not accessible
192 Returns : version value
193 Args : None
194
195 =cut
196
197 sub version {
198 my ($self) = @_;
199 my ($version);
200 eval {
201 $version = `embossversion -auto`;
202 };
203 $self->throw("EMBOSS suite of programs is not available \n\n$@")
204 if $@;
205 chop $version;
206
207 # compare versions
208 my ($thisv, $embossv);
209 $version =~ /(\d+)\.(\d+)\.(\d+)/;
210 $thisv = "$1.$2$3";
211 $EMBOSSVERSION =~ /(\d+)\.(\d+)\.(\d+)/;
212 $embossv = "$1.$2$3";
213 $self->throw("EMBOSS has to be at least version $EMBOSSVERSION\n")
214 if $thisv < $embossv;
215
216 return $version;
217 }
218
219
220 =head2 Programs
221
222 These methods allow the programmer to query the EMBOSS suite and find
223 out which program names can be used and what arguments can be used.
224
225 =head2 program_info
226
227 Title : program_info
228 Usage : $embossfactory->program_info('emma')
229 Function: Finds out if the program is available.
230 Returns : definition string of the program, undef if program name not known
231 Args : string, prgramname
232
233 =cut
234
235 sub program_info {
236 my ($self, $value) = @_;
237 return $self->{'_programs'}->{$value};
238 }
239
240
241 =head2 Internal methods
242
243 Do not call these methods directly
244
245 =head2 _program_list
246
247 Title : _program_list
248 Usage : $embossfactory->_program_list()
249 Function: Finds out what programs are available.
250 Writes the names into an internal hash.
251 Returns : true if successful
252 Args : None
253
254 =cut
255
256 sub _program_list {
257 my ($self) = @_;
258 if( $^O =~ /MSWIN/i ||
259 $^O =~ /Mac/i ) { return; }
260 {
261 local * SAVERR;
262 open SAVERR, ">&STDERR";
263 open STDERR, ">/dev/null";
264 open(WOSSOUT, "wossname -auto |") || return;
265 open STDERR, ">&SAVERR";
266
267 }
268 local $/ = "\n\n";
269 while(<WOSSOUT> ) {
270 my ($groupname) = (/^([A-Z][A-Z0-9 ]+)$/m);
271 #print $groupname, "\n" if $groupname;
272 $self->{'_groups'}->{$groupname} = [] if $groupname;
273 while ( /^([a-z]\w+) +(.+)$/mg ) {
274 #print "$1\t$2 \n" if $1;
275 $self->{'_programs'}->{$1} = $2 if $1;
276 $self->{'_programgroup'}->{$1} = $groupname if $1;
277 push @{$self->{'_groups'}->{$groupname}}, $1 if $1;
278 }
279 }
280 close(WOSSOUT);
281
282 }
283
284 1;