package statalign.postprocess.plugins;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import statalign.base.InputData;
import statalign.base.State;
import statalign.model.ext.ModelExtManager;
import statalign.postprocess.TreeVisualizer;
import statalign.postprocess.gui.treeviews.HorizontalCladogramTreeView;
import statalign.postprocess.gui.treeviews.HorizontalPhylogramTreeView;
import statalign.postprocess.gui.treeviews.TreeView;
import statalign.postprocess.plugins.contree.CTMain;
import statalign.postprocess.plugins.contree.CTree;
import statalign.postprocess.utils.NewickParser;
public class ConsensusTreeVisualizer extends TreeVisualizer {
// Variables
private CTMain main;
//private ArrayList<String> consensusTrees;
// Functions
public ConsensusTreeVisualizer() {
// Configuration
outputable = true;
postprocessable = true;
postprocessWrite = true;
rnaAssociated = false;
noOfSamples = 1;
}
@Override
public void init(ModelExtManager manager) {
if(show) {
super.init(new TreeView[]{
new HorizontalCladogramTreeView(),
new HorizontalPhylogramTreeView()
});
}
}
@Override
public Icon getIcon() {
return new ImageIcon(ClassLoader.getSystemResource("icons/tree.gif"));
// return new ImageIcon("icons/tree.gif");
}
@Override
public String getTabName() {
return "Consensus tree";
}
@Override
public String getTip() {
return "The consensus tree based on all of the samples";
}
@Override
public String getFileExtension() {
return "ctree";
}
@Override
public double getTabOrder() {
return 6.0d;
}
@Override
public void newSample(State state, int no, int total) {
if (state.isBurnin) return;
++noOfSamples;
String treeString = state.getNewickStringWithLabels();
NewickParser parser = new NewickParser(treeString);
TreeNode root = parser.parse();
// Initialization (only happens in the beginning)
if (no == 0) { // The first sample has arrived - initialize!
main.initialize(root, total);
main.addNewTree(root);
return;
}
main.addNewTree(root);
CTree output = main.constructMajorityTree();
TreeNode outputRoot = output.getRoot();
String outputRootString = outputRoot.toStringWithProbs(noOfSamples);
mcmc.tree.network = main.constructNetwork(output);
// Logging.
if (sampling) {
try {
file.write("Sample " + no + "\tConsensus tree:\t" + outputRootString + "\n");
} catch (IOException e) {
e.printStackTrace();
}
}
if (postprocessWrite) {
try {
outputFile.write(outputRootString + "\n");
} catch (IOException e) {
e.printStackTrace();
}
}
if (show) {
for (TreeView view : treeViews) {
view.newSample(outputRoot);
}
refreshGUI();
}
}
@Override
public void beforeFirstSample(InputData input) {
super.beforeFirstSample(input); // Mandatory.
main = new CTMain();
//consensusTrees = new ArrayList<String>();
}
@Override
public void afterLastSample() {
super.afterLastSample();
if (postprocessWrite) {
try {
outputFile.flush();
outputFile.close();
} catch (IOException ioex) {
ioex.printStackTrace();
}
}
}
}