diff --git a/misc-scripts/xref_mapping/XrefMapper/Methods/LocalExonerateGappedBest1.pm b/misc-scripts/xref_mapping/XrefMapper/Methods/LocalExonerateGappedBest1.pm new file mode 100644 index 0000000000000000000000000000000000000000..6fbbea5b39868a5385112113f37716e33aa04ec7 --- /dev/null +++ b/misc-scripts/xref_mapping/XrefMapper/Methods/LocalExonerateGappedBest1.pm @@ -0,0 +1,83 @@ +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;