change code structure

git-svn-id: https://hyracks.googlecode.com/svn/branches/fullstack_genomix@3338 123451ca-8445-de46-9d55-352943316053
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/BinaryLoadGraphInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/BinaryLoadGraphInputFormat.java
similarity index 90%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/BinaryLoadGraphInputFormat.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/BinaryLoadGraphInputFormat.java
index 2bbc1c2..8ab6784 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/BinaryLoadGraphInputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/BinaryLoadGraphInputFormat.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.io.IOException;
 
@@ -9,13 +9,13 @@
 import org.apache.hadoop.mapreduce.RecordReader;
 import org.apache.hadoop.mapreduce.TaskAttemptContext;
 
+import edu.uci.ics.genomix.type.KmerCountValue;
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.io.VertexReader;
-import edu.uci.ics.pregelix.api.io.binary.BinaryVertexInputFormat;
-import edu.uci.ics.pregelix.api.io.binary.BinaryVertexInputFormat.BinaryVertexReader;
 import edu.uci.ics.pregelix.api.util.BspUtils;
-import edu.uci.ics.pregelix.example.io.MessageWritable;
-import edu.uci.ics.genomix.type.KmerCountValue;
+import edu.uci.ics.genomix.pregelix.example.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryVertexInputFormat;
+import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryVertexInputFormat.BinaryVertexReader;
 
 public class BinaryLoadGraphInputFormat extends
 	BinaryVertexInputFormat<BytesWritable, ByteWritable, NullWritable, MessageWritable>{
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/BinaryLoadGraphOutputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/BinaryLoadGraphOutputFormat.java
similarity index 93%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/BinaryLoadGraphOutputFormat.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/BinaryLoadGraphOutputFormat.java
index 9b1a579..8bf13b8 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/BinaryLoadGraphOutputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/BinaryLoadGraphOutputFormat.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.io.IOException;
 
@@ -8,9 +8,9 @@
 import org.apache.hadoop.mapreduce.RecordWriter;
 import org.apache.hadoop.mapreduce.TaskAttemptContext;
 
+import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryVertexOutputFormat;
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.io.VertexWriter;
-import edu.uci.ics.pregelix.api.io.binary.BinaryVertexOutputFormat;
 
 public class BinaryLoadGraphOutputFormat extends 
 	BinaryVertexOutputFormat<BytesWritable, ByteWritable, NullWritable> {
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/GraphVertexOperation.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/GraphVertexOperation.java
similarity index 87%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/GraphVertexOperation.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/GraphVertexOperation.java
index 8fa34c3..0c94512 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/GraphVertexOperation.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/GraphVertexOperation.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.io.DataOutputStream;
 import java.io.FileNotFoundException;
@@ -15,16 +15,17 @@
 import org.apache.hadoop.io.SequenceFile;
 import org.apache.hadoop.io.SequenceFile.CompressionType;
 
-import edu.uci.ics.pregelix.SequenceFile.GenerateSequenceFile;
-import edu.uci.ics.pregelix.bitwise.BitwiseOperation;
-import edu.uci.ics.pregelix.example.io.LogAlgorithmMessageWritable;
-import edu.uci.ics.pregelix.example.io.MessageWritable;
-import edu.uci.ics.pregelix.example.io.ValueStateWritable;
-import edu.uci.ics.pregelix.hdfs.HDFSOperation;
-import edu.uci.ics.pregelix.type.KmerCountValue;
+import edu.uci.ics.genomix.type.Kmer;
+import edu.uci.ics.genomix.type.KmerUtil;
+import edu.uci.ics.genomix.pregelix.SequenceFile.GenerateSequenceFile;
+import edu.uci.ics.genomix.pregelix.bitwise.BitwiseOperation;
+import edu.uci.ics.genomix.pregelix.example.io.LogAlgorithmMessageWritable;
+import edu.uci.ics.genomix.pregelix.example.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.example.io.ValueStateWritable;
+import edu.uci.ics.genomix.pregelix.hdfs.HDFSOperation;
 
 public class GraphVertexOperation {
-	public static final int k = 55; //kmer, k: the length of kmer
+	public static final int k = 3; //kmer, k: the length of kmer
 	static private final Path TMP_DIR = new Path(
 			GenerateSequenceFile.class.getSimpleName() + "_INTERIM");
 	/**
@@ -33,86 +34,29 @@
 	 */
 	public static boolean isPathVertex(ByteWritable vertexValue){
 		byte value = vertexValue.get();
-		byte[] bit = new byte[8];
-		for(int i = 0; i < 8; i++)
-			bit[i] = (byte) ((value >> i) & 0x01);
-		
-		//check out-degree
-		if(((bit[0]==1)&&(bit[1]==0)&&(bit[2]==0)&&(bit[3]==0))
-				|| ((bit[0]==0)&&(bit[1]==1)&&(bit[2]==0)&&(bit[3]==0))
-				|| ((bit[0]==0)&&(bit[1]==0)&&(bit[2]==1)&&(bit[3]==0))
-				|| ((bit[0]==0)&&(bit[1]==0)&&(bit[2]==0)&&(bit[3]==1))
-				){
-			//check in-degree
-			if(((bit[4]==1)&&(bit[5]==0)&&(bit[6]==0)&&(bit[7]==0))
-					|| ((bit[4]==0)&&(bit[5]==1)&&(bit[6]==0)&&(bit[7]==0))
-					|| ((bit[4]==0)&&(bit[5]==0)&&(bit[6]==1)&&(bit[7]==0))
-					|| ((bit[4]==0)&&(bit[5]==0)&&(bit[6]==0)&&(bit[7]==1))
-					)
-				return true;
-			else
-				return false;
-		}
-		else
-			return false;
+		if(KmerUtil.inDegree(value) == 1 && KmerUtil.outDegree(value) == 1)
+			return true;
+		return false;
 	}
-	/**
-	 * Head Vertex:  out-degree = 1, in-degree != 1
+	/** 
+	 * Head Vertex:  in-degree != 1, out-degree = 1, 
 	 * @param vertexValue 
 	 */
 	public static boolean isHead(ByteWritable vertexValue){
 		byte value = vertexValue.get();
-		byte[] bit = new byte[8];
-		for(int i = 0; i < 8; i++)
-			bit[i] = (byte) ((value >> i) & 0x01);
-		
-		//check out-degree
-		if(((bit[0]==1)&&(bit[1]==0)&&(bit[2]==0)&&(bit[3]==0))
-				|| ((bit[0]==0)&&(bit[1]==1)&&(bit[2]==0)&&(bit[3]==0))
-				|| ((bit[0]==0)&&(bit[1]==0)&&(bit[2]==1)&&(bit[3]==0))
-				|| ((bit[0]==0)&&(bit[1]==0)&&(bit[2]==0)&&(bit[3]==1))
-				){
-			//check in-degree
-			if(!((bit[4]==1)&&(bit[5]==0)&&(bit[6]==0)&&(bit[7]==0))
-					&& !((bit[4]==0)&&(bit[5]==1)&&(bit[6]==0)&&(bit[7]==0))
-					&& !((bit[4]==0)&&(bit[5]==0)&&(bit[6]==1)&&(bit[7]==0))
-					&& !((bit[4]==0)&&(bit[5]==0)&&(bit[6]==0)&&(bit[7]==1))
-					)
-				return true;
-			else
-				return false;
-		}
-		else
-			return false;
+		if(KmerUtil.inDegree(value) != 1 && KmerUtil.outDegree(value) == 1)
+			return true;
+		return false;
 	}
 	/**
-	 * Rear Vertex:  out-degree != 1, in-degree = 1
+	 * Rear Vertex:  in-degree = 1, out-degree != 1, 
 	 * @param vertexValue 
 	 */
 	public static boolean isRear(ByteWritable vertexValue){
 		byte value = vertexValue.get();
-		byte[] bit = new byte[8];
-		for(int i = 0; i < 8; i++)
-			bit[i] = (byte) ((value >> i) & 0x01);
-		
-		//check out-degree
-		if(!((bit[0]==1)&&(bit[1]==0)&&(bit[2]==0)&&(bit[3]==0))
-				&& !((bit[0]==0)&&(bit[1]==1)&&(bit[2]==0)&&(bit[3]==0))
-				&& !((bit[0]==0)&&(bit[1]==0)&&(bit[2]==1)&&(bit[3]==0))
-				&& !((bit[0]==0)&&(bit[1]==0)&&(bit[2]==0)&&(bit[3]==1))
-				){
-			//check in-degree
-			if(((bit[4]==1)&&(bit[5]==0)&&(bit[6]==0)&&(bit[7]==0))
-					|| ((bit[4]==0)&&(bit[5]==1)&&(bit[6]==0)&&(bit[7]==0))
-					|| ((bit[4]==0)&&(bit[5]==0)&&(bit[6]==1)&&(bit[7]==0))
-					|| ((bit[4]==0)&&(bit[5]==0)&&(bit[6]==0)&&(bit[7]==1))
-					)
-				return true;
-			else
-				return false;
-		}
-		else
-			return false;
+		if(KmerUtil.inDegree(value) == 1 && KmerUtil.outDegree(value) != 1)
+			return true;
+		return false;
 	}
 	/**
 	 * write Kmer to Sequence File for test
@@ -152,19 +96,19 @@
 		int value = vertexValue & 0xff;
 		int tmp = value & first;
 		if(tmp != 0)
-			return 0;
+			return Kmer.GENE_CODE.A;
 		else{
 			tmp = value & second;
 			if(tmp != 0)
-				return 1;
+				return Kmer.GENE_CODE.C;
 			else{
 				tmp = value & third;
 				if(tmp != 0)
-					return 2;
+					return Kmer.GENE_CODE.G;
 				else{
 					tmp = value & fourth;
 					if(tmp != 0)
-						return 3;
+						return Kmer.GENE_CODE.T;
 					else
 						return 4;
 				}
@@ -187,19 +131,19 @@
 		int value = vertexValue & 0xff;
 		int tmp = value & first;
 		if(tmp != 0)
-			return 0;
+			return Kmer.GENE_CODE.A;
 		else{
 			tmp = value & second;
 			if(tmp != 0)
-				return 1;
+				return Kmer.GENE_CODE.C;
 			else{
 				tmp = value & third;
 				if(tmp != 0)
-					return 2;
+					return Kmer.GENE_CODE.G;
 				else{
 					tmp = value & fourth;
 					if(tmp != 0)
-						return 3;
+						return Kmer.GENE_CODE.T;
 					else
 						return 4;
 				}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LoadGraphVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LoadGraphVertex.java
similarity index 95%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LoadGraphVertex.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LoadGraphVertex.java
index 9892376..d928555 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LoadGraphVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LoadGraphVertex.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.io.IOException;
 import java.util.Iterator;
@@ -15,8 +15,8 @@
 import edu.uci.ics.pregelix.api.io.text.TextVertexOutputFormat;
 import edu.uci.ics.pregelix.api.io.text.TextVertexOutputFormat.TextVertexWriter;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
-import edu.uci.ics.pregelix.example.client.Client;
-import edu.uci.ics.pregelix.example.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.example.client.Client;
+import edu.uci.ics.genomix.pregelix.example.io.MessageWritable;
 
 /*
  * vertexId: BytesWritable
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LogAlgorithmForMergeGraphInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphInputFormat.java
similarity index 89%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LogAlgorithmForMergeGraphInputFormat.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphInputFormat.java
index 5aad613..625d588 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LogAlgorithmForMergeGraphInputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphInputFormat.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.io.IOException;
 
@@ -10,12 +10,12 @@
 
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.io.VertexReader;
-import edu.uci.ics.pregelix.api.io.binary.BinaryVertexInputFormat;
 import edu.uci.ics.pregelix.api.util.BspUtils;
-import edu.uci.ics.pregelix.bitwise.BitwiseOperation;
-import edu.uci.ics.pregelix.example.io.LogAlgorithmMessageWritable;
-import edu.uci.ics.pregelix.example.io.ValueStateWritable;
-import edu.uci.ics.pregelix.type.State;
+import edu.uci.ics.genomix.pregelix.bitwise.BitwiseOperation;
+import edu.uci.ics.genomix.pregelix.example.io.LogAlgorithmMessageWritable;
+import edu.uci.ics.genomix.pregelix.example.io.ValueStateWritable;
+import edu.uci.ics.genomix.pregelix.type.State;
+import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryVertexInputFormat;
 import edu.uci.ics.genomix.type.KmerCountValue;
 
 public class LogAlgorithmForMergeGraphInputFormat extends
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LogAlgorithmForMergeGraphOutputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphOutputFormat.java
similarity index 89%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LogAlgorithmForMergeGraphOutputFormat.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphOutputFormat.java
index 9d4672a..dbaa528 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LogAlgorithmForMergeGraphOutputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphOutputFormat.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.io.IOException;
 
@@ -8,10 +8,10 @@
 import org.apache.hadoop.mapreduce.RecordWriter;
 import org.apache.hadoop.mapreduce.TaskAttemptContext;
 
+import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryVertexOutputFormat;
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.io.VertexWriter;
-import edu.uci.ics.pregelix.api.io.binary.BinaryVertexOutputFormat;
-import edu.uci.ics.pregelix.example.io.ValueStateWritable;
+import edu.uci.ics.genomix.pregelix.example.io.ValueStateWritable;
 
 public class LogAlgorithmForMergeGraphOutputFormat extends 
 	BinaryVertexOutputFormat<BytesWritable, ValueStateWritable, NullWritable> {
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LogAlgorithmForMergeGraphVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphVertex.java
similarity index 96%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LogAlgorithmForMergeGraphVertex.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphVertex.java
index 8ccb03e..c521074 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LogAlgorithmForMergeGraphVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphVertex.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
@@ -17,13 +17,13 @@
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
 import edu.uci.ics.pregelix.api.util.BspUtils;
-import edu.uci.ics.pregelix.bitwise.BitwiseOperation;
+import edu.uci.ics.genomix.pregelix.bitwise.BitwiseOperation;
 import edu.uci.ics.pregelix.dataflow.util.IterationUtils;
-import edu.uci.ics.pregelix.example.client.Client;
-import edu.uci.ics.pregelix.example.io.LogAlgorithmMessageWritable;
-import edu.uci.ics.pregelix.example.io.ValueStateWritable;
-import edu.uci.ics.pregelix.type.Message;
-import edu.uci.ics.pregelix.type.State;
+import edu.uci.ics.genomix.pregelix.example.client.Client;
+import edu.uci.ics.genomix.pregelix.example.io.LogAlgorithmMessageWritable;
+import edu.uci.ics.genomix.pregelix.example.io.ValueStateWritable;
+import edu.uci.ics.genomix.pregelix.type.Message;
+import edu.uci.ics.genomix.pregelix.type.State;
 
 /*
  * vertexId: BytesWritable
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/MergeGraphVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/MergeGraphVertex.java
similarity index 73%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/MergeGraphVertex.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/MergeGraphVertex.java
index 3fdcd6d..0a77a94 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/MergeGraphVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/MergeGraphVertex.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
@@ -14,14 +14,16 @@
 import org.apache.hadoop.io.BytesWritable;
 import org.apache.hadoop.io.NullWritable;
 
+import edu.uci.ics.genomix.type.Kmer;
+import edu.uci.ics.genomix.type.KmerUtil;
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
 import edu.uci.ics.pregelix.api.util.BspUtils;
-import edu.uci.ics.pregelix.bitwise.BitwiseOperation;
+import edu.uci.ics.genomix.pregelix.bitwise.BitwiseOperation;
 import edu.uci.ics.pregelix.dataflow.util.IterationUtils;
-import edu.uci.ics.pregelix.example.client.Client;
-import edu.uci.ics.pregelix.example.io.MessageWritable;
-import edu.uci.ics.pregelix.hdfs.HDFSOperation;
+import edu.uci.ics.genomix.pregelix.example.client.Client;
+import edu.uci.ics.genomix.pregelix.example.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.hdfs.HDFSOperation;
 
 /*
  * vertexId: BytesWritable
@@ -71,17 +73,20 @@
 		} catch (FileNotFoundException e1) { e1.printStackTrace();}
 		tmpVertextId.set(GraphVertexOperation.generateValidDataFromBytesWritable(getVertexId()),0,numBytes);
 		if (getSuperstep() == 1) {
-			if(GraphVertexOperation.isHead(getVertexValue())){
-				//tmpSourceVertextId = tmpVertextId; 
-				tmpDestVertexId.set(GraphVertexOperation.getDestVertexId(tmpVertextId.getBytes(),
-						getVertexValue().get()), 0, numBytes); 
+			if(GraphVertexOperation.isHead(getVertexValue())){ 
+				tmpDestVertexId.set(tmpVertextId);
+				//change
+				Kmer.moveKmer(GraphVertexOperation.k, tmpDestVertexId.getBytes(), 
+						(byte)GraphVertexOperation.findSucceedNode(getVertexValue().get()));
+				//tmpDestVertexId.set(GraphVertexOperation.getDestVertexId(tmpDestVertexId.getBytes(),
+				//		getVertexValue().get()), 0, numBytes); 
 				tmpMsg.setSourceVertexId(tmpVertextId.getBytes());
 				tmpMsg.setLengthOfChain(0);
 				tmpMsg.setChainVertexId(tmpChainVertexId.getBytes());
 				sendMsg(tmpDestVertexId,tmpMsg);
 				//test
-				//GraphVertexOperation.testMessageCommunication(writer,getSuperstep(),tmpVertextId.getBytes(),
-				//		tmpDestVertexId.getBytes(),tmpMsg);
+				GraphVertexOperation.testMessageCommunication(writer,getSuperstep(),tmpVertextId.getBytes(),
+						tmpDestVertexId.getBytes(),tmpMsg);
 				}
 		}
 		//path node sends message back to head node
@@ -97,11 +102,19 @@
 							tmpMsg.setChainVertexId(tmpVertextId.getBytes());
 						}
 						else{
+							/*
 							tmpMsg.incrementLength();
 							tmpMsg.setChainVertexId(GraphVertexOperation.updateChainVertexId(
-									tmpMsg.getChainVertexId(),
+									tmpChainVertexId,
 									tmpMsg.getLengthOfChain()-1,
-									tmpVertextId.getBytes()));
+									tmpVertextId));
+							 */
+							 //change
+							tmpMsg.setChainVertexId(KmerUtil.mergeKmerWithNextCode(
+									tmpMsg.getLengthOfChain(),
+									tmpMsg.getChainVertexId(),
+									(byte)GraphVertexOperation.findSucceedNode(getVertexValue().get())));
+							tmpMsg.incrementLength();
 							deleteVertex(getVertexId());
 						}
 						sendMsg(tmpDestVertexId,tmpMsg);
@@ -132,7 +145,6 @@
 					//test
 		        	GraphVertexOperation.testLastMessageCommunication(writer,getSuperstep(),tmpVertextId.getBytes(),
 		        			tmpDestVertexId.getBytes(),tmpMsg);
-					
 				}
 			}
 		}
@@ -141,10 +153,17 @@
 			if (msgIterator.hasNext()){
 				tmpMsg = msgIterator.next();
 				if(!tmpMsg.isRear()){
-					byte[] lastKmer = GraphVertexOperation.getLastKmer(tmpMsg.getChainVertexId(), 
-							tmpMsg.getLengthOfChain());
-					tmpDestVertexId.set(GraphVertexOperation.getDestVertexId(lastKmer,
-							tmpMsg.getNeighberInfo()), 0, numBytes);
+					byte[] lastKmer = KmerUtil.getLastKmerFromChain(GraphVertexOperation.k,
+							tmpMsg.getLengthOfChain(),
+							tmpMsg.getChainVertexId());
+					//byte[] lastKmer = GraphVertexOperation.getLastKmer(tmpMsg.getChainVertexId(), 
+					//		tmpMsg.getLengthOfChain());
+					tmpDestVertexId.set(lastKmer, 0, numBytes);
+					//change
+					Kmer.moveKmer(GraphVertexOperation.k, tmpDestVertexId.getBytes(), 
+							(byte)GraphVertexOperation.findSucceedNode(getVertexValue().get()));
+					//tmpDestVertexId.set(GraphVertexOperation.getDestVertexId(lastKmer,
+					//		tmpMsg.getNeighberInfo()), 0, numBytes);
 					tmpMsg.setSourceVertexId(tmpVertextId.getBytes());
 					sendMsg(tmpDestVertexId,tmpMsg);
 					//test
@@ -152,8 +171,12 @@
 							tmpDestVertexId.getBytes(),tmpMsg);
 				}
 				else{	
-					tmpDestVertexId.set(GraphVertexOperation.getDestVertexId(tmpVertextId.getBytes(),
-							getVertexValue().get()), 0, numBytes);
+					tmpDestVertexId.set(tmpVertextId);
+					//change
+					Kmer.moveKmer(GraphVertexOperation.k, tmpDestVertexId.getBytes(), 
+							(byte)GraphVertexOperation.findSucceedNode(getVertexValue().get()));
+					//tmpDestVertexId.set(GraphVertexOperation.getDestVertexId(tmpVertextId.getBytes(),
+					//		getVertexValue().get()), 0, numBytes);
 					sendMsg(tmpDestVertexId,tmpMsg);
 					//test
 					GraphVertexOperation.testMessageCommunication(writer,getSuperstep(),tmpVertextId.getBytes(),
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/SequenceFile/ConvertToSequenceFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/SequenceFile/ConvertToSequenceFile.java
similarity index 96%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/SequenceFile/ConvertToSequenceFile.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/SequenceFile/ConvertToSequenceFile.java
index 304d764..1aff95d 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/SequenceFile/ConvertToSequenceFile.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/SequenceFile/ConvertToSequenceFile.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.SequenceFile;
+package edu.uci.ics.genomix.pregelix.SequenceFile;
 
 import java.io.IOException;
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/SequenceFile/GenerateSequenceFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/SequenceFile/GenerateSequenceFile.java
similarity index 99%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/SequenceFile/GenerateSequenceFile.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/SequenceFile/GenerateSequenceFile.java
index b8fc24d..b7fed48 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/SequenceFile/GenerateSequenceFile.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/SequenceFile/GenerateSequenceFile.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.SequenceFile;
+package edu.uci.ics.genomix.pregelix.SequenceFile;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -12,8 +12,8 @@
 import org.apache.hadoop.io.SequenceFile.CompressionType;
 
 import edu.uci.ics.genomix.type.KmerCountValue;
-import edu.uci.ics.pregelix.GraphVertexOperation;
-import edu.uci.ics.pregelix.bitwise.BitwiseOperation;
+import edu.uci.ics.genomix.pregelix.GraphVertexOperation;
+import edu.uci.ics.genomix.pregelix.bitwise.BitwiseOperation;
 
 public class GenerateSequenceFile {
 	
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/SequenceFile/generateSmallFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/SequenceFile/generateSmallFile.java
similarity index 96%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/SequenceFile/generateSmallFile.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/SequenceFile/generateSmallFile.java
index ae4c2f5..eec2559 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/SequenceFile/generateSmallFile.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/SequenceFile/generateSmallFile.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.SequenceFile;
+package edu.uci.ics.genomix.pregelix.SequenceFile;
 
 import java.io.IOException;
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/TestLoadGraphVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TestLoadGraphVertex.java
similarity index 88%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/TestLoadGraphVertex.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TestLoadGraphVertex.java
index 3992a56..3449df6 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/TestLoadGraphVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TestLoadGraphVertex.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.util.Arrays;
 import java.util.Iterator;
@@ -9,9 +9,9 @@
 
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
-import edu.uci.ics.pregelix.bitwise.BitwiseOperation;
-import edu.uci.ics.pregelix.example.client.Client;
-import edu.uci.ics.pregelix.example.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.bitwise.BitwiseOperation;
+import edu.uci.ics.genomix.pregelix.example.client.Client;
+import edu.uci.ics.genomix.pregelix.example.io.MessageWritable;
 
 /*
  * vertexId: BytesWritable
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TestMemory.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TestMemory.java
new file mode 100644
index 0000000..247ca42
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TestMemory.java
@@ -0,0 +1,32 @@
+package edu.uci.ics.genomix.pregelix;
+/**
+* Class: TestMemory
+* @author: Anbang Xu
+* @description: Prints JVM memory utilization statistics
+*/
+public class TestMemory {
+     
+    public static void main(String [] args) {
+         
+        int mb = 1024*1024;
+         
+        //Getting the runtime reference from system
+        Runtime runtime = Runtime.getRuntime();
+         
+        System.out.println("##### Heap utilization statistics [MB] #####");
+         
+        //Print used memory
+        System.out.println("Used Memory:"
+            + (runtime.totalMemory() - runtime.freeMemory()) / mb);
+ 
+        //Print free memory
+        System.out.println("Free Memory:"
+            + runtime.freeMemory() / mb);
+         
+        //Print total available memory
+        System.out.println("Total Memory:" + runtime.totalMemory() / mb);
+ 
+        //Print Maximum available memory
+        System.out.println("Max Memory:" + runtime.maxMemory() / mb);
+    }
+}
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/TextLoadGraphInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TextLoadGraphInputFormat.java
similarity index 96%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/TextLoadGraphInputFormat.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TextLoadGraphInputFormat.java
index b7fda73..e3c660e 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/TextLoadGraphInputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TextLoadGraphInputFormat.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.io.IOException;
 
@@ -15,7 +15,7 @@
 import edu.uci.ics.pregelix.api.io.VertexReader;
 import edu.uci.ics.pregelix.api.io.text.TextVertexInputFormat;
 import edu.uci.ics.pregelix.api.util.BspUtils;
-import edu.uci.ics.pregelix.example.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.example.io.MessageWritable;
 
 public class TextLoadGraphInputFormat extends
 		TextVertexInputFormat<BytesWritable, ByteWritable, NullWritable, MessageWritable>{
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/api/io/binary/BinaryVertexInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexInputFormat.java
similarity index 98%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/api/io/binary/BinaryVertexInputFormat.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexInputFormat.java
index 31274ac..51eceee 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/api/io/binary/BinaryVertexInputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexInputFormat.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.api.io.binary;
+package edu.uci.ics.genomix.pregelix.api.io.binary;
 
 import java.io.IOException;
 import java.util.List;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/api/io/binary/BinaryVertexOutputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexOutputFormat.java
similarity index 98%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/api/io/binary/BinaryVertexOutputFormat.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexOutputFormat.java
index 399cbca..2bfaf90 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/api/io/binary/BinaryVertexOutputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexOutputFormat.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.api.io.binary;
+package edu.uci.ics.genomix.pregelix.api.io.binary;
 
 import java.io.IOException;
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/bitwise/BitwiseOperation.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/bitwise/BitwiseOperation.java
similarity index 98%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/bitwise/BitwiseOperation.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/bitwise/BitwiseOperation.java
index b064707..8d90e92 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/bitwise/BitwiseOperation.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/bitwise/BitwiseOperation.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.bitwise;
+package edu.uci.ics.genomix.pregelix.bitwise;
 
 public class BitwiseOperation {
 	
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/client/Client.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/client/Client.java
similarity index 97%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/client/Client.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/client/Client.java
index 9cf2e3f..5507713 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/client/Client.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/client/Client.java
@@ -1,5 +1,5 @@
 
-package edu.uci.ics.pregelix.example.client;
+package edu.uci.ics.genomix.pregelix.example.client;
 
 import java.io.IOException;
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/io/LogAlgorithmMessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/io/LogAlgorithmMessageWritable.java
similarity index 97%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/io/LogAlgorithmMessageWritable.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/io/LogAlgorithmMessageWritable.java
index 262ce7f..d77a26f 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/io/LogAlgorithmMessageWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/io/LogAlgorithmMessageWritable.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.example.io;
+package edu.uci.ics.genomix.pregelix.example.io;
 
 import java.io.DataInput;
 import java.io.DataOutput;
@@ -7,7 +7,7 @@
 
 import org.apache.hadoop.io.WritableComparable;
 
-import edu.uci.ics.pregelix.GraphVertexOperation;
+import edu.uci.ics.genomix.pregelix.GraphVertexOperation;
 
 public class LogAlgorithmMessageWritable implements WritableComparable<LogAlgorithmMessageWritable>{
 	/**
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/io/MessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/io/MessageWritable.java
similarity index 96%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/io/MessageWritable.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/io/MessageWritable.java
index e18a062..b477eb5 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/io/MessageWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/io/MessageWritable.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.example.io;
+package edu.uci.ics.genomix.pregelix.example.io;
 
 import java.io.DataInput;
 import java.io.DataOutput;
@@ -7,7 +7,7 @@
 
 import org.apache.hadoop.io.WritableComparable;
 
-import edu.uci.ics.pregelix.GraphVertexOperation;
+import edu.uci.ics.genomix.pregelix.GraphVertexOperation;
 
 public class MessageWritable implements WritableComparable<MessageWritable>{
 	/**
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/io/ValueStateWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/io/ValueStateWritable.java
similarity index 94%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/io/ValueStateWritable.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/io/ValueStateWritable.java
index 78d4f0c..97275be 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/io/ValueStateWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/io/ValueStateWritable.java
@@ -1,10 +1,10 @@
-package edu.uci.ics.pregelix.example.io;
+package edu.uci.ics.genomix.pregelix.example.io;
 
 import java.io.*;
 
 import org.apache.hadoop.io.WritableComparable;
 
-import edu.uci.ics.pregelix.type.State;
+import edu.uci.ics.genomix.pregelix.type.State;
 
 
 public class ValueStateWritable implements WritableComparable<ValueStateWritable> {
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/Graph.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/Graph.java
new file mode 100644
index 0000000..fe95252
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/Graph.java
@@ -0,0 +1,58 @@
+package edu.uci.ics.genomix.pregelix.graph;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+
+public class Graph {
+	
+	/**
+    * Construct a DOT graph in memory, convert it
+    * to image and store the image in the file system.
+	 * @throws Exception 
+    */
+   private void start(String fileName) throws Exception
+   {
+		File filePathTo = new File("graph/" + fileName);
+		BufferedReader br = new BufferedReader(new FileReader(filePathTo));
+		String line = "";
+		String[] split;
+		
+		String precursor = "";
+		String[] adjMap;
+		char[] succeeds;
+		String succeed = "";
+		String output;
+		
+		GraphViz gv = new GraphViz();
+		gv.addln(gv.start_graph());
+		while((line = br.readLine()) != null){
+			split = line.split("\t");
+			precursor = split[0];
+			adjMap = split[1].split("\\|"); 
+			if(adjMap.length > 1){
+				succeeds = adjMap[1].toCharArray();
+				for(int i = 0; i < succeeds.length; i++){
+					succeed = precursor.substring(1) + succeeds[i]; 
+					output = precursor + " -> " + succeed;
+					gv.addln(output);
+				}
+			}
+		}
+		gv.addln(gv.end_graph());
+		System.out.println(gv.getDotSource());
+
+		String type = "ps";
+		File out = new File("graph/" + fileName + "_out." + type); // Linux
+		gv.writeGraphToFile(gv.getGraph(gv.getDotSource(), type), out);
+   }
+	   
+	public static void main(String[] args) throws Exception
+	{
+		Graph g = new Graph();
+		g.start("SinglePath");
+	}
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GraphViz.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GraphViz.java
new file mode 100644
index 0000000..c2178bc
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GraphViz.java
@@ -0,0 +1,288 @@
+package edu.uci.ics.genomix.pregelix.graph;

+

+// GraphViz.java - a simple API to call dot from Java programs

+

+/*$Id$*/

+/*

+ ******************************************************************************

+ *                                                                            *

+ *              (c) Copyright 2003 Laszlo Szathmary                           *

+ *                                                                            *

+ * This program is free software; you can redistribute it and/or modify it    *

+ * under the terms of the GNU Lesser General Public License as published by   *

+ * the Free Software Foundation; either version 2.1 of the License, or        *

+ * (at your option) any later version.                                        *

+ *                                                                            *

+ * This program is distributed in the hope that it will be useful, but        *

+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *

+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public    *

+ * License for more details.                                                  *

+ *                                                                            *

+ * You should have received a copy of the GNU Lesser General Public License   *

+ * along with this program; if not, write to the Free Software Foundation,    *

+ * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                              *

+ *                                                                            *

+ ******************************************************************************

+ */

+

+import java.io.BufferedReader;

+import java.io.DataInputStream;

+import java.io.File;

+import java.io.FileInputStream;

+import java.io.FileOutputStream;

+import java.io.FileWriter;

+import java.io.InputStreamReader;

+

+/**

+ * <dl>

+ * <dt>Purpose: GraphViz Java API

+ * <dd>

+ *

+ * <dt>Description:

+ * <dd> With this Java class you can simply call dot

+ *      from your Java programs

+ * <dt>Example usage:

+ * <dd>

+ * <pre>

+ *    GraphViz gv = new GraphViz();

+ *    gv.addln(gv.start_graph());

+ *    gv.addln("A -> B;");

+ *    gv.addln("A -> C;");

+ *    gv.addln(gv.end_graph());

+ *    System.out.println(gv.getDotSource());

+ *

+ *    String type = "gif";

+ *    File out = new File("out." + type);   // out.gif in this example

+ *    gv.writeGraphToFile( gv.getGraph( gv.getDotSource(), type ), out );

+ * </pre>

+ * </dd>

+ *

+ * </dl>

+ *

+ * @version v0.4, 2011/02/05 (February) -- Patch of Keheliya Gallaba is added. Now you

+ * can specify the type of the output file: gif, dot, fig, pdf, ps, svg, png, etc.

+ * @version v0.3, 2010/11/29 (November) -- Windows support + ability 

+ * to read the graph from a text file

+ * @version v0.2, 2010/07/22 (July) -- bug fix

+ * @version v0.1, 2003/12/04 (December) -- first release

+ * @author  Laszlo Szathmary (<a href="jabba.laci@gmail.com">jabba.laci@gmail.com</a>)

+ */

+public class GraphViz

+{

+   /**

+    * The dir. where temporary files will be created.

+    */

+   private static String TEMP_DIR = "/tmp";	// Linux

+ //  private static String TEMP_DIR = "c:/temp";	// Windows

+

+   /**

+    * Where is your dot program located? It will be called externally.

+    */

+   private static String DOT = "/usr/bin/dot";	// Linux

+//   private static String DOT = "c:/Program Files/Graphviz2.26.3/bin/dot.exe";	// Windows

+

+   /**

+    * The source of the graph written in dot language.

+    */

+	private StringBuilder graph = new StringBuilder();

+

+   /**

+    * Constructor: creates a new GraphViz object that will contain

+    * a graph.

+    */

+   public GraphViz() {

+   }

+

+   /**

+    * Returns the graph's source description in dot language.

+    * @return Source of the graph in dot language.

+    */

+   public String getDotSource() {

+      return graph.toString();

+   }

+

+   /**

+    * Adds a string to the graph's source (without newline).

+    */

+   public void add(String line) {

+      graph.append(line);

+   }

+

+   /**

+    * Adds a string to the graph's source (with newline).

+    */

+   public void addln(String line) {

+      graph.append(line + "\n");

+   }

+

+   /**

+    * Adds a newline to the graph's source.

+    */

+   public void addln() {

+      graph.append('\n');

+   }

+

+   /**

+    * Returns the graph as an image in binary format.

+    * @param dot_source Source of the graph to be drawn.

+    * @param type Type of the output image to be produced, e.g.: gif, dot, fig, pdf, ps, svg, png.

+    * @return A byte array containing the image of the graph.

+    */

+   public byte[] getGraph(String dot_source, String type)

+   {

+      File dot;

+      byte[] img_stream = null;

+   

+      try {

+         dot = writeDotSourceToFile(dot_source);

+         if (dot != null)

+         {

+            img_stream = get_img_stream(dot, type);

+            if (dot.delete() == false) 

+               System.err.println("Warning: " + dot.getAbsolutePath() + " could not be deleted!");

+            return img_stream;

+         }

+         return null;

+      } catch (java.io.IOException ioe) { return null; }

+   }

+

+   /**

+    * Writes the graph's image in a file.

+    * @param img   A byte array containing the image of the graph.

+    * @param file  Name of the file to where we want to write.

+    * @return Success: 1, Failure: -1

+    */

+   public int writeGraphToFile(byte[] img, String file)

+   {

+      File to = new File(file);

+      return writeGraphToFile(img, to);

+   }

+

+   /**

+    * Writes the graph's image in a file.

+    * @param img   A byte array containing the image of the graph.

+    * @param to    A File object to where we want to write.

+    * @return Success: 1, Failure: -1

+    */

+   public int writeGraphToFile(byte[] img, File to)

+   {

+      try {

+         FileOutputStream fos = new FileOutputStream(to);

+         fos.write(img);

+         fos.close();

+      } catch (java.io.IOException ioe) { return -1; }

+      return 1;

+   }

+

+   /**

+    * It will call the external dot program, and return the image in

+    * binary format.

+    * @param dot Source of the graph (in dot language).

+    * @param type Type of the output image to be produced, e.g.: gif, dot, fig, pdf, ps, svg, png.

+    * @return The image of the graph in .gif format.

+    */

+   private byte[] get_img_stream(File dot, String type)

+   {

+      File img;

+      byte[] img_stream = null;

+

+      try {

+         img = File.createTempFile("graph_", "."+type, new File(GraphViz.TEMP_DIR));

+         Runtime rt = Runtime.getRuntime();

+         

+         // patch by Mike Chenault

+         String[] args = {DOT, "-T"+type, dot.getAbsolutePath(), "-o", img.getAbsolutePath()};

+         Process p = rt.exec(args);

+         

+         p.waitFor();

+

+         FileInputStream in = new FileInputStream(img.getAbsolutePath());

+         img_stream = new byte[in.available()];

+         in.read(img_stream);

+         // Close it if we need to

+         if( in != null ) in.close();

+

+         if (img.delete() == false) 

+            System.err.println("Warning: " + img.getAbsolutePath() + " could not be deleted!");

+      }

+      catch (java.io.IOException ioe) {

+         System.err.println("Error:    in I/O processing of tempfile in dir " + GraphViz.TEMP_DIR+"\n");

+         System.err.println("       or in calling external command");

+         ioe.printStackTrace();

+      }

+      catch (java.lang.InterruptedException ie) {

+         System.err.println("Error: the execution of the external program was interrupted");

+         ie.printStackTrace();

+      }

+

+      return img_stream;

+   }

+

+   /**

+    * Writes the source of the graph in a file, and returns the written file

+    * as a File object.

+    * @param str Source of the graph (in dot language).

+    * @return The file (as a File object) that contains the source of the graph.

+    */

+   private File writeDotSourceToFile(String str) throws java.io.IOException

+   {

+      File temp;

+      try {

+         temp = File.createTempFile("graph_", ".dot.tmp", new File(GraphViz.TEMP_DIR));

+         FileWriter fout = new FileWriter(temp);

+         fout.write(str);

+         fout.close();

+      }

+      catch (Exception e) {

+         System.err.println("Error: I/O error while writing the dot source to temp file!");

+         return null;

+      }

+      return temp;

+   }

+

+   /**

+    * Returns a string that is used to start a graph.

+    * @return A string to open a graph.

+    */

+   public String start_graph() {

+      return "digraph G {";

+   }

+

+   /**

+    * Returns a string that is used to end a graph.

+    * @return A string to close a graph.

+    */

+   public String end_graph() {

+      return "}";

+   }

+

+   /**

+    * Read a DOT graph from a text file.

+    * 

+    * @param input Input text file containing the DOT graph

+    * source.

+    */

+   public void readSource(String input)

+   {

+	   StringBuilder sb = new StringBuilder();

+	   

+	   try

+	   {

+		   FileInputStream fis = new FileInputStream(input);

+		   DataInputStream dis = new DataInputStream(fis);

+		   BufferedReader br = new BufferedReader(new InputStreamReader(dis));

+		   String line;

+		   while ((line = br.readLine()) != null) {

+			   sb.append(line);

+		   }

+		   dis.close();

+	   } 

+	   catch (Exception e) {

+		   System.err.println("Error: " + e.getMessage());

+	   }

+	   

+	   this.graph = sb;

+   }

+   

+} // end of class GraphViz

+

diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/Proba.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/Proba.java
new file mode 100644
index 0000000..6bd66e5
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/Proba.java
@@ -0,0 +1,69 @@
+package edu.uci.ics.genomix.pregelix.graph;
+
+import java.io.File;
+
+public class Proba
+{
+   public static void main(String[] args)
+   {
+      Proba p = new Proba();
+      p.start();
+//      p.start2();
+   }
+
+   /**
+    * Construct a DOT graph in memory, convert it
+    * to image and store the image in the file system.
+    */
+   private void start()
+   {
+      GraphViz gv = new GraphViz();
+      gv.addln(gv.start_graph());
+      gv.addln("A -> B;");
+      gv.addln("B -> C;");
+      gv.addln("C -> D;");
+      gv.addln("D -> E;");
+      gv.addln("E -> A;");
+      gv.addln(gv.end_graph()); 
+      System.out.println(gv.getDotSource());
+      
+//      String type = "gif";
+//      String type = "dot";
+//      String type = "fig";    // open with xfig
+//      String type = "pdf";
+      String type = "ps";
+//      String type = "svg";    // open with inkscape
+//      String type = "png";
+//      String type = "plain";
+      File out = new File("graph_out." + type);   // Linux
+//      File out = new File("c:/eclipse.ws/graphviz-java-api/out." + type);    // Windows
+      gv.writeGraphToFile( gv.getGraph( gv.getDotSource(), type ), out );
+   }
+   
+   /**
+    * Read the DOT source from a file,
+    * convert to image and store the image in the file system.
+    */
+   private void start2()
+   {
+      String dir = "/home/jabba/eclipse2/laszlo.sajat/graphviz-java-api";     // Linux
+      String input = dir + "/sample/simple.dot";
+//	   String input = "c:/eclipse.ws/graphviz-java-api/sample/simple.dot";    // Windows
+	   
+	   GraphViz gv = new GraphViz();
+	   gv.readSource(input);
+	   System.out.println(gv.getDotSource());
+   		
+      String type = "gif";
+//    String type = "dot";
+//    String type = "fig";    // open with xfig
+//    String type = "pdf";
+//    String type = "ps";
+//    String type = "svg";    // open with inkscape
+//    String type = "png";
+//      String type = "plain";
+	   File out = new File("/tmp/simple." + type);   // Linux
+//	   File out = new File("c:/eclipse.ws/graphviz-java-api/tmp/simple." + type);   // Windows
+	   gv.writeGraphToFile( gv.getGraph( gv.getDotSource(), type ), out );
+   }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/hdfs/HDFSOperation.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/hdfs/HDFSOperation.java
similarity index 98%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/hdfs/HDFSOperation.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/hdfs/HDFSOperation.java
index ea972ef..824722a 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/hdfs/HDFSOperation.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/hdfs/HDFSOperation.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.hdfs;
+package edu.uci.ics.genomix.pregelix.hdfs;
 
 import java.io.IOException;
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/testDeleteVertexId.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testDeleteVertexId.java
similarity index 89%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/testDeleteVertexId.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testDeleteVertexId.java
index 061b8b5..fd6f0c5 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/testDeleteVertexId.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testDeleteVertexId.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.util.Arrays;
 import java.util.Iterator;
@@ -9,9 +9,9 @@
 
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
-import edu.uci.ics.pregelix.bitwise.BitwiseOperation;
-import edu.uci.ics.pregelix.example.client.Client;
-import edu.uci.ics.pregelix.example.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.bitwise.BitwiseOperation;
+import edu.uci.ics.genomix.pregelix.example.client.Client;
+import edu.uci.ics.genomix.pregelix.example.io.MessageWritable;
 
 /*
  * vertexId: BytesWritable
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/GenerateTestInput.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/GenerateTestInput.java
new file mode 100644
index 0000000..2dac10d
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/GenerateTestInput.java
@@ -0,0 +1,77 @@
+package edu.uci.ics.genomix.pregelix.testcase;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+
+public class GenerateTestInput {
+
+	/**
+	 * Simple Path
+	 */
+	public static String simplePath(int k, int length, int numLines){
+		RandomString rs = new RandomString(k, length);
+		String output = "";
+		for(int i = 0; i < numLines; i++)
+			output += rs.nextString(0) + "\r\n";
+		return output;
+	}
+	/**
+	 * Tree Path
+	 */
+	public static String treePath(int k, int x, int y, int z){
+		RandomString rs = new RandomString(k, x + y + k - 1);
+		String s1 = rs.nextString(0);
+		rs.setLength(x + y + z + k - 1);
+		rs.addString(s1.substring(0, x));
+		String s2 = rs.nextString(x);
+		rs.setLength(x + y + z + k - 1);
+		rs.addString(s2.substring(0,x + y));
+		String s3 = rs.nextString(x + y);
+		return s1 + "\r\n" + s2 + "\r\n" + s3;
+	}
+	/**
+	 * Cycle Path  
+	 */
+	public static String cyclePath(int k, int length){
+		RandomString rs = new RandomString(k, length);
+		String s1 = rs.nextString(0);
+		String s2 = s1 + s1.substring(1, k + 1);
+		return s2;
+	}
+	/**
+	 * Bridge Path
+	 */
+	public static String bridgePath(int k, int x){
+		RandomString rs = new RandomString(k, x + k + 2 + k - 1);
+		String s1 = rs.nextString(0);
+		rs.setLength(x + k + 2);
+		rs.addString(s1.substring(0, k + 2));
+		String s2 = rs.nextString(k + 2) + s1.substring(x + k + 2, x + k + 2 + k - 1);
+		return s1 + "\r\n" + s2;
+	}
+
+	public static void main(String[] args) {
+		// TODO Auto-generated method stub
+		OutputStreamWriter writer;
+		try {
+			writer = new OutputStreamWriter(new FileOutputStream("SinglePath"));
+			writer.write(simplePath(5,10,1));
+			writer.close();
+			writer = new OutputStreamWriter(new FileOutputStream("SimplePath"));
+			writer.write(simplePath(5,10,3));
+			writer.close();
+			writer = new OutputStreamWriter(new FileOutputStream("TreePath"));
+			writer.write(treePath(5, 5, 5, 3));
+			writer.close();
+			writer = new OutputStreamWriter(new FileOutputStream("CyclePath"));
+			writer.write(cyclePath(5,10));
+			writer.close();
+			writer = new OutputStreamWriter(new FileOutputStream("BridgePath"));
+			writer.write(bridgePath(5,2));
+			writer.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/RandomString.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/RandomString.java
new file mode 100644
index 0000000..337c5d8
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/RandomString.java
@@ -0,0 +1,63 @@
+package edu.uci.ics.genomix.pregelix.testcase;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+public class RandomString
+{
+
+  private static final char[] symbols = new char[4];
+
+  static {
+	  symbols[0] = 'A';
+	  symbols[1] = 'C';
+	  symbols[2] = 'G';
+	  symbols[3] = 'T';
+  }
+
+  private final Random random = new Random(); 
+
+  private char[] buf;
+  
+  private ArrayList<String> existKmer = new ArrayList<String>();;
+  
+  private int k;
+
+  public RandomString(int k, int length)
+  {
+    if (length < 1)
+      throw new IllegalArgumentException("length < 1: " + length);
+    buf = new char[length];
+    this.k = k;
+  }
+
+  public String nextString(int startIdx)
+  {
+	String tmp = "";
+    for (int idx = startIdx; idx < buf.length;){ 
+    	buf[idx] = symbols[random.nextInt(4)]; 
+    	if(idx >= k - 1){
+    		tmp = new String(buf, idx-k+1, k);
+    		if(!existKmer.contains(tmp)){
+    			existKmer.add(tmp);
+    			idx++;
+    		}
+    	}
+    	else
+    		idx++;
+    }
+    	
+    return new String(buf);
+  }
+  
+  public void setLength(int length){
+	  buf = new char[length];
+  }
+  
+  public void addString(String s){
+	  char[] tmp = s.toCharArray();
+	  for(int i = 0; i < tmp.length; i++)
+		  buf[i] = tmp[i];
+  }
+
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/Message.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/Message.java
similarity index 75%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/Message.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/Message.java
index 5280fef..f965d64 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/Message.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/Message.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.type;
+package edu.uci.ics.genomix.pregelix.type;
 
 public class Message {
 	
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/State.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java
similarity index 86%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/State.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java
index c62688e..2a2a3f3 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/State.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.type;
+package edu.uci.ics.genomix.pregelix.type;
 
 public class State {
 	public static final int NON_VERTEX = 0;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/Kmer.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/Kmer.java
deleted file mode 100644
index f35da10..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/Kmer.java
+++ /dev/null
@@ -1,208 +0,0 @@
-package edu.uci.ics.pregelix.type;
-
-public class Kmer {
-
-	public final static byte[] GENE_SYMBOL = { 'A', 'C', 'G', 'T' };
-
-	public final static class GENE_CODE {
-
-		/**
-		 * make sure this 4 ids equal to the sequence id of char in
-		 * {@GENE_SYMBOL}
-		 */
-		public static final byte A = 0;
-		public static final byte C = 1;
-		public static final byte G = 2;
-		public static final byte T = 3;
-
-		public static byte getCodeFromSymbol(byte ch) {
-			byte r = 0;
-			switch (ch) {
-			case 'A':
-			case 'a':
-				r = A;
-				break;
-			case 'C':
-			case 'c':
-				r = C;
-				break;
-			case 'G':
-			case 'g':
-				r = G;
-				break;
-			case 'T':
-			case 't':
-				r = T;
-				break;
-			}
-			return r;
-		}
-
-		public static byte getSymbolFromCode(byte code) {
-			if (code > 3) {
-				return '!';
-			}
-			return GENE_SYMBOL[code];
-		}
-
-		public static byte getAdjBit(byte t) {
-			byte r = 0;
-			switch (t) {
-			case 'A':
-			case 'a':
-				r = 1 << A;
-				break;
-			case 'C':
-			case 'c':
-				r = 1 << C;
-				break;
-			case 'G':
-			case 'g':
-				r = 1 << G;
-				break;
-			case 'T':
-			case 't':
-				r = 1 << T;
-				break;
-			}
-			return r;
-		}
-
-		public static byte mergePreNextAdj(byte pre, byte next) {
-			return (byte) (pre << 4 | (next & 0x0f));
-		}
-
-		public static String getSymbolFromBitMap(byte code) {
-			int left = (code >> 4) & 0x0F;
-			int right = code & 0x0F;
-			StringBuilder str = new StringBuilder();
-			for (int i = A; i <= T; i++) {
-				if ((left & (1 << i)) != 0) {
-					str.append((char)GENE_SYMBOL[i]);
-				}
-			}
-			str.append('|');
-			for (int i = A; i <= T; i++) {
-				if ((right & (1 << i)) != 0) {
-					str.append((char)GENE_SYMBOL[i]);
-				}
-			}
-			return str.toString();
-		}
-	}
-
-	public static String recoverKmerFrom(int k, byte[] keyData, int keyStart,
-			int keyLength) {
-		StringBuilder strKmer = new StringBuilder();
-		int byteId = keyStart + keyLength - 1;
-		byte currentbyte = keyData[byteId];
-		for (int geneCount = 0; geneCount < k; geneCount++) {
-			if (geneCount % 4 == 0 && geneCount > 0) {
-				currentbyte = keyData[--byteId];
-			}
-			strKmer.append((char) GENE_SYMBOL[(currentbyte >> ((geneCount % 4) * 2)) & 0x03]);
-		}
-		return strKmer.toString();
-	}
-	
-	public static int getByteNumFromK(int k){
-		int x = k/4;
-		if (k%4 !=0){
-			x+=1;
-		}
-		return x;
-	}
-
-	/**
-	 * Compress Kmer into bytes array AATAG will compress as [0 0 0 G][A T A A]
-	 * 
-	 * @param kmer
-	 * @param input
-	 *            array
-	 * @param start
-	 *            position
-	 * @return initialed kmer array
-	 */
-	public static byte[] CompressKmer(int k, byte[] array, int start) {
-		final int byteNum = getByteNumFromK(k);
-		byte[] bytes = new byte[byteNum];
-
-		byte l = 0;
-		int bytecount = 0;
-		int bcount = byteNum - 1;
-		for (int i = start; i < start + k; i++) {
-			byte code = GENE_CODE.getCodeFromSymbol(array[i]);
-			l |= (byte) (code << bytecount);
-			bytecount += 2;
-			if (bytecount == 8) {
-				bytes[bcount--] = l;
-				l = 0;
-				bytecount = 0;
-			}
-		}
-		if (bcount >= 0) {
-			bytes[0] = l;
-		}
-		return bytes;
-	}
-
-	/**
-	 * Shift Kmer to accept new input
-	 * 
-	 * @param kmer
-	 * @param bytes
-	 *            Kmer Array
-	 * @param c
-	 *            Input new gene character
-	 * @return the shiftout gene, in gene code format
-	 */
-	public static byte MoveKmer(int k, byte[] kmer, byte c) {
-		int byteNum = kmer.length;
-		byte output = (byte) (kmer[byteNum - 1] & 0x03);
-		for (int i = byteNum - 1; i > 0; i--) {
-			byte in = (byte) (kmer[i - 1] & 0x03);
-			kmer[i] = (byte) (((kmer[i] >>> 2) & 0x3f) | (in << 6));
-		}
-
-		int pos = ((k - 1) % 4) * 2;
-		byte code = (byte) (GENE_CODE.getCodeFromSymbol(c) << pos);
-		kmer[0] = (byte) (((kmer[0] >>> 2) & 0x3f) | code);
-		return (byte) (1 << output);
-	}
-
-	public static void main(String[] argv) {
-		byte[] array = { 'A', 'A', 'T', 'A', 'G', 'A', 'A', 'G' };
-		int k = 5;
-		byte[] kmer = CompressKmer(k, array, 0);
-		for (byte b : kmer) {
-			System.out.print(Integer.toBinaryString(b));
-			System.out.print(' ');
-		}
-		System.out.println();
-		System.out.println(recoverKmerFrom(k, kmer, 0, kmer.length));
-
-		for (int i = k; i < array.length-1; i++) {
-			byte out = MoveKmer(k, kmer, array[i]);
-
-			System.out.println((int) out);
-			for (byte b : kmer) {
-				System.out.print(Integer.toBinaryString(b));
-				System.out.print(' ');
-			}
-			System.out.println();
-			System.out.println(recoverKmerFrom(k, kmer, 0, kmer.length));
-		}
-
-		byte out = MoveKmer(k, kmer, array[array.length - 1]);
-
-		System.out.println((int) out);
-		for (byte b : kmer) {
-			System.out.print(Integer.toBinaryString(b));
-			System.out.print(' ');
-		}
-		System.out.println();
-		System.out.println(recoverKmerFrom(k, kmer, 0, kmer.length));
-
-	}
-
-}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/KmerBytesWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/KmerBytesWritable.java
deleted file mode 100644
index 230b3f7..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/KmerBytesWritable.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * you may obtain a copy of the License from
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package edu.uci.ics.pregelix.type;
-
-import java.io.IOException;
-import java.io.DataInput;
-import java.io.DataOutput;
-import org.apache.hadoop.io.BinaryComparable;
-import org.apache.hadoop.io.WritableComparable;
-import org.apache.hadoop.io.WritableComparator;
-
-public class KmerBytesWritable extends BinaryComparable implements WritableComparable<BinaryComparable> {
-    private static final int LENGTH_BYTES = 4;
-    private static final byte[] EMPTY_BYTES = {};
-    private byte size;
-    private byte[] bytes;
-
-    public KmerBytesWritable() {
-        this(EMPTY_BYTES);
-    }
-
-    public KmerBytesWritable(byte[] bytes) {
-        this.bytes = bytes;
-        this.size = (byte) bytes.length;
-    }
-
-    @Override
-    public byte[] getBytes() {
-        return bytes;
-    }
-
-    @Deprecated
-    public byte[] get() {
-        return getBytes();
-    }
-
-    @Override
-    public int getLength() {
-        return (int) size;
-    }
-
-    @Deprecated
-    public int getSize() {
-        return getLength();
-    }
-
-    public void setSize(byte size) {
-        if ((int) size > getCapacity()) {
-            setCapacity((byte) (size * 3 / 2));
-        }
-        this.size = size;
-    }
-
-    public int getCapacity() {
-        return bytes.length;
-    }
-
-    public void setCapacity(byte new_cap) {
-        if (new_cap != getCapacity()) {
-            byte[] new_data = new byte[new_cap];
-            if (new_cap < size) {
-                size = new_cap;
-            }
-            if (size != 0) {
-                System.arraycopy(bytes, 0, new_data, 0, size);
-            }
-            bytes = new_data;
-        }
-    }
-
-    public void set(KmerBytesWritable newData) {
-        set(newData.bytes, (byte) 0, newData.size);
-    }
-
-    public void set(byte[] newData, byte offset, byte length) {
-        setSize((byte) 0);
-        setSize(length);
-        System.arraycopy(newData, offset, bytes, 0, size);
-    }
-
-    public void readFields(DataInput in) throws IOException {
-        setSize((byte) 0); // clear the old data
-        setSize(in.readByte());
-        in.readFully(bytes, 0, size);
-    }
-
-    @Override
-    public void write(DataOutput out) throws IOException {
-        out.writeByte(size);
-        out.write(bytes, 0, size);
-    }
-
-    @Override
-    public int hashCode() {
-        return super.hashCode();
-    }
-
-    @Override
-    public boolean equals(Object right_obj) {
-        if (right_obj instanceof KmerBytesWritable)
-            return super.equals(right_obj);
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        StringBuffer sb = new StringBuffer(3 * size);
-        for (int idx = 0; idx < (int) size; idx++) {
-            // if not the first, put a blank separator in
-            if (idx != 0) {
-                sb.append(' ');
-            }
-            String num = Integer.toHexString(0xff & bytes[idx]);
-            // if it is only one digit, add a leading 0.
-            if (num.length() < 2) {
-                sb.append('0');
-            }
-            sb.append(num);
-        }
-        return sb.toString();
-    }
-
-    public static class Comparator extends WritableComparator {
-        public Comparator() {
-            super(KmerBytesWritable.class);
-        }
-
-        public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
-            return compareBytes(b1, s1 + LENGTH_BYTES, l1 - LENGTH_BYTES, b2, s2 + LENGTH_BYTES, l2 - LENGTH_BYTES);
-        }
-    }
-
-    static { // register this comparator
-        WritableComparator.define(KmerBytesWritable.class, new Comparator());
-    }
-}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/KmerCountValue.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/KmerCountValue.java
deleted file mode 100644
index 1900eca..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/KmerCountValue.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * you may obtain a copy of the License from
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package edu.uci.ics.pregelix.type;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-
-import org.apache.hadoop.io.Writable;
-
-
-public class KmerCountValue implements  Writable{
-	private byte adjBitMap;
-	private byte count;
-
-	public KmerCountValue(byte bitmap, byte count) {
-		reset(bitmap, count);
-	}
-	
-	public KmerCountValue() {
-		adjBitMap = 0;
-		count = 0;
-	}
-
-	@Override
-	public void readFields(DataInput arg0) throws IOException {
-		adjBitMap = arg0.readByte();
-		count = arg0.readByte();
-	}
-
-	@Override
-	public void write(DataOutput arg0) throws IOException {
-		arg0.writeByte(adjBitMap);
-		arg0.writeByte(count);
-	}
-
-	@Override
-	public String toString() {
-		return Kmer.GENE_CODE.getSymbolFromBitMap(adjBitMap) + '\t' + String.valueOf(count);
-	}
-
-	public void reset(byte bitmap, byte count) {
-		this.adjBitMap = bitmap;
-		this.count = count;
-	}
-	public byte getAdjBitMap() {
-        return adjBitMap;
-    }
-	
-	public void setAdjBitMap(byte adjBitMap) {
-		this.adjBitMap = adjBitMap;
-	}
-
-	public void setCount(byte count) {
-		this.count = count;
-	}
-
-	public byte getCount() {
-	    return count;
-	}
-}
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/JobGen/JobGenerator.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
similarity index 84%
rename from genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/JobGen/JobGenerator.java
rename to genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
index 625c1d4..7e740cd 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/JobGen/JobGenerator.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.JobGen;
+package edu.uci.ics.genomix.pregelix.JobGen;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -10,17 +10,16 @@
 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
 
-import edu.uci.ics.pregelix.BinaryLoadGraphInputFormat;
-import edu.uci.ics.pregelix.BinaryLoadGraphOutputFormat;
-import edu.uci.ics.pregelix.LoadGraphVertex;
-import edu.uci.ics.pregelix.LogAlgorithmForMergeGraphInputFormat;
-import edu.uci.ics.pregelix.LogAlgorithmForMergeGraphOutputFormat;
-import edu.uci.ics.pregelix.LogAlgorithmForMergeGraphVertex;
-import edu.uci.ics.pregelix.MergeGraphVertex;
-import edu.uci.ics.pregelix.TestLoadGraphVertex;
-import edu.uci.ics.pregelix.TextLoadGraphInputFormat;
-import edu.uci.ics.pregelix.testDeleteVertexId;
-import edu.uci.ics.pregelix.LoadGraphVertex.SimpleLoadGraphVertexOutputFormat;
+import edu.uci.ics.genomix.pregelix.BinaryLoadGraphInputFormat;
+import edu.uci.ics.genomix.pregelix.BinaryLoadGraphOutputFormat;
+import edu.uci.ics.genomix.pregelix.LoadGraphVertex;
+import edu.uci.ics.genomix.pregelix.LogAlgorithmForMergeGraphInputFormat;
+import edu.uci.ics.genomix.pregelix.LogAlgorithmForMergeGraphOutputFormat;
+import edu.uci.ics.genomix.pregelix.LogAlgorithmForMergeGraphVertex;
+import edu.uci.ics.genomix.pregelix.MergeGraphVertex;
+import edu.uci.ics.genomix.pregelix.TestLoadGraphVertex;
+import edu.uci.ics.genomix.pregelix.TextLoadGraphInputFormat;
+import edu.uci.ics.genomix.pregelix.LoadGraphVertex.SimpleLoadGraphVertexOutputFormat;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
 
 
@@ -100,8 +99,8 @@
 	 */
 	public static void main(String[] args) throws IOException {
 		// TODO Auto-generated method stub
-		genBinaryLoadGraph();
-		//genMergeGraph();
+		//genBinaryLoadGraph();
+		genMergeGraph();
 		//genLogAlgorithmForMergeGraph();
 		//genSequenceLoadGraph();
 		//genBasicBinaryLoadGraph();
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/JobRun/RunJobTestCase.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RunJobTestCase.java
similarity index 97%
rename from genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/JobRun/RunJobTestCase.java
rename to genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RunJobTestCase.java
index 7af814c..98a7eea 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/JobRun/RunJobTestCase.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RunJobTestCase.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.JobRun;
+package edu.uci.ics.genomix.pregelix.JobRun;
 
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -13,6 +13,7 @@
 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
 import org.junit.Test;
 
+import edu.uci.ics.genomix.pregelix.example.util.TestUtils;
 import edu.uci.ics.hyracks.api.job.JobSpecification;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
 import edu.uci.ics.pregelix.core.jobgen.JobGen;
@@ -22,7 +23,6 @@
 import edu.uci.ics.pregelix.core.jobgen.JobGenOuterJoinSort;
 import edu.uci.ics.pregelix.core.util.PregelixHyracksIntegrationUtil;
 import edu.uci.ics.pregelix.dataflow.util.IterationUtils;
-import edu.uci.ics.pregelix.example.util.TestUtils;
 
 public class RunJobTestCase extends TestCase{
 	
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/JobRun/RunJobTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RunJobTestSuite.java
similarity index 97%
rename from genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/JobRun/RunJobTestSuite.java
rename to genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RunJobTestSuite.java
index 251e223..e657b94 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/JobRun/RunJobTestSuite.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RunJobTestSuite.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.JobRun;
+package edu.uci.ics.genomix.pregelix.JobRun;
 
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
@@ -41,7 +41,7 @@
 	private static final String PATH_TO_ONLY = "src/test/resources/only.txt";
 	private static final String FILE_EXTENSION_OF_RESULTS = "result";
 
-	private static final String DATA_PATH = "data/input/part-1-out-50000";//sequenceFileMergeTest
+	private static final String DATA_PATH = "data/input/SinglePath.seq";//sequenceFileMergeTest
 	private static final String HDFS_PATH = "/webmap/";
 	
 	private static final String HYRACKS_APP_NAME = "pregelix";
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/LoadGraphVertexTest.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/LoadGraphVertexTest.java
similarity index 95%
rename from genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/LoadGraphVertexTest.java
rename to genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/LoadGraphVertexTest.java
index e88098d..3087377 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/LoadGraphVertexTest.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/LoadGraphVertexTest.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import static org.junit.Assert.*;
 
@@ -14,9 +14,9 @@
 
 import org.junit.Test;
 
-import edu.uci.ics.pregelix.LoadGraphVertex.SimpleLoadGraphVertexOutputFormat;
+import edu.uci.ics.genomix.pregelix.LoadGraphVertex.SimpleLoadGraphVertexOutputFormat;
+import edu.uci.ics.genomix.pregelix.example.client.Client;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
-import edu.uci.ics.pregelix.example.client.Client;
 
 public class LoadGraphVertexTest {
 
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/example/util/TestUtils.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/example/util/TestUtils.java
similarity index 98%
rename from genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/example/util/TestUtils.java
rename to genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/example/util/TestUtils.java
index d89ec46..4ea3c1d 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/example/util/TestUtils.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/example/util/TestUtils.java
@@ -12,7 +12,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package edu.uci.ics.pregelix.example.util;
+package edu.uci.ics.genomix.pregelix.example.util;
 
 import java.io.BufferedReader;
 import java.io.File;