import jalview.util.MessageManager;
import jalview.viewmodel.seqfeatures.FeatureRendererSettings;
import jalview.ws.params.ArgumentI;
+import jalview.ws.params.simple.BooleanOption;
import java.io.File;
import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
HiddenMarkovModel hmm;
- boolean newFrame;
+ boolean newFrame, realign = false, trim = false;
+
+ Integer numberOfSequences = null;
long barID;
File databaseFile = null;
+
+
SequenceI[] seqs;
inputAlignmentTemp.deleteOnExit();
inputTableTemp = File.createTempFile("buffer", ".sto");
inputTableTemp.deleteOnExit();
- databaseFile = new File("D:/Thomas/uniref50.fasta");
}
/**
*/
private boolean runCommand() throws IOException, InterruptedException
{
+ Boolean dbFound = false;
+ String dbPath = "";
File file = new File(cmds.HMMERFOLDER + "/hmmsearch");
if (!file.canExecute())
{
}
}
}
+
String command = cmds.HMMERFOLDER + "/hmmsearch -o "
+ inputTableTemp.getAbsolutePath() + " -A "
- + inputAlignmentTemp.getAbsolutePath() + cmds.SPACE
- + hmmTemp.getAbsolutePath() + cmds.SPACE
+ + inputAlignmentTemp.getAbsolutePath() + cmds.SPACE;
+ if (params != null)
+ {
+ for (ArgumentI arg : params)
+ {
+ String name = arg.getName();
+ switch (name)
+ {
+ case "Number of Results to Return":
+ numberOfSequences = Integer.parseInt(arg.getValue());
+ break;
+ case "Automatically Align Fetched Sequences":
+ if ("Automatically Align Fetched Sequences"
+ .equals(arg.getValue()))
+ {
+ realign = true;
+ }
+ break;
+ case "Return Accessions":
+ if ("Return Accessions".equals(arg.getValue()))
+ {
+ command += "--acc ";
+ }
+ break;
+ case "Sequence E-value Cutoff":
+ command += "--incE " + arg.getValue() + cmds.SPACE;
+ break;
+ case "Sequence Score Threshold":
+ command += "-incT " + arg.getValue() + cmds.SPACE;
+ break;
+ case "Domain E-value Threshold":
+ command += "--incdomE " + arg.getValue() + cmds.SPACE;
+ break;
+ case "Domain Score Threshold":
+ command += "--incdomT " + arg.getValue() + cmds.SPACE;
+ break;
+ case "Trim Non-Matching Termini":
+ trim = true;
+ break;
+ case "Database":
+ dbFound = true;
+ dbPath = arg.getValue();
+ if (!MessageManager.getString("label.this_alignment")
+ .equals(dbPath))
+ {
+ databaseFile = new File(dbPath);
+ }
+ }
+
+ }
+ }
+
+ if (dbFound == false || MessageManager.getString("label.this_alignment")
+ .equals(dbPath))
+ {
+ AlignmentI alignment = af.getViewport().getAlignment();
+ AlignmentI copy = new Alignment(alignment);
+ copy.getHMMConsensusSequences(true);
+ StockholmFile stoFile = new StockholmFile(copy);
+ stoFile.setSeqs(copy.getSequencesArray());
+ String alignmentString = stoFile.print();
+ databaseFile = File.createTempFile("database", ".sto");
+ databaseFile.deleteOnExit();
+ PrintWriter writer = new PrintWriter(databaseFile);
+ writer.print(alignmentString);
+ writer.close();
+ }
+
+ command += hmmTemp.getAbsolutePath() + cmds.SPACE
+ databaseFile.getAbsolutePath();
return cmds.runCommand(command);
}
readTable();
- SequenceI[] hmmAndSeqs = new SequenceI[seqs.length + 1];
+ SequenceI[] hmmAndSeqs;
+ if (numberOfSequences != null && numberOfSequences < seqs.length)
+ {
+ hmmAndSeqs = new SequenceI[numberOfSequences + 1];
+ }
+ else
+ {
+ hmmAndSeqs = new SequenceI[seqs.length + 1];
+ }
+
AlignmentAnnotation[] list = hmmSeq.getAnnotation();
for (AlignmentAnnotation annot : list)
{
- if ("HMM annotation".equals(annot.getCalcId()))
+ if ("HMM".equals(annot.getCalcId()))
{
hmmSeq.removeAlignmentAnnotation(annot);
}
}
hmmSeq.setHasInfo(false);
hmmAndSeqs[0] = hmmSeq;
- System.arraycopy(seqs, 0, hmmAndSeqs, 1, seqs.length);
+
+ if (numberOfSequences != null && seqs.length > numberOfSequences)
+ {
+ System.arraycopy(seqs, 0, hmmAndSeqs, 1, numberOfSequences);
+ }
+ else
+ {
+ System.arraycopy(seqs, 0, hmmAndSeqs, 1, seqs.length);
+ }
+
AlignmentI alignment = new Alignment(hmmAndSeqs);
AlignFrame frame = new AlignFrame(alignment, 1, 1);
frame.setSelectedHMMSequence(hmmSeq);
- frame.getViewport().initInformation();
- HMMAlignThread hmmalign = new HMMAlignThread(frame, true);
+ List<ArgumentI> alignArgs = new ArrayList<>();
+ if (trim)
+ {
+ alignArgs.add(new BooleanOption(
+ MessageManager.getString("label.trim_termini"),
+ MessageManager.getString("label.trim_termini_desc"), true,
+ true, true, null));
+ }
+ HMMAlignThread hmmalign = new HMMAlignThread(frame, true, alignArgs);
hmmalign.hmmalignWaitTillComplete();
frame = null;
hmmTemp.delete();