Skip to content

Commit 928a38b

Browse files
committed
Fixed graph comparison bugs.
1 parent 2f73ecf commit 928a38b

File tree

3 files changed

+59
-42
lines changed

3 files changed

+59
-42
lines changed

src/main/java/edu/pitt/dbmi/ccd/commons/graph/SimpleGraphComparison.java

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@ public class SimpleGraphComparison {
3838

3939
private final Set<String> edgesNotInAll;
4040

41-
private final Set<String> sameEndPoints;
41+
private final Set<String> sameEdgeTypes;
4242

4343
public SimpleGraphComparison() {
4444
this.distinctEdges = new HashSet<>();
4545
this.edgesInAll = new HashSet<>();
4646
this.edgesNotInAll = new HashSet<>();
47-
this.sameEndPoints = new HashSet<>();
47+
this.sameEdgeTypes = new HashSet<>();
4848
}
4949

5050
public void compare(List<SimpleGraph> simpleGraphs) {
@@ -53,6 +53,8 @@ public void compare(List<SimpleGraph> simpleGraphs) {
5353
}
5454

5555
Pattern delimiter = Pattern.compile(",");
56+
57+
// gather all the edges in the graph together
5658
simpleGraphs.forEach(simpleGraph -> {
5759
List<String> edges = simpleGraph.getEdges();
5860
edges.forEach(edge -> {
@@ -66,34 +68,47 @@ public void compare(List<SimpleGraph> simpleGraphs) {
6668
});
6769
});
6870

71+
// determine if each distinct edge is in all graph
6972
distinctEdges.forEach(edge -> {
70-
boolean inAll = true;
71-
for (SimpleGraph simpleGraph : simpleGraphs) {
72-
Map<String, String> edgeMap = simpleGraph.getEdgeMap();
73-
inAll = inAll && edgeMap.containsKey(edge);
74-
}
73+
String[] endPoints = delimiter.split(edge);
74+
if (endPoints.length == 2) {
75+
String reverseEdge = endPoints[1] + "," + endPoints[0];
76+
77+
boolean inAll = false;
78+
for (SimpleGraph simpleGraph : simpleGraphs) {
79+
Map<String, String> edgeMap = simpleGraph.getEdgeMap();
80+
inAll = edgeMap.containsKey(edge) || edgeMap.containsKey(reverseEdge);
81+
if (!inAll) {
82+
break;
83+
}
84+
}
7585

76-
if (inAll) {
77-
edgesInAll.add(edge);
78-
} else {
79-
edgesNotInAll.add(edge);
86+
if (inAll) {
87+
edgesInAll.add(edge);
88+
} else {
89+
edgesNotInAll.add(edge);
90+
}
8091
}
8192
});
8293

94+
// determine if each of the edge that is in all of the graphs has the same edge type
8395
edgesInAll.forEach(edge -> {
84-
boolean sameEndPoint = true;
85-
String endpoint = null;
96+
boolean sameEdgeType = true;
97+
String edgeType = null;
8698
for (SimpleGraph simpleGraph : simpleGraphs) {
8799
Map<String, String> edgeMap = simpleGraph.getEdgeMap();
88-
String edgeEndPoint = edgeMap.get(edge);
89-
if (endpoint == null) {
90-
endpoint = edgeEndPoint;
100+
String nodeEdgeType = edgeMap.get(edge);
101+
if (edgeType == null) {
102+
edgeType = nodeEdgeType;
91103
} else {
92-
sameEndPoint = sameEndPoint && endpoint.equals(edgeEndPoint);
104+
sameEdgeType = edgeType.equals(nodeEdgeType);
105+
if (!sameEdgeType) {
106+
break;
107+
}
93108
}
94109
}
95-
if (sameEndPoint) {
96-
sameEndPoints.add(edge);
110+
if (sameEdgeType) {
111+
sameEdgeTypes.add(edge);
97112
}
98113
});
99114
}
@@ -110,8 +125,8 @@ public Set<String> getEdgesNotInAll() {
110125
return edgesNotInAll;
111126
}
112127

113-
public Set<String> getSameEndPoints() {
114-
return sameEndPoints;
128+
public Set<String> getSameEdgeTypes() {
129+
return sameEdgeTypes;
115130
}
116131

117132
}

src/main/java/edu/pitt/dbmi/ccd/commons/graph/SimpleGraphUtil.java

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -38,48 +38,50 @@ private SimpleGraphUtil() {
3838
public static SimpleGraph readInSimpleGraph(BufferedReader reader) throws IOException {
3939
SimpleGraph simpleGraph = new SimpleGraph();
4040

41-
CharSequence[] edgeTypes = {
41+
String[] edgeTypes = {
4242
"---", "-->", "<--", "<->", "o->", "<-o", "o-o"
4343
};
44-
CharSequence emptyString = "";
4544

4645
List<String> edges = simpleGraph.getEdges();
4746
Map<String, String> edgeMap = simpleGraph.getEdgeMap();
48-
Pattern space = Pattern.compile("\\s+");
4947
boolean isData = false;
50-
CharSequence delimiter = ";";
48+
Pattern space = Pattern.compile("\\s+");
5149
for (String line = reader.readLine(); line != null; line = reader.readLine()) {
5250
line = line.trim();
5351
if (isData) {
5452
String[] data = space.split(line, 2);
5553
if (data.length == 2) {
5654
String value = data[1].trim();
57-
for (CharSequence edgeType : edgeTypes) {
58-
value = value.replace(edgeType, delimiter);
55+
56+
String edge = "";
57+
for (String edgeType : edgeTypes) {
58+
if (value.contains(edgeType)) {
59+
edge = edgeType;
60+
break;
61+
}
5962
}
60-
String[] nodeNames = value.split(delimiter.toString());
61-
if (nodeNames.length == 2) {
62-
CharSequence source = nodeNames[0].trim();
63-
CharSequence target = nodeNames[1].trim();
64-
String edgeType = value.replace(source, emptyString).replace(target, emptyString).trim();
63+
String[] values = value.split(edge);
64+
if (values.length == 2) {
65+
String source = values[0].trim();
66+
String target = values[1].trim();
6567

6668
String forwardEdge = source + "," + target;
6769
String reverseEdge = target + "," + source;
68-
switch (edgeType) {
70+
switch (edge) {
6971
case "---":
70-
edgeMap.put(forwardEdge, edgeType);
71-
edgeMap.put(reverseEdge, edgeType);
72+
edgeMap.put(forwardEdge, edge);
73+
edgeMap.put(reverseEdge, edge);
7274
break;
7375
case "<->":
74-
edgeMap.put(forwardEdge, edgeType);
75-
edgeMap.put(reverseEdge, edgeType);
76+
edgeMap.put(forwardEdge, edge);
77+
edgeMap.put(reverseEdge, edge);
7678
break;
7779
case "o-o":
78-
edgeMap.put(forwardEdge, edgeType);
79-
edgeMap.put(reverseEdge, edgeType);
80+
edgeMap.put(forwardEdge, edge);
81+
edgeMap.put(reverseEdge, edge);
8082
break;
8183
default:
82-
edgeMap.put(forwardEdge, edgeType);
84+
edgeMap.put(forwardEdge, edge);
8385
break;
8486
}
8587
edges.add(forwardEdge);

src/test/java/edu/pitt/dbmi/ccd/commons/graph/SimpleGraphComparisonTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public void testCompare() throws Exception {
7373
Set<String> distinctEdges = simpleGraphComparison.getDistinctEdges();
7474
Set<String> edgesInAll = simpleGraphComparison.getEdgesInAll();
7575
Set<String> edgesNotInAll = simpleGraphComparison.getEdgesNotInAll();
76-
Set<String> sameEndPoints = simpleGraphComparison.getSameEndPoints();
76+
Set<String> sameEdgeTypes = simpleGraphComparison.getSameEdgeTypes();
7777

7878
List<String> results = new LinkedList<>();
7979
distinctEdges.forEach(edge -> {
@@ -90,7 +90,7 @@ public void testCompare() throws Exception {
9090
sb.append(", ");
9191
}
9292

93-
if (sameEndPoints.contains(edge)) {
93+
if (sameEdgeTypes.contains(edge)) {
9494
sb.append(",X");
9595
} else {
9696
sb.append(", ");

0 commit comments

Comments
 (0)