X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=forester%2Fjava%2Fsrc%2Forg%2Fforester%2Fmsa%2FMafft.java;h=ec72c0d01e5a068a7951ab6dd65f46f877976483;hb=9956a18ae590422c0500a1770ff4cdaf8d787f82;hp=b78cb32a75194024a22b6e2f82f49c27cdad8bd3;hpb=eee996a6476a1e3d84c07f8f690dcde3ff4b2ef5;p=jalview.git diff --git a/forester/java/src/org/forester/msa/Mafft.java b/forester/java/src/org/forester/msa/Mafft.java index b78cb32..ec72c0d 100644 --- a/forester/java/src/org/forester/msa/Mafft.java +++ b/forester/java/src/org/forester/msa/Mafft.java @@ -25,53 +25,33 @@ package org.forester.msa; +import java.io.BufferedWriter; import java.io.File; +import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.forester.io.parsers.FastaParser; -import org.forester.util.ForesterUtil; +import org.forester.io.writers.SequenceWriter; +import org.forester.io.writers.SequenceWriter.SEQ_FORMAT; +import org.forester.sequence.Sequence; import org.forester.util.SystemCommandExecutor; -public final class Mafft implements MsaInferrer { +public final class Mafft extends MsaInferrer { private final static String DEFAULT_PARAMETERS = "--maxiterate 1000 --localpair"; private String _error; private int _exit_code; private final String _path_to_prg; - public static MsaInferrer createInstance( final String path_to_prg ) { + public static MsaInferrer createInstance( final String path_to_prg ) throws IOException { return new Mafft( path_to_prg ); } - private static String getPathToCmd() { - //TODO this needs to come from env variable, etc. - String path = ""; - final String os = ForesterUtil.OS_NAME.toLowerCase(); - if ( ( os.indexOf( "mac" ) >= 0 ) && ( os.indexOf( "os" ) > 0 ) ) { - path = "/usr/local/bin/mafft"; - } - else if ( os.indexOf( "win" ) >= 0 ) { - path = "C:\\Program Files\\mafft-win\\mafft.bat"; - } - else { - path = "/home/czmasek/SOFTWARE/MSA/MAFFT/mafft-6.832-without-extensions/scripts/mafft"; - } - return path; - } - - public static boolean isInstalled() { - return SystemCommandExecutor.isExecuteableFile( new File( getPathToCmd() ) ); - } - - public static MsaInferrer createInstance() { - return createInstance( getPathToCmd() ); - } - - private Mafft( final String path_to_prg ) { - if ( !SystemCommandExecutor.isExecuteableFile( new File( path_to_prg ) ) ) { - throw new IllegalArgumentException( "cannot execute MAFFT via [" + path_to_prg + "]" ); + private Mafft( final String path_to_prg ) throws IOException { + if ( !isInstalled( path_to_prg ) ) { + throw new IOException( "cannot execute MAFFT with \"" + path_to_prg + "\"" ); } _path_to_prg = new String( path_to_prg ); init(); @@ -82,11 +62,6 @@ public final class Mafft implements MsaInferrer { } @Override - public Object clone() { - throw new NoSuchMethodError(); - } - - @Override public String getErrorDescription() { return _error; } @@ -97,6 +72,18 @@ public final class Mafft implements MsaInferrer { } @Override + public Msa infer( final List seqs, final List opts ) throws IOException, InterruptedException { + final File file = File.createTempFile( "__mafft_input_", ".fasta" ); + file.deleteOnExit(); + final BufferedWriter writer = new BufferedWriter( new FileWriter( file ) ); + SequenceWriter.writeSeqs( seqs, writer, SEQ_FORMAT.FASTA, 100 ); + writer.close(); + final Msa msa = infer( file, opts ); + file.delete(); + return msa; + } + + @Override public Msa infer( final File path_to_input_seqs, final List opts ) throws IOException, InterruptedException { init(); final List my_opts = new ArrayList(); @@ -105,17 +92,19 @@ public final class Mafft implements MsaInferrer { my_opts.add( opts.get( i ) ); } my_opts.add( path_to_input_seqs.getAbsolutePath() ); - final SystemCommandExecutor commandExecutor = new SystemCommandExecutor( my_opts ); - final int _exit_code = commandExecutor.executeCommand(); + final SystemCommandExecutor command_executor = new SystemCommandExecutor( my_opts ); + final int _exit_code = command_executor.executeCommand(); + final StringBuilder stderr = command_executor.getStandardErrorFromCommand(); + _error = stderr.toString(); if ( _exit_code != 0 ) { - throw new IOException( "MAFFT failed, exit code: " + _exit_code ); + throw new IOException( "MAFFT program failed, exit code: " + _exit_code + "\nCommand:\n" + my_opts + + "\nError:\n" + stderr ); + } + final StringBuilder stdout = command_executor.getStandardOutputFromCommand(); + if ( ( stdout == null ) || ( stdout.length() < 2 ) ) { + throw new IOException( "MAFFT program did not produce any output\nCommand:\n" + my_opts + "\nError:\n" + + stderr ); } - final StringBuilder stdout = commandExecutor.getStandardOutputFromCommand(); - final StringBuilder stderr = commandExecutor.getStandardErrorFromCommand(); - System.out.println( stdout ); - System.out.println(); - System.out.println( stderr ); - _error = stderr.toString(); final Msa msa = FastaParser.parseMsa( stdout.toString() ); return msa; }