Raw content of XrefMapper::Methods::LocalExonerateGappedBest1
package XrefMapper::Methods::LocalExonerateGappedBest1;
use strict;
use File::Basename;
use XrefMapper::Methods::ExonerateBasic;
use vars '@ISA';
@ISA = qw{XrefMapper::Methods::ExonerateBasic};
our $exonerate_path = 'exonerate'; # Make sure exonerate binary is in
# $PATH
sub options {
return ('--model', 'affine:local', '--subopt', 'no', '--bestn', '1');
}
sub query_identity_threshold {
#return 90;
return 50;
}
sub target_identity_threshold {
#return 90;
return 50;
}
sub submit_exonerate{
my ($self, $query, $target, $root_dir, @options) = @_;
# Exonerate can run individual chunks of a large job.
# Determine the number of chunks that will be used, and add to total
my $num_jobs
= XrefMapper::Methods::ExonerateBasic::calculate_num_jobs($query);
$self->jobcount($self->jobcount()+$num_jobs);
# Determine the output filename
my $queryfile = basename($query);
my $targetfile = basename($target);
my $query_alphabet = $queryfile =~ /peptide/ ? 'peptide' : 'dna';
my $outfile = join( '_',
$self->get_class_name() ,
$query_alphabet,
q[%s.map] # Substitute the chunk ID
);
# Build a template representing the exonerate command
my $options_str = join(" ", @options);
my $exonerate_command = join
( " \\\n ",
$exonerate_path,
qq[--target $target],
qq[--query $query],
qq[--querychunktotal $num_jobs],
q [--querychunkid %s], # Substitute the chunk ID
q [--showvulgar false],
q [--showalignment FALSE],
q [--ryo "%s"],
$options_str );
my $ryo_format = 'xref:%qi:%ti:%ei:%ql:%tl:%qab:%qae:%tab:%tae:%C:%s\n';
my $shell_command = qq[%s \\\n| grep '^xref' \\\n> %s/%s];
# Run exonerate for each job chunk
foreach( my $i=1; $i<=$num_jobs; $i++ ){
my $command = sprintf( $shell_command,
sprintf($exonerate_command, $i, $ryo_format),
$root_dir,
sprintf($outfile, $i) );
my $status = system( $command );
unless( $status == 0 ){ warn( "Bad exit status ($?) from:\n $command" )}
}
}
sub submit_depend_job{
die;
}
1;