package statalign.postprocess.plugins.structalign; import java.io.IOException; import statalign.base.State; import statalign.base.Vertex; import statalign.model.ext.ModelExtManager; import statalign.model.ext.ModelExtension; import statalign.model.ext.plugins.StructAlign; import statalign.postprocess.gui.treeviews.TreeView; import statalign.postprocess.plugins.CurrentTreeVisualizer; import statalign.postprocess.plugins.TreeNode; public class StructTreeVisualizer extends CurrentTreeVisualizer { public StructAlign structAlign; public TreeNode node; public StructTreeVisualizer() { screenable = true; outputable = true; postprocessable = true; postprocessWrite = false; selected = false; active = false; } @Override public String getTabName() { return "Tree weighted by structural diffusivity"; } @Override public String getTip() { return "Tree weighted by structural diffusivity"; } @Override public double getTabOrder() { return 3.5d; } /** * Updates the tree held in this object's TreeNode. * This method is called from the connected * StructAlign object when the tree is changed. */ public void updateStructTree(Vertex root, double[] sigma2) { node = new TreeNode(root); // System.out.println(); updateStructTree(root,node,sigma2); } public void updateStructTree(Vertex v, TreeNode n, double[] sigma2) { if (v.left != null) { n.children.get(0).edgeLength = sigma2[v.left.index]; updateStructTree(v.left,n.children.get(0),sigma2); } if (v.right != null) { n.children.get(n.children.size()-1).edgeLength = sigma2[v.right.index]; updateStructTree(v.right,n.children.get(n.children.size()-1),sigma2); } } @Override public void init(ModelExtManager modelExtMan) { super.init(modelExtMan); for(ModelExtension modExt : modelExtMan.getPluginList()) { if(modExt instanceof StructAlign) { structAlign = (StructAlign) modExt; structAlign.connectStructTree(this); } } active = structAlign.isActive() & structAlign.showStructTree; postprocessWrite = active; } @Override public void newPeek(State state) { if(!active) return; if(show && node!=null) { for (TreeView view : treeViews) { view.newSample(node); } refreshGUI(); } } @Override public String getFileExtension() { return "struct.tree"; } @Override public void newSample(State state, int no, int total) { if(!active) return; if(show && node!=null) { for (TreeView view : treeViews) { view.newSample(node); } refreshGUI(); } if (sampling) { try { if (state.isBurnin) file.write("Burnin " + no + "\tTree:\t" + node.toString() + "\n"); else file.write("Sample " + no + "\tTree:\t" + node.toString() + "\n"); } catch (IOException e) { e.printStackTrace(); } } if (postprocessWrite) { try { outputFile.write("[" + no + "] tree 'tree_" + no + "'= " + node.toString() + "\n"); } catch (IOException e) { e.printStackTrace(); } } } }