import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Hashtable;
import java.util.List;
import javax.swing.JInternalFrame;
-public class HMMAlignThread extends HmmerCommand implements Runnable
+public class HMMAlign extends HmmerCommand
{
static final String HMMALIGN = "hmmalign";
static final String ARG_TRIM = "--trim";
- /*
- * feature settings from view that job was associated with
- */
- protected FeatureRendererSettings featureSettings = null;
-
- AlignmentI alignment;
-
- AlignmentI dataset;
-
- List<AlignmentOrder> orders;
-
- AlignmentView msa;
-
- HiddenMarkovModel hmm;
+ private final AlignmentI dataset;
- SequenceI[][] allResults;
+ private AlignmentView msa;
/**
* Constructor for the HMMAlignThread
* @param af
* @param args
*/
- public HMMAlignThread(AlignFrame af, List<ArgumentI> args)
+ public HMMAlign(AlignFrame af, List<ArgumentI> args)
{
super(af, args);
- alignment = af.getViewport().getAlignment();
if (alignment.getDataset() != null)
{
dataset = alignment.getDataset();
}
- featureSettings = af.getFeatureRenderer().getSettings();
+ else
+ {
+ dataset = null;
+ }
}
/**
* Runs the HMMAlignThread: the data on the alignment or group is exported,
* then the command is executed in the command line and then the data is
* imported and displayed in a new frame (if true). The command is executed
- * for each segemtn of the alignment.
+ * for each segment of the alignment. Call this method directly to execute
+ * synchronously, or via start() in a new Thread for asynchronously.
*/
@Override
public void run()
{
- hmm = af.getSelectedHMM();
+ HiddenMarkovModel hmm = af.getSelectedHMM();
if (hmm == null)
{
System.err.println("Can't run hmmalign as no HMM profile selected");
SequenceI[][] subAlignments = msa.getVisibleContigs('-');
List<AlignmentOrder> allOrders = new ArrayList<>();
- allResults = new SequenceI[subAlignments.length][];
+
+ SequenceI[][] allResults = new SequenceI[subAlignments.length][];
int job = 0;
for (SequenceI[] seqs : subAlignments)
{
- stashSequences(seqs);
+ Hashtable sequencesHash = stashSequences(seqs);
try
{
File modelFile = createTempFile("hmm", ".hmm");
}
SequenceI[] result = importData(resultFile, allOrders);
+ recoverSequences(sequencesHash, result);
allResults[job] = result;
modelFile.delete();
alignmentFile.delete();
job++;
}
- displayResults(allOrders);
+ displayResults(allResults, allOrders);
af.setProgressBar("", msgId);
}
SequenceI[] result = file.getSeqsAsArray();
AlignmentOrder msaorder = new AlignmentOrder(result);
AlignmentSorter.recoverOrder(result);
- recoverSequences(result);
allOrders.add(msaorder);
return result;
/**
* Displays the results of all 'jobs' in a new frame
*
+ * @param allResults
+ *
* @param allOrders
*/
- private void displayResults(List<AlignmentOrder> allOrders)
+ private void displayResults(SequenceI[][] allResults,
+ List<AlignmentOrder> allOrders)
{
AlignmentOrder[] arrOrders = allOrders
.toArray(new AlignmentOrder[allOrders.size()]);
AlignFrame alignFrame = new AlignFrame(al, hidden, AlignFrame.DEFAULT_WIDTH,
AlignFrame.DEFAULT_HEIGHT);
+ FeatureRendererSettings featureSettings = af.getFeatureRenderer()
+ .getSettings();
// initialise with same renderer settings as in parent alignframe.
- alignFrame.getFeatureRenderer().transferSettings(this.featureSettings);
+ alignFrame.getFeatureRenderer().transferSettings(featureSettings);
addSortByMenuItems(alignFrame, alorders);
}
}
}
-
- /**
- * Runs hmmalign, and waits for the results to be imported before continuing
- */
- public void hmmalignWaitTillComplete()
- {
- Thread loader = new Thread(this);
- loader.start();
-
- while (loader.isAlive())
- {
- try
- {
- Thread.sleep(500);
- } catch (Exception ex)
- {
- }
- }
-
- }
}