Bio::Tools::Run
Meme
Toolbar
Summary
Bio::Tools::Run::Meme - Wrapper for Meme Program
Package variables
No package variables defined.
Included modules
Bio::AlignIO
Bio::Map::Position
Bio::Map::Prediction
Bio::SeqIO
Inherit
Bio::Tools::Run::WrapperBase
Synopsis
use Bio::Tools::Run::Meme;
my $factory = Bio::Tools::Run::Meme->new(-dna => 1, -mod => 'zoops');
# return a Bio::AlignIO given Bio::PrimarySeqI objects
my $alignio = $factory->run($seq1, $seq2, $seq3...);
# add a Bio::Map::Prediction to the appropriate maps given Bio::Map::GeneMap
# objects (predict on the full map sequences supplied) or Bio::Map::Gene
# objects (predict on the full map sequences of the maps the supplied Genes
# are on) or Bio::Map::PositionWithSequence objects
my $prediction = $factory->run($biomap1, $biomap2, $biomap3...);
Description
This is a wrapper for running meme, a transcription factor binding site
prediction program. It can be found here:
http://meme.sdsc.edu/meme4/meme-download.htmlYou can try supplying normal meme command-line arguments to new(), eg.
new(-mod => 'oops') or calling arg-named methods (excluding the initial
hyphen(s), eg. $factory->mod('oops') to set the -mod option to 'oops').
You will need to enable this MEME wrapper to find the meme program. During
standard installation of meme you will have set up an environment variable
called MEME_BIN which is used for this purpose.
Methods
Methods description
Title : new Usage : $rm->new($seq) Function: creates a new wrapper Returns: Bio::Tools::Run::Meme Args : Most options understood by meme can be supplied as key => value pairs, with a boolean value for switches. -quiet can also be set to silence meme completely.
These options can NOT be used with this wrapper (they are handled
internally or don't make sense in this context):
-h -text -nostatus |
Title : program_name Usage : $factory>program_name() Function: holds the program name Returns: string Args : None |
Title : program_dir Usage : $factory->program_dir(@params) Function: returns the program directory, obtained from ENV variable. Returns: string Args : |
Title : version Usage : n/a Function: Determine the version number of the program, which is non-discoverable for Meme Returns : undef Args : none |
Title : run Usage : $rm->run($seq1, $seq2, $seq3...); Function: Run Meme on the sequences/Bio::Map::* set as the argument Returns : Bio::AlignIO if sequence objects supplied, OR Bio::Map::Prediction if Bio::Map::* objects supplied undef if no executable found Args : list of Bio::PrimarySeqI compliant objects, OR list of Bio::Map::GeneMap objects, OR list of Bio::Map::Gene objects, OR list of Bio::Map::PositionWithSequence objects |
Title : _run Usage : $rm->_run ($filename,$param_string) Function: internal function that runs meme Returns : as per run(), undef if no executable found Args : the filename to the input sequence file |
Title : _setparams Usage : Internal function, not to be called directly Function: Create parameter inputs for meme program Returns : parameter string to be passed to meme Args : none |
Title : _setinput Usage : Internal function, not to be called directly Function: writes input sequence to file and return the file name Returns : string (file name) Args : as per run() |
Methods code
sub new
{ my ($class, @args) = @_;
my $self = $class->SUPER::new(@args);
$self->_set_from_args(\@args, -methods => [@PARAMS, @SWITCHES, 'quiet'],
-create => 1);
return $self;} |
sub program_name
{ return $PROGRAM_NAME; } |
sub program_dir
{ return $PROGRAM_DIR; } |
sub run
{ my ($self, @things) = @_;
my $infile = $self->_setinput(@things);
return $self->_run($infile);} |
sub _run
{ my ($self, $infile) = @_;
my $exe = $self->executable || return;
my $outfile = $infile.".out";
my $command = $exe.$self->_setparams($infile, $outfile);
$self->debug("meme command = $command\n");
open(my $pipe, "$command |") || $self->throw("meme call ($command) failed to start: $? | $!");
my $error = '';
while (<$pipe>) {
print unless $self->quiet;
$error .= $_;
}
close($pipe) || ($error ? $self->throw("meme call ($command) failed: $error") : $self->throw("meme call ($command) crashed: $?"));
my $aio = Bio::AlignIO->new(-format => 'meme', -file => $outfile);
unless ($self->{map_mode}) {
return $aio;
}
else {
my $pred = Bio::Map::Prediction->new(-source => "meme");
while (my $aln = $aio->next_aln) {
foreach my $seq ($aln->each_seq) {
my $id = $seq->id;
unless ($id) {
$self->warn("Got a sequence in the alignment with no id, but I need one to determine the map");
next;
}
my ($uid) = $id =~ /^([^\[]+)/;
my $map = Bio::Map::GeneMap->get(-uid => $uid);
my ($start, $end) = ($seq->start, $seq->end);
if ($seq->strand == -1) {
my $length;
my ($pos_s, $pos_e) = $id =~ /\[(\d+)\.\.(\d+)\]$/;
if (defined($pos_s) && defined($pos_e)) {
$length = $pos_e - $pos_s + 1;
}
else {
$length = length($map->seq);
}
my $motif_length = $end - $start + 1;
$end = $length - $start + 1;
$start = $end - $motif_length + 1;
}
Bio::Map::Position->new(-element => $pred,
-start => $start,
-end => $end,
-map => $map);
}
}
delete $self->{map_mode};
return $pred;
}} |
sub _setparams
{ my ($self, $infile, $outfile) = @_;
my $param_string = ' '.$infile;
$param_string .= ' -text -nostatus';
$param_string .= $self->SUPER::_setparams(-params =>\@ PARAMS,
-switches =>\@ SWITCHES,
-dash => 1);
$param_string .= " > $outfile";
$param_string .= ' 2> /dev/null' if $self->quiet || $self->verbose < 0;
return $param_string;} |
sub _setinput
{ my ($self, @inputs) = @_;
$self->throw("At least two sequence or map objects must be supplied") unless @inputs >= 2;
ref($inputs[0]) || $self->throw("Inputs must be object references");
my ($fh, $outfile) = $self->io->tempfile(-dir => $self->tempdir);
my $out = Bio::SeqIO->new(-fh => $fh, '-format' => 'fasta');
my %done;
foreach my $input (@inputs) {
if ($input->isa('Bio::Map::MappableI')) {
push(@inputs, $input->known_maps);
next;
}
$input->can('seq') || $self->throw("Supplied an input [$input] with no seq() method!");
if ($input->isa('Bio::Map::EntityI')) {
$self->{map_mode} = 1;
if ($input->isa('Bio::Map::MapI')) {
my $id = $input->unique_id;
next if $done{$id};
$input->id($id);
$done{$id} = 1;
}
else {
my $id = $input->id;
unless ($id) {
$input->id($input->map->unique_id.'['.$input->toString.']');
}
}
}
$out->write_seq($input);
}
close($fh);
return $outfile;} |
General documentation
User feedback is an integral part of the evolution of this and other
Bioperl modules. Send your comments and suggestions preferably to one
of the Bioperl mailing lists. Your participation is much appreciated.
bioperl-l@bioperl.org - General discussion
http://bioperl.org/wiki/Mailing_lists - About the mailing lists
Please direct usage questions or support issues to the mailing list:
bioperl-l@bioperl.org
rather than to the module maintainer directly. Many experienced and
reponsive experts will be able look at the problem and quickly
address it. Please include a thorough description of the problem
with code and data examples if at all possible.
The rest of the documentation details each of the object
methods. Internal methods are usually preceded with a "_".
| Bio::Tools::Run::Wrapper methods | Top |
Title : no_param_checks
Usage : $obj->no_param_checks($newval)
Function: Boolean flag as to whether or not we should
trust the sanity checks for parameter values
Returns : value of no_param_checks
Args : newvalue (optional)
Title : save_tempfiles
Usage : $obj->save_tempfiles($newval)
Function:
Returns : value of save_tempfiles
Args : newvalue (optional)
Title : outfile_name
Usage : my $outfile = $codeml->outfile_name();
Function: Get/Set the name of the output file for this run
(if you wanted to do something special)
Returns : string
Args : [optional] string to set value to
Title : tempdir
Usage : my $tmpdir = $self->tempdir();
Function: Retrieve a temporary directory name (which is created)
Returns : string which is the name of the temporary directory
Args : none
Title : cleanup
Usage : $codeml->cleanup();
Function: Will cleanup the tempdir directory
Returns : none
Args : none