Move extra logic(check if it is a valid head) to inside of the function
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
index b8870a0..e329289 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
@@ -58,11 +58,11 @@
protected VKmerBytesWritable repeatKmer = null; //for detect tandemRepeat
protected byte repeatDir; //for detect tandemRepeat
protected VKmerBytesWritable tmpKmer = null;
- protected byte headFlag;
+// protected byte headFlag;
protected byte outFlag;
protected byte inFlag;
protected byte selfFlag;
- protected byte headMergeDir;
+// protected byte headMergeDir;
protected EdgeListWritable incomingEdgeList = null; //SplitRepeat
protected EdgeListWritable outgoingEdgeList = null; //SplitRepeat
@@ -81,12 +81,12 @@
GenomixJobConf.setGlobalStaticConstants(getContext().getConfiguration());
}
- /**
- * reset headFlag
- */
- public void resetHeadFlag(){
- headFlag = (byte)(getVertexValue().getState() & State.IS_HEAD);
- }
+// /**
+// * reset headFlag
+// */
+// public void resetHeadFlag(){
+// headFlag = (byte)(getVertexValue().getState() & State.IS_HEAD);
+// }
//TODO make it correct
public byte getHeadFlag(){
@@ -587,7 +587,7 @@
*/
public void setStateAsNoMerge(){
byte state = getVertexValue().getState();
- //state |= State.SHOULD_MERGE_CLEAR;
+ state &= State.SHOULD_MERGE_CLEAR;
state |= State.NO_MERGE;
getVertexValue().setState(state);
activate(); //could we be more careful about activate?
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
index 98269a4..c64edf3 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
@@ -352,9 +352,9 @@
* send merge message to neighber for P4
*/
public void broadcastMergeMsg(boolean deleteSelf){
- if(headFlag > 0){
+ if(isHeadNode()){
outFlag |= MessageFlag.IS_HEAD;
- outFlag |= headMergeDir;
+ outFlag |= getHeadMergeDir();
}
switch(getVertexValue().getState() & State.SHOULD_MERGE_MASK) {
case State.SHOULD_MERGEWITHNEXT:
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
index 56fd837..5629295 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
@@ -65,8 +65,7 @@
outFlag = (byte)0;
inFlag = (byte)0;
// Node may be marked as head b/c it's a real head or a real tail
- headFlag = getHeadFlag(); // TODO be a boolean?
- headMergeDir = getHeadMergeDir();
+// headFlag = getHeadFlag(); // TODO be a boolean?
if(repeatKmer == null)
repeatKmer = new VKmerBytesWritable();
tmpValue.reset();
@@ -90,6 +89,8 @@
* set nextKmer to the element that's next (in the node's FF or FR list), returning true when there is a next neighbor
*/
protected boolean setNextInfo(VertexValueWritable value) {
+ if((!isHeadNode() || (isHeadNode() && getHeadMergeDir() == MessageFlag.HEAD_SHOULD_MERGEWITHNEXT)))
+ return false;
// TODO make sure the degree is correct
for(byte dir : OutgoingListFlag.values){
if(value.getEdgeList(dir).getCountOfPosition() > 0){
@@ -105,6 +106,8 @@
* set prevKmer to the element that's previous (in the node's RR or RF list), returning true when there is a previous neighbor
*/
protected boolean setPrevInfo(VertexValueWritable value) {
+ if((!isHeadNode() || (isHeadNode() && getHeadMergeDir() == MessageFlag.HEAD_SHOULD_MERGEWITHPREV)))
+ return false;
for(byte dir : IncomingListFlag.values){
if(value.getEdgeList(dir).getCountOfPosition() > 0){
prevKmer = value.getEdgeList(dir).get(0).getKey();
@@ -124,19 +127,19 @@
else if (getSuperstep() == 2)
initState(msgIterator);
else if (getSuperstep() % 4 == 3){
- outFlag |= headFlag; // TODO are these necessary?
- outFlag |= State.NO_MERGE;
+// outFlag |= headFlag; // TODO are these necessary?
+// outFlag |= State.NO_MERGE;
setStateAsNoMerge();
// only PATH vertices are present. Find the ID's for my neighbors
- curKmer = getVertexId(); // TODO make a reference
+ curKmer = getVertexId();
curHead = isNodeRandomHead(curKmer);
// the headFlag and tailFlag's indicate if the node is at the beginning or end of a simple path.
// We prevent merging towards non-path nodes
- hasNext = setNextInfo(getVertexValue()) && (headFlag == 0 || (headFlag > 0 && headMergeDir == MessageFlag.HEAD_SHOULD_MERGEWITHNEXT)); // TODO HEAD CAN MERGE // TODO headFlag compare not equals, not == 0
- hasPrev = setPrevInfo(getVertexValue()) && (headFlag == 0 || (headFlag > 0 && headMergeDir == MessageFlag.HEAD_SHOULD_MERGEWITHPREV)); // TODO this extra logic should go inside the function
+ hasNext = setNextInfo(getVertexValue()); // TODO HEAD CAN MERGE // TODO headFlag compare not equals, not == 0
+ hasPrev = setPrevInfo(getVertexValue()); // TODO this extra logic should go inside the function
if (hasNext || hasPrev) {
if (curHead) {
if (hasNext && !nextHead) {