package statalign.postprocess.plugins.contree.test;
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.BitSet;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import statalign.postprocess.gui.CNetworkView;
import statalign.postprocess.plugins.contree.CNetwork;
import statalign.postprocess.plugins.contree.CTMain;
import statalign.postprocess.plugins.contree.CTree;
/**
* Creates trees that create a network that exhibits many incompatible splits in order to test the network drawing feature.
* NOTE: make sure trees only contain compatible splits!
* Run from the ConsensusNetworkTester file...
*
* @author wood
*
*/
public class TestNetwork {
// Consensus Tree
private CTree conTree;
// Consensus Network (derived from Consensus Tree!)
private CNetwork conNetwork;
// Main Consensus Thread for calculating consensus tree and network
private CTMain main;
// Array of trees
private ArrayList<ArrayList<BitSet>> trees;
// Panel to store GUI in
private JPanel pan;
// GUI of network output
private CNetworkView gui;
// Frame to store panel in
private JFrame frame;
/**
* Creates the test network by creating trees and storing them in the hash table using test functions in CTMain, running the consensus tree and network creating algorithms and then outputting the network in a window.
*
* */
public void TestNetwork(){
// specify the trees by splits...
trees = new ArrayList<ArrayList<BitSet>>();
// first tree
ArrayList<BitSet> tree1 = new ArrayList<BitSet>();
//first split
BitSet split1a = new BitSet(10);
split1a.set(2,true);
split1a.set(4,true);
tree1.add(split1a);
//second split
BitSet split1b = new BitSet(10);
split1b.set(4,true);
split1b.set(5,true);
split1b.set(2,true);
tree1.add(split1b);
//third split
BitSet split1c = new BitSet(10);
split1c.set(6,true);
split1c.set(7,true);
split1c.set(8,true);
tree1.add(split1c);
//fourth split
BitSet split1d = new BitSet(10);
split1d.set(6,true);
split1d.set(7,true);
tree1.add(split1d);
trees.add(tree1);
// second tree
ArrayList<BitSet> tree2 = new ArrayList<BitSet>();
//first split
BitSet split2a = new BitSet(10);
split2a.set(1,true);
split2a.set(3,true);
split2a.set(4,true);
tree2.add(split2a);
//second split
BitSet split2b = new BitSet(10);
split2b.set(4,true);
split2b.set(3,true);
tree2.add(split2b);
// third split
BitSet split2c = new BitSet(10);
split2c.set(4,true);
split2c.set(3,true);
split2c.set(1,true);
split2c.set(2,true);
tree2.add(split2c);
// fourth split
BitSet split2d = new BitSet(10);
split2d.set(4,true);
split2d.set(3,true);
split2d.set(1,true);
split2d.set(2,true);
split2d.set(5,true);
tree2.add(split2d);
// fifth split
BitSet split2e = new BitSet(10);
split2e.set(6,true);
split2e.set(9,true);
tree2.add(split2e);
trees.add(tree2);
/*
// third tree
ArrayList<BitSet> tree3 = new ArrayList<BitSet>();
//first split
BitSet split3a = new BitSet(10);
split3a.set(1,true);
split3a.set(2,true);
split3a.set(3,true);
split3a.set(4,true);
tree3.add(split3a);
//second split
BitSet split3b = new BitSet(10);
split3b.set(4,true);
split3b.set(3,true);
tree3.add(split3b);
trees.add(tree3);
*/
// Load the CTMain up...
main = new CTMain();
main.setSeed(1);
main.InitialiseNetworkTester(10,trees.size());
// add the trees using the test methods in CTMain...
for(ArrayList<BitSet> tree : trees){
main.addTestTree(tree);
}
// perform the calculations...
conTree = main.constructMajorityTree();
conNetwork = main.constructNetwork(conTree);
//visualise!
pan = new JPanel(new BorderLayout());
JScrollPane scroll = new JScrollPane();
scroll.setViewportView(gui = new CNetworkView(scroll));
gui.network = conNetwork;
pan.add(scroll, BorderLayout.CENTER);
pan.setVisible(true);
frame = new JFrame("Network test results");
frame.setSize(1000, 500);
frame.setLocation(300,200);
frame.setVisible(true);
frame.add(pan);
}
}