use byte to check isCycle
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/LogAlgorithmForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/LogAlgorithmForPathMergeVertex.java
index a12c852..61f70e3 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/LogAlgorithmForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/LogAlgorithmForPathMergeVertex.java
@@ -13,7 +13,7 @@
import edu.uci.ics.genomix.pregelix.io.ValueStateWritable;
import edu.uci.ics.genomix.pregelix.type.Message;
import edu.uci.ics.genomix.pregelix.type.State;
-import edu.uci.ics.genomix.pregelix.util.GraphVertexOperation;
+import edu.uci.ics.genomix.pregelix.util.VertexUtil;
import edu.uci.ics.genomix.type.GeneCode;
import edu.uci.ics.genomix.type.KmerBytesWritable;
import edu.uci.ics.genomix.type.VKmerBytesWritable;
@@ -111,12 +111,12 @@
* start sending message
*/
public void startSendMsg(){
- if(GraphVertexOperation.isHeadVertex(getVertexValue().getAdjMap())){
+ if(VertexUtil.isHeadVertex(getVertexValue().getAdjMap())){
outgoingMsg.setMessage(Message.START);
sendMsgToAllNextNodes(getVertexId(), getVertexValue().getAdjMap());
voteToHalt();
}
- if(GraphVertexOperation.isRearVertex(getVertexValue().getAdjMap())){
+ if(VertexUtil.isRearVertex(getVertexValue().getAdjMap())){
outgoingMsg.setMessage(Message.END);
sendMsgToAllPreviousNodes(getVertexId(), getVertexValue().getAdjMap());
voteToHalt();
@@ -127,7 +127,7 @@
*/
public void initState(Iterator<LogAlgorithmMessageWritable> msgIterator){
while(msgIterator.hasNext()){
- if(!GraphVertexOperation.isPathVertex(getVertexValue().getAdjMap())){
+ if(!VertexUtil.isPathVertex(getVertexValue().getAdjMap())){
msgIterator.next();
voteToHalt();
}
@@ -225,9 +225,9 @@
incomingMsg.getChainVertexId()));
chainVertexId.set(kmerFactory.mergeTwoKmer(getVertexValue().getMergeChain(),
lastKmer));
- if(GraphVertexOperation.isCycle(getVertexId(), chainVertexId)){
+ if(VertexUtil.isCycle(getVertexId(), chainVertexId, kmerSize)){
getVertexValue().setMergeChain(null);
- getVertexValue().setAdjMap(GraphVertexOperation.reverseAdjMap(getVertexValue().getAdjMap(),
+ getVertexValue().setAdjMap(VertexUtil.reverseAdjMap(getVertexValue().getAdjMap(),
chainVertexId.getGeneCodeAtPosition(kmerSize)));
getVertexValue().setState(State.CYCLE);
return false;
@@ -235,7 +235,7 @@
else
getVertexValue().setMergeChain(chainVertexId);
- byte tmpVertexValue = GraphVertexOperation.updateRightNeighber(getVertexValue().getAdjMap(),
+ byte tmpVertexValue = VertexUtil.updateRightNeighber(getVertexValue().getAdjMap(),
incomingMsg.getAdjMap());
getVertexValue().setAdjMap(tmpVertexValue);
return true;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/NaiveAlgorithmForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/NaiveAlgorithmForPathMergeVertex.java
index c0f3f77..7d51670 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/NaiveAlgorithmForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/NaiveAlgorithmForPathMergeVertex.java
@@ -17,7 +17,7 @@
import edu.uci.ics.genomix.pregelix.io.ValueStateWritable;
import edu.uci.ics.genomix.pregelix.type.Message;
import edu.uci.ics.genomix.pregelix.type.State;
-import edu.uci.ics.genomix.pregelix.util.GraphVertexOperation;
+import edu.uci.ics.genomix.pregelix.util.VertexUtil;
/*
* vertexId: BytesWritable
@@ -110,11 +110,11 @@
* start sending message
*/
public void startSendMsg(){
- if(GraphVertexOperation.isHeadVertex(getVertexValue().getAdjMap())){
+ if(VertexUtil.isHeadVertex(getVertexValue().getAdjMap())){
outgoingMsg.setMessage(Message.START);
sendMsgToAllNextNodes(getVertexId(), getVertexValue().getAdjMap());
}
- if(GraphVertexOperation.isRearVertex(getVertexValue().getAdjMap())){
+ if(VertexUtil.isRearVertex(getVertexValue().getAdjMap())){
outgoingMsg.setMessage(Message.END);
sendMsgToAllPreviousNodes(getVertexId(), getVertexValue().getAdjMap());
}
@@ -124,7 +124,7 @@
*/
public void initState(Iterator<NaiveAlgorithmMessageWritable> msgIterator){
while(msgIterator.hasNext()){
- if(!GraphVertexOperation.isPathVertex(getVertexValue().getAdjMap())){
+ if(!VertexUtil.isPathVertex(getVertexValue().getAdjMap())){
msgIterator.next();
voteToHalt();
}
@@ -173,7 +173,7 @@
else{
getVertexValue().setMergeChain(kmerFactory.mergeKmerWithNextCode(getVertexValue().getMergeChain(),
incomingMsg.getLastGeneCode()));
- byte adjMap = GraphVertexOperation.updateRightNeighber(getVertexValue().getAdjMap(),
+ byte adjMap = VertexUtil.updateRightNeighber(getVertexValue().getAdjMap(),
incomingMsg.getAdjMap());
getVertexValue().setAdjMap(adjMap);
getVertexValue().setState(State.FINAL_VERTEX);
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/GraphVertexOperation.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java
similarity index 72%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/GraphVertexOperation.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java
index f086df4..abdc8fd 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/GraphVertexOperation.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java
@@ -1,10 +1,14 @@
package edu.uci.ics.genomix.pregelix.util;
+import edu.uci.ics.genomix.pregelix.operator.NaiveAlgorithmForPathMergeVertex;
import edu.uci.ics.genomix.type.GeneCode;
import edu.uci.ics.genomix.type.KmerBytesWritable;
import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritableFactory;
-public class GraphVertexOperation {
+public class VertexUtil {
+ private static VKmerBytesWritableFactory kmerFactory = new VKmerBytesWritableFactory(
+ NaiveAlgorithmForPathMergeVertex.kmerSize);
/**
* Single Vertex: in-degree = out-degree = 1
* @param vertexValue
@@ -50,11 +54,14 @@
/**
* check if mergeChain is cycle
*/
- public static boolean isCycle(KmerBytesWritable vertexId, VKmerBytesWritable mergeChain){
- String chain = mergeChain.toString().substring(1);
- if(chain.contains(vertexId.toString()))
- return true;
- return false;
+ public static boolean isCycle(KmerBytesWritable vertexId, VKmerBytesWritable mergeChain, int kmerSize){
+ VKmerBytesWritable subKmer;
+ for(int istart = 1; istart < mergeChain.getKmerLength() - kmerSize; istart++) {
+ subKmer = kmerFactory.getSubKmerFromChain(istart, kmerSize, mergeChain);
+ if(subKmer.equals(vertexId))
+ return true;
+ }
+ return false;
}
/**
* reverse neighber
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestCase.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestCase.java
index 1acf79b..818a550 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestCase.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestCase.java
@@ -78,8 +78,6 @@
dfs.copyToLocalFile(FileOutputFormat.getOutputPath(job), new Path(
resultFileDir));
GenerateTextFile.generateFromPathmergeResult(5, resultFileDir, textFileDir);
- // TestUtils.compareWithResultDir(new File(expectedFileDir), new
- // File(resultFileDir));
}
public String toString() {
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java
index 956a646..5c6259e 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java
@@ -47,8 +47,8 @@
public static final String PreFix = "data/PathTestSet"; //"graphbuildresult";
public static final String[] TestDir = { PreFix + File.separator
//+ "split.aa"};
- ///+ "split.aa"};/*, PreFix + File.separator
- /*+ "CyclePath", PreFix + File.separator
+ //+ "split.aa"};/*, PreFix + File.separator
+ /*+ "CyclePath"};, PreFix + File.separator
+ "SimplePath", PreFix + File.separator
+ "SinglePath", PreFix + File.separator
+ "TreePath"};*/
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/MergePathTest.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/MergePathTest.java
index afd2477..cb43b72 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/MergePathTest.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/MergePathTest.java
@@ -19,16 +19,14 @@
public class MergePathTest {
public static final String PATH_TO_TESTSTORE = "testcase/pathmerge/";
- //"genomix_result/pathmerge/new_naive";
- public static final String NAIVE_DATA_INPUT = "genomix_result/P1_nc8";//"actual/NaiveAlgorithmForMergeGraph/BinaryOutput/test";
- //"genomix_result/pathmerge/new_log";
- public static final String LOG_DATA_INPUT = "genomix_result/P2_nc8";//"actual/TwoStepLogAlgorithmForMergeGraph/BinaryOutput/test";
+ public static final String NAIVE_DATA_INPUT = "genomix_result/p1_nc8_4vertex";
+ public static final String LOG_DATA_INPUT = "genomix_result/p2_nc8_4vertex";
public static final String TEXT_OUTPUT = PATH_TO_TESTSTORE + "textfile";
public static final String CHAIN_OUTPUT = PATH_TO_TESTSTORE + "chain";
private static int nc = 8;
private static int kmerSize = 55;
- private static int maxLength = 102;
+ //private static int maxLength = 102;
@Test
public void test() throws Exception {
@@ -58,14 +56,14 @@
if (key == null || value == null){
break;
}
- //if(value.getState() == State.FINAL_VERTEX){
- /*bw.write(value.getMergeChain().toString()
+ if(value.getState() == State.FINAL_VERTEX){
+ bw.write(value.getMergeChain().toString()
+ "\t" + GeneCode.getSymbolFromBitMap(value.getAdjMap()));
- bw.newLine();*/
- bw.write(key.toString()
- + "\t" + value.toString());
bw.newLine();
- //}
+ /*bw.write(key.toString()
+ + "\t" + value.toString());
+ bw.newLine();*/
+ }
//if(value.getLengthOfMergeChain() != 0
// && value.getLengthOfMergeChain() != -1
// && value.getState() == State.FINAL_VERTEX){