Skip to content

Commit

Permalink
Merge pull request #15 from BugOrFeature/visualizeAlgo
Browse files Browse the repository at this point in the history
Visualize algo
  • Loading branch information
LBoleij committed May 3, 2017
2 parents 21c4d80 + 6e16c7e commit 4b73806
Show file tree
Hide file tree
Showing 4 changed files with 233 additions and 10 deletions.
93 changes: 87 additions & 6 deletions src/main/java/GraphMaker.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,11 @@ public class GraphMaker extends JFrame
*/
public static void main(String[] args)
{
GraphMaker frame = new GraphMaker("/test (1).gfa");
//GraphMaker frame = new GraphMaker("/test (1).gfa");
GraphMaker frame = new GraphMaker("/TB10.gfa");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 320);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

Expand All @@ -33,6 +35,15 @@ public GraphMaker(String filename)
parser.parse(in);

ArrayList<Node2> set = parser.getList();

HashMap<Integer, Node2> allNodes = hashNode2s(set);
assignColumns(set, allNodes);
Node2.setAllParents(set, allNodes);
for(int i = 0; i < set.size(); i++) {
Node2 node = set.get(i);
addMutations(node, allNodes);
}

buildGraph(graph, set);

mxGraphComponent graphComponent = new mxGraphComponent(graph);
Expand All @@ -45,7 +56,6 @@ private void buildGraph(mxGraph graph, ArrayList<Node2> set) {
}

public void createEdges(mxGraph graph, HashMap<Integer, Object> hash, ArrayList<Node2> set) {

graph.getModel().beginUpdate();
for (Node2 n : set) {
Object parOfEdge = graph.getDefaultParent();
Expand All @@ -55,7 +65,7 @@ public void createEdges(mxGraph graph, HashMap<Integer, Object> hash, ArrayList<
for (Integer aChild : children) {
Object child = hash.get(aChild);
try {
graph.insertEdge(parOfEdge, null, "Edge", par, child);
graph.insertEdge(parOfEdge, null, null, par, child);
} catch (Exception e) {
e.printStackTrace();
System.out.println("Something went wrong adding an edge");
Expand All @@ -70,11 +80,16 @@ public HashMap<Integer, Object> makeNodes(mxGraph graph, ArrayList<Node2> set) {

Object parent = graph.getDefaultParent();
HashMap<Integer, Object> hash = new HashMap<Integer, Object>();
HashMap<Integer, Integer> columns = new HashMap<Integer, Integer>();

for (Node2 node : set) {
int columnHandler = createColumnHandler(node, columns);
int xCo = createXCo(node);
int yCo = createYCo(node, columnHandler);

for (int i = 0; i < set.size(); i++) {
Node2 node = set.get(i);
try {
Object obj = graph.insertVertex(parent, "" + node.getId(), node.getSeq(), 20 * (i * 5), 20 * (i * 5), 80, 30);
//Object obj = graph.insertVertex(parent, "" + node.getId(), node.getSeq(), xCo, yCo, 80, 30);
Object obj = graph.insertVertex(parent, "" + node.getId(), "", xCo, yCo, 80, 30);
hash.put(node.getId(), obj);
} catch (Exception e) {
e.printStackTrace();
Expand All @@ -85,4 +100,70 @@ public HashMap<Integer, Object> makeNodes(mxGraph graph, ArrayList<Node2> set) {
return hash;
}

private int createYCo(Node2 node, int columnHandler) {
return 200 + (50 * node.getMutationLevel()) + (columnHandler * 25);
}

private int createXCo(Node2 node) {
return 100 + 20 * (node.getColumnID() * 5);
}

private int createColumnHandler(Node2 node, HashMap<Integer, Integer> columns) {
int res;
int columnId = node.getColumnID();

if (columns.get(columnId) == null) { //initialize hashMap if necessary
columns.put(columnId, 0);
}

columns.put(columnId, columns.get(columnId) + 1); //Update number of nodes in a column

if((columns.get(columnId) % 2) == 1) { // Space these nodes correctly from each other
res = columns.get(columnId);
} else {
res = -1 * (columns.get(columnId) - 1);
}

return res;
}

public HashMap<Integer, Node2> hashNode2s (ArrayList<Node2> set) {
HashMap<Integer, Node2> allNodes = new HashMap<Integer, Node2>();
for (Node2 node : set) {
allNodes.put(node.getId(), node);
}
return allNodes;
}

public void assignColumns (ArrayList<Node2> nodeList, HashMap<Integer, Node2> allNodes) {
for(int i = 0; i < nodeList.size(); i++) {
Node2 parent = nodeList.get(i);
ArrayList<Node2> children = parent.getChildrenNodes(allNodes);
for(int j = 0; j < children.size(); j++) {
Node2 child = children.get(j);
child.incrementColumn(parent.getColumnID());
}
}
}

public boolean addMutations (Node2 node, HashMap<Integer, Node2> allNodes) {
ArrayList<Node2> parents = node.getParentNodes(allNodes);
ArrayList<Node2> children = node.getChildrenNodes(allNodes);

for(int i = 0; i < parents.size(); i++) {
Node2 parent = parents.get(i);

for (int j = 0; j < children.size(); j++) {
Node2 child = children.get(j);
if (child.amIYourChild(parent)) {

int curMutLvl = Math.max(parent.getMutationLevel(), child.getMutationLevel());
node.incrementMutationLevel(curMutLvl);

return true;
}
}
}
return false;
}
}
68 changes: 68 additions & 0 deletions src/main/java/Node2.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
*/

import java.util.ArrayList;
import java.util.HashMap;

/**
* Class Node2, which represents sequences of DNA. A sequence is a part of a genome.
Expand All @@ -13,13 +14,17 @@ public class Node2 {
private String seq;
private ArrayList<Integer> parent;
private ArrayList<Integer> child;
private int columnID;
private int mutationLevel;


public Node2(int id, String seq){
this.id = id;
this.seq = seq;
this.child = new ArrayList<Integer>();
this.parent = new ArrayList<Integer>();
this.columnID = 0;
this.mutationLevel = 0;
}

public ArrayList<Integer> getParent() {
Expand All @@ -30,6 +35,10 @@ public void setParent(ArrayList<Integer> parent) {
this.parent = parent;
}

public void addParent(Integer i) {
this.parent.add(i);
}

public ArrayList<Integer> getChild() {
return child;
}
Expand Down Expand Up @@ -57,4 +66,63 @@ public String getSeq() {
public void setSeq(String seq) {
this.seq = seq;
}

public int getMutationLevel() {
return this.mutationLevel;
}

public void incrementMutationLevel(int currentMutLvl) {
this.mutationLevel = currentMutLvl + 1;
}

public boolean amIYourChild (Node2 your){
if(your.equals(this)) {
return false;
}

ArrayList<Integer> theirChildren = your.getChild();
return theirChildren.contains(this.getId());
}

public ArrayList<Node2> getParentNodes (HashMap<Integer, Node2> hash) {
ArrayList<Integer> parents = this.getParent();
ArrayList<Node2> res = new ArrayList<Node2>();
for (Integer parent : parents) {
res.add(hash.get(parent));
}
return res;
}

public ArrayList<Node2> getChildrenNodes (HashMap<Integer, Node2> hash) {
ArrayList<Integer> children = this.getChild();
ArrayList<Node2> res = new ArrayList<Node2>();
for (Integer child : children) {
res.add(hash.get(child));
}
return res;
}

public boolean incrementColumn(int parentColumnID) {
if(this.columnID > parentColumnID) {
return false;
} else {
this.columnID = parentColumnID + 1;
return true;
}
}

public int getColumnID() {
return columnID;
}

//A method that can add all parents to a list of nodes. Needs a hashmap from NodeIDs to Nodes to do so.
public static void setAllParents(ArrayList<Node2> nodes, HashMap<Integer, Node2> hash) {
for (Node2 node : nodes) {
ArrayList<Integer> children = node.getChild();
for (Integer aChildren : children) {
Node2 child = hash.get(aChildren);
child.addParent(node.getId());
}
}
}
}
41 changes: 39 additions & 2 deletions src/main/resources/test (1).gfa
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,45 @@ S 1 A * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H3
L 1 + 2 + 0M
S 2 T * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 2 + 3 + 0M
L 2 + 4 + 0M
S 3 C * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 3 + 1 + 0M
L 3 + 4 + 0M
S 4 G * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 4 + 1 + 0M
L 4 + 5 + 0M
L 4 + 7 + 0M
S 5 A * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 5 + 6 + 0M
L 5 + 7 + 0M
S 6 T * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 6 + 7 + 0M
S 7 C * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 7 + 8 + 0M
L 7 + 9 + 0M
L 7 + 10 + 0M
S 8 G * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 8 + 11 + 0M
S 9 A * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 9 + 11 + 0M
S 10 T * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 10 + 11 + 0M
S 11 C * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 11 + 12 + 0M
L 11 + 13 + 0M
L 11 + 14 + 0M
S 12 G * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 12 + 13 + 0M
S 13 A * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 13 + 15 + 0M
S 14 T * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 14 + 15 + 0M
S 15 C * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 15 + 16 + 0M
L 15 + 19 + 0M
S 16 G * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 16 + 17 + 0M
L 16 + 18 + 0M
S 17 A * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 17 + 19 + 0M
S 18 T * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 18 + 19 + 0M
S 19 C * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
41 changes: 39 additions & 2 deletions target/classes/test (1).gfa
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,45 @@ S 1 A * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H3
L 1 + 2 + 0M
S 2 T * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 2 + 3 + 0M
L 2 + 4 + 0M
S 3 C * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 3 + 1 + 0M
L 3 + 4 + 0M
S 4 G * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 4 + 1 + 0M
L 4 + 5 + 0M
L 4 + 7 + 0M
S 5 A * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 5 + 6 + 0M
L 5 + 7 + 0M
S 6 T * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 6 + 7 + 0M
S 7 C * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 7 + 8 + 0M
L 7 + 9 + 0M
L 7 + 10 + 0M
S 8 G * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 8 + 11 + 0M
S 9 A * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 9 + 11 + 0M
S 10 T * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 10 + 11 + 0M
S 11 C * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 11 + 12 + 0M
L 11 + 13 + 0M
L 11 + 14 + 0M
S 12 G * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 12 + 13 + 0M
S 13 A * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 13 + 15 + 0M
S 14 T * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 14 + 15 + 0M
S 15 C * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 15 + 16 + 0M
L 15 + 19 + 0M
S 16 G * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 16 + 17 + 0M
L 16 + 18 + 0M
S 17 A * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 17 + 19 + 0M
S 18 T * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012
L 18 + 19 + 0M
S 19 C * ORI:Z:TKK-01-0066.fasta;TKK_REF.fasta CRD:Z:TKK_REF.fasta CRDCTG:Z:MT_H37RV_BRD_V5 CTG:Z:7000000214295379;MT_H37RV_BRD_V5 START:Z:4012

0 comments on commit 4b73806

Please sign in to comment.