Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Visualize algo #15

Merged
merged 10 commits into from
May 3, 2017
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