File Coverage

blib/lib/Bio/Tools/Run/Seg.pm
Criterion Covered Total %
statement 31 86 36.0
branch 1 20 5.0
condition n/a
subroutine 11 17 64.7
pod 5 5 100.0
total 48 128 37.5


line stmt bran cond sub pod time code
1             # Copyright Balamurugan Kumarasamy
2             # You may distribute this module under the same terms as perl itself
3             # POD documentation - main docs before the code
4              
5             =head1 NAME
6              
7             Bio::Tools::Run::Seg - Object for identifying low complexity
8             regions in a given protein seequence.
9              
10             =head1 SYNOPSIS
11              
12             # Build a Seg factory
13             # $paramfile is the full path to the seg binary file
14             my @params = ('PROGRAM',$paramfile);
15             my $factory = Bio::Tools::Run::Seg->new($param);
16              
17             # Pass the factory a Bio::Seq object
18             # @feats is an array of Bio::SeqFeature::Generic objects
19             my @feats = $factory->run($seq);
20              
21             =head1 DESCRIPTION
22              
23             Seg is a program which identifies low complexity regions in proteins.
24             It was developed by Wootton and Federhen at NCBI.
25              
26             =head1 FEEDBACK
27              
28             =head2 Mailing Lists
29              
30             User feedback is an integral part of the evolution of this and other
31             Bioperl modules. Send your comments and suggestions preferably to one
32             of the Bioperl mailing lists. Your participation is much appreciated.
33              
34             bioperl-l@bioperl.org - General discussion
35             http://bioperl.org/wiki/Mailing_lists - About the mailing lists
36              
37              
38             =head2 Support
39              
40             Please direct usage questions or support issues to the mailing list:
41              
42             I
43              
44             rather than to the module maintainer directly. Many experienced and
45             reponsive experts will be able look at the problem and quickly
46             address it. Please include a thorough description of the problem
47             with code and data examples if at all possible.
48              
49             =head2 Reporting Bugs
50              
51             Report bugs to the Bioperl bug tracking system to help us keep track
52             the bugs and their resolution. Bug reports can be submitted via the
53             web:
54              
55             http://redmine.open-bio.org/projects/bioperl/
56              
57             =head1 AUTHOR - Bala
58              
59             Email savikalpa@fugu-sg.org
60              
61             =head1 APPENDIX
62              
63             The rest of the documentation details each of the object
64             methods. Internal methods are usually preceded with a _
65              
66             =cut
67              
68             package Bio::Tools::Run::Seg;
69              
70 1         64 use vars qw($AUTOLOAD @ISA $PROGRAM $PROGRAMDIR
71 1     1   105861 $PROGRAMNAME @SEG_PARAMS %OK_FIELD);
  1         2  
72 1     1   5 use strict;
  1         2  
  1         17  
73 1     1   335 use Bio::SeqIO;
  1         37251  
  1         30  
74 1     1   7 use Bio::Root::Root;
  1         2  
  1         14  
75 1     1   4 use Bio::Root::IO;
  1         2  
  1         14  
76 1     1   270 use Bio::Tools::Seg;
  1         44029  
  1         28  
77 1     1   359 use Bio::Tools::Run::WrapperBase;
  1         3  
  1         83  
78              
79             @ISA = qw(Bio::Root::Root Bio::Tools::Run::WrapperBase);
80              
81             BEGIN {
82 1     1   6 @SEG_PARAMS=qw(PROGRAM VERBOSE);
83 1         4 foreach my $attr ( @SEG_PARAMS)
84 2         662 { $OK_FIELD{$attr}++; }
85             }
86              
87             =head2 program_name
88              
89             Title : program_name
90             Usage : $factory->program_name()
91             Function: holds the program name
92             Returns: string
93             Args : None
94              
95             =cut
96              
97             sub program_name {
98 6     6 1 26 return 'seg';
99             }
100              
101             =head2 program_dir
102              
103             Title : program_dir
104             Usage : $factory->program_dir(@params)
105             Function: returns the program directory, obtained from ENV variable.
106             Returns : string, or undef if $SEGDIR not in ENV
107             Args : None
108              
109             =cut
110              
111             sub program_dir {
112 3 50   3 1 14 return Bio::Root::IO->catfile($ENV{SEGDIR}) if $ENV{SEGDIR};
113             }
114              
115             sub AUTOLOAD {
116 0     0   0 my $self = shift;
117 0         0 my $attr = $AUTOLOAD;
118 0         0 $attr =~ s/.*:://;
119 0         0 $attr = uc $attr;
120 0 0       0 $self->throw("Unallowed parameter: $attr !") unless $OK_FIELD{$attr};
121 0 0       0 $self->{$attr} = shift if @_;
122 0         0 return $self->{$attr};
123             }
124              
125             =head2 new
126              
127             Title : new
128             Usage : $rm->new(@params)
129             Function: creates a new Seg factory
130             Returns: Bio::Tools::Run::Seg
131             Args :
132              
133             =cut
134              
135             sub new {
136 1     1 1 122 my ($class,@args) = @_;
137 1         16 my $self = $class->SUPER::new(@args);
138              
139 1         20 my ($attr, $value);
140 1         5 while (@args) {
141 0         0 $attr = shift @args;
142 0         0 $value = shift @args;
143 0 0       0 next if( $attr =~ /^-/ );
144 0         0 $self->$attr($value);
145             }
146 1         4 return $self;
147             }
148              
149             =head2 predict_protein_features
150              
151             Title : predict_protein_features()
152             Usage : DEPRECATED Use $obj->run($seq) instead
153             Function: Runs Seg and creates an array of featrues
154             Returns : An array of Bio::SeqFeature::Generic objects
155             Args : A Bio::PrimarySeqI
156              
157             =cut
158              
159             sub predict_protein_features{
160 0     0 1   return shift->run(@_);
161             }
162              
163             =head2 run
164              
165             Title : run
166             Usage : $obj->run($seq)
167             Function: Runs Seg and creates an array of featrues
168             Returns : An array of Bio::SeqFeature::Generic objects
169             Args : A Bio::PrimarySeqI
170              
171             =cut
172              
173             sub run{
174 0     0 1   my ($self,$seq) = @_;
175 0           my @feats;
176              
177 0 0         if (ref($seq) ) { # it is an object
178 0 0         if (ref($seq) =~ /GLOB/) {
179 0           $self->throw("cannot use filehandle");
180             }
181              
182 0           my $infile1 = $self->_writeSeqFile($seq);
183              
184 0           $self->_input($infile1);
185              
186 0           @feats = $self->_run();
187 0           unlink $infile1;
188             }
189             else {
190             #The seq object is not a seq object but a file.
191             #Here the file does not need to be created.
192              
193 0           $self->_input($seq);
194              
195 0           @feats = $self->_run();
196              
197             }
198              
199 0           return @feats;
200              
201             }
202              
203             =head2 _input
204              
205             Title : _input
206             Usage : obj->_input($seqFile)
207             Function: Internal (not to be used directly)
208             Returns :
209             Args :
210              
211             =cut
212              
213             sub _input {
214 0     0     my ($self,$infile1) = @_;
215 0 0         if(defined $infile1){
216              
217 0           $self->{'input'}=$infile1;
218             }
219 0           return $self->{'input'};
220             }
221              
222             =head2 _run
223              
224             Title : _run
225             Usage : $obj->_run()
226             Function: Internal (not to be used directly)
227             Returns : An array of Bio::SeqFeature::Generic objects
228             Args : None
229              
230             =cut
231              
232             sub _run {
233 0     0     my ($self)= @_;
234              
235 0           my ($tfh1,$outfile) = $self->io->tempfile(-dir=>$self->tempdir());
236 0           my $str =$self->executable." ".$self->_input." -l > ".$outfile;
237 0           my $status = system($str);
238 0 0         $self->throw( "Seg call ($str) crashed: $? \n") unless $status==0;
239            
240 0           my $filehandle;
241 0 0         if (ref ($outfile) !~ /GLOB/) {
242 0 0         open (SEG, "<".$outfile) or $self->throw ("Couldn't open file ".$outfile.": $!\n");
243 0           $filehandle = \*SEG;
244             }
245             else {
246 0           $filehandle = $outfile;
247             }
248 0           my $seg_parser = Bio::Tools::Seg->new(-fh=>$filehandle);
249              
250 0           my @seg_feat;
251              
252 0           while(my $seg_feat = $seg_parser->next_result){
253              
254 0           push @seg_feat, $seg_feat;
255             }
256             # free resources
257 0           $self->cleanup();
258 0           unlink $outfile;
259 0           close($tfh1);
260 0           undef $tfh1;
261 0           return @seg_feat;
262              
263             }
264              
265             =head2 _writeSeqFile
266              
267             Title : _writeSeqFile
268             Usage : obj->_writeSeqFile($seq)
269             Function: Internal (not to be used directly)
270             Returns : string - Fasta filename to which $seq was written
271             Args : Bio::Seq object
272              
273             =cut
274              
275             sub _writeSeqFile{
276 0     0     my ($self,$seq) = @_;
277 0           my ($tfh,$inputfile) = $self->io->tempfile(-dir=>$self->tempdir());
278 0           my $in = Bio::SeqIO->new(-fh => $tfh , '-format' => 'Fasta');
279 0           $in->write_seq($seq);
280 0           $in->close();
281 0           close($tfh);
282 0           undef $tfh;
283 0           return $inputfile;
284              
285             }
286             1;