add hyrack format
diff --git a/genomix/genomix-data/.classpath b/genomix/genomix-data/.classpath
index 6e26406..7f85d53 100644
--- a/genomix/genomix-data/.classpath
+++ b/genomix/genomix-data/.classpath
@@ -5,6 +5,7 @@
 	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
 	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/genomix/genomix-data/.project b/genomix/genomix-data/.project
index f22376e..2749b29 100644
--- a/genomix/genomix-data/.project
+++ b/genomix/genomix-data/.project
@@ -15,8 +15,14 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
+		<buildCommand>
+			<name>org.maven.ide.eclipse.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
 	</buildSpec>
 	<natures>
+		<nature>org.maven.ide.eclipse.maven2Nature</nature>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.m2e.core.maven2Nature</nature>
 	</natures>
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexInputFormat.java
index e1868b1..a4134af 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexInputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexInputFormat.java
@@ -16,13 +16,13 @@
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 import edu.uci.ics.genomix.type.KmerCountValue;
 
-public class BinaryVertexInputFormat <I extends WritableComparable<?>, V extends Writable, E extends Writable, M extends Writable>
-	extends VertexInputFormat<I, V, E, M>{
-	
+public class BinaryVertexInputFormat<I extends WritableComparable<?>, V extends Writable, E extends Writable, M extends Writable>
+        extends VertexInputFormat<I, V, E, M> {
+
     /** Uses the SequenceFileInputFormat to do everything */
-	@SuppressWarnings("rawtypes")
-	protected SequenceFileInputFormat binaryInputFormat = new SequenceFileInputFormat();
-    
+    @SuppressWarnings("rawtypes")
+    protected SequenceFileInputFormat binaryInputFormat = new SequenceFileInputFormat();
+
     /**
      * Abstract class to be implemented by the user based on their specific
      * vertex input. Easiest to ignore the key value separator and only use key
@@ -38,7 +38,7 @@
     public static abstract class BinaryVertexReader<I extends WritableComparable<?>, V extends Writable, E extends Writable, M extends Writable>
             implements VertexReader<I, V, E, M> {
         /** Internal line record reader */
-        private final RecordReader<KmerBytesWritable,KmerCountValue> lineRecordReader;
+        private final RecordReader<KmerBytesWritable, KmerCountValue> lineRecordReader;
         /** Context passed to initialize */
         private TaskAttemptContext context;
 
@@ -74,7 +74,7 @@
          * 
          * @return Record reader to be used for reading.
          */
-        protected RecordReader<KmerBytesWritable,KmerCountValue> getRecordReader() {
+        protected RecordReader<KmerBytesWritable, KmerCountValue> getRecordReader() {
             return lineRecordReader;
         }
 
@@ -89,21 +89,17 @@
     }
 
     @SuppressWarnings("unchecked")
-	@Override
+    @Override
     public List<InputSplit> getSplits(JobContext context, int numWorkers) throws IOException, InterruptedException {
         // Ignore the hint of numWorkers here since we are using SequenceFileInputFormat
         // to do this for us
         return binaryInputFormat.getSplits(context);
     }
 
-	@Override
-	public VertexReader<I, V, E, M> createVertexReader(InputSplit split,
-			TaskAttemptContext context) throws IOException {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-
-
+    @Override
+    public VertexReader<I, V, E, M> createVertexReader(InputSplit split, TaskAttemptContext context) throws IOException {
+        // TODO Auto-generated method stub
+        return null;
+    }
 
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexOutputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexOutputFormat.java
index 1435770..d921b5e 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexOutputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexOutputFormat.java
@@ -30,7 +30,7 @@
 public abstract class BinaryVertexOutputFormat<I extends WritableComparable, V extends Writable, E extends Writable>
         extends VertexOutputFormat<I, V, E> {
     /** Uses the SequenceFileOutputFormat to do everything */
-	protected SequenceFileOutputFormat binaryOutputFormat = new SequenceFileOutputFormat();
+    protected SequenceFileOutputFormat binaryOutputFormat = new SequenceFileOutputFormat();
 
     /**
      * Abstract class to be implemented by the user based on their specific
@@ -92,7 +92,7 @@
 
     @Override
     public void checkOutputSpecs(JobContext context) throws IOException, InterruptedException {
-    	binaryOutputFormat.checkOutputSpecs(context);
+        binaryOutputFormat.checkOutputSpecs(context);
     }
 
     @Override
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/client/Client.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/client/Client.java
index e35f10c..f849b21 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/client/Client.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/client/Client.java
@@ -1,4 +1,3 @@
-
 package edu.uci.ics.genomix.pregelix.client;
 
 import java.io.IOException;
@@ -33,10 +32,10 @@
 
         @Option(name = "-plan", usage = "query plan choice", required = false)
         public Plan planChoice = Plan.OUTER_JOIN;
-        
+
         @Option(name = "-kmer-size", usage = "the size of kmer", required = false)
         public int sizeKmer;
-        
+
         @Option(name = "-num-iteration", usage = "max number of iterations, for pagerank job only", required = false)
         public int numIteration = -1;
 
@@ -62,7 +61,7 @@
         FileOutputFormat.setOutputPath(job, new Path(options.outputPath));
         job.getConfiguration().setInt(NaiveAlgorithmForPathMergeVertex.KMER_SIZE, options.sizeKmer);
         job.getConfiguration().setInt(LogAlgorithmForPathMergeVertex.KMER_SIZE, options.sizeKmer);
-        if (options.numIteration > 0){
+        if (options.numIteration > 0) {
             job.getConfiguration().setInt(NaiveAlgorithmForPathMergeVertex.ITERATIONS, options.numIteration);
             job.getConfiguration().setInt(LogAlgorithmForPathMergeVertex.ITERATIONS, options.numIteration);
         }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForPathMergeInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForPathMergeInputFormat.java
index 7a7e43d..4a76ff6 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForPathMergeInputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForPathMergeInputFormat.java
@@ -18,17 +18,17 @@
 import edu.uci.ics.pregelix.api.util.BspUtils;
 
 public class LogAlgorithmForPathMergeInputFormat extends
-	BinaryVertexInputFormat<KmerBytesWritable, ValueStateWritable, NullWritable, LogAlgorithmMessageWritable>{
-	/**
-	 * Format INPUT
-	 */
+        BinaryVertexInputFormat<KmerBytesWritable, ValueStateWritable, NullWritable, LogAlgorithmMessageWritable> {
+    /**
+     * Format INPUT
+     */
     @SuppressWarnings("unchecked")
-	@Override
+    @Override
     public VertexReader<KmerBytesWritable, ValueStateWritable, NullWritable, LogAlgorithmMessageWritable> createVertexReader(
             InputSplit split, TaskAttemptContext context) throws IOException {
         return new BinaryLoadGraphReader(binaryInputFormat.createRecordReader(split, context));
     }
-    
+
     @SuppressWarnings("rawtypes")
     class BinaryLoadGraphReader extends
             BinaryVertexReader<KmerBytesWritable, ValueStateWritable, NullWritable, LogAlgorithmMessageWritable> {
@@ -36,7 +36,7 @@
         private KmerBytesWritable vertexId = null;
         private ValueStateWritable vertexValue = new ValueStateWritable();
 
-        public BinaryLoadGraphReader(RecordReader<KmerBytesWritable,KmerCountValue> recordReader) {
+        public BinaryLoadGraphReader(RecordReader<KmerBytesWritable, KmerCountValue> recordReader) {
             super(recordReader);
         }
 
@@ -47,33 +47,33 @@
 
         @SuppressWarnings("unchecked")
         @Override
-        public Vertex<KmerBytesWritable, ValueStateWritable, NullWritable, LogAlgorithmMessageWritable> getCurrentVertex() throws IOException,
-                InterruptedException {
+        public Vertex<KmerBytesWritable, ValueStateWritable, NullWritable, LogAlgorithmMessageWritable> getCurrentVertex()
+                throws IOException, InterruptedException {
             if (vertex == null)
                 vertex = (Vertex) BspUtils.createVertex(getContext().getConfiguration());
 
             vertex.getMsgList().clear();
             vertex.getEdges().clear();
-            
-            if(getRecordReader() != null){
-	            /**
-	             * set the src vertex id
-	             */
-            	if(vertexId == null)
-            		vertexId = new KmerBytesWritable(getRecordReader().getCurrentKey().getKmerLength());
-        		vertexId.set(getRecordReader().getCurrentKey());
-        		vertex.setVertexId(vertexId);
-	            /**
-	             * set the vertex value
-	             */
-	            KmerCountValue kmerCountValue = getRecordReader().getCurrentValue();
-	            vertexValue.setAdjMap(kmerCountValue.getAdjBitMap()); 
-	            vertexValue.setState(State.NON_VERTEX);
-	            vertex.setVertexValue(vertexValue);
+
+            if (getRecordReader() != null) {
+                /**
+                 * set the src vertex id
+                 */
+                if (vertexId == null)
+                    vertexId = new KmerBytesWritable(getRecordReader().getCurrentKey().getKmerLength());
+                vertexId.set(getRecordReader().getCurrentKey());
+                vertex.setVertexId(vertexId);
+                /**
+                 * set the vertex value
+                 */
+                KmerCountValue kmerCountValue = getRecordReader().getCurrentValue();
+                vertexValue.setAdjMap(kmerCountValue.getAdjBitMap());
+                vertexValue.setState(State.NON_VERTEX);
+                vertex.setVertexValue(vertexValue);
             }
-            
+
             return vertex;
         }
     }
-	
+
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForPathMergeOutputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForPathMergeOutputFormat.java
index f0b2915..68d70ad 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForPathMergeOutputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForPathMergeOutputFormat.java
@@ -13,35 +13,35 @@
 import edu.uci.ics.genomix.pregelix.type.State;
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 
-public class LogAlgorithmForPathMergeOutputFormat extends 
-	BinaryVertexOutputFormat<KmerBytesWritable, ValueStateWritable, NullWritable> {
+public class LogAlgorithmForPathMergeOutputFormat extends
+        BinaryVertexOutputFormat<KmerBytesWritable, ValueStateWritable, NullWritable> {
 
-		
+    @Override
+    public VertexWriter<KmerBytesWritable, ValueStateWritable, NullWritable> createVertexWriter(
+            TaskAttemptContext context) throws IOException, InterruptedException {
+        @SuppressWarnings("unchecked")
+        RecordWriter<KmerBytesWritable, ValueStateWritable> recordWriter = binaryOutputFormat.getRecordWriter(context);
+        return new BinaryLoadGraphVertexWriter(recordWriter);
+    }
+
+    /**
+     * Simple VertexWriter that supports {@link BinaryLoadGraphVertex}
+     */
+    public static class BinaryLoadGraphVertexWriter extends
+            BinaryVertexWriter<KmerBytesWritable, ValueStateWritable, NullWritable> {
+
+        public BinaryLoadGraphVertexWriter(RecordWriter<KmerBytesWritable, ValueStateWritable> lineRecordWriter) {
+            super(lineRecordWriter);
+        }
+
         @Override
-        public VertexWriter<KmerBytesWritable, ValueStateWritable, NullWritable> createVertexWriter(TaskAttemptContext context)
+        public void writeVertex(Vertex<KmerBytesWritable, ValueStateWritable, NullWritable, ?> vertex)
                 throws IOException, InterruptedException {
-            @SuppressWarnings("unchecked")
-			RecordWriter<KmerBytesWritable, ValueStateWritable> recordWriter = binaryOutputFormat.getRecordWriter(context);
-            return new BinaryLoadGraphVertexWriter(recordWriter);
-        }
-        
-        /**
-         * Simple VertexWriter that supports {@link BinaryLoadGraphVertex}
-         */
-        public static class BinaryLoadGraphVertexWriter extends
-                BinaryVertexWriter<KmerBytesWritable, ValueStateWritable, NullWritable> {
-        	
-            public BinaryLoadGraphVertexWriter(RecordWriter<KmerBytesWritable, ValueStateWritable> lineRecordWriter) {
-                super(lineRecordWriter);
+            if (vertex.getVertexValue().getState() != State.END_VERTEX
+                    && vertex.getVertexValue().getState() != State.MID_VERTEX) {
+                getRecordWriter().write(vertex.getVertexId(), vertex.getVertexValue());
             }
-            @Override
-            public void writeVertex(Vertex<KmerBytesWritable, ValueStateWritable, NullWritable, ?> vertex) throws IOException,
-                    InterruptedException {
-            	if(vertex.getVertexValue().getState() != State.END_VERTEX
-            			&& vertex.getVertexValue().getState() != State.MID_VERTEX){
-            		getRecordWriter().write(vertex.getVertexId(),vertex.getVertexValue());
-            	}
-                    
-            }
+
         }
+    }
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/NaiveAlgorithmForPathMergeInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/NaiveAlgorithmForPathMergeInputFormat.java
index ca134c0..8abfcd0 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/NaiveAlgorithmForPathMergeInputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/NaiveAlgorithmForPathMergeInputFormat.java
@@ -18,22 +18,22 @@
 import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryVertexInputFormat.BinaryVertexReader;
 
 public class NaiveAlgorithmForPathMergeInputFormat extends
-	BinaryVertexInputFormat<KmerBytesWritable, ValueStateWritable, NullWritable, NaiveAlgorithmMessageWritable>{
-	/**
-	 * Format INPUT
-	 */
+        BinaryVertexInputFormat<KmerBytesWritable, ValueStateWritable, NullWritable, NaiveAlgorithmMessageWritable> {
+    /**
+     * Format INPUT
+     */
     @SuppressWarnings("unchecked")
-	@Override
+    @Override
     public VertexReader<KmerBytesWritable, ValueStateWritable, NullWritable, NaiveAlgorithmMessageWritable> createVertexReader(
             InputSplit split, TaskAttemptContext context) throws IOException {
         return new BinaryLoadGraphReader(binaryInputFormat.createRecordReader(split, context));
-    }	
+    }
 }
 
 @SuppressWarnings("rawtypes")
 class BinaryLoadGraphReader extends
         BinaryVertexReader<KmerBytesWritable, ValueStateWritable, NullWritable, NaiveAlgorithmMessageWritable> {
-	private Vertex vertex;
+    private Vertex vertex;
     private KmerBytesWritable vertexId = null;
     private ValueStateWritable vertexValue = new ValueStateWritable();
 
@@ -48,31 +48,31 @@
 
     @SuppressWarnings("unchecked")
     @Override
-    public Vertex<KmerBytesWritable, ValueStateWritable, NullWritable, NaiveAlgorithmMessageWritable> getCurrentVertex() throws IOException,
-            InterruptedException {
+    public Vertex<KmerBytesWritable, ValueStateWritable, NullWritable, NaiveAlgorithmMessageWritable> getCurrentVertex()
+            throws IOException, InterruptedException {
         if (vertex == null)
             vertex = (Vertex) BspUtils.createVertex(getContext().getConfiguration());
 
         vertex.getMsgList().clear();
         vertex.getEdges().clear();
-        
+
         vertex.reset();
-        if(getRecordReader() != null){
+        if (getRecordReader() != null) {
             /**
              * set the src vertex id
              */
-        	if(vertexId == null)
-        		vertexId = new KmerBytesWritable(getRecordReader().getCurrentKey().getKmerLength());
-    		vertexId.set(getRecordReader().getCurrentKey());
-    		vertex.setVertexId(vertexId);
+            if (vertexId == null)
+                vertexId = new KmerBytesWritable(getRecordReader().getCurrentKey().getKmerLength());
+            vertexId.set(getRecordReader().getCurrentKey());
+            vertex.setVertexId(vertexId);
             /**
              * set the vertex value
              */
             KmerCountValue kmerCountValue = getRecordReader().getCurrentValue();
-            vertexValue.setAdjMap(kmerCountValue.getAdjBitMap()); 
+            vertexValue.setAdjMap(kmerCountValue.getAdjBitMap());
             vertex.setVertexValue(vertexValue);
         }
-        
+
         return vertex;
     }
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/NaiveAlgorithmForPathMergeOutputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/NaiveAlgorithmForPathMergeOutputFormat.java
index e3f14a4..311283d 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/NaiveAlgorithmForPathMergeOutputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/NaiveAlgorithmForPathMergeOutputFormat.java
@@ -12,33 +12,32 @@
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.io.VertexWriter;
 
-public class NaiveAlgorithmForPathMergeOutputFormat extends 
-	BinaryVertexOutputFormat<KmerBytesWritable, ValueStateWritable, NullWritable> {
-	
-	
+public class NaiveAlgorithmForPathMergeOutputFormat extends
+        BinaryVertexOutputFormat<KmerBytesWritable, ValueStateWritable, NullWritable> {
+
+    @Override
+    public VertexWriter<KmerBytesWritable, ValueStateWritable, NullWritable> createVertexWriter(
+            TaskAttemptContext context) throws IOException, InterruptedException {
+        @SuppressWarnings("unchecked")
+        RecordWriter<KmerBytesWritable, ValueStateWritable> recordWriter = binaryOutputFormat.getRecordWriter(context);
+        return new BinaryLoadGraphVertexWriter(recordWriter);
+    }
+
+    /**
+     * Simple VertexWriter that supports {@link BinaryLoadGraphVertex}
+     */
+    public static class BinaryLoadGraphVertexWriter extends
+            BinaryVertexWriter<KmerBytesWritable, ValueStateWritable, NullWritable> {
+        public BinaryLoadGraphVertexWriter(RecordWriter<KmerBytesWritable, ValueStateWritable> lineRecordWriter) {
+            super(lineRecordWriter);
+        }
 
         @Override
-        public VertexWriter<KmerBytesWritable, ValueStateWritable, NullWritable> createVertexWriter(TaskAttemptContext context)
+        public void writeVertex(Vertex<KmerBytesWritable, ValueStateWritable, NullWritable, ?> vertex)
                 throws IOException, InterruptedException {
-            @SuppressWarnings("unchecked")
-			RecordWriter<KmerBytesWritable, ValueStateWritable> recordWriter = binaryOutputFormat.getRecordWriter(context);
-            return new BinaryLoadGraphVertexWriter(recordWriter);
+            //if(vertex.getVertexValue().getState() == State.FILTER
+            //		|| vertex.getVertexValue().getState() == State.FINAL_VERTEX)
+            getRecordWriter().write(vertex.getVertexId(), vertex.getVertexValue());
         }
-        
-        /**
-         * Simple VertexWriter that supports {@link BinaryLoadGraphVertex}
-         */
-        public static class BinaryLoadGraphVertexWriter extends
-                BinaryVertexWriter<KmerBytesWritable, ValueStateWritable, NullWritable> {
-            public BinaryLoadGraphVertexWriter(RecordWriter<KmerBytesWritable, ValueStateWritable> lineRecordWriter) {
-                super(lineRecordWriter);
-            }
-            @Override
-            public void writeVertex(Vertex<KmerBytesWritable, ValueStateWritable, NullWritable, ?> vertex) throws IOException,
-                    InterruptedException {
-            	//if(vertex.getVertexValue().getState() == State.FILTER
-            	//		|| vertex.getVertexValue().getState() == State.FINAL_VERTEX)
-            	getRecordWriter().write(vertex.getVertexId(),vertex.getVertexValue());
-            }
-        }
+    }
 }
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
index 237cca7..3e66beb 100644
--- 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
@@ -5,55 +5,54 @@
 import java.io.FileReader;
 
 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("BridgePath_7");
-		g.start("CyclePath_7");
-		g.start("SimplePath_7");
-		g.start("SinglePath_7");
-		g.start("TreePath_7");
-	}
+    /**
+     * 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("BridgePath_7");
+        g.start("CyclePath_7");
+        g.start("SimplePath_7");
+        g.start("SinglePath_7");
+        g.start("TreePath_7");
+    }
 }
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
index c2178bc..4175595 100644
--- 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
@@ -37,252 +37,261 @@
  * <dl>

  * <dt>Purpose: GraphViz Java API

  * <dd>

- *

  * <dt>Description:

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

- *      from your Java programs

+ * <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 );

+ * GraphViz gv = new GraphViz();

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

+ * gv.addln(&quot;A -&gt; B;&quot;);

+ * gv.addln(&quot;A -&gt; C;&quot;);

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

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

+ * 

+ * String type = &quot;gif&quot;;

+ * File out = new File(&quot;out.&quot; + 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

+ *          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>)

+ * @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

+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

+    /**

+     * 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();

+    /**

+     * 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() {

-   }

+    /**

+     * 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();

-   }

+    /**

+     * 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 (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 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');

-   }

+    /**

+     * 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; }

-   }

+    /**

+     * 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;

 

-   /**

-    * 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);

-   }

+        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 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;

-   }

+    /**

+     * 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);

+    }

 

-   /**

-    * 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;

+    /**

+     * 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;

+    }

 

-      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();

+    /**

+     * 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;

 

-         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();

+        try {

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

+            Runtime rt = Runtime.getRuntime();

 

-         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();

-      }

+            // patch by Mike Chenault

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

+            Process p = rt.exec(args);

 

-      return img_stream;

-   }

+            p.waitFor();

 

-   /**

-    * 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;

-   }

+            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();

 

-   /**

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

-    * @return A string to open a graph.

-    */

-   public String start_graph() {

-      return "digraph G {";

-   }

+            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();

+        }

 

-   /**

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

-    * @return A string to close a graph.

-    */

-   public String end_graph() {

-      return "}";

-   }

+        return img_stream;

+    }

 

-   /**

-    * 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;

-   }

-   

+    /**

+     * 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/io/LogAlgorithmMessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/LogAlgorithmMessageWritable.java
index 43759a6..fc57b74 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/LogAlgorithmMessageWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/LogAlgorithmMessageWritable.java
@@ -11,143 +11,143 @@
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 
-public class LogAlgorithmMessageWritable implements WritableComparable<LogAlgorithmMessageWritable>{
-	/**
-	 * sourceVertexId stores source vertexId when headVertex sends the message
-	 * 				  stores neighber vertexValue when pathVertex sends the message
-	 * chainVertexId stores the chains of connected DNA
-	 * file stores the point to the file that stores the chains of connected DNA
-	 */
-	private KmerBytesWritable sourceVertexId;
-	private VKmerBytesWritable chainVertexId;
-	private byte adjMap;
-	private byte message;
-	
-	private byte checkMessage;
-	
-	public LogAlgorithmMessageWritable(){
-		sourceVertexId = new VKmerBytesWritable(LogAlgorithmForPathMergeVertex.kmerSize);
-		chainVertexId = new VKmerBytesWritable(LogAlgorithmForPathMergeVertex.kmerSize);
-		adjMap = 0;
-		message = 0;
-		checkMessage = 0;
-	}
-	
-	public void set(KmerBytesWritable sourceVertexId, VKmerBytesWritable chainVertexId, byte adjMap, byte message){
-		checkMessage = 0;
-		if(sourceVertexId != null){
-			checkMessage |= CheckMessage.SOURCE;
-			this.sourceVertexId.set(sourceVertexId);
-		}
-		if(chainVertexId != null){
-			checkMessage |= CheckMessage.CHAIN;
-			this.chainVertexId.set(chainVertexId);
-		}
-		if(adjMap != 0){
-			checkMessage |= CheckMessage.ADJMAP;
-			this.adjMap = adjMap;
-		}
-		this.message = message;
-	}
-	
-	public void reset(){
-		checkMessage = 0;
-		chainVertexId.reset(LogAlgorithmForPathMergeVertex.kmerSize);
-		adjMap = (byte)0;
-		message = 0;
-	}
+public class LogAlgorithmMessageWritable implements WritableComparable<LogAlgorithmMessageWritable> {
+    /**
+     * sourceVertexId stores source vertexId when headVertex sends the message
+     * stores neighber vertexValue when pathVertex sends the message
+     * chainVertexId stores the chains of connected DNA
+     * file stores the point to the file that stores the chains of connected DNA
+     */
+    private KmerBytesWritable sourceVertexId;
+    private VKmerBytesWritable chainVertexId;
+    private byte adjMap;
+    private byte message;
 
-	public KmerBytesWritable getSourceVertexId() {
-		return sourceVertexId;
-	}
+    private byte checkMessage;
 
-	public void setSourceVertexId(KmerBytesWritable sourceVertexId) {
-		if(sourceVertexId != null){
-			checkMessage |= CheckMessage.SOURCE;
-			this.sourceVertexId.set(sourceVertexId);
-		}
-	}
+    public LogAlgorithmMessageWritable() {
+        sourceVertexId = new VKmerBytesWritable(LogAlgorithmForPathMergeVertex.kmerSize);
+        chainVertexId = new VKmerBytesWritable(LogAlgorithmForPathMergeVertex.kmerSize);
+        adjMap = 0;
+        message = 0;
+        checkMessage = 0;
+    }
 
-	public byte getAdjMap() {
-		return adjMap;
-	}
+    public void set(KmerBytesWritable sourceVertexId, VKmerBytesWritable chainVertexId, byte adjMap, byte message) {
+        checkMessage = 0;
+        if (sourceVertexId != null) {
+            checkMessage |= CheckMessage.SOURCE;
+            this.sourceVertexId.set(sourceVertexId);
+        }
+        if (chainVertexId != null) {
+            checkMessage |= CheckMessage.CHAIN;
+            this.chainVertexId.set(chainVertexId);
+        }
+        if (adjMap != 0) {
+            checkMessage |= CheckMessage.ADJMAP;
+            this.adjMap = adjMap;
+        }
+        this.message = message;
+    }
 
-	public void setAdjMap(byte adjMap) {
-		if(adjMap != 0){
-			checkMessage |= CheckMessage.ADJMAP;
-			this.adjMap = adjMap;
-		}
-	}
+    public void reset() {
+        checkMessage = 0;
+        chainVertexId.reset(LogAlgorithmForPathMergeVertex.kmerSize);
+        adjMap = (byte) 0;
+        message = 0;
+    }
 
-	public VKmerBytesWritable getChainVertexId() {
-		return chainVertexId;
-	}
+    public KmerBytesWritable getSourceVertexId() {
+        return sourceVertexId;
+    }
 
-	public void setChainVertexId(VKmerBytesWritable chainVertexId) {
-		if(chainVertexId != null){
-			checkMessage |= CheckMessage.CHAIN;
-			this.chainVertexId.set(chainVertexId);
-		}
-	}
+    public void setSourceVertexId(KmerBytesWritable sourceVertexId) {
+        if (sourceVertexId != null) {
+            checkMessage |= CheckMessage.SOURCE;
+            this.sourceVertexId.set(sourceVertexId);
+        }
+    }
 
-	public byte getMessage() {
-		return message;
-	}
+    public byte getAdjMap() {
+        return adjMap;
+    }
 
-	public void setMessage(byte message) {
-		this.message = message;
-	}
+    public void setAdjMap(byte adjMap) {
+        if (adjMap != 0) {
+            checkMessage |= CheckMessage.ADJMAP;
+            this.adjMap = adjMap;
+        }
+    }
 
-	public int getLengthOfChain() {
-		return chainVertexId.getKmerLength();
-	}
-	
-	@Override
-	public void write(DataOutput out) throws IOException {
-		out.writeByte(checkMessage);
-		if((checkMessage & CheckMessage.SOURCE) != 0)
-			sourceVertexId.write(out);
-		if((checkMessage & CheckMessage.CHAIN) != 0)
-			chainVertexId.write(out);
-		if((checkMessage & CheckMessage.ADJMAP) != 0)
-			out.write(adjMap);
-		out.writeByte(message);
-	}
+    public VKmerBytesWritable getChainVertexId() {
+        return chainVertexId;
+    }
 
-	@Override
-	public void readFields(DataInput in) throws IOException {
-		this.reset();
-		checkMessage = in.readByte();
-		if((checkMessage & CheckMessage.SOURCE) != 0)
-			sourceVertexId.readFields(in);
-		if((checkMessage & CheckMessage.CHAIN) != 0)
-			chainVertexId.readFields(in);
-		if((checkMessage & CheckMessage.ADJMAP) != 0)
-			adjMap = in.readByte();
-		message = in.readByte();
-	}
+    public void setChainVertexId(VKmerBytesWritable chainVertexId) {
+        if (chainVertexId != null) {
+            checkMessage |= CheckMessage.CHAIN;
+            this.chainVertexId.set(chainVertexId);
+        }
+    }
 
-	 @Override
+    public byte getMessage() {
+        return message;
+    }
+
+    public void setMessage(byte message) {
+        this.message = message;
+    }
+
+    public int getLengthOfChain() {
+        return chainVertexId.getKmerLength();
+    }
+
+    @Override
+    public void write(DataOutput out) throws IOException {
+        out.writeByte(checkMessage);
+        if ((checkMessage & CheckMessage.SOURCE) != 0)
+            sourceVertexId.write(out);
+        if ((checkMessage & CheckMessage.CHAIN) != 0)
+            chainVertexId.write(out);
+        if ((checkMessage & CheckMessage.ADJMAP) != 0)
+            out.write(adjMap);
+        out.writeByte(message);
+    }
+
+    @Override
+    public void readFields(DataInput in) throws IOException {
+        this.reset();
+        checkMessage = in.readByte();
+        if ((checkMessage & CheckMessage.SOURCE) != 0)
+            sourceVertexId.readFields(in);
+        if ((checkMessage & CheckMessage.CHAIN) != 0)
+            chainVertexId.readFields(in);
+        if ((checkMessage & CheckMessage.ADJMAP) != 0)
+            adjMap = in.readByte();
+        message = in.readByte();
+    }
+
+    @Override
     public int hashCode() {
         return chainVertexId.hashCode();
     }
-	 
+
     @Override
     public boolean equals(Object o) {
         if (o instanceof LogAlgorithmMessageWritable) {
-        	LogAlgorithmMessageWritable tp = (LogAlgorithmMessageWritable) o;
+            LogAlgorithmMessageWritable tp = (LogAlgorithmMessageWritable) o;
             return chainVertexId.equals(tp.chainVertexId);
         }
         return false;
     }
-    
+
     @Override
     public String toString() {
         return chainVertexId.toString();
     }
-    
-	@Override
-	public int compareTo(LogAlgorithmMessageWritable tp) {
-		return chainVertexId.compareTo(tp.chainVertexId);
-	}
+
+    @Override
+    public int compareTo(LogAlgorithmMessageWritable tp) {
+        return chainVertexId.compareTo(tp.chainVertexId);
+    }
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/NaiveAlgorithmMessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/NaiveAlgorithmMessageWritable.java
index 6228d0c..f9574a4 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/NaiveAlgorithmMessageWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/NaiveAlgorithmMessageWritable.java
@@ -12,136 +12,138 @@
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 
-public class NaiveAlgorithmMessageWritable implements WritableComparable<NaiveAlgorithmMessageWritable>{
-	/**
-	 * sourceVertexId stores source vertexId when headVertex sends the message
-	 * 				  stores neighber vertexValue when pathVertex sends the message
-	 * file stores the point to the file that stores the chains of connected DNA
-	 */
-	private KmerBytesWritable sourceVertexId;
-	private byte adjMap;
-	private byte lastGeneCode;
-	private byte message;
-	
-	private byte checkMessage;
-	
-	public NaiveAlgorithmMessageWritable(){
-		sourceVertexId = new VKmerBytesWritable(NaiveAlgorithmForPathMergeVertex.kmerSize);
-		adjMap = (byte)0;
-		lastGeneCode = (byte)0;
-		message = Message.NON;
-		checkMessage = (byte)0;
-	}
-	
-	public void set(KmerBytesWritable sourceVertex, byte adjMap, byte lastGeneCode, byte message){
-		checkMessage = 0;
-		if(sourceVertexId != null){
-			checkMessage |= CheckMessage.SOURCE;
-			this.sourceVertexId.set(sourceVertexId);
-		}
-		if(adjMap != 0){
-			checkMessage |= CheckMessage.ADJMAP;
-			this.adjMap = adjMap;
-		}
-		if(lastGeneCode != 0){
-			checkMessage |= CheckMessage.LASTGENECODE;
-			this.lastGeneCode = lastGeneCode;
-		}
-		this.message = message;
-	}
-	
-	public void reset(){
-		checkMessage = 0;
-		adjMap = (byte)0;
-		lastGeneCode = (byte)0;
-		message = Message.NON;
-	}
+public class NaiveAlgorithmMessageWritable implements WritableComparable<NaiveAlgorithmMessageWritable> {
+    /**
+     * sourceVertexId stores source vertexId when headVertex sends the message
+     * stores neighber vertexValue when pathVertex sends the message
+     * file stores the point to the file that stores the chains of connected DNA
+     */
+    private KmerBytesWritable sourceVertexId;
+    private byte adjMap;
+    private byte lastGeneCode;
+    private byte message;
 
-	public KmerBytesWritable getSourceVertexId() {
-		return sourceVertexId;
-	}
+    private byte checkMessage;
 
-	public void setSourceVertexId(KmerBytesWritable sourceVertexId) {
-		if(sourceVertexId != null){
-			checkMessage |= CheckMessage.SOURCE;
-			this.sourceVertexId.set(sourceVertexId);
-		}
-	}
+    public NaiveAlgorithmMessageWritable() {
+        sourceVertexId = new VKmerBytesWritable(NaiveAlgorithmForPathMergeVertex.kmerSize);
+        adjMap = (byte) 0;
+        lastGeneCode = (byte) 0;
+        message = Message.NON;
+        checkMessage = (byte) 0;
+    }
 
-	public byte getAdjMap() {
-		return adjMap;
-	}
+    public void set(KmerBytesWritable sourceVertex, byte adjMap, byte lastGeneCode, byte message) {
+        checkMessage = 0;
+        if (sourceVertexId != null) {
+            checkMessage |= CheckMessage.SOURCE;
+            this.sourceVertexId.set(sourceVertexId);
+        }
+        if (adjMap != 0) {
+            checkMessage |= CheckMessage.ADJMAP;
+            this.adjMap = adjMap;
+        }
+        if (lastGeneCode != 0) {
+            checkMessage |= CheckMessage.LASTGENECODE;
+            this.lastGeneCode = lastGeneCode;
+        }
+        this.message = message;
+    }
 
-	public void setAdjMap(byte adjMap) {
-		if(adjMap != 0){
-			checkMessage |= CheckMessage.ADJMAP;
-			this.adjMap = adjMap;
-		}
-	}
+    public void reset() {
+        checkMessage = 0;
+        adjMap = (byte) 0;
+        lastGeneCode = (byte) 0;
+        message = Message.NON;
+    }
 
-	public byte getLastGeneCode() {
-		return lastGeneCode;
-	}
+    public KmerBytesWritable getSourceVertexId() {
+        return sourceVertexId;
+    }
 
-	public void setLastGeneCode(byte lastGeneCode) {
-		if(lastGeneCode != 0){
-			checkMessage |= CheckMessage.LASTGENECODE;
-			this.lastGeneCode = lastGeneCode;
-		}
-	}
+    public void setSourceVertexId(KmerBytesWritable sourceVertexId) {
+        if (sourceVertexId != null) {
+            checkMessage |= CheckMessage.SOURCE;
+            this.sourceVertexId.set(sourceVertexId);
+        }
+    }
 
-	public byte getMessage() {
-		return message;
-	}
+    public byte getAdjMap() {
+        return adjMap;
+    }
 
-	public void setMessage(byte message) {
-		this.message = message;
-	}
+    public void setAdjMap(byte adjMap) {
+        if (adjMap != 0) {
+            checkMessage |= CheckMessage.ADJMAP;
+            this.adjMap = adjMap;
+        }
+    }
 
-	@Override
-	public void write(DataOutput out) throws IOException {
-		out.writeByte(checkMessage);
-		if((checkMessage & CheckMessage.SOURCE) != 0)
-			sourceVertexId.write(out);
-		if((checkMessage & CheckMessage.ADJMAP) != 0)
-			out.write(adjMap);
-		if((checkMessage & CheckMessage.LASTGENECODE) != 0)
-			out.write(lastGeneCode);
-		out.write(message);
-	}
+    public byte getLastGeneCode() {
+        return lastGeneCode;
+    }
 
-	@Override
-	public void readFields(DataInput in) throws IOException {
-		this.reset();
-		checkMessage = in.readByte();
-		if((checkMessage & CheckMessage.SOURCE) != 0)
-			sourceVertexId.readFields(in);
-		if((checkMessage & CheckMessage.ADJMAP) != 0)
-			adjMap = in.readByte();
-		if((checkMessage & CheckMessage.LASTGENECODE) != 0)
-			lastGeneCode = in.readByte();
-		message = in.readByte();
-	}
+    public void setLastGeneCode(byte lastGeneCode) {
+        if (lastGeneCode != 0) {
+            checkMessage |= CheckMessage.LASTGENECODE;
+            this.lastGeneCode = lastGeneCode;
+        }
+    }
+
+    public byte getMessage() {
+        return message;
+    }
+
+    public void setMessage(byte message) {
+        this.message = message;
+    }
+
+    @Override
+    public void write(DataOutput out) throws IOException {
+        out.writeByte(checkMessage);
+        if ((checkMessage & CheckMessage.SOURCE) != 0)
+            sourceVertexId.write(out);
+        if ((checkMessage & CheckMessage.ADJMAP) != 0)
+            out.write(adjMap);
+        if ((checkMessage & CheckMessage.LASTGENECODE) != 0)
+            out.write(lastGeneCode);
+        out.write(message);
+    }
+
+    @Override
+    public void readFields(DataInput in) throws IOException {
+        this.reset();
+        checkMessage = in.readByte();
+        if ((checkMessage & CheckMessage.SOURCE) != 0)
+            sourceVertexId.readFields(in);
+        if ((checkMessage & CheckMessage.ADJMAP) != 0)
+            adjMap = in.readByte();
+        if ((checkMessage & CheckMessage.LASTGENECODE) != 0)
+            lastGeneCode = in.readByte();
+        message = in.readByte();
+    }
 
     @Override
     public int hashCode() {
         return sourceVertexId.hashCode();
     }
+
     @Override
     public boolean equals(Object o) {
         if (o instanceof NaiveAlgorithmMessageWritable) {
-        	NaiveAlgorithmMessageWritable tp = (NaiveAlgorithmMessageWritable) o;
-            return sourceVertexId.equals( tp.sourceVertexId);
+            NaiveAlgorithmMessageWritable tp = (NaiveAlgorithmMessageWritable) o;
+            return sourceVertexId.equals(tp.sourceVertexId);
         }
         return false;
     }
+
     @Override
     public String toString() {
         return sourceVertexId.toString();
     }
-    
-	@Override
-	public int compareTo(NaiveAlgorithmMessageWritable tp) {
-		return sourceVertexId.compareTo(tp.sourceVertexId);
-	}
+
+    @Override
+    public int compareTo(NaiveAlgorithmMessageWritable tp) {
+        return sourceVertexId.compareTo(tp.sourceVertexId);
+    }
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ValueStateWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ValueStateWritable.java
index 0edc762..9a9e30f 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ValueStateWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ValueStateWritable.java
@@ -9,87 +9,84 @@
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 
-
 public class ValueStateWritable implements WritableComparable<ValueStateWritable> {
 
-	private byte adjMap;
-	private byte state;
-	private VKmerBytesWritable mergeChain;
+    private byte adjMap;
+    private byte state;
+    private VKmerBytesWritable mergeChain;
 
-	public ValueStateWritable() {
-		state = State.NON_VERTEX;
-		mergeChain = new VKmerBytesWritable(0);
-		//isOp = false;
-	}
+    public ValueStateWritable() {
+        state = State.NON_VERTEX;
+        mergeChain = new VKmerBytesWritable(0);
+        //isOp = false;
+    }
 
-	public ValueStateWritable(byte adjMap, byte state, VKmerBytesWritable mergeChain) {
-		this.adjMap = adjMap;
-		this.state = state;
-		this.mergeChain.set(mergeChain);
-	}
-	
-	public void set(byte adjMap, byte state, VKmerBytesWritable mergeChain){
-		this.adjMap = adjMap;
-		this.state = state;
-		this.mergeChain.set(mergeChain);
-	}
+    public ValueStateWritable(byte adjMap, byte state, VKmerBytesWritable mergeChain) {
+        this.adjMap = adjMap;
+        this.state = state;
+        this.mergeChain.set(mergeChain);
+    }
 
-	public byte getAdjMap() {
-		return adjMap;
-	}
+    public void set(byte adjMap, byte state, VKmerBytesWritable mergeChain) {
+        this.adjMap = adjMap;
+        this.state = state;
+        this.mergeChain.set(mergeChain);
+    }
 
-	public void setAdjMap(byte adjMap) {
-		this.adjMap = adjMap;
-	}
+    public byte getAdjMap() {
+        return adjMap;
+    }
 
-	public byte getState() {
-		return state;
-	}
+    public void setAdjMap(byte adjMap) {
+        this.adjMap = adjMap;
+    }
 
-	public void setState(byte state) {
-		this.state = state;
-	}
+    public byte getState() {
+        return state;
+    }
 
-	public int getLengthOfMergeChain() {
-		return mergeChain.getKmerLength();
-	}
-	
-	public VKmerBytesWritable getMergeChain() {
-		return mergeChain;
-	}
+    public void setState(byte state) {
+        this.state = state;
+    }
 
-	public void setMergeChain(KmerBytesWritable mergeChain) {
-		this.mergeChain.set(mergeChain);
-	}
-	
-	public void setMergeChain(VKmerBytesWritable mergeChain) {
-		this.mergeChain.set(mergeChain);
-	}
+    public int getLengthOfMergeChain() {
+        return mergeChain.getKmerLength();
+    }
 
-	@Override
-	public void readFields(DataInput in) throws IOException {
-		adjMap = in.readByte();
-		state = in.readByte();
-		mergeChain.readFields(in);
-	}
+    public VKmerBytesWritable getMergeChain() {
+        return mergeChain;
+    }
 
-	@Override
-	public void write(DataOutput out) throws IOException {
-		out.writeByte(adjMap);
-		out.writeByte(state);
-		mergeChain.write(out);
-	}
+    public void setMergeChain(KmerBytesWritable mergeChain) {
+        this.mergeChain.set(mergeChain);
+    }
 
-	@Override
-	public int compareTo(ValueStateWritable o) {
-		return 0;
-	}
-	
-	@Override
-	public String toString() {
-		return 	GeneCode.getSymbolFromBitMap(adjMap) + "\t" +
-				getLengthOfMergeChain() + "\t" +
-				mergeChain.toString();
-	}
-	
+    public void setMergeChain(VKmerBytesWritable mergeChain) {
+        this.mergeChain.set(mergeChain);
+    }
+
+    @Override
+    public void readFields(DataInput in) throws IOException {
+        adjMap = in.readByte();
+        state = in.readByte();
+        mergeChain.readFields(in);
+    }
+
+    @Override
+    public void write(DataOutput out) throws IOException {
+        out.writeByte(adjMap);
+        out.writeByte(state);
+        mergeChain.write(out);
+    }
+
+    @Override
+    public int compareTo(ValueStateWritable o) {
+        return 0;
+    }
+
+    @Override
+    public String toString() {
+        return GeneCode.getSymbolFromBitMap(adjMap) + "\t" + getLengthOfMergeChain() + "\t" + mergeChain.toString();
+    }
+
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/DataLoadLogFormatter.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/DataLoadLogFormatter.java
index 6105f18..ae950f4 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/DataLoadLogFormatter.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/DataLoadLogFormatter.java
@@ -7,23 +7,22 @@
 import edu.uci.ics.genomix.type.KmerCountValue;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 
-public class DataLoadLogFormatter extends Formatter{
+public class DataLoadLogFormatter extends Formatter {
     private VKmerBytesWritable key;
     private KmerCountValue value;
 
-    public void set(VKmerBytesWritable key, 
-    		KmerCountValue value){
-    	this.key.set(key);
-    	this.value = value;
+    public void set(VKmerBytesWritable key, KmerCountValue value) {
+        this.key.set(key);
+        this.value = value;
     }
-    public String format(LogRecord record) {
-        StringBuilder builder = new StringBuilder(1000); 
-        
-        builder.append(key.toString()
-							+ "\t" + value.toString() + "\r\n");
 
-        if(!formatMessage(record).equals(""))
-        	builder.append(formatMessage(record) + "\r\n");
+    public String format(LogRecord record) {
+        StringBuilder builder = new StringBuilder(1000);
+
+        builder.append(key.toString() + "\t" + value.toString() + "\r\n");
+
+        if (!formatMessage(record).equals(""))
+            builder.append(formatMessage(record) + "\r\n");
         return builder.toString();
     }
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java
index a615334..9eba176 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java
@@ -8,7 +8,7 @@
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 
 public class LogAlgorithmLogFormatter extends Formatter {
-	//
+    //
     // Create a DateFormat to format the logger timestamp.
     //
     //private static final DateFormat df = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
@@ -19,78 +19,82 @@
     private byte state;
     private VKmerBytesWritable mergeChain = new VKmerBytesWritable(1);;
     //private boolean testDelete = false;
-    /** 0: general operation 
-     *  1: testDelete 
-     *  2: testMergeChain
-     *  3: testVoteToHalt
-     */ 
-    private int operation; 
-    
-    public LogAlgorithmLogFormatter(){
+    /**
+     * 0: general operation
+     * 1: testDelete
+     * 2: testMergeChain
+     * 3: testVoteToHalt
+     */
+    private int operation;
+
+    public LogAlgorithmLogFormatter() {
     }
 
-    public void set(long step, VKmerBytesWritable sourceVertexId, 
-    		VKmerBytesWritable destVertexId, LogAlgorithmMessageWritable msg, byte state){
-    	this.step = step;
-    	this.sourceVertexId.set(sourceVertexId);
-    	this.destVertexId.set(destVertexId);
-    	this.msg = msg;
-    	this.state = state;
-    	this.operation = 0;
+    public void set(long step, VKmerBytesWritable sourceVertexId, VKmerBytesWritable destVertexId,
+            LogAlgorithmMessageWritable msg, byte state) {
+        this.step = step;
+        this.sourceVertexId.set(sourceVertexId);
+        this.destVertexId.set(destVertexId);
+        this.msg = msg;
+        this.state = state;
+        this.operation = 0;
     }
-    public void setMergeChain(long step, VKmerBytesWritable sourceVertexId, 
-    		VKmerBytesWritable mergeChain){
-    	this.reset();
-    	this.step = step;
-    	this.sourceVertexId.set(sourceVertexId);
-    	this.mergeChain.set(mergeChain);
-    	this.operation = 2;
+
+    public void setMergeChain(long step, VKmerBytesWritable sourceVertexId, VKmerBytesWritable mergeChain) {
+        this.reset();
+        this.step = step;
+        this.sourceVertexId.set(sourceVertexId);
+        this.mergeChain.set(mergeChain);
+        this.operation = 2;
     }
-    public void setVotoToHalt(long step, VKmerBytesWritable sourceVertexId){
-    	this.reset();
-    	this.step = step;
-    	this.sourceVertexId.set(sourceVertexId);
-    	this.operation = 3;
+
+    public void setVotoToHalt(long step, VKmerBytesWritable sourceVertexId) {
+        this.reset();
+        this.step = step;
+        this.sourceVertexId.set(sourceVertexId);
+        this.operation = 3;
     }
-    public void reset(){
-    	this.sourceVertexId = new VKmerBytesWritable(1);
-    	this.destVertexId = new VKmerBytesWritable(1);
-    	this.msg = new LogAlgorithmMessageWritable();
-    	this.state = 0;
-    	this.mergeChain = new VKmerBytesWritable(1);
+
+    public void reset() {
+        this.sourceVertexId = new VKmerBytesWritable(1);
+        this.destVertexId = new VKmerBytesWritable(1);
+        this.msg = new LogAlgorithmMessageWritable();
+        this.state = 0;
+        this.mergeChain = new VKmerBytesWritable(1);
     }
+
     public String format(LogRecord record) {
         StringBuilder builder = new StringBuilder(1000);
         String source = sourceVertexId.toString();
         String chain = "";
-        
+
         builder.append("Step: " + step + "\r\n");
         builder.append("Source Code: " + source + "\r\n");
-        if(operation == 0){
-	        if(destVertexId.getKmerLength() != -1){
-	        	String dest = destVertexId.toString();
-		        builder.append("Send message to " + "\r\n");
-		        builder.append("Destination Code: " + dest + "\r\n");
-	        }
-	        builder.append("Message is: " + Message.MESSAGE_CONTENT.getContentFromCode(msg.getMessage()) + "\r\n");
-	        	
-	        if(msg.getLengthOfChain() != -1){
-	        	chain = msg.getChainVertexId().toString();
-	        	builder.append("Chain Message: " + chain + "\r\n");
-	        	builder.append("Chain Length: " + msg.getLengthOfChain() + "\r\n");
-	        }
-	        
-	        builder.append("State is: " + State.STATE_CONTENT.getContentFromCode(state) + "\r\n");
+        if (operation == 0) {
+            if (destVertexId.getKmerLength() != -1) {
+                String dest = destVertexId.toString();
+                builder.append("Send message to " + "\r\n");
+                builder.append("Destination Code: " + dest + "\r\n");
+            }
+            builder.append("Message is: " + Message.MESSAGE_CONTENT.getContentFromCode(msg.getMessage()) + "\r\n");
+
+            if (msg.getLengthOfChain() != -1) {
+                chain = msg.getChainVertexId().toString();
+                builder.append("Chain Message: " + chain + "\r\n");
+                builder.append("Chain Length: " + msg.getLengthOfChain() + "\r\n");
+            }
+
+            builder.append("State is: " + State.STATE_CONTENT.getContentFromCode(state) + "\r\n");
         }
-        if(operation == 2){
-        	chain = mergeChain.toString();
-        	builder.append("Merge Chain: " + chain + "\r\n");
-        	builder.append("Merge Chain Length: " + mergeChain.getKmerLength() + "\r\n");
+        if (operation == 2) {
+            chain = mergeChain.toString();
+            builder.append("Merge Chain: " + chain + "\r\n");
+            builder.append("Merge Chain Length: " + mergeChain.getKmerLength() + "\r\n");
         }
-        if(operation == 3)
-        	builder.append("Vote to halt!");
-        if(!formatMessage(record).equals(""))
-        	builder.append(formatMessage(record) + "\r\n");
+        if (operation == 3)
+            builder.append("Vote to halt!");
+        if (!formatMessage(record).equals(""))
+            builder.append(formatMessage(record) + "\r\n");
         builder.append("\n");
         return builder.toString();
     }
@@ -102,10 +106,12 @@
     public String getTail(Handler h) {
         return super.getTail(h);
     }
-	public int getOperation() {
-		return operation;
-	}
-	public void setOperation(int operation) {
-		this.operation = operation;
-	}
+
+    public int getOperation() {
+        return operation;
+    }
+
+    public void setOperation(int operation) {
+        this.operation = operation;
+    }
 }
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/NaiveAlgorithmLogFormatter.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/NaiveAlgorithmLogFormatter.java
index 5d40431..39b0bc1 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/NaiveAlgorithmLogFormatter.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/NaiveAlgorithmLogFormatter.java
@@ -5,7 +5,7 @@
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 
 public class NaiveAlgorithmLogFormatter extends Formatter {
-	//
+    //
     // Create a DateFormat to format the logger timestamp.
     //
     //private static final DateFormat df = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
@@ -13,26 +13,26 @@
     private VKmerBytesWritable sourceVertexId;
     private VKmerBytesWritable destVertexId;
 
-    public void set(long step, VKmerBytesWritable sourceVertexId, 
-    		VKmerBytesWritable destVertexId){
-    	this.step = step;
-    	this.sourceVertexId.set(sourceVertexId);
-    	this.destVertexId.set(destVertexId);
+    public void set(long step, VKmerBytesWritable sourceVertexId, VKmerBytesWritable destVertexId) {
+        this.step = step;
+        this.sourceVertexId.set(sourceVertexId);
+        this.destVertexId.set(destVertexId);
     }
+
     public String format(LogRecord record) {
         StringBuilder builder = new StringBuilder(1000);
         String source = sourceVertexId.toString();
-        
+
         builder.append("Step: " + step + "\r\n");
         builder.append("Source Code: " + source + "\r\n");
-        
-        if(destVertexId != null){
-        	builder.append("Send message to " + "\r\n");
-        	String dest = destVertexId.toString();
-        	builder.append("Destination Code: " + dest + "\r\n");
+
+        if (destVertexId != null) {
+            builder.append("Send message to " + "\r\n");
+            String dest = destVertexId.toString();
+            builder.append("Destination Code: " + dest + "\r\n");
         }
-        if(!formatMessage(record).equals(""))
-        	builder.append(formatMessage(record) + "\r\n");
+        if (!formatMessage(record).equals(""))
+            builder.append(formatMessage(record) + "\r\n");
         builder.append("\n");
         return builder.toString();
     }
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 61f70e3..b033c28 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
@@ -18,6 +18,7 @@
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritableFactory;
+
 /*
  * vertexId: BytesWritable
  * vertexValue: ValueStateWritable
@@ -46,229 +47,230 @@
  * The succeed node and precursor node will be stored in vertexValue and we don't use edgeValue.
  * The details about message are in edu.uci.ics.pregelix.example.io.MessageWritable. 
  */
-public class LogAlgorithmForPathMergeVertex extends Vertex<KmerBytesWritable, ValueStateWritable, NullWritable, LogAlgorithmMessageWritable>{	
-	public static final String KMER_SIZE = "LogAlgorithmForPathMergeVertex.kmerSize";
-	public static final String ITERATIONS = "LogAlgorithmForPathMergeVertex.iteration";
-	public static int kmerSize = -1;
-	private int maxIteration = -1;
-	
-	private LogAlgorithmMessageWritable incomingMsg = new LogAlgorithmMessageWritable();
-	private LogAlgorithmMessageWritable outgoingMsg = new LogAlgorithmMessageWritable();
-	
-	private VKmerBytesWritableFactory kmerFactory = new VKmerBytesWritableFactory(1);
-	private VKmerBytesWritable chainVertexId = new VKmerBytesWritable(1);
-	private VKmerBytesWritable lastKmer = new VKmerBytesWritable(1);
-	/**
-	 * initiate kmerSize, maxIteration
-	 */
-	public void initVertex(){
-		if(kmerSize == -1)
-			kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
-        if (maxIteration < 0) 
+public class LogAlgorithmForPathMergeVertex extends
+        Vertex<KmerBytesWritable, ValueStateWritable, NullWritable, LogAlgorithmMessageWritable> {
+    public static final String KMER_SIZE = "LogAlgorithmForPathMergeVertex.kmerSize";
+    public static final String ITERATIONS = "LogAlgorithmForPathMergeVertex.iteration";
+    public static int kmerSize = -1;
+    private int maxIteration = -1;
+
+    private LogAlgorithmMessageWritable incomingMsg = new LogAlgorithmMessageWritable();
+    private LogAlgorithmMessageWritable outgoingMsg = new LogAlgorithmMessageWritable();
+
+    private VKmerBytesWritableFactory kmerFactory = new VKmerBytesWritableFactory(1);
+    private VKmerBytesWritable chainVertexId = new VKmerBytesWritable(1);
+    private VKmerBytesWritable lastKmer = new VKmerBytesWritable(1);
+
+    /**
+     * initiate kmerSize, maxIteration
+     */
+    public void initVertex() {
+        if (kmerSize == -1)
+            kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
+        if (maxIteration < 0)
             maxIteration = getContext().getConfiguration().getInt(ITERATIONS, 1000000);
         outgoingMsg.reset();
-	}
-	/**
-	 * get destination vertex
-	 */
-	public VKmerBytesWritable getNextDestVertexId(KmerBytesWritable vertexId, byte geneCode){
-		return kmerFactory.shiftKmerWithNextCode(vertexId, geneCode);
-	}
-	
-	public VKmerBytesWritable getPreDestVertexId(KmerBytesWritable vertexId, byte geneCode){
-		return kmerFactory.shiftKmerWithPreCode(vertexId, geneCode);
-	}
-	
-	public VKmerBytesWritable getNextDestVertexIdFromBitmap(KmerBytesWritable chainVertexId, byte adjMap){
-		return getDestVertexIdFromChain(chainVertexId, adjMap);
-	}
-	
-	public VKmerBytesWritable getDestVertexIdFromChain(KmerBytesWritable chainVertexId, byte adjMap){
-		VKmerBytesWritable lastKmer = kmerFactory.getLastKmerFromChain(kmerSize, chainVertexId);
-		return getNextDestVertexId(lastKmer, GeneCode.getGeneCodeFromBitMap((byte)(adjMap & 0x0F)));
-	}
-	/**
-	 * head send message to all next nodes
-	 */
-	public void sendMsgToAllNextNodes(KmerBytesWritable vertexId, byte adjMap){
-		for(byte x = GeneCode.A; x<= GeneCode.T ; x++){
-			if((adjMap & (1 << x)) != 0){
-				sendMsg(getNextDestVertexId(vertexId, x), outgoingMsg);
-			}
-		}
-	}
-	/**
-	 * head send message to all previous nodes
-	 */
-	public void sendMsgToAllPreviousNodes(KmerBytesWritable vertexId, byte adjMap){
-		for(byte x = GeneCode.A; x<= GeneCode.T ; x++){
-			if(((adjMap >> 4) & (1 << x)) != 0){
-				sendMsg(getPreDestVertexId(vertexId, x), outgoingMsg);
-			}
-		}
-	}
-	/**
-	 * start sending message 
-	 */
-	public void startSendMsg(){
-		if(VertexUtil.isHeadVertex(getVertexValue().getAdjMap())){
-			outgoingMsg.setMessage(Message.START);
-			sendMsgToAllNextNodes(getVertexId(), getVertexValue().getAdjMap());
-			voteToHalt();
-		}
-		if(VertexUtil.isRearVertex(getVertexValue().getAdjMap())){
-			outgoingMsg.setMessage(Message.END);
-			sendMsgToAllPreviousNodes(getVertexId(), getVertexValue().getAdjMap());
-			voteToHalt();
-		}
-	}
-	/**
-	 *  initiate head, rear and path node
-	 */
-	public void initState(Iterator<LogAlgorithmMessageWritable> msgIterator){
-		while(msgIterator.hasNext()){
-			if(!VertexUtil.isPathVertex(getVertexValue().getAdjMap())){
-				msgIterator.next();
-				voteToHalt();
-			}
-			else{
-				incomingMsg = msgIterator.next();
-				setState();
-			}
-		}
-	}
-	/**
-	 * set vertex state
-	 */
-	public void setState(){
-		if(incomingMsg.getMessage() == Message.START){
-			getVertexValue().setState(State.START_VERTEX);
-			getVertexValue().setMergeChain(null);
-		}
-		else if(incomingMsg.getMessage() == Message.END && getVertexValue().getState() != State.START_VERTEX){
-			getVertexValue().setState(State.END_VERTEX);
-			getVertexValue().setMergeChain(getVertexId());
-			voteToHalt();
-		}
-		else
-			voteToHalt();
-	}
-	/**
-	 * head send message to path
-	 */
-	public void sendOutMsg(KmerBytesWritable chainVertexId, byte adjMap){
-		if(getVertexValue().getState() == State.START_VERTEX){
-			outgoingMsg.setMessage(Message.START);
-			outgoingMsg.setSourceVertexId(getVertexId());
-			sendMsg(getNextDestVertexIdFromBitmap(chainVertexId, adjMap), outgoingMsg);
-		}
-		else if(getVertexValue().getState() != State.END_VERTEX){
-			outgoingMsg.setMessage(Message.NON);
-			outgoingMsg.setSourceVertexId(getVertexId());
-			sendMsg(getNextDestVertexIdFromBitmap(chainVertexId, adjMap), outgoingMsg);
-		}
-	}
-	/**
-	 * head send message to path
-	 */
-	public void sendMsgToPathVertex(Iterator<LogAlgorithmMessageWritable> msgIterator){
-		if(getSuperstep() == 3){
-			getVertexValue().setMergeChain(getVertexId());
-			sendOutMsg(getVertexId(), getVertexValue().getAdjMap());
-		}
-		else{
-			if(msgIterator.hasNext()){
-				incomingMsg = msgIterator.next();
-				if(mergeChainVertex(msgIterator)){
-					if(incomingMsg.getMessage() == Message.END){
-						if(getVertexValue().getState() == State.START_VERTEX){
-							getVertexValue().setState(State.FINAL_VERTEX);
-							//String source = getVertexValue().getMergeChain().toString();
-							//System.out.println();
-						}
-						else
-							getVertexValue().setState(State.END_VERTEX);
-					}
-					else
-						sendOutMsg(getVertexValue().getMergeChain(), getVertexValue().getAdjMap());
-				}
-			}
-		}
-	}
-	/**
-	 * path response message to head
-	 */
-	public void responseMsgToHeadVertex(Iterator<LogAlgorithmMessageWritable> msgIterator){
-		if(msgIterator.hasNext()){		
-			incomingMsg = msgIterator.next();
-			outgoingMsg.setChainVertexId(getVertexValue().getMergeChain());
-			outgoingMsg.setAdjMap(getVertexValue().getAdjMap());
-			if(getVertexValue().getState() == State.END_VERTEX)
-				outgoingMsg.setMessage(Message.END);
-			sendMsg(incomingMsg.getSourceVertexId(),outgoingMsg);
-			
-			if(incomingMsg.getMessage() == Message.START)
-				deleteVertex(getVertexId());
-		}
-		else{
-			if(getVertexValue().getState() != State.START_VERTEX 
-					&& getVertexValue().getState() != State.END_VERTEX)
-				deleteVertex(getVertexId());//killSelf because it doesn't receive any message
-		}
-	}
-	/**
-	 * merge chainVertex and store in vertexVal.chainVertexId
-	 */
-	public boolean mergeChainVertex(Iterator<LogAlgorithmMessageWritable> msgIterator){
-		//merge chain
-		lastKmer.set(kmerFactory.getLastKmerFromChain(incomingMsg.getLengthOfChain() - kmerSize + 1, 
-				incomingMsg.getChainVertexId()));
-		chainVertexId.set(kmerFactory.mergeTwoKmer(getVertexValue().getMergeChain(), 
-				lastKmer));
-		if(VertexUtil.isCycle(getVertexId(), chainVertexId, kmerSize)){
-			getVertexValue().setMergeChain(null);
-			getVertexValue().setAdjMap(VertexUtil.reverseAdjMap(getVertexValue().getAdjMap(),
-					chainVertexId.getGeneCodeAtPosition(kmerSize)));
-			getVertexValue().setState(State.CYCLE);
-			return false;
-		}
-		else
-			getVertexValue().setMergeChain(chainVertexId);
-		
-		byte tmpVertexValue = VertexUtil.updateRightNeighber(getVertexValue().getAdjMap(),
-				incomingMsg.getAdjMap());
-		getVertexValue().setAdjMap(tmpVertexValue);
-		return true;
-	}
-	@Override
-	public void compute(Iterator<LogAlgorithmMessageWritable> msgIterator) {
-		initVertex();
-		if (getSuperstep() == 1) 
-			startSendMsg();
-		else if(getSuperstep() == 2)
-			initState(msgIterator);
-		else if(getSuperstep()%2 == 1 && getSuperstep() <= maxIteration){
-			sendMsgToPathVertex(msgIterator);
-			voteToHalt();
-		}
-		else if(getSuperstep()%2 == 0 && getSuperstep() <= maxIteration){
-			responseMsgToHeadVertex(msgIterator);
-			voteToHalt();
-		}
-		else
-			voteToHalt();
-	}
-	public static void main(String[] args) throws Exception {
+    }
+
+    /**
+     * get destination vertex
+     */
+    public VKmerBytesWritable getNextDestVertexId(KmerBytesWritable vertexId, byte geneCode) {
+        return kmerFactory.shiftKmerWithNextCode(vertexId, geneCode);
+    }
+
+    public VKmerBytesWritable getPreDestVertexId(KmerBytesWritable vertexId, byte geneCode) {
+        return kmerFactory.shiftKmerWithPreCode(vertexId, geneCode);
+    }
+
+    public VKmerBytesWritable getNextDestVertexIdFromBitmap(KmerBytesWritable chainVertexId, byte adjMap) {
+        return getDestVertexIdFromChain(chainVertexId, adjMap);
+    }
+
+    public VKmerBytesWritable getDestVertexIdFromChain(KmerBytesWritable chainVertexId, byte adjMap) {
+        VKmerBytesWritable lastKmer = kmerFactory.getLastKmerFromChain(kmerSize, chainVertexId);
+        return getNextDestVertexId(lastKmer, GeneCode.getGeneCodeFromBitMap((byte) (adjMap & 0x0F)));
+    }
+
+    /**
+     * head send message to all next nodes
+     */
+    public void sendMsgToAllNextNodes(KmerBytesWritable vertexId, byte adjMap) {
+        for (byte x = GeneCode.A; x <= GeneCode.T; x++) {
+            if ((adjMap & (1 << x)) != 0) {
+                sendMsg(getNextDestVertexId(vertexId, x), outgoingMsg);
+            }
+        }
+    }
+
+    /**
+     * head send message to all previous nodes
+     */
+    public void sendMsgToAllPreviousNodes(KmerBytesWritable vertexId, byte adjMap) {
+        for (byte x = GeneCode.A; x <= GeneCode.T; x++) {
+            if (((adjMap >> 4) & (1 << x)) != 0) {
+                sendMsg(getPreDestVertexId(vertexId, x), outgoingMsg);
+            }
+        }
+    }
+
+    /**
+     * start sending message
+     */
+    public void startSendMsg() {
+        if (VertexUtil.isHeadVertex(getVertexValue().getAdjMap())) {
+            outgoingMsg.setMessage(Message.START);
+            sendMsgToAllNextNodes(getVertexId(), getVertexValue().getAdjMap());
+            voteToHalt();
+        }
+        if (VertexUtil.isRearVertex(getVertexValue().getAdjMap())) {
+            outgoingMsg.setMessage(Message.END);
+            sendMsgToAllPreviousNodes(getVertexId(), getVertexValue().getAdjMap());
+            voteToHalt();
+        }
+    }
+
+    /**
+     * initiate head, rear and path node
+     */
+    public void initState(Iterator<LogAlgorithmMessageWritable> msgIterator) {
+        while (msgIterator.hasNext()) {
+            if (!VertexUtil.isPathVertex(getVertexValue().getAdjMap())) {
+                msgIterator.next();
+                voteToHalt();
+            } else {
+                incomingMsg = msgIterator.next();
+                setState();
+            }
+        }
+    }
+
+    /**
+     * set vertex state
+     */
+    public void setState() {
+        if (incomingMsg.getMessage() == Message.START) {
+            getVertexValue().setState(State.START_VERTEX);
+            getVertexValue().setMergeChain(null);
+        } else if (incomingMsg.getMessage() == Message.END && getVertexValue().getState() != State.START_VERTEX) {
+            getVertexValue().setState(State.END_VERTEX);
+            getVertexValue().setMergeChain(getVertexId());
+            voteToHalt();
+        } else
+            voteToHalt();
+    }
+
+    /**
+     * head send message to path
+     */
+    public void sendOutMsg(KmerBytesWritable chainVertexId, byte adjMap) {
+        if (getVertexValue().getState() == State.START_VERTEX) {
+            outgoingMsg.setMessage(Message.START);
+            outgoingMsg.setSourceVertexId(getVertexId());
+            sendMsg(getNextDestVertexIdFromBitmap(chainVertexId, adjMap), outgoingMsg);
+        } else if (getVertexValue().getState() != State.END_VERTEX) {
+            outgoingMsg.setMessage(Message.NON);
+            outgoingMsg.setSourceVertexId(getVertexId());
+            sendMsg(getNextDestVertexIdFromBitmap(chainVertexId, adjMap), outgoingMsg);
+        }
+    }
+
+    /**
+     * head send message to path
+     */
+    public void sendMsgToPathVertex(Iterator<LogAlgorithmMessageWritable> msgIterator) {
+        if (getSuperstep() == 3) {
+            getVertexValue().setMergeChain(getVertexId());
+            sendOutMsg(getVertexId(), getVertexValue().getAdjMap());
+        } else {
+            if (msgIterator.hasNext()) {
+                incomingMsg = msgIterator.next();
+                if (mergeChainVertex(msgIterator)) {
+                    if (incomingMsg.getMessage() == Message.END) {
+                        if (getVertexValue().getState() == State.START_VERTEX) {
+                            getVertexValue().setState(State.FINAL_VERTEX);
+                            //String source = getVertexValue().getMergeChain().toString();
+                            //System.out.println();
+                        } else
+                            getVertexValue().setState(State.END_VERTEX);
+                    } else
+                        sendOutMsg(getVertexValue().getMergeChain(), getVertexValue().getAdjMap());
+                }
+            }
+        }
+    }
+
+    /**
+     * path response message to head
+     */
+    public void responseMsgToHeadVertex(Iterator<LogAlgorithmMessageWritable> msgIterator) {
+        if (msgIterator.hasNext()) {
+            incomingMsg = msgIterator.next();
+            outgoingMsg.setChainVertexId(getVertexValue().getMergeChain());
+            outgoingMsg.setAdjMap(getVertexValue().getAdjMap());
+            if (getVertexValue().getState() == State.END_VERTEX)
+                outgoingMsg.setMessage(Message.END);
+            sendMsg(incomingMsg.getSourceVertexId(), outgoingMsg);
+
+            if (incomingMsg.getMessage() == Message.START)
+                deleteVertex(getVertexId());
+        } else {
+            if (getVertexValue().getState() != State.START_VERTEX && getVertexValue().getState() != State.END_VERTEX)
+                deleteVertex(getVertexId());//killSelf because it doesn't receive any message
+        }
+    }
+
+    /**
+     * merge chainVertex and store in vertexVal.chainVertexId
+     */
+    public boolean mergeChainVertex(Iterator<LogAlgorithmMessageWritable> msgIterator) {
+        //merge chain
+        lastKmer.set(kmerFactory.getLastKmerFromChain(incomingMsg.getLengthOfChain() - kmerSize + 1,
+                incomingMsg.getChainVertexId()));
+        chainVertexId.set(kmerFactory.mergeTwoKmer(getVertexValue().getMergeChain(), lastKmer));
+        if (VertexUtil.isCycle(getVertexId(), chainVertexId, kmerSize)) {
+            getVertexValue().setMergeChain(null);
+            getVertexValue().setAdjMap(
+                    VertexUtil.reverseAdjMap(getVertexValue().getAdjMap(),
+                            chainVertexId.getGeneCodeAtPosition(kmerSize)));
+            getVertexValue().setState(State.CYCLE);
+            return false;
+        } else
+            getVertexValue().setMergeChain(chainVertexId);
+
+        byte tmpVertexValue = VertexUtil.updateRightNeighber(getVertexValue().getAdjMap(), incomingMsg.getAdjMap());
+        getVertexValue().setAdjMap(tmpVertexValue);
+        return true;
+    }
+
+    @Override
+    public void compute(Iterator<LogAlgorithmMessageWritable> msgIterator) {
+        initVertex();
+        if (getSuperstep() == 1)
+            startSendMsg();
+        else if (getSuperstep() == 2)
+            initState(msgIterator);
+        else if (getSuperstep() % 2 == 1 && getSuperstep() <= maxIteration) {
+            sendMsgToPathVertex(msgIterator);
+            voteToHalt();
+        } else if (getSuperstep() % 2 == 0 && getSuperstep() <= maxIteration) {
+            responseMsgToHeadVertex(msgIterator);
+            voteToHalt();
+        } else
+            voteToHalt();
+    }
+
+    public static void main(String[] args) throws Exception {
         PregelixJob job = new PregelixJob(LogAlgorithmForPathMergeVertex.class.getSimpleName());
         job.setVertexClass(LogAlgorithmForPathMergeVertex.class);
         /**
          * BinaryInput and BinaryOutput~/
          */
-        job.setVertexInputFormatClass(LogAlgorithmForPathMergeInputFormat.class); 
-        job.setVertexOutputFormatClass(LogAlgorithmForPathMergeOutputFormat.class); 
+        job.setVertexInputFormatClass(LogAlgorithmForPathMergeInputFormat.class);
+        job.setVertexOutputFormatClass(LogAlgorithmForPathMergeOutputFormat.class);
         job.setOutputKeyClass(KmerBytesWritable.class);
         job.setOutputValueClass(ValueStateWritable.class);
         job.setDynamicVertexValueSize(true);
         Client.run(args, job);
-	}
+    }
 }
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 7d51670..b637f84 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
@@ -50,185 +50,190 @@
 /**
  * Naive Algorithm for path merge graph
  */
-public class NaiveAlgorithmForPathMergeVertex extends Vertex<KmerBytesWritable, ValueStateWritable, NullWritable, NaiveAlgorithmMessageWritable>{
-	public static final String KMER_SIZE = "NaiveAlgorithmForPathMergeVertex.kmerSize";
-	public static final String ITERATIONS = "NaiveAlgorithmForPathMergeVertex.iteration";
-	public static int kmerSize = -1;
-	private int maxIteration = -1;
+public class NaiveAlgorithmForPathMergeVertex extends
+        Vertex<KmerBytesWritable, ValueStateWritable, NullWritable, NaiveAlgorithmMessageWritable> {
+    public static final String KMER_SIZE = "NaiveAlgorithmForPathMergeVertex.kmerSize";
+    public static final String ITERATIONS = "NaiveAlgorithmForPathMergeVertex.iteration";
+    public static int kmerSize = -1;
+    private int maxIteration = -1;
 
-	private NaiveAlgorithmMessageWritable incomingMsg = new NaiveAlgorithmMessageWritable();
-	private NaiveAlgorithmMessageWritable outgoingMsg = new NaiveAlgorithmMessageWritable();
+    private NaiveAlgorithmMessageWritable incomingMsg = new NaiveAlgorithmMessageWritable();
+    private NaiveAlgorithmMessageWritable outgoingMsg = new NaiveAlgorithmMessageWritable();
 
-	private VKmerBytesWritableFactory kmerFactory = new VKmerBytesWritableFactory(1);
-	private VKmerBytesWritable destVertexId = new VKmerBytesWritable(1); 
-	/**
-	 * initiate kmerSize, maxIteration
-	 */
-	public void initVertex(){
-		if(kmerSize == -1)
-			kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
-        if (maxIteration < 0) 
+    private VKmerBytesWritableFactory kmerFactory = new VKmerBytesWritableFactory(1);
+    private VKmerBytesWritable destVertexId = new VKmerBytesWritable(1);
+
+    /**
+     * initiate kmerSize, maxIteration
+     */
+    public void initVertex() {
+        if (kmerSize == -1)
+            kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
+        if (maxIteration < 0)
             maxIteration = getContext().getConfiguration().getInt(ITERATIONS, 1000000);
         outgoingMsg.reset();
-	}
-	/**
-	 * get destination vertex
-	 */
-	public VKmerBytesWritable getDestVertexId(KmerBytesWritable vertexId, byte geneCode){
-		return kmerFactory.shiftKmerWithNextCode(vertexId, geneCode);
-	}
-	public VKmerBytesWritable getPreDestVertexId(KmerBytesWritable vertexId, byte geneCode){
-		return kmerFactory.shiftKmerWithPreCode(vertexId, geneCode);
-	}
-	public VKmerBytesWritable getDestVertexIdFromChain(VKmerBytesWritable chainVertexId, byte adjMap){
-		VKmerBytesWritable lastKmer = kmerFactory.getLastKmerFromChain(kmerSize, chainVertexId);
-		return getDestVertexId(lastKmer, GeneCode.getGeneCodeFromBitMap((byte)(adjMap & 0x0F)));
-	}
-	/**
-	 * head send message to all next nodes
-	 */
-	public void sendMsgToAllNextNodes(KmerBytesWritable vertexId, byte adjMap){
-		for(byte x = GeneCode.A; x<= GeneCode.T ; x++){
-			if((adjMap & (1 << x)) != 0){
-				destVertexId.set(getDestVertexId(vertexId, x));
-				sendMsg(destVertexId, outgoingMsg);
-			}
-		}
-	}
-	/**
-	 * head send message to all previous nodes
-	 */
-	public void sendMsgToAllPreviousNodes(KmerBytesWritable vertexId, byte adjMap){
-		for(byte x = GeneCode.A; x<= GeneCode.T ; x++){
-			if(((adjMap >> 4) & (1 << x)) != 0){
-				destVertexId.set(getPreDestVertexId(vertexId, x));
-				sendMsg(destVertexId, outgoingMsg);
-			}
-		}
-	}
-	/**
-	 * start sending message 
-	 */
-	public void startSendMsg(){
-		if(VertexUtil.isHeadVertex(getVertexValue().getAdjMap())){
-			outgoingMsg.setMessage(Message.START);
-			sendMsgToAllNextNodes(getVertexId(), getVertexValue().getAdjMap());
-		}
-		if(VertexUtil.isRearVertex(getVertexValue().getAdjMap())){
-			outgoingMsg.setMessage(Message.END);
-			sendMsgToAllPreviousNodes(getVertexId(), getVertexValue().getAdjMap());
-		}
-	}
-	/**
-	 *  initiate head, rear and path node
-	 */
-	public void initState(Iterator<NaiveAlgorithmMessageWritable> msgIterator){
-		while(msgIterator.hasNext()){
-			if(!VertexUtil.isPathVertex(getVertexValue().getAdjMap())){
-				msgIterator.next();
-				voteToHalt();
-			}
-			else{
-				incomingMsg = msgIterator.next();
-				setState();
-			}
-		}
-	}
-	/**
-	 * set vertex state
-	 */
-	public void setState(){
-		if(incomingMsg.getMessage() == Message.START){
-			getVertexValue().setState(State.START_VERTEX);
-		}
-		else if(incomingMsg.getMessage() == Message.END 
-				&& getVertexValue().getState() != State.START_VERTEX){
-			getVertexValue().setState(State.END_VERTEX);
-			voteToHalt();
-		}
-		else
-			voteToHalt();
-	}
-	/**
-	 * head node sends message to path node
-	 */
-	public void sendMsgToPathVertex(Iterator<NaiveAlgorithmMessageWritable> msgIterator){
-		if(getSuperstep() == 3){
-			getVertexValue().setMergeChain(getVertexId());
-			outgoingMsg.setSourceVertexId(getVertexId());
-			destVertexId.set(getDestVertexIdFromChain(getVertexValue().getMergeChain(),
-					getVertexValue().getAdjMap()));
-			sendMsg(destVertexId,outgoingMsg);
-		}else{
-			while (msgIterator.hasNext()){
-				incomingMsg = msgIterator.next();
-				if(incomingMsg.getMessage() != Message.STOP){
-					getVertexValue().setMergeChain(kmerFactory.mergeKmerWithNextCode(getVertexValue().getMergeChain(),
-							incomingMsg.getLastGeneCode()));
-					outgoingMsg.setSourceVertexId(getVertexId());
-					destVertexId.set(getDestVertexIdFromChain(getVertexValue().getMergeChain(),
-							incomingMsg.getAdjMap()));
-					sendMsg(destVertexId,outgoingMsg);
-				}
-				else{
-					getVertexValue().setMergeChain(kmerFactory.mergeKmerWithNextCode(getVertexValue().getMergeChain(),
-							incomingMsg.getLastGeneCode()));
-					byte adjMap = VertexUtil.updateRightNeighber(getVertexValue().getAdjMap(),
-							incomingMsg.getAdjMap());
-					getVertexValue().setAdjMap(adjMap);
-					getVertexValue().setState(State.FINAL_VERTEX);
-					//String source = getVertexValue().getMergeChain().toString();
-					//System.out.println();
-				}
-			}
-		}
-	}
-	/**
-	 * path node sends message back to head node
-	 */
-	public void responseMsgToHeadVertex(){
-		deleteVertex(getVertexId());
-		outgoingMsg.setAdjMap(getVertexValue().getAdjMap());
-		outgoingMsg.setLastGeneCode(getVertexId().getGeneCodeAtPosition(kmerSize - 1));
-		if(getVertexValue().getState() == State.END_VERTEX)
-			outgoingMsg.setMessage(Message.STOP);
-		sendMsg(incomingMsg.getSourceVertexId(),outgoingMsg);
-	}
-	
-	@Override
-	public void compute(Iterator<NaiveAlgorithmMessageWritable> msgIterator) {
-		initVertex();
-		if (getSuperstep() == 1) {
-			startSendMsg();
-			voteToHalt();
-		}
-		else if(getSuperstep() == 2)
-			initState(msgIterator);
-		else if(getSuperstep()%2 == 1 && getSuperstep() <= maxIteration){
-			sendMsgToPathVertex(msgIterator);
-			voteToHalt();
-		}
-		else if(getSuperstep()%2 == 0 && getSuperstep() > 2 && getSuperstep() <= maxIteration){
-			 while(msgIterator.hasNext()){
-				incomingMsg = msgIterator.next();
-				responseMsgToHeadVertex();
-			}
-			voteToHalt();
-		}
-		else
-			voteToHalt();
-	}
-	public static void main(String[] args) throws Exception {
+    }
+
+    /**
+     * get destination vertex
+     */
+    public VKmerBytesWritable getDestVertexId(KmerBytesWritable vertexId, byte geneCode) {
+        return kmerFactory.shiftKmerWithNextCode(vertexId, geneCode);
+    }
+
+    public VKmerBytesWritable getPreDestVertexId(KmerBytesWritable vertexId, byte geneCode) {
+        return kmerFactory.shiftKmerWithPreCode(vertexId, geneCode);
+    }
+
+    public VKmerBytesWritable getDestVertexIdFromChain(VKmerBytesWritable chainVertexId, byte adjMap) {
+        VKmerBytesWritable lastKmer = kmerFactory.getLastKmerFromChain(kmerSize, chainVertexId);
+        return getDestVertexId(lastKmer, GeneCode.getGeneCodeFromBitMap((byte) (adjMap & 0x0F)));
+    }
+
+    /**
+     * head send message to all next nodes
+     */
+    public void sendMsgToAllNextNodes(KmerBytesWritable vertexId, byte adjMap) {
+        for (byte x = GeneCode.A; x <= GeneCode.T; x++) {
+            if ((adjMap & (1 << x)) != 0) {
+                destVertexId.set(getDestVertexId(vertexId, x));
+                sendMsg(destVertexId, outgoingMsg);
+            }
+        }
+    }
+
+    /**
+     * head send message to all previous nodes
+     */
+    public void sendMsgToAllPreviousNodes(KmerBytesWritable vertexId, byte adjMap) {
+        for (byte x = GeneCode.A; x <= GeneCode.T; x++) {
+            if (((adjMap >> 4) & (1 << x)) != 0) {
+                destVertexId.set(getPreDestVertexId(vertexId, x));
+                sendMsg(destVertexId, outgoingMsg);
+            }
+        }
+    }
+
+    /**
+     * start sending message
+     */
+    public void startSendMsg() {
+        if (VertexUtil.isHeadVertex(getVertexValue().getAdjMap())) {
+            outgoingMsg.setMessage(Message.START);
+            sendMsgToAllNextNodes(getVertexId(), getVertexValue().getAdjMap());
+        }
+        if (VertexUtil.isRearVertex(getVertexValue().getAdjMap())) {
+            outgoingMsg.setMessage(Message.END);
+            sendMsgToAllPreviousNodes(getVertexId(), getVertexValue().getAdjMap());
+        }
+    }
+
+    /**
+     * initiate head, rear and path node
+     */
+    public void initState(Iterator<NaiveAlgorithmMessageWritable> msgIterator) {
+        while (msgIterator.hasNext()) {
+            if (!VertexUtil.isPathVertex(getVertexValue().getAdjMap())) {
+                msgIterator.next();
+                voteToHalt();
+            } else {
+                incomingMsg = msgIterator.next();
+                setState();
+            }
+        }
+    }
+
+    /**
+     * set vertex state
+     */
+    public void setState() {
+        if (incomingMsg.getMessage() == Message.START) {
+            getVertexValue().setState(State.START_VERTEX);
+        } else if (incomingMsg.getMessage() == Message.END && getVertexValue().getState() != State.START_VERTEX) {
+            getVertexValue().setState(State.END_VERTEX);
+            voteToHalt();
+        } else
+            voteToHalt();
+    }
+
+    /**
+     * head node sends message to path node
+     */
+    public void sendMsgToPathVertex(Iterator<NaiveAlgorithmMessageWritable> msgIterator) {
+        if (getSuperstep() == 3) {
+            getVertexValue().setMergeChain(getVertexId());
+            outgoingMsg.setSourceVertexId(getVertexId());
+            destVertexId.set(getDestVertexIdFromChain(getVertexValue().getMergeChain(), getVertexValue().getAdjMap()));
+            sendMsg(destVertexId, outgoingMsg);
+        } else {
+            while (msgIterator.hasNext()) {
+                incomingMsg = msgIterator.next();
+                if (incomingMsg.getMessage() != Message.STOP) {
+                    getVertexValue().setMergeChain(
+                            kmerFactory.mergeKmerWithNextCode(getVertexValue().getMergeChain(),
+                                    incomingMsg.getLastGeneCode()));
+                    outgoingMsg.setSourceVertexId(getVertexId());
+                    destVertexId
+                            .set(getDestVertexIdFromChain(getVertexValue().getMergeChain(), incomingMsg.getAdjMap()));
+                    sendMsg(destVertexId, outgoingMsg);
+                } else {
+                    getVertexValue().setMergeChain(
+                            kmerFactory.mergeKmerWithNextCode(getVertexValue().getMergeChain(),
+                                    incomingMsg.getLastGeneCode()));
+                    byte adjMap = VertexUtil.updateRightNeighber(getVertexValue().getAdjMap(), incomingMsg.getAdjMap());
+                    getVertexValue().setAdjMap(adjMap);
+                    getVertexValue().setState(State.FINAL_VERTEX);
+                    //String source = getVertexValue().getMergeChain().toString();
+                    //System.out.println();
+                }
+            }
+        }
+    }
+
+    /**
+     * path node sends message back to head node
+     */
+    public void responseMsgToHeadVertex() {
+        deleteVertex(getVertexId());
+        outgoingMsg.setAdjMap(getVertexValue().getAdjMap());
+        outgoingMsg.setLastGeneCode(getVertexId().getGeneCodeAtPosition(kmerSize - 1));
+        if (getVertexValue().getState() == State.END_VERTEX)
+            outgoingMsg.setMessage(Message.STOP);
+        sendMsg(incomingMsg.getSourceVertexId(), outgoingMsg);
+    }
+
+    @Override
+    public void compute(Iterator<NaiveAlgorithmMessageWritable> msgIterator) {
+        initVertex();
+        if (getSuperstep() == 1) {
+            startSendMsg();
+            voteToHalt();
+        } else if (getSuperstep() == 2)
+            initState(msgIterator);
+        else if (getSuperstep() % 2 == 1 && getSuperstep() <= maxIteration) {
+            sendMsgToPathVertex(msgIterator);
+            voteToHalt();
+        } else if (getSuperstep() % 2 == 0 && getSuperstep() > 2 && getSuperstep() <= maxIteration) {
+            while (msgIterator.hasNext()) {
+                incomingMsg = msgIterator.next();
+                responseMsgToHeadVertex();
+            }
+            voteToHalt();
+        } else
+            voteToHalt();
+    }
+
+    public static void main(String[] args) throws Exception {
         PregelixJob job = new PregelixJob(NaiveAlgorithmForPathMergeVertex.class.getSimpleName());
         job.setVertexClass(NaiveAlgorithmForPathMergeVertex.class);
         /**
          * BinaryInput and BinaryOutput
          */
-        job.setVertexInputFormatClass(NaiveAlgorithmForPathMergeInputFormat.class); 
-        job.setVertexOutputFormatClass(NaiveAlgorithmForPathMergeOutputFormat.class); 
+        job.setVertexInputFormatClass(NaiveAlgorithmForPathMergeInputFormat.class);
+        job.setVertexOutputFormatClass(NaiveAlgorithmForPathMergeOutputFormat.class);
         job.setDynamicVertexValueSize(true);
         job.setOutputKeyClass(KmerBytesWritable.class);
         job.setOutputValueClass(ValueStateWritable.class);
         Client.run(args, job);
-	}
+    }
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/CombineSequenceFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/CombineSequenceFile.java
index 84d846e..7a50537 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/CombineSequenceFile.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/CombineSequenceFile.java
@@ -13,47 +13,44 @@
 
 public class CombineSequenceFile {
 
-	/**
-	 * @param args
-	 * @throws Exception 
-	 */
-	public static void main(String[] args) throws Exception {
-		// TODO Auto-generated method stub
-		int kmerSize = 5;
-		Configuration conf = new Configuration();
-		FileSystem fileSys = FileSystem.get(conf);
-		
-		Path p = new Path("graphbuildresult/CyclePath2_result");
-		//Path p2 = new Path("data/result");
-		Path outFile = new Path("here"); 
-		SequenceFile.Reader reader;
-	    SequenceFile.Writer writer = SequenceFile.createWriter(fileSys, conf,
-	         outFile, KmerBytesWritable.class, KmerCountValue.class, 
-	         CompressionType.NONE);
-	    KmerBytesWritable key = new KmerBytesWritable(kmerSize);
-	    KmerCountValue value = new KmerCountValue();
-	    
-	    File dir = new File("graphbuildresult/CyclePath2_result");
-		for(File child : dir.listFiles()){
-			String name = child.getAbsolutePath();
-			Path inFile = new Path(p, name);
-			reader = new SequenceFile.Reader(fileSys, inFile, conf);
-			while (reader.next(key, value)) {
-				System.out.println(key.toString()
-						+ "\t" + value.toString());
-				writer.append(key, value);
-			}
-			reader.close();
-		}
-		writer.close();
-		System.out.println();
-		
-		reader = new SequenceFile.Reader(fileSys, outFile, conf);
-		while (reader.next(key, value)) {
-			System.err.println(key.toString()
-					+ "\t" + value.toString());
-		}
-		reader.close();
-	}
+    /**
+     * @param args
+     * @throws Exception
+     */
+    public static void main(String[] args) throws Exception {
+        // TODO Auto-generated method stub
+        int kmerSize = 5;
+        Configuration conf = new Configuration();
+        FileSystem fileSys = FileSystem.get(conf);
+
+        Path p = new Path("graphbuildresult/CyclePath2_result");
+        //Path p2 = new Path("data/result");
+        Path outFile = new Path("here");
+        SequenceFile.Reader reader;
+        SequenceFile.Writer writer = SequenceFile.createWriter(fileSys, conf, outFile, KmerBytesWritable.class,
+                KmerCountValue.class, CompressionType.NONE);
+        KmerBytesWritable key = new KmerBytesWritable(kmerSize);
+        KmerCountValue value = new KmerCountValue();
+
+        File dir = new File("graphbuildresult/CyclePath2_result");
+        for (File child : dir.listFiles()) {
+            String name = child.getAbsolutePath();
+            Path inFile = new Path(p, name);
+            reader = new SequenceFile.Reader(fileSys, inFile, conf);
+            while (reader.next(key, value)) {
+                System.out.println(key.toString() + "\t" + value.toString());
+                writer.append(key, value);
+            }
+            reader.close();
+        }
+        writer.close();
+        System.out.println();
+
+        reader = new SequenceFile.Reader(fileSys, outFile, conf);
+        while (reader.next(key, value)) {
+            System.err.println(key.toString() + "\t" + value.toString());
+        }
+        reader.close();
+    }
 
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/ConvertToSequenceFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/ConvertToSequenceFile.java
index d64b279..2a7d668 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/ConvertToSequenceFile.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/ConvertToSequenceFile.java
@@ -13,30 +13,29 @@
 import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat;
 
 public class ConvertToSequenceFile {
-	public static void main(String[] args) throws IOException,
-    InterruptedException, ClassNotFoundException {
+    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
 
-		Configuration conf = new Configuration();
-		Job job = new Job(conf);
-		job.setJobName("Convert Text");
-		job.setJarByClass(Mapper.class);
-		
-		job.setMapperClass(Mapper.class);
-		job.setReducerClass(Reducer.class);
-		
-		// increase if you need sorting or a special number of files
-		job.setNumReduceTasks(0);
-		
-		job.setOutputKeyClass(LongWritable.class);
-		job.setOutputValueClass(Text.class);
-		
-		job.setOutputFormatClass(SequenceFileOutputFormat.class);
-		job.setInputFormatClass(TextInputFormat.class);
-		
-		TextInputFormat.addInputPath(job, new Path("data/webmap/part-00000"));
-		SequenceFileOutputFormat.setOutputPath(job, new Path("folder_seq"));
-		
-		// submit and wait for completion
-		job.waitForCompletion(true);
-	}
+        Configuration conf = new Configuration();
+        Job job = new Job(conf);
+        job.setJobName("Convert Text");
+        job.setJarByClass(Mapper.class);
+
+        job.setMapperClass(Mapper.class);
+        job.setReducerClass(Reducer.class);
+
+        // increase if you need sorting or a special number of files
+        job.setNumReduceTasks(0);
+
+        job.setOutputKeyClass(LongWritable.class);
+        job.setOutputValueClass(Text.class);
+
+        job.setOutputFormatClass(SequenceFileOutputFormat.class);
+        job.setInputFormatClass(TextInputFormat.class);
+
+        TextInputFormat.addInputPath(job, new Path("data/webmap/part-00000"));
+        SequenceFileOutputFormat.setOutputPath(job, new Path("folder_seq"));
+
+        // submit and wait for completion
+        job.waitForCompletion(true);
+    }
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateSmallFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateSmallFile.java
index 6ae2e30..85649b3 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateSmallFile.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateSmallFile.java
@@ -18,81 +18,79 @@
 
 public class GenerateSmallFile {
 
-	public static void generateNumOfLinesFromGraphBuildResuiltBigFile(
-			Path inFile, Path outFile, int numOfLines) throws IOException {
-		Configuration conf = new Configuration();
-		FileSystem fileSys = FileSystem.get(conf);
+    public static void generateNumOfLinesFromGraphBuildResuiltBigFile(Path inFile, Path outFile, int numOfLines)
+            throws IOException {
+        Configuration conf = new Configuration();
+        FileSystem fileSys = FileSystem.get(conf);
 
-		SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, inFile,
-				conf);
-		SequenceFile.Writer writer = SequenceFile.createWriter(fileSys, conf,
-				outFile, KmerBytesWritable.class, KmerCountValue.class,
-				CompressionType.NONE);
-		KmerBytesWritable outKey = new KmerBytesWritable(55);
-		KmerCountValue outValue = new KmerCountValue();
-		int i = 0;
+        SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, inFile, conf);
+        SequenceFile.Writer writer = SequenceFile.createWriter(fileSys, conf, outFile, KmerBytesWritable.class,
+                KmerCountValue.class, CompressionType.NONE);
+        KmerBytesWritable outKey = new KmerBytesWritable(55);
+        KmerCountValue outValue = new KmerCountValue();
+        int i = 0;
 
-		for (i = 0; i < numOfLines; i++) {
-			// System.out.println(i);
-			reader.next(outKey, outValue);
-			writer.append(outKey, outValue);
-		}
-		writer.close();
-		reader.close();
-	}
+        for (i = 0; i < numOfLines; i++) {
+            // System.out.println(i);
+            reader.next(outKey, outValue);
+            writer.append(outKey, outValue);
+        }
+        writer.close();
+        reader.close();
+    }
 
-	public static void generateNumOfLinesFromGraphBuildResuiltBigFile(
-			String inFile, String outFile, int numOfLines) throws IOException {
-		String lines = readTextFile(inFile, numOfLines);
-		writeTextFile(outFile, lines);
-	}
+    public static void generateNumOfLinesFromGraphBuildResuiltBigFile(String inFile, String outFile, int numOfLines)
+            throws IOException {
+        String lines = readTextFile(inFile, numOfLines);
+        writeTextFile(outFile, lines);
+    }
 
-	public static void main(String[] args) throws IOException {
-		/*Path dir = new Path("data/test8m");
-		Path outDir = new Path("data/input/test");
-		FileUtils.cleanDirectory(new File("data/input/test"));
-		Path inFile = new Path(dir, "part-0");
-		Path outFile = new Path(outDir, "part-0-out-100");
-		generateNumOfLinesFromGraphBuildResuiltBigFile(inFile, outFile, 100);*/
-		String inFile = "data/shortjump_1.head8M.fastq";
-		String outFile = "data/testGeneFile";
-		generateNumOfLinesFromGraphBuildResuiltBigFile(inFile, outFile, 100000);
-	}
+    public static void main(String[] args) throws IOException {
+        /*Path dir = new Path("data/test8m");
+        Path outDir = new Path("data/input/test");
+        FileUtils.cleanDirectory(new File("data/input/test"));
+        Path inFile = new Path(dir, "part-0");
+        Path outFile = new Path(outDir, "part-0-out-100");
+        generateNumOfLinesFromGraphBuildResuiltBigFile(inFile, outFile, 100);*/
+        String inFile = "data/shortjump_1.head8M.fastq";
+        String outFile = "data/testGeneFile";
+        generateNumOfLinesFromGraphBuildResuiltBigFile(inFile, outFile, 100000);
+    }
 
-	public static String readTextFile(String fileName, int numOfLines) {
-		String returnValue = "";
-		FileReader file;
-		String line = "";
-		try {
-			file = new FileReader(fileName);
-			BufferedReader reader = new BufferedReader(file);
-			try {
-				while ((numOfLines > 0) && (line = reader.readLine()) != null) {
-					returnValue += line + "\n";
-					numOfLines--;
-				}
-			} finally {
-				reader.close();
-			}
-		} catch (FileNotFoundException e) {
-			throw new RuntimeException("File not found");
-		} catch (IOException e) {
-			throw new RuntimeException("IO Error occured");
-		}
-		return returnValue;
+    public static String readTextFile(String fileName, int numOfLines) {
+        String returnValue = "";
+        FileReader file;
+        String line = "";
+        try {
+            file = new FileReader(fileName);
+            BufferedReader reader = new BufferedReader(file);
+            try {
+                while ((numOfLines > 0) && (line = reader.readLine()) != null) {
+                    returnValue += line + "\n";
+                    numOfLines--;
+                }
+            } finally {
+                reader.close();
+            }
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException("File not found");
+        } catch (IOException e) {
+            throw new RuntimeException("IO Error occured");
+        }
+        return returnValue;
 
-	}
+    }
 
-	public static void writeTextFile(String fileName, String s) {
-		FileWriter output;
-		try {
-			output = new FileWriter(fileName);
-			BufferedWriter writer = new BufferedWriter(output);
-			writer.write(s);
-			writer.close();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
+    public static void writeTextFile(String fileName, String s) {
+        FileWriter output;
+        try {
+            output = new FileWriter(fileName);
+            BufferedWriter writer = new BufferedWriter(output);
+            writer.write(s);
+            writer.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
 
-	}
+    }
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java
index 026bba2..517b9c3 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java
@@ -19,107 +19,108 @@
 
 public class GenerateTextFile {
 
-	public static void generateFromPathmergeResult(int kmerSize, String strSrcDir, String outPutDir) throws IOException{
-		Configuration conf = new Configuration();
-		FileSystem fileSys = FileSystem.getLocal(conf);
-		
-		fileSys.create(new Path(outPutDir));
-		BufferedWriter bw = new BufferedWriter(new FileWriter(outPutDir));
-		File srcPath = new File(strSrcDir);
-		for(File f : srcPath.listFiles((FilenameFilter)(new WildcardFileFilter("part*")))){
-			SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, new Path(f.getAbsolutePath()), conf);
-			KmerBytesWritable key = new KmerBytesWritable(kmerSize);
-		    ValueStateWritable value = new ValueStateWritable();
-		    
-		    while(reader.next(key, value)){
-				if (key == null || value == null){
-					break;
-				}
-				bw.write(key.toString()
-						+ "\t" + value.toString());
-				bw.newLine();
-		    }
-		    reader.close();
-		}
-		bw.close();
-	}
-	public static void generateSpecificLengthChainFromNaivePathmergeResult(int maxLength) throws IOException{
-		BufferedWriter bw = new BufferedWriter(new FileWriter("naive_text_" + maxLength));
-		Configuration conf = new Configuration();
-		FileSystem fileSys = FileSystem.get(conf);
-		for(int i = 0; i < 2; i++){
-			Path path = new Path("/home/anbangx/genomix_result/final_naive/part-" + i);
-			SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, path, conf);
-			KmerBytesWritable key = new KmerBytesWritable(55);
-		    ValueStateWritable value = new ValueStateWritable();
-		    
-		    while(reader.next(key, value)){
-				if (key == null || value == null){
-					break;
-				} 
-				if(value.getLengthOfMergeChain() != -1 && value.getLengthOfMergeChain() <= maxLength){
-					bw.write(value.toString());
-					bw.newLine();
-				}
-		    }
-		    reader.close();
-		}
-		bw.close();
-	}
-	
-	public static void generateSpecificLengthChainFromLogPathmergeResult(int maxLength) throws IOException{
-		BufferedWriter bw = new BufferedWriter(new FileWriter("log_text_" + maxLength));
-		Configuration conf = new Configuration();
-		FileSystem fileSys = FileSystem.get(conf);
-		for(int i = 0; i < 2; i++){
-			Path path = new Path("/home/anbangx/genomix_result/improvelog2/part-" + i);
-			SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, path, conf);
-			KmerBytesWritable key = new KmerBytesWritable(55);
-		    ValueStateWritable value = new ValueStateWritable();
-		    
-		    while(reader.next(key, value)){
-				if (key == null || value == null){
-					break;
-				} 
-				if(value.getLengthOfMergeChain() != -1 && value.getLengthOfMergeChain() <= maxLength
-						&& value.getState() == State.FINAL_VERTEX){
-					bw.write(key.toString()
-							+ "\t" + value.toString());
-					bw.newLine();
-				}
-		    }
-		    reader.close();
-		}
-		bw.close();
-	}
-	public static void generateFromGraphbuildResult() throws IOException{
-		BufferedWriter bw = new BufferedWriter(new FileWriter("textfile"));
-		Configuration conf = new Configuration();
-		FileSystem fileSys = FileSystem.get(conf);
-		Path path = new Path("data/input/part-0-out-3000000");
-		SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, path, conf);
-		KmerBytesWritable key = new KmerBytesWritable(55);
-		KmerCountValue value = new KmerCountValue();
-	    
-	    while(reader.next(key, value)){
-			if (key == null || value == null){
-				break;
-			}
-			bw.write(key.toString());
-			bw.newLine();
-	    }
-	    reader.close();
-		bw.close();
-	}
-	/**
-	 * @param args
-	 * @throws IOException 
-	 */
-	public static void main(String[] args) throws IOException {
-		//generateFromPathmergeResult();
-		//generateFromGraphbuildResult();
-		//generateSpecificLengthChainFromPathmergeResult(68);
-		//generateSpecificLengthChainFromLogPathmergeResult(68);
-	}
+    public static void generateFromPathmergeResult(int kmerSize, String strSrcDir, String outPutDir) throws IOException {
+        Configuration conf = new Configuration();
+        FileSystem fileSys = FileSystem.getLocal(conf);
+
+        fileSys.create(new Path(outPutDir));
+        BufferedWriter bw = new BufferedWriter(new FileWriter(outPutDir));
+        File srcPath = new File(strSrcDir);
+        for (File f : srcPath.listFiles((FilenameFilter) (new WildcardFileFilter("part*")))) {
+            SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, new Path(f.getAbsolutePath()), conf);
+            KmerBytesWritable key = new KmerBytesWritable(kmerSize);
+            ValueStateWritable value = new ValueStateWritable();
+
+            while (reader.next(key, value)) {
+                if (key == null || value == null) {
+                    break;
+                }
+                bw.write(key.toString() + "\t" + value.toString());
+                bw.newLine();
+            }
+            reader.close();
+        }
+        bw.close();
+    }
+
+    public static void generateSpecificLengthChainFromNaivePathmergeResult(int maxLength) throws IOException {
+        BufferedWriter bw = new BufferedWriter(new FileWriter("naive_text_" + maxLength));
+        Configuration conf = new Configuration();
+        FileSystem fileSys = FileSystem.get(conf);
+        for (int i = 0; i < 2; i++) {
+            Path path = new Path("/home/anbangx/genomix_result/final_naive/part-" + i);
+            SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, path, conf);
+            KmerBytesWritable key = new KmerBytesWritable(55);
+            ValueStateWritable value = new ValueStateWritable();
+
+            while (reader.next(key, value)) {
+                if (key == null || value == null) {
+                    break;
+                }
+                if (value.getLengthOfMergeChain() != -1 && value.getLengthOfMergeChain() <= maxLength) {
+                    bw.write(value.toString());
+                    bw.newLine();
+                }
+            }
+            reader.close();
+        }
+        bw.close();
+    }
+
+    public static void generateSpecificLengthChainFromLogPathmergeResult(int maxLength) throws IOException {
+        BufferedWriter bw = new BufferedWriter(new FileWriter("log_text_" + maxLength));
+        Configuration conf = new Configuration();
+        FileSystem fileSys = FileSystem.get(conf);
+        for (int i = 0; i < 2; i++) {
+            Path path = new Path("/home/anbangx/genomix_result/improvelog2/part-" + i);
+            SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, path, conf);
+            KmerBytesWritable key = new KmerBytesWritable(55);
+            ValueStateWritable value = new ValueStateWritable();
+
+            while (reader.next(key, value)) {
+                if (key == null || value == null) {
+                    break;
+                }
+                if (value.getLengthOfMergeChain() != -1 && value.getLengthOfMergeChain() <= maxLength
+                        && value.getState() == State.FINAL_VERTEX) {
+                    bw.write(key.toString() + "\t" + value.toString());
+                    bw.newLine();
+                }
+            }
+            reader.close();
+        }
+        bw.close();
+    }
+
+    public static void generateFromGraphbuildResult() throws IOException {
+        BufferedWriter bw = new BufferedWriter(new FileWriter("textfile"));
+        Configuration conf = new Configuration();
+        FileSystem fileSys = FileSystem.get(conf);
+        Path path = new Path("data/input/part-0-out-3000000");
+        SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, path, conf);
+        KmerBytesWritable key = new KmerBytesWritable(55);
+        KmerCountValue value = new KmerCountValue();
+
+        while (reader.next(key, value)) {
+            if (key == null || value == null) {
+                break;
+            }
+            bw.write(key.toString());
+            bw.newLine();
+        }
+        reader.close();
+        bw.close();
+    }
+
+    /**
+     * @param args
+     * @throws IOException
+     */
+    public static void main(String[] args) throws IOException {
+        //generateFromPathmergeResult();
+        //generateFromGraphbuildResult();
+        //generateSpecificLengthChainFromPathmergeResult(68);
+        //generateSpecificLengthChainFromLogPathmergeResult(68);
+    }
 
 }
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
index 0709249..f30512c 100644
--- 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
@@ -6,72 +6,75 @@
 
 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;
-	}
+    /**
+     * 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;
+    }
 
-	public static void main(String[] args) {
-		// TODO Auto-generated method stub
-		OutputStreamWriter writer;
-		try {
-			writer = new OutputStreamWriter(new FileOutputStream("graph/7/SinglePath"));
-			writer.write(simplePath(7,10,1));
-			writer.close();
-			writer = new OutputStreamWriter(new FileOutputStream("graph/7/SimplePath"));
-			writer.write(simplePath(7,10,3));
-			writer.close();
-			writer = new OutputStreamWriter(new FileOutputStream("graph/7/TreePath"));
-			writer.write(treePath(7, 7, 7, 7));
-			writer.close();
-			writer = new OutputStreamWriter(new FileOutputStream("graph/7/CyclePath"));
-			writer.write(cyclePath(7,10));
-			writer.close();
-			writer = new OutputStreamWriter(new FileOutputStream("graph/7/BridgePath"));
-			writer.write(bridgePath(7,2));
-			writer.close();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-	}
+    /**
+     * 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("graph/7/SinglePath"));
+            writer.write(simplePath(7, 10, 1));
+            writer.close();
+            writer = new OutputStreamWriter(new FileOutputStream("graph/7/SimplePath"));
+            writer.write(simplePath(7, 10, 3));
+            writer.close();
+            writer = new OutputStreamWriter(new FileOutputStream("graph/7/TreePath"));
+            writer.write(treePath(7, 7, 7, 7));
+            writer.close();
+            writer = new OutputStreamWriter(new FileOutputStream("graph/7/CyclePath"));
+            writer.write(cyclePath(7, 10));
+            writer.close();
+            writer = new OutputStreamWriter(new FileOutputStream("graph/7/BridgePath"));
+            writer.write(bridgePath(7, 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
index 337c5d8..cd83171 100644
--- 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
@@ -3,61 +3,57 @@
 import java.util.ArrayList;
 import java.util.Random;
 
-public class RandomString
-{
+public class RandomString {
 
-  private static final char[] symbols = new char[4];
+    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++;
+    static {
+        symbols[0] = 'A';
+        symbols[1] = 'C';
+        symbols[2] = 'G';
+        symbols[3] = 'T';
     }
-    	
-    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];
-  }
+
+    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/genomix/pregelix/type/CheckMessage.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/CheckMessage.java
index 45741f7..61d2256 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/CheckMessage.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/CheckMessage.java
@@ -1,39 +1,39 @@
 package edu.uci.ics.genomix.pregelix.type;
 
 public class CheckMessage {
-	
-	public static final byte SOURCE = 1 << 0;
-	public static final byte CHAIN = 1 << 1;
-	public static final byte ADJMAP = 1 << 2;
-	public static final byte MESSAGE = 1 << 3;
-	public static final byte STATE = 1 << 4;
-	public static final byte LASTGENECODE = 1 << 5;
-	
-	public final static class CheckMessage_CONTENT{
-		
-		public static String getContentFromCode(byte code){
-			String r = "";
-			switch(code){
-			case SOURCE:
-				r = "SOURCE";
-				break;
-			case CHAIN:
-				r = "CHAIN";
-				break;
-			case ADJMAP:
-				r = "ADJMAP";
-				break;
-			case MESSAGE:
-				r = "MESSAGE";
-				break;
-			case STATE:
-				r = "STATE";
-				break;
-			case LASTGENECODE:
-				r = "LASTGENECODE";
-				break;
-			}
-			return r;
-		}
-	}
+
+    public static final byte SOURCE = 1 << 0;
+    public static final byte CHAIN = 1 << 1;
+    public static final byte ADJMAP = 1 << 2;
+    public static final byte MESSAGE = 1 << 3;
+    public static final byte STATE = 1 << 4;
+    public static final byte LASTGENECODE = 1 << 5;
+
+    public final static class CheckMessage_CONTENT {
+
+        public static String getContentFromCode(byte code) {
+            String r = "";
+            switch (code) {
+                case SOURCE:
+                    r = "SOURCE";
+                    break;
+                case CHAIN:
+                    r = "CHAIN";
+                    break;
+                case ADJMAP:
+                    r = "ADJMAP";
+                    break;
+                case MESSAGE:
+                    r = "MESSAGE";
+                    break;
+                case STATE:
+                    r = "STATE";
+                    break;
+                case LASTGENECODE:
+                    r = "LASTGENECODE";
+                    break;
+            }
+            return r;
+        }
+    }
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/Message.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/Message.java
index b1a9517..4332471 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/Message.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/Message.java
@@ -1,31 +1,35 @@
 package edu.uci.ics.genomix.pregelix.type;
 
 public class Message {
-	
-	public static final byte NON = 0;
-	public static final byte START = 1;
-	public static final byte END = 2;
-	public static final byte STOP = 3;
-	
-	public final static class MESSAGE_CONTENT{
-		
-		public static String getContentFromCode(byte code){
-			String r = "";
-			switch(code){
-			case NON:
-				r = "NON";
-				break;
-			case START:
-				r = "START";
-				break;
-			case END:
-				r = "END";
-				break;
-			case STOP:
-				r = "STOP";
-				break;
-			}
-			return r;
-		}
-	}
+
+    public static final byte NON = 0;
+    public static final byte START = 1;
+    public static final byte END = 2;
+    public static final byte STOP = 3;
+    public static final byte PSEUDOREAR = 4;
+
+    public final static class MESSAGE_CONTENT {
+
+        public static String getContentFromCode(byte code) {
+            String r = "";
+            switch (code) {
+                case NON:
+                    r = "NON";
+                    break;
+                case START:
+                    r = "START";
+                    break;
+                case END:
+                    r = "END";
+                    break;
+                case STOP:
+                    r = "STOP";
+                    break;
+                case PSEUDOREAR:
+                    r = "PSEUDOREAR";
+                    break;
+            }
+            return r;
+        }
+    }
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java
index 4a2af9e..c1f4696 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java
@@ -1,47 +1,47 @@
 package edu.uci.ics.genomix.pregelix.type;
 
 public class State {
-	
-	public static final byte NON_VERTEX = 0;
-	public static final byte START_VERTEX = 1;
-	public static final byte END_VERTEX = 2;
-	public static final byte MID_VERTEX = 3;
-	public static final byte TODELETE = 4;
-	public static final byte FINAL_VERTEX = 5;
-	public static final byte FILTER = 6;
-	public static final byte CYCLE = 7;
-	
-	public final static class STATE_CONTENT{
 
-		public static String getContentFromCode(byte code){
-			String r = "";
-			switch(code){
-			case NON_VERTEX:
-				r = "NON_VERTEX";
-				break;
-			case START_VERTEX:
-				r = "START_VERTEX";
-				break;
-			case END_VERTEX:
-				r = "END_VERTEX";
-				break;
-			case MID_VERTEX:
-				r = "MID_VERTEX";
-				break;
-			case TODELETE:
-				r = "TODELETE";
-				break;
-			case FINAL_VERTEX:
-				r = "FINAL_VERTEX";
-				break;
-			case FILTER:
-				r = "FINAL_DELETE";
-				break;
-			case CYCLE:
-				r = "CYCLE";
-				break;
-			}
-			return r;
-		}
-	}
+    public static final byte NON_VERTEX = 0;
+    public static final byte START_VERTEX = 1;
+    public static final byte END_VERTEX = 2;
+    public static final byte MID_VERTEX = 3;
+    public static final byte PSEUDOHEAD = 4;
+    public static final byte PSEUDOREAR = 5;
+    public static final byte FINAL_VERTEX = 6;
+    public static final byte CYCLE = 7;
+
+    public final static class STATE_CONTENT {
+
+        public static String getContentFromCode(byte code) {
+            String r = "";
+            switch (code) {
+                case NON_VERTEX:
+                    r = "NON_VERTEX";
+                    break;
+                case START_VERTEX:
+                    r = "START_VERTEX";
+                    break;
+                case END_VERTEX:
+                    r = "END_VERTEX";
+                    break;
+                case MID_VERTEX:
+                    r = "MID_VERTEX";
+                    break;
+                case PSEUDOHEAD:
+                    r = "PSEUDOHEAD";
+                    break;
+                case PSEUDOREAR:
+                    r = "PSEUDOREAR";
+                    break;
+                case FINAL_VERTEX:
+                    r = "FINAL_VERTEX";
+                    break;
+                case CYCLE:
+                    r = "CYCLE";
+                    break;
+            }
+            return r;
+        }
+    }
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java
index 854d176..50ff400 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java
@@ -5,66 +5,81 @@
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 
 public class VertexUtil {
-	public static VKmerBytesWritable subKmer = new VKmerBytesWritable(0);
-	/**
-	 * Single Vertex: in-degree = out-degree = 1
-	 * @param vertexValue 
-	 */
-	public static boolean isPathVertex(byte value){
-		if(GeneCode.inDegree(value) == 1 && GeneCode.outDegree(value) == 1)
-			return true;
-		return false;
-	}
-	/** 
-	 * Head Vertex:  out-degree > 0, 
-	 * @param vertexValue 
-	 */
-	public static boolean isHeadVertex(byte value){
-		if(GeneCode.outDegree(value) > 0 && !isPathVertex(value))
-			return true;
-		return false;
-	}
-	/**
-	 * Rear Vertex:  in-degree > 0, 
-	 * @param vertexValue 
-	 */
-	public static boolean isRearVertex(byte value){
-		if(GeneCode.inDegree(value) > 0 && !isPathVertex(value))
-			return true;
-		return false;
-	}
-	/**
-	 * update right neighber based on next vertexId
-	 */
-	public static byte updateRightNeighberByVertexId(byte oldVertexValue, KmerBytesWritable neighberVertex, int k){
-		byte geneCode = neighberVertex.getGeneCodeAtPosition(k-1);
-		
-		byte newBit = GeneCode.getBitMapFromGeneCode(geneCode); //getAdjBit
-		return (byte) ((byte)(oldVertexValue & 0xF0) | (byte) (newBit & 0x0F));
-	}
-	/**
-	 * update right neighber
-	 */
-	public static byte updateRightNeighber(byte oldVertexValue, byte newVertexValue){
-		return (byte) ((byte)(oldVertexValue & 0xF0) | (byte) (newVertexValue & 0x0F));
-	}
-	/**
-	 * check if mergeChain is cycle
-	 */
-	public static boolean isCycle(KmerBytesWritable vertexId, VKmerBytesWritable mergeChain, int kmerSize){
-		subKmer.set(vertexId);
+    public static VKmerBytesWritable subKmer = new VKmerBytesWritable(0);
+
+    /**
+     * Single Vertex: in-degree = out-degree = 1
+     * 
+     * @param vertexValue
+     */
+    public static boolean isPathVertex(byte value) {
+        if (GeneCode.inDegree(value) == 1 && GeneCode.outDegree(value) == 1)
+            return true;
+        return false;
+    }
+
+    /**
+     * Head Vertex: out-degree > 0,
+     * 
+     * @param vertexValue
+     */
+    public static boolean isHeadVertex(byte value) {
+        if (GeneCode.outDegree(value) > 0 && !isPathVertex(value))
+            return true;
+        return false;
+    }
+
+    /**
+     * Rear Vertex: in-degree > 0,
+     * 
+     * @param vertexValue
+     */
+    public static boolean isRearVertex(byte value) {
+        if (GeneCode.inDegree(value) > 0 && !isPathVertex(value))
+            return true;
+        return false;
+    }
+
+    /**
+     * update right neighber based on next vertexId
+     */
+    public static byte updateRightNeighberByVertexId(byte oldVertexValue, KmerBytesWritable neighberVertex, int k) {
+        byte geneCode = neighberVertex.getGeneCodeAtPosition(k - 1);
+
+        byte newBit = GeneCode.getBitMapFromGeneCode(geneCode); //getAdjBit
+        return (byte) ((byte) (oldVertexValue & 0xF0) | (byte) (newBit & 0x0F));
+    }
+
+    /**
+     * update right neighber
+     */
+    public static byte updateRightNeighber(byte oldVertexValue, byte newVertexValue) {
+        return (byte) ((byte) (oldVertexValue & 0xF0) | (byte) (newVertexValue & 0x0F));
+    }
+
+    /**
+     * check if mergeChain is cycle
+     */
+    public static boolean isCycle(KmerBytesWritable vertexId, VKmerBytesWritable mergeChain, int kmerSize) {
+        String chain = mergeChain.toString().substring(1);
+        if (chain.contains(vertexId.toString()))
+            return true;
+        return false;
+
+        /*subKmer.set(vertexId);
         for(int istart = 1; istart < mergeChain.getKmerLength() - kmerSize + 1; istart++){
         	byte nextgene = mergeChain.getGeneCodeAtPosition(istart+kmerSize);
         	subKmer.shiftKmerWithNextCode(nextgene);
         	if(subKmer.equals(vertexId))
             	return true;
         }
-        return false;
-	}
-	/**
-	 * reverse neighber
-	 */
-	public static byte reverseAdjMap(byte oldAdjMap, byte geneCode){
-		return (byte) ((oldAdjMap & 0xF0) | (GeneCode.getBitMapFromGeneCode(geneCode) & 0x0F));
-	}
+        return false;*/
+    }
+
+    /**
+     * reverse neighber
+     */
+    public static byte reverseAdjMap(byte oldAdjMap, byte geneCode) {
+        return (byte) ((oldAdjMap & 0xF0) | (GeneCode.getBitMapFromGeneCode(geneCode) & 0x0F));
+    }
 }
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
index 5a138c4..8b138f2 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
@@ -14,15 +14,14 @@
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
 
-
 public class JobGenerator {
 
     public static String outputBase = "src/test/resources/jobs/";
-    
+
     private static void generateNaiveAlgorithmForMergeGraphJob(String jobName, String outputPath) throws IOException {
-    	PregelixJob job = new PregelixJob(jobName);
-    	job.setVertexClass(NaiveAlgorithmForPathMergeVertex.class);
-    	job.setVertexInputFormatClass(NaiveAlgorithmForPathMergeInputFormat.class);
+        PregelixJob job = new PregelixJob(jobName);
+        job.setVertexClass(NaiveAlgorithmForPathMergeVertex.class);
+        job.setVertexInputFormatClass(NaiveAlgorithmForPathMergeInputFormat.class);
         job.setVertexOutputFormatClass(NaiveAlgorithmForPathMergeOutputFormat.class);
         job.setDynamicVertexValueSize(true);
         job.setOutputKeyClass(KmerBytesWritable.class);
@@ -30,15 +29,16 @@
         job.getConfiguration().setInt(NaiveAlgorithmForPathMergeVertex.KMER_SIZE, 5);
         job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
     }
-    
+
     private static void genNaiveAlgorithmForMergeGraph() throws IOException {
-    	generateNaiveAlgorithmForMergeGraphJob("NaiveAlgorithmForMergeGraph", outputBase + "NaiveAlgorithmForMergeGraph.xml");
+        generateNaiveAlgorithmForMergeGraphJob("NaiveAlgorithmForMergeGraph", outputBase
+                + "NaiveAlgorithmForMergeGraph.xml");
     }
-    
+
     private static void generateLogAlgorithmForMergeGraphJob(String jobName, String outputPath) throws IOException {
-    	PregelixJob job = new PregelixJob(jobName);
-    	job.setVertexClass(LogAlgorithmForPathMergeVertex.class);
-        job.setVertexInputFormatClass(LogAlgorithmForPathMergeInputFormat.class); 
+        PregelixJob job = new PregelixJob(jobName);
+        job.setVertexClass(LogAlgorithmForPathMergeVertex.class);
+        job.setVertexInputFormatClass(LogAlgorithmForPathMergeInputFormat.class);
         job.setVertexOutputFormatClass(LogAlgorithmForPathMergeOutputFormat.class);
         job.setDynamicVertexValueSize(true);
         job.setOutputKeyClass(KmerBytesWritable.class);
@@ -46,14 +46,14 @@
         job.getConfiguration().setInt(LogAlgorithmForPathMergeVertex.KMER_SIZE, 5);
         job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
     }
-    
+
     private static void genLogAlgorithmForMergeGraph() throws IOException {
-    	generateLogAlgorithmForMergeGraphJob("LogAlgorithmForMergeGraph", outputBase + "LogAlgorithmForMergeGraph.xml");
+        generateLogAlgorithmForMergeGraphJob("LogAlgorithmForMergeGraph", outputBase + "LogAlgorithmForMergeGraph.xml");
     }
-    
-	public static void main(String[] args) throws IOException {
-		genNaiveAlgorithmForMergeGraph();
-		genLogAlgorithmForMergeGraph();
-	}
+
+    public static void main(String[] args) throws IOException {
+        genNaiveAlgorithmForMergeGraph();
+        genLogAlgorithmForMergeGraph();
+    }
 
 }
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 818a550..f25ad57 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
@@ -30,58 +30,55 @@
 import edu.uci.ics.pregelix.core.util.PregelixHyracksIntegrationUtil;
 
 public class PathMergeSmallTestCase extends TestCase {
-	private final PregelixJob job;
-	private final String resultFileDir;
-	private final String textFileDir;
-	private final String jobFile;
-	private final Driver driver = new Driver(this.getClass());
-	private final FileSystem dfs;
+    private final PregelixJob job;
+    private final String resultFileDir;
+    private final String textFileDir;
+    private final String jobFile;
+    private final Driver driver = new Driver(this.getClass());
+    private final FileSystem dfs;
 
-	public PathMergeSmallTestCase(String hadoopConfPath, String jobName,
-			String jobFile, FileSystem dfs, String hdfsInput, String resultFile, String textFile)
-			throws Exception {
-		super("test");
-		this.jobFile = jobFile;
-		this.job = new PregelixJob("test");
-		this.job.getConfiguration().addResource(new Path(jobFile));
-		this.job.getConfiguration().addResource(new Path(hadoopConfPath));
-		FileInputFormat.setInputPaths(job, hdfsInput);
-		FileOutputFormat.setOutputPath(job, new Path(hdfsInput + "_result"));
-		this.textFileDir = textFile;
-		job.setJobName(jobName);
-		this.resultFileDir = resultFile;
-		
-		this.dfs = dfs;
-	}
+    public PathMergeSmallTestCase(String hadoopConfPath, String jobName, String jobFile, FileSystem dfs,
+            String hdfsInput, String resultFile, String textFile) throws Exception {
+        super("test");
+        this.jobFile = jobFile;
+        this.job = new PregelixJob("test");
+        this.job.getConfiguration().addResource(new Path(jobFile));
+        this.job.getConfiguration().addResource(new Path(hadoopConfPath));
+        FileInputFormat.setInputPaths(job, hdfsInput);
+        FileOutputFormat.setOutputPath(job, new Path(hdfsInput + "_result"));
+        this.textFileDir = textFile;
+        job.setJobName(jobName);
+        this.resultFileDir = resultFile;
 
-	private void waitawhile() throws InterruptedException {
-		synchronized (this) {
-			this.wait(20);
-		}
-	}
+        this.dfs = dfs;
+    }
 
-	@Test
-	public void test() throws Exception {
-		setUp();
-		Plan[] plans = new Plan[] { Plan.OUTER_JOIN };
-		for (Plan plan : plans) {
-			driver.runJob(job, plan, PregelixHyracksIntegrationUtil.CC_HOST,
-					PregelixHyracksIntegrationUtil.TEST_HYRACKS_CC_CLIENT_PORT,
-					false);
-		}
-		compareResults();
-		tearDown();
-		waitawhile();
-	}
+    private void waitawhile() throws InterruptedException {
+        synchronized (this) {
+            this.wait(20);
+        }
+    }
 
-	private void compareResults() throws Exception {
-		dfs.copyToLocalFile(FileOutputFormat.getOutputPath(job), new Path(
-				resultFileDir));
-		GenerateTextFile.generateFromPathmergeResult(5, resultFileDir, textFileDir);
-	}
+    @Test
+    public void test() throws Exception {
+        setUp();
+        Plan[] plans = new Plan[] { Plan.OUTER_JOIN };
+        for (Plan plan : plans) {
+            driver.runJob(job, plan, PregelixHyracksIntegrationUtil.CC_HOST,
+                    PregelixHyracksIntegrationUtil.TEST_HYRACKS_CC_CLIENT_PORT, false);
+        }
+        compareResults();
+        tearDown();
+        waitawhile();
+    }
 
-	public String toString() {
-		return jobFile;
-	}
+    private void compareResults() throws Exception {
+        dfs.copyToLocalFile(FileOutputFormat.getOutputPath(job), new Path(resultFileDir));
+        GenerateTextFile.generateFromPathmergeResult(5, resultFileDir, textFileDir);
+    }
+
+    public String toString() {
+        return jobFile;
+    }
 
 }
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 5c6259e..dcbbb79 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
@@ -41,194 +41,171 @@
 
 @SuppressWarnings("deprecation")
 public class PathMergeSmallTestSuite extends TestSuite {
-	private static final Logger LOGGER = Logger
-			.getLogger(PathMergeSmallTestSuite.class.getName());
+    private static final Logger LOGGER = Logger.getLogger(PathMergeSmallTestSuite.class.getName());
 
-	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
-		+ "SimplePath", PreFix + File.separator
-		+ "SinglePath", PreFix + File.separator
-		+ "TreePath"};*/
-		+ "2", PreFix + File.separator
-		+ "3", PreFix + File.separator
-		+ "4", PreFix + File.separator
-		+ "5", PreFix + File.separator
-		+ "6", PreFix + File.separator
-		+ "7", PreFix + File.separator
-		+ "8", PreFix + File.separator
-		+ "9", PreFix + File.separator
-		+ "TwoKmer", PreFix + File.separator
-		+ "ThreeKmer", PreFix + File.separator
-		+ "SinglePath", PreFix + File.separator
-		+ "SimplePath", PreFix + File.separator
-		+ "Path", PreFix + File.separator
-		+ "BridgePath", PreFix + File.separator
-		+ "CyclePath", PreFix + File.separator
-		+ "RingPath", PreFix + File.separator
-		+ "LongPath", PreFix + File.separator
-		+ "TreePath"};
-	private static final String ACTUAL_RESULT_DIR = "actual";
-	private static final String PATH_TO_HADOOP_CONF = "src/test/resources/hadoop/conf";
-	private static final String PATH_TO_CLUSTER_STORE = "src/test/resources/cluster/stores.properties";
-	private static final String PATH_TO_CLUSTER_PROPERTIES = "src/test/resources/cluster/cluster.properties";
-	private static final String PATH_TO_JOBS = "src/test/resources/jobs/";
-	private static final String PATH_TO_ONLY = "src/test/resources/only.txt";
+    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
+            + "SimplePath", PreFix + File.separator
+            + "SinglePath", PreFix + File.separator
+            + "TreePath"};*/
+            + "2", PreFix + File.separator + "3", PreFix + File.separator + "4", PreFix + File.separator + "5",
+            PreFix + File.separator + "6", PreFix + File.separator + "7", PreFix + File.separator + "8",
+            PreFix + File.separator + "9", PreFix + File.separator + "TwoKmer", PreFix + File.separator + "ThreeKmer",
+            PreFix + File.separator + "SinglePath", PreFix + File.separator + "SimplePath",
+            PreFix + File.separator + "Path", PreFix + File.separator + "BridgePath",
+            PreFix + File.separator + "CyclePath", PreFix + File.separator + "RingPath",
+            PreFix + File.separator + "LongPath", PreFix + File.separator + "TreePath" };
+    private static final String ACTUAL_RESULT_DIR = "actual";
+    private static final String PATH_TO_HADOOP_CONF = "src/test/resources/hadoop/conf";
+    private static final String PATH_TO_CLUSTER_STORE = "src/test/resources/cluster/stores.properties";
+    private static final String PATH_TO_CLUSTER_PROPERTIES = "src/test/resources/cluster/cluster.properties";
+    private static final String PATH_TO_JOBS = "src/test/resources/jobs/";
+    private static final String PATH_TO_ONLY = "src/test/resources/only.txt";
 
-	public static final String HDFS_INPUTPATH = "/PathTestSet";
+    public static final String HDFS_INPUTPATH = "/PathTestSet";
 
-	private static final String HADOOP_CONF_PATH = ACTUAL_RESULT_DIR
-			+ File.separator + "conf.xml";
-	private MiniDFSCluster dfsCluster;
+    private static final String HADOOP_CONF_PATH = ACTUAL_RESULT_DIR + File.separator + "conf.xml";
+    private MiniDFSCluster dfsCluster;
 
-	private JobConf conf = new JobConf();
-	private int numberOfNC = 2;
+    private JobConf conf = new JobConf();
+    private int numberOfNC = 2;
 
-	public void setUp() throws Exception {
-		ClusterConfig.setStorePath(PATH_TO_CLUSTER_STORE);
-		ClusterConfig.setClusterPropertiesPath(PATH_TO_CLUSTER_PROPERTIES);
-		cleanupStores();
-		PregelixHyracksIntegrationUtil.init("src/test/resources/topology.xml");
-		LOGGER.info("Hyracks mini-cluster started");
-		FileUtils.forceMkdir(new File(ACTUAL_RESULT_DIR));
-		FileUtils.cleanDirectory(new File(ACTUAL_RESULT_DIR));
-		startHDFS();
-	}
+    public void setUp() throws Exception {
+        ClusterConfig.setStorePath(PATH_TO_CLUSTER_STORE);
+        ClusterConfig.setClusterPropertiesPath(PATH_TO_CLUSTER_PROPERTIES);
+        cleanupStores();
+        PregelixHyracksIntegrationUtil.init("src/test/resources/topology.xml");
+        LOGGER.info("Hyracks mini-cluster started");
+        FileUtils.forceMkdir(new File(ACTUAL_RESULT_DIR));
+        FileUtils.cleanDirectory(new File(ACTUAL_RESULT_DIR));
+        startHDFS();
+    }
 
-	private void startHDFS() throws IOException {
-		conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/core-site.xml"));
-		conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/mapred-site.xml"));
-		conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/hdfs-site.xml"));
-		FileSystem lfs = FileSystem.getLocal(new Configuration());
-		lfs.delete(new Path("build"), true);
-		System.setProperty("hadoop.log.dir", "logs");
-		dfsCluster = new MiniDFSCluster(conf, numberOfNC, true, null);
-		FileSystem dfs = FileSystem.get(conf);
+    private void startHDFS() throws IOException {
+        conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/core-site.xml"));
+        conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/mapred-site.xml"));
+        conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/hdfs-site.xml"));
+        FileSystem lfs = FileSystem.getLocal(new Configuration());
+        lfs.delete(new Path("build"), true);
+        System.setProperty("hadoop.log.dir", "logs");
+        dfsCluster = new MiniDFSCluster(conf, numberOfNC, true, null);
+        FileSystem dfs = FileSystem.get(conf);
 
-		for (String testDir : TestDir) {
-			File src = new File(testDir);
-			Path dest = new Path(HDFS_INPUTPATH + File.separator + src.getName());
-			dfs.mkdirs(dest);
-			//src.listFiles()
-			//src.listFiles((FilenameFilter)(new WildcardFileFilter("part*")))
-			for (File f : src.listFiles()){
-				dfs.copyFromLocalFile(new Path(f.getAbsolutePath()), dest);
-			}
-		}
+        for (String testDir : TestDir) {
+            File src = new File(testDir);
+            Path dest = new Path(HDFS_INPUTPATH + File.separator + src.getName());
+            dfs.mkdirs(dest);
+            //src.listFiles()
+            //src.listFiles((FilenameFilter)(new WildcardFileFilter("part*")))
+            for (File f : src.listFiles()) {
+                dfs.copyFromLocalFile(new Path(f.getAbsolutePath()), dest);
+            }
+        }
 
-		DataOutputStream confOutput = new DataOutputStream(
-				new FileOutputStream(new File(HADOOP_CONF_PATH)));
-		conf.writeXml(confOutput);
-		confOutput.flush();
-		confOutput.close();
-	}
-	
-	private void cleanupStores() throws IOException {
-		FileUtils.forceMkdir(new File("teststore"));
-		FileUtils.forceMkdir(new File("build"));
-		FileUtils.cleanDirectory(new File("teststore"));
-		FileUtils.cleanDirectory(new File("build"));
-	}
+        DataOutputStream confOutput = new DataOutputStream(new FileOutputStream(new File(HADOOP_CONF_PATH)));
+        conf.writeXml(confOutput);
+        confOutput.flush();
+        confOutput.close();
+    }
 
-	/**
-	 * cleanup hdfs cluster
-	 */
-	private void cleanupHDFS() throws Exception {
-		dfsCluster.shutdown();
-	}
+    private void cleanupStores() throws IOException {
+        FileUtils.forceMkdir(new File("teststore"));
+        FileUtils.forceMkdir(new File("build"));
+        FileUtils.cleanDirectory(new File("teststore"));
+        FileUtils.cleanDirectory(new File("build"));
+    }
 
-	public void tearDown() throws Exception {
-		PregelixHyracksIntegrationUtil.deinit();
-		LOGGER.info("Hyracks mini-cluster shut down");
-		cleanupHDFS();
-	}
+    /**
+     * cleanup hdfs cluster
+     */
+    private void cleanupHDFS() throws Exception {
+        dfsCluster.shutdown();
+    }
 
-	public static Test suite() throws Exception {
-		List<String> onlys = getFileList(PATH_TO_ONLY);
-		File testData = new File(PATH_TO_JOBS);
-		File[] queries = testData.listFiles();
-		PathMergeSmallTestSuite testSuite = new PathMergeSmallTestSuite();
-		testSuite.setUp();
-		boolean onlyEnabled = false;
-		FileSystem dfs = FileSystem.get(testSuite.conf);
+    public void tearDown() throws Exception {
+        PregelixHyracksIntegrationUtil.deinit();
+        LOGGER.info("Hyracks mini-cluster shut down");
+        cleanupHDFS();
+    }
 
-		if (onlys.size() > 0) {
-			onlyEnabled = true;
-		}
+    public static Test suite() throws Exception {
+        List<String> onlys = getFileList(PATH_TO_ONLY);
+        File testData = new File(PATH_TO_JOBS);
+        File[] queries = testData.listFiles();
+        PathMergeSmallTestSuite testSuite = new PathMergeSmallTestSuite();
+        testSuite.setUp();
+        boolean onlyEnabled = false;
+        FileSystem dfs = FileSystem.get(testSuite.conf);
 
-		for (File qFile : queries) {
-			if (qFile.isFile()) {
-				if (onlyEnabled && !isInList(onlys, qFile.getName())) {
-					continue;
-				} else {
-					for (String testPathStr : TestDir) {
-						File testDir = new File(testPathStr);
-						String resultFileName = ACTUAL_RESULT_DIR
-								+ File.separator
-								+ jobExtToResExt(qFile.getName())
-								+ File.separator + "bin"
-								+ File.separator + testDir.getName();
-						String textFileName = ACTUAL_RESULT_DIR
-								+ File.separator
-								+ jobExtToResExt(qFile.getName())
-								+ File.separator + "txt"
-								+ File.separator + testDir.getName();
-						testSuite.addTest(new PathMergeSmallTestCase(
-								HADOOP_CONF_PATH, qFile.getName(), qFile
-										.getAbsolutePath().toString(),
-								 dfs, HDFS_INPUTPATH + File.separator + testDir.getName(),
-								 resultFileName, textFileName));
-					}
-				}
-			}
-		}
-		return testSuite;
-	}
+        if (onlys.size() > 0) {
+            onlyEnabled = true;
+        }
 
-	/**
-	 * Runs the tests and collects their result in a TestResult.
-	 */
-	@Override
-	public void run(TestResult result) {
-		try {
-			int testCount = countTestCases();
-			for (int i = 0; i < testCount; i++) {
-				// cleanupStores();
-				Test each = this.testAt(i);
-				if (result.shouldStop())
-					break;
-				runTest(each, result);
-			}
-			tearDown();
-		} catch (Exception e) {
-			throw new IllegalStateException(e);
-		}
-	}
+        for (File qFile : queries) {
+            if (qFile.isFile()) {
+                if (onlyEnabled && !isInList(onlys, qFile.getName())) {
+                    continue;
+                } else {
+                    for (String testPathStr : TestDir) {
+                        File testDir = new File(testPathStr);
+                        String resultFileName = ACTUAL_RESULT_DIR + File.separator + jobExtToResExt(qFile.getName())
+                                + File.separator + "bin" + File.separator + testDir.getName();
+                        String textFileName = ACTUAL_RESULT_DIR + File.separator + jobExtToResExt(qFile.getName())
+                                + File.separator + "txt" + File.separator + testDir.getName();
+                        testSuite.addTest(new PathMergeSmallTestCase(HADOOP_CONF_PATH, qFile.getName(), qFile
+                                .getAbsolutePath().toString(), dfs,
+                                HDFS_INPUTPATH + File.separator + testDir.getName(), resultFileName, textFileName));
+                    }
+                }
+            }
+        }
+        return testSuite;
+    }
 
-	protected static List<String> getFileList(String ignorePath)
-			throws FileNotFoundException, IOException {
-		BufferedReader reader = new BufferedReader(new FileReader(ignorePath));
-		String s = null;
-		List<String> ignores = new ArrayList<String>();
-		while ((s = reader.readLine()) != null) {
-			ignores.add(s);
-		}
-		reader.close();
-		return ignores;
-	}
+    /**
+     * Runs the tests and collects their result in a TestResult.
+     */
+    @Override
+    public void run(TestResult result) {
+        try {
+            int testCount = countTestCases();
+            for (int i = 0; i < testCount; i++) {
+                // cleanupStores();
+                Test each = this.testAt(i);
+                if (result.shouldStop())
+                    break;
+                runTest(each, result);
+            }
+            tearDown();
+        } catch (Exception e) {
+            throw new IllegalStateException(e);
+        }
+    }
 
-	private static String jobExtToResExt(String fname) {
-		int dot = fname.lastIndexOf('.');
-		return fname.substring(0, dot);
-	}
+    protected static List<String> getFileList(String ignorePath) throws FileNotFoundException, IOException {
+        BufferedReader reader = new BufferedReader(new FileReader(ignorePath));
+        String s = null;
+        List<String> ignores = new ArrayList<String>();
+        while ((s = reader.readLine()) != null) {
+            ignores.add(s);
+        }
+        reader.close();
+        return ignores;
+    }
 
-	private static boolean isInList(List<String> onlys, String name) {
-		for (String only : onlys)
-			if (name.indexOf(only) >= 0)
-				return true;
-		return false;
-	}
+    private static String jobExtToResExt(String fname) {
+        int dot = fname.lastIndexOf('.');
+        return fname.substring(0, dot);
+    }
+
+    private static boolean isInList(List<String> onlys, String name) {
+        for (String only : onlys)
+            if (name.indexOf(only) >= 0)
+                return true;
+        return false;
+    }
 
 }
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/ResultGen/ReportGenerator.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/ResultGen/ReportGenerator.java
index 00298a3..f5f42fc 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/ResultGen/ReportGenerator.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/ResultGen/ReportGenerator.java
@@ -10,41 +10,44 @@
 import org.apache.commons.io.FileUtils;
 
 public class ReportGenerator {
-	public static final String PATH_TO_REPORT = "report";
-	public static final String PATH_TO_LOGINFO = "log";
+    public static final String PATH_TO_REPORT = "report";
+    public static final String PATH_TO_LOGINFO = "log";
 
-	public static void generateReportFromLoginfo(String fileName) throws Exception {
-		DecimalFormat df = new DecimalFormat("0.00");
-		BufferedReader br = new BufferedReader(new FileReader(PATH_TO_LOGINFO + "/" + fileName));
-		BufferedWriter bw = new BufferedWriter(new FileWriter(new File(PATH_TO_REPORT + "/" + fileName)));
-		String line;
-		int i = 0;
-		double totalTime = 0;
-		line = br.readLine();
-		do{
-			line = br.readLine();
-			String[] tokens = line.split(" ");
-			for(i = 1; i < tokens.length - 1; i++){
-				bw.write(tokens[i] + " ");
-			}
-			String subString = tokens[i].substring(0, tokens[i].length() - 2);
-			double ms = Double.parseDouble(subString)/60000;
-			totalTime += ms;
-			bw.write(df.format(ms) + "m");
-			bw.newLine();
-		}while((line = br.readLine()) != null);
-		bw.write("The total time is " + df.format(totalTime) + "m");
-		bw.close();
-		br.close();
-	}
-	
-	public static void main(String[] args) throws Exception {
-		FileUtils.forceMkdir(new File(PATH_TO_REPORT));
-		FileUtils.cleanDirectory(new File(PATH_TO_REPORT));
-		generateReportFromLoginfo("naive_converge");
-		generateReportFromLoginfo("log_converge");
-		generateReportFromLoginfo("naive_36");
-		generateReportFromLoginfo("log_13");
+    public static void generateReportFromLoginfo(String fileName) throws Exception {
+        DecimalFormat df = new DecimalFormat("0.0000");
+        BufferedReader br = new BufferedReader(new FileReader(PATH_TO_LOGINFO + "/" + fileName));
+        BufferedWriter bw = new BufferedWriter(new FileWriter(new File(PATH_TO_REPORT + "/" + fileName)));
+        String line;
+        int i = 0;
+        double totalTime = 0;
+        line = br.readLine();
+        do {
+            line = br.readLine();
+            String[] tokens = line.split(" ");
+            for (i = 1; i < tokens.length - 1; i++) {
+                bw.write(tokens[i] + " ");
+            }
+            String subString = tokens[i].substring(0, tokens[i].length() - 2);
+            double ms = Double.parseDouble(subString) / 60000;
+            totalTime += ms;
+            bw.write(df.format(ms) + "m");
+            bw.newLine();
+        } while ((line = br.readLine()) != null);
+        bw.write("The total time is " + df.format(totalTime) + "m");
+        bw.close();
+        br.close();
+    }
 
-	}
+    public static void main(String[] args) throws Exception {
+        FileUtils.forceMkdir(new File(PATH_TO_REPORT));
+        FileUtils.cleanDirectory(new File(PATH_TO_REPORT));
+        generateReportFromLoginfo("log_nc4");
+        generateReportFromLoginfo("log_nc8");
+        generateReportFromLoginfo("naive_nc4");
+        generateReportFromLoginfo("naive_nc4_vertex16");
+        generateReportFromLoginfo("log_nc4_vertex16");
+        generateReportFromLoginfo("naive_nc8_outerjoin");
+        generateReportFromLoginfo("naive_nc8_outerjoin_2");
+        generateReportFromLoginfo("naive_nc8_innerjoin");
+    }
 }
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/CompareTest.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/CompareTest.java
index b80fb99..0a2ae92 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/CompareTest.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/CompareTest.java
@@ -6,15 +6,14 @@
 
 import edu.uci.ics.genomix.pregelix.example.util.TestUtils;
 
-
 public class CompareTest {
-	public static final String PATH_TO_TESTSTORE = "testcase/pathmerge";
-	public static final String CHAIN_OUTPUT = PATH_TO_TESTSTORE + "chain";
-	
-	@Test
-	public void test() throws Exception {
-		File naive = new File(CHAIN_OUTPUT + "/naive-sort");
-		File log = new File(CHAIN_OUTPUT + "/log-sort");
-		TestUtils.compareWithResult(naive, log);
-	}
+    public static final String PATH_TO_TESTSTORE = "testcase/pathmerge";
+    public static final String CHAIN_OUTPUT = PATH_TO_TESTSTORE + "chain";
+
+    @Test
+    public void test() throws Exception {
+        File naive = new File(CHAIN_OUTPUT + "/naive-sort");
+        File log = new File(CHAIN_OUTPUT + "/log-sort");
+        TestUtils.compareWithResult(naive, log);
+    }
 }
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/GraphBuildTest.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/GraphBuildTest.java
index 6d4e421..66ee26d 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/GraphBuildTest.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/GraphBuildTest.java
@@ -32,159 +32,145 @@
 
 @SuppressWarnings("deprecation")
 public class GraphBuildTest {
-	private static final String ACTUAL_RESULT_DIR = "graphbuildresult";
-	private static final String PATH_TO_HADOOP_CONF = "src/test/resources/hadoop/conf";
+    private static final String ACTUAL_RESULT_DIR = "graphbuildresult";
+    private static final String PATH_TO_HADOOP_CONF = "src/test/resources/hadoop/conf";
 
-	private static final String DATA_PATH = "data/testGeneFile";
-	private static final String HDFS_INPUT_PATH = "/test";
-	private static final String HDFS_OUTPUT_PATH = "/result";
+    private static final String DATA_PATH = "data/testGeneFile";
+    private static final String HDFS_INPUT_PATH = "/test";
+    private static final String HDFS_OUTPUT_PATH = "/result";
 
-	private static final String DUMPED_RESULT = ACTUAL_RESULT_DIR
-			+ HDFS_OUTPUT_PATH + "/result.txt";
-	private static final String CONVERT_RESULT = ACTUAL_RESULT_DIR
-			+ "/graph_build_result.txt";
-	private static final String EXPECTED_PATH = "src/test/resources/expected/result2";
+    private static final String DUMPED_RESULT = ACTUAL_RESULT_DIR + HDFS_OUTPUT_PATH + "/result.txt";
+    private static final String CONVERT_RESULT = ACTUAL_RESULT_DIR + "/graph_build_result.txt";
+    private static final String EXPECTED_PATH = "src/test/resources/expected/result2";
 
-	private static final String HADOOP_CONF_PATH = ACTUAL_RESULT_DIR
-			+ File.separator + "conf.xml";
-	private MiniDFSCluster dfsCluster;
+    private static final String HADOOP_CONF_PATH = ACTUAL_RESULT_DIR + File.separator + "conf.xml";
+    private MiniDFSCluster dfsCluster;
 
-	private JobConf conf = new JobConf();
-	private int numberOfNC = 2;
-	private int numPartitionPerMachine = 1;
+    private JobConf conf = new JobConf();
+    private int numberOfNC = 2;
+    private int numPartitionPerMachine = 1;
 
-	private Driver driver;
+    private Driver driver;
 
-	@Before
-	public void setUp() throws Exception {
-		cleanupStores();
-		edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.init();
-		FileUtils.forceMkdir(new File(ACTUAL_RESULT_DIR));
-		FileUtils.cleanDirectory(new File(ACTUAL_RESULT_DIR));
-		startHDFS();
+    @Before
+    public void setUp() throws Exception {
+        cleanupStores();
+        edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.init();
+        FileUtils.forceMkdir(new File(ACTUAL_RESULT_DIR));
+        FileUtils.cleanDirectory(new File(ACTUAL_RESULT_DIR));
+        startHDFS();
 
-		FileInputFormat.setInputPaths(conf, HDFS_INPUT_PATH);
-		FileOutputFormat.setOutputPath(conf, new Path(HDFS_OUTPUT_PATH));
+        FileInputFormat.setInputPaths(conf, HDFS_INPUT_PATH);
+        FileOutputFormat.setOutputPath(conf, new Path(HDFS_OUTPUT_PATH));
 
-		conf.setInt(GenomixJob.KMER_LENGTH, 55);
-		driver = new Driver(
-				edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.CC_HOST,
-				edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.TEST_HYRACKS_CC_CLIENT_PORT,
-				numPartitionPerMachine);
-	}
+        conf.setInt(GenomixJob.KMER_LENGTH, 55);
+        driver = new Driver(edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.CC_HOST,
+                edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.TEST_HYRACKS_CC_CLIENT_PORT, numPartitionPerMachine);
+    }
 
-	private void cleanupStores() throws IOException {
-		FileUtils.forceMkdir(new File("teststore"));
-		FileUtils.forceMkdir(new File("build"));
-		FileUtils.cleanDirectory(new File("teststore"));
-		FileUtils.cleanDirectory(new File("build"));
-	}
+    private void cleanupStores() throws IOException {
+        FileUtils.forceMkdir(new File("teststore"));
+        FileUtils.forceMkdir(new File("build"));
+        FileUtils.cleanDirectory(new File("teststore"));
+        FileUtils.cleanDirectory(new File("build"));
+    }
 
-	private void startHDFS() throws IOException {
-		conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/core-site.xml"));
-		conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/mapred-site.xml"));
-		conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/hdfs-site.xml"));
+    private void startHDFS() throws IOException {
+        conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/core-site.xml"));
+        conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/mapred-site.xml"));
+        conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/hdfs-site.xml"));
 
-		FileSystem lfs = FileSystem.getLocal(new Configuration());
-		lfs.delete(new Path("build"), true);
-		System.setProperty("hadoop.log.dir", "logs");
-		dfsCluster = new MiniDFSCluster(conf, numberOfNC, true, null);
-		FileSystem dfs = FileSystem.get(conf);
-		Path src = new Path(DATA_PATH);
-		Path dest = new Path(HDFS_INPUT_PATH);
-		dfs.mkdirs(dest);
-		dfs.copyFromLocalFile(src, dest);
+        FileSystem lfs = FileSystem.getLocal(new Configuration());
+        lfs.delete(new Path("build"), true);
+        System.setProperty("hadoop.log.dir", "logs");
+        dfsCluster = new MiniDFSCluster(conf, numberOfNC, true, null);
+        FileSystem dfs = FileSystem.get(conf);
+        Path src = new Path(DATA_PATH);
+        Path dest = new Path(HDFS_INPUT_PATH);
+        dfs.mkdirs(dest);
+        dfs.copyFromLocalFile(src, dest);
 
-		DataOutputStream confOutput = new DataOutputStream(
-				new FileOutputStream(new File(HADOOP_CONF_PATH)));
-		conf.writeXml(confOutput);
-		confOutput.flush();
-		confOutput.close();
-	}
+        DataOutputStream confOutput = new DataOutputStream(new FileOutputStream(new File(HADOOP_CONF_PATH)));
+        conf.writeXml(confOutput);
+        confOutput.flush();
+        confOutput.close();
+    }
 
-	private void cleanUpReEntry() throws IOException {
-		FileSystem lfs = FileSystem.getLocal(new Configuration());
-		if (lfs.exists(new Path(DUMPED_RESULT))) {
-			lfs.delete(new Path(DUMPED_RESULT), true);
-		}
-		FileSystem dfs = FileSystem.get(conf);
-		if (dfs.exists(new Path(HDFS_OUTPUT_PATH))) {
-			dfs.delete(new Path(HDFS_OUTPUT_PATH), true);
-		}
-	}
+    private void cleanUpReEntry() throws IOException {
+        FileSystem lfs = FileSystem.getLocal(new Configuration());
+        if (lfs.exists(new Path(DUMPED_RESULT))) {
+            lfs.delete(new Path(DUMPED_RESULT), true);
+        }
+        FileSystem dfs = FileSystem.get(conf);
+        if (dfs.exists(new Path(HDFS_OUTPUT_PATH))) {
+            dfs.delete(new Path(HDFS_OUTPUT_PATH), true);
+        }
+    }
 
-	@Test
-	public void TestAll() throws Exception {
-		cleanUpReEntry();
-		TestPreClusterGroupby();
-	}
+    @Test
+    public void TestAll() throws Exception {
+        cleanUpReEntry();
+        TestPreClusterGroupby();
+    }
 
-	public void TestPreClusterGroupby() throws Exception {
-		conf.set(GenomixJob.GROUPBY_TYPE, "precluster");
-		//conf.set(GenomixJob.OUTPUT_FORMAT, "text");
-		System.err.println("Testing PreClusterGroupBy");
-		driver.runJob(new GenomixJob(conf), Plan.BUILD_DEBRUJIN_GRAPH, true);
-		Assert.assertEquals(true, checkResults(EXPECTED_PATH));
-	}
+    public void TestPreClusterGroupby() throws Exception {
+        conf.set(GenomixJob.GROUPBY_TYPE, "precluster");
+        //conf.set(GenomixJob.OUTPUT_FORMAT, "text");
+        System.err.println("Testing PreClusterGroupBy");
+        driver.runJob(new GenomixJob(conf), Plan.BUILD_DEBRUJIN_GRAPH, true);
+        Assert.assertEquals(true, checkResults(EXPECTED_PATH));
+    }
 
+    private boolean checkResults(String expectedPath) throws Exception {
+        String format = conf.get(GenomixJob.OUTPUT_FORMAT);
+        if ("text".equalsIgnoreCase(format)) {
+            FileUtil.copyMerge(FileSystem.get(conf), new Path(HDFS_OUTPUT_PATH),
+                    FileSystem.getLocal(new Configuration()), new Path(DUMPED_RESULT), false, conf, null);
+        } else {
 
-	private boolean checkResults(String expectedPath) throws Exception {
-		String format = conf.get(GenomixJob.OUTPUT_FORMAT);
-		if ("text".equalsIgnoreCase(format)) {
-			FileUtil.copyMerge(FileSystem.get(conf),
-					new Path(HDFS_OUTPUT_PATH), FileSystem
-							.getLocal(new Configuration()), new Path(
-							DUMPED_RESULT), false, conf, null);
-		} else {
+            FileSystem.getLocal(new Configuration()).mkdirs(new Path(ACTUAL_RESULT_DIR + HDFS_OUTPUT_PATH));
+            File filePathTo = new File(CONVERT_RESULT);
+            BufferedWriter bw = new BufferedWriter(new FileWriter(filePathTo));
+            for (int i = 0; i < numPartitionPerMachine * numberOfNC; i++) {
+                String partname = "/part-" + i;
+                FileUtil.copy(FileSystem.get(conf), new Path(HDFS_OUTPUT_PATH + partname),
+                        FileSystem.getLocal(new Configuration()), new Path(ACTUAL_RESULT_DIR + HDFS_OUTPUT_PATH
+                                + partname), false, conf);
 
-			FileSystem.getLocal(new Configuration()).mkdirs(
-					new Path(ACTUAL_RESULT_DIR + HDFS_OUTPUT_PATH));
-			File filePathTo = new File(CONVERT_RESULT);
-			BufferedWriter bw = new BufferedWriter(new FileWriter(filePathTo));
-			for (int i = 0; i < numPartitionPerMachine * numberOfNC; i++) {
-				String partname = "/part-" + i;
-				FileUtil.copy(FileSystem.get(conf), new Path(HDFS_OUTPUT_PATH
-						+ partname), FileSystem.getLocal(new Configuration()),
-						new Path(ACTUAL_RESULT_DIR + HDFS_OUTPUT_PATH
-								+ partname), false, conf);
+                Path path = new Path(HDFS_OUTPUT_PATH + partname);
+                FileSystem dfs = FileSystem.get(conf);
+                if (dfs.getFileStatus(path).getLen() == 0) {
+                    continue;
+                }
+                SequenceFile.Reader reader = new SequenceFile.Reader(dfs, path, conf);
+                KmerBytesWritable key = new KmerBytesWritable(conf.getInt(GenomixJob.KMER_LENGTH,
+                        GenomixJob.DEFAULT_KMER));
+                KmerCountValue value = (KmerCountValue) ReflectionUtils.newInstance(reader.getValueClass(), conf);
 
-				Path path = new Path(HDFS_OUTPUT_PATH + partname);
-				FileSystem dfs = FileSystem.get(conf);
-				if (dfs.getFileStatus(path).getLen() == 0) {
-					continue;
-				}
-				SequenceFile.Reader reader = new SequenceFile.Reader(dfs, path,
-						conf);
-				KmerBytesWritable key = new KmerBytesWritable(conf.getInt(
-						GenomixJob.KMER_LENGTH, GenomixJob.DEFAULT_KMER));
-				KmerCountValue value = (KmerCountValue) ReflectionUtils
-						.newInstance(reader.getValueClass(), conf);
+                while (reader.next(key, value)) {
+                    if (key == null || value == null) {
+                        break;
+                    }
+                    bw.write(key.toString() + "\t" + value.toString());
+                    System.out.println(key.toString() + "\t" + value.toString());
+                    bw.newLine();
+                }
+                reader.close();
+            }
+            bw.close();
+        }
 
-				while (reader.next(key, value)) {
-					if (key == null || value == null) {
-						break;
-					}
-					bw.write(key.toString() + "\t" + value.toString());
-					System.out
-							.println(key.toString() + "\t" + value.toString());
-					bw.newLine();
-				}
-				reader.close();
-			}
-			bw.close();
-		}
+        // TestUtils.compareWithSortedResult(new File(expectedPath), dumped);
+        return true;
+    }
 
-		// TestUtils.compareWithSortedResult(new File(expectedPath), dumped);
-		return true;
-	}
+    @After
+    public void tearDown() throws Exception {
+        edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.deinit();
+        cleanupHDFS();
+    }
 
-	@After
-	public void tearDown() throws Exception {
-		edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.deinit();
-		cleanupHDFS();
-	}
-
-	private void cleanupHDFS() throws Exception {
-		dfsCluster.shutdown();
-	}
+    private void cleanupHDFS() throws Exception {
+        dfsCluster.shutdown();
+    }
 }
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/GraphBuildTestCase.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/GraphBuildTestCase.java
index ef89b9e..daa7e39 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/GraphBuildTestCase.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/GraphBuildTestCase.java
@@ -24,98 +24,88 @@
 import edu.uci.ics.genomix.type.KmerCountValue;
 
 public class GraphBuildTestCase extends TestCase {
-	private final JobConf conf;
-	private Driver driver;
-	private int numberOfNC = 2;
-	private int numPartitionPerMachine = 1;
-	
-	private static final String ACTUAL_RESULT_DIR = "graphbuildresult";
-	private static final String HDFS_OUTPUT_PATH = "/result";
-	private static final String DUMPED_RESULT = ACTUAL_RESULT_DIR
-			+ HDFS_OUTPUT_PATH + "/result.txt";
-	private static final String CONVERT_RESULT = ACTUAL_RESULT_DIR
-			+ HDFS_OUTPUT_PATH + "/result.txt.txt";
-	
-	public GraphBuildTestCase(JobConf conf, Driver driver){
-		this.conf = conf;
-		this.driver = driver;
-	}
-	
-	private void cleanUpReEntry() throws IOException {
-		FileSystem lfs = FileSystem.getLocal(new Configuration());
-		if (lfs.exists(new Path(DUMPED_RESULT))) {
-			lfs.delete(new Path(DUMPED_RESULT), true);
-		}
-		FileSystem dfs = FileSystem.get(conf);
-		if (dfs.exists(new Path(HDFS_OUTPUT_PATH))) {
-			dfs.delete(new Path(HDFS_OUTPUT_PATH), true);
-		}
-	}
+    private final JobConf conf;
+    private Driver driver;
+    private int numberOfNC = 2;
+    private int numPartitionPerMachine = 1;
 
-	@Test
-	public void Test() throws Exception {
-		cleanUpReEntry();
-		TestPreClusterGroupby();
-	}
+    private static final String ACTUAL_RESULT_DIR = "graphbuildresult";
+    private static final String HDFS_OUTPUT_PATH = "/result";
+    private static final String DUMPED_RESULT = ACTUAL_RESULT_DIR + HDFS_OUTPUT_PATH + "/result.txt";
+    private static final String CONVERT_RESULT = ACTUAL_RESULT_DIR + HDFS_OUTPUT_PATH + "/result.txt.txt";
 
-	public void TestPreClusterGroupby() throws Exception {
-		conf.set(GenomixJob.GROUPBY_TYPE, "precluster");
-		System.err.println("Testing PreClusterGroupBy");
-		driver.runJob(new GenomixJob(conf), Plan.BUILD_DEBRUJIN_GRAPH, true);
-		Assert.assertEquals(true, checkResults());
-	}
+    public GraphBuildTestCase(JobConf conf, Driver driver) {
+        this.conf = conf;
+        this.driver = driver;
+    }
 
+    private void cleanUpReEntry() throws IOException {
+        FileSystem lfs = FileSystem.getLocal(new Configuration());
+        if (lfs.exists(new Path(DUMPED_RESULT))) {
+            lfs.delete(new Path(DUMPED_RESULT), true);
+        }
+        FileSystem dfs = FileSystem.get(conf);
+        if (dfs.exists(new Path(HDFS_OUTPUT_PATH))) {
+            dfs.delete(new Path(HDFS_OUTPUT_PATH), true);
+        }
+    }
 
-	private boolean checkResults() throws Exception {
-		File dumped = null;
-		String format = conf.get(GenomixJob.OUTPUT_FORMAT);
-		if ("text".equalsIgnoreCase(format)) {
-			FileUtil.copyMerge(FileSystem.get(conf),
-					new Path(HDFS_OUTPUT_PATH), FileSystem
-							.getLocal(new Configuration()), new Path(
-							DUMPED_RESULT), false, conf, null);
-			dumped = new File(DUMPED_RESULT);
-		} else {
+    @Test
+    public void Test() throws Exception {
+        cleanUpReEntry();
+        TestPreClusterGroupby();
+    }
 
-			FileSystem.getLocal(new Configuration()).mkdirs(
-					new Path(ACTUAL_RESULT_DIR + HDFS_OUTPUT_PATH));
-			File filePathTo = new File(CONVERT_RESULT);
-			BufferedWriter bw = new BufferedWriter(new FileWriter(filePathTo));
-			for (int i = 0; i < numPartitionPerMachine * numberOfNC; i++) {
-				String partname = "/part-" + i;
-				FileUtil.copy(FileSystem.get(conf), new Path(HDFS_OUTPUT_PATH
-						+ partname), FileSystem.getLocal(new Configuration()),
-						new Path(ACTUAL_RESULT_DIR + HDFS_OUTPUT_PATH
-								+ partname), false, conf);
+    public void TestPreClusterGroupby() throws Exception {
+        conf.set(GenomixJob.GROUPBY_TYPE, "precluster");
+        System.err.println("Testing PreClusterGroupBy");
+        driver.runJob(new GenomixJob(conf), Plan.BUILD_DEBRUJIN_GRAPH, true);
+        Assert.assertEquals(true, checkResults());
+    }
 
-				Path path = new Path(HDFS_OUTPUT_PATH + partname);
-				FileSystem dfs = FileSystem.get(conf);
-				if (dfs.getFileStatus(path).getLen() == 0) {
-					continue;
-				}
-				SequenceFile.Reader reader = new SequenceFile.Reader(dfs, path,
-						conf);
-				KmerBytesWritable key = new KmerBytesWritable(conf.getInt(
-						GenomixJob.KMER_LENGTH, GenomixJob.DEFAULT_KMER));
-				KmerCountValue value = (KmerCountValue) ReflectionUtils
-						.newInstance(reader.getValueClass(), conf);
+    private boolean checkResults() throws Exception {
+        File dumped = null;
+        String format = conf.get(GenomixJob.OUTPUT_FORMAT);
+        if ("text".equalsIgnoreCase(format)) {
+            FileUtil.copyMerge(FileSystem.get(conf), new Path(HDFS_OUTPUT_PATH),
+                    FileSystem.getLocal(new Configuration()), new Path(DUMPED_RESULT), false, conf, null);
+            dumped = new File(DUMPED_RESULT);
+        } else {
 
-				while (reader.next(key, value)) {
-					if (key == null || value == null) {
-						break;
-					}
-					bw.write(key.toString() + "\t" + value.toString());
-					System.out
-							.println(key.toString() + "\t" + value.toString());
-					bw.newLine();
-				}
-				reader.close();
-			}
-			bw.close();
-			dumped = new File(CONVERT_RESULT);
-		}
+            FileSystem.getLocal(new Configuration()).mkdirs(new Path(ACTUAL_RESULT_DIR + HDFS_OUTPUT_PATH));
+            File filePathTo = new File(CONVERT_RESULT);
+            BufferedWriter bw = new BufferedWriter(new FileWriter(filePathTo));
+            for (int i = 0; i < numPartitionPerMachine * numberOfNC; i++) {
+                String partname = "/part-" + i;
+                FileUtil.copy(FileSystem.get(conf), new Path(HDFS_OUTPUT_PATH + partname),
+                        FileSystem.getLocal(new Configuration()), new Path(ACTUAL_RESULT_DIR + HDFS_OUTPUT_PATH
+                                + partname), false, conf);
 
-		// TestUtils.compareWithSortedResult(new File(expectedPath), dumped);
-		return true;
-	}
+                Path path = new Path(HDFS_OUTPUT_PATH + partname);
+                FileSystem dfs = FileSystem.get(conf);
+                if (dfs.getFileStatus(path).getLen() == 0) {
+                    continue;
+                }
+                SequenceFile.Reader reader = new SequenceFile.Reader(dfs, path, conf);
+                KmerBytesWritable key = new KmerBytesWritable(conf.getInt(GenomixJob.KMER_LENGTH,
+                        GenomixJob.DEFAULT_KMER));
+                KmerCountValue value = (KmerCountValue) ReflectionUtils.newInstance(reader.getValueClass(), conf);
+
+                while (reader.next(key, value)) {
+                    if (key == null || value == null) {
+                        break;
+                    }
+                    bw.write(key.toString() + "\t" + value.toString());
+                    System.out.println(key.toString() + "\t" + value.toString());
+                    bw.newLine();
+                }
+                reader.close();
+            }
+            bw.close();
+            dumped = new File(CONVERT_RESULT);
+        }
+
+        // TestUtils.compareWithSortedResult(new File(expectedPath), dumped);
+        return true;
+    }
 }
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/GraphBuildTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/GraphBuildTestSuite.java
index d361c40..fdc3785 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/GraphBuildTestSuite.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/GraphBuildTestSuite.java
@@ -30,102 +30,98 @@
 import junit.framework.TestSuite;
 
 public class GraphBuildTestSuite extends TestSuite {
-	private static final String ACTUAL_RESULT_DIR = "graphbuildresult";
-	private static final String PATH_TO_HADOOP_CONF = "src/test/resources/hadoop/conf";
+    private static final String ACTUAL_RESULT_DIR = "graphbuildresult";
+    private static final String PATH_TO_HADOOP_CONF = "src/test/resources/hadoop/conf";
 
-	private static final String DATA_PATH = "graph/7/TreePath";
-	private static final String HDFS_INPUT_PATH = "/test";
-	private static final String HDFS_OUTPUT_PATH = "/result";
+    private static final String DATA_PATH = "graph/7/TreePath";
+    private static final String HDFS_INPUT_PATH = "/test";
+    private static final String HDFS_OUTPUT_PATH = "/result";
 
-	private static final String HADOOP_CONF_PATH = ACTUAL_RESULT_DIR
-			+ File.separator + "conf.xml";
-	private MiniDFSCluster dfsCluster;
+    private static final String HADOOP_CONF_PATH = ACTUAL_RESULT_DIR + File.separator + "conf.xml";
+    private MiniDFSCluster dfsCluster;
 
-	private static JobConf conf = new JobConf();
-	private int numberOfNC = 2;
-	private int numPartitionPerMachine = 1;
+    private static JobConf conf = new JobConf();
+    private int numberOfNC = 2;
+    private int numPartitionPerMachine = 1;
 
-	private static Driver driver;
+    private static Driver driver;
 
-	public void setUp() throws Exception {
-		cleanupStores();
-		edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.init();
-		FileUtils.forceMkdir(new File(ACTUAL_RESULT_DIR));
-		FileUtils.cleanDirectory(new File(ACTUAL_RESULT_DIR));
-		startHDFS();
+    public void setUp() throws Exception {
+        cleanupStores();
+        edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.init();
+        FileUtils.forceMkdir(new File(ACTUAL_RESULT_DIR));
+        FileUtils.cleanDirectory(new File(ACTUAL_RESULT_DIR));
+        startHDFS();
 
-		FileInputFormat.setInputPaths(conf, HDFS_INPUT_PATH);
-		FileOutputFormat.setOutputPath(conf, new Path(HDFS_OUTPUT_PATH));
+        FileInputFormat.setInputPaths(conf, HDFS_INPUT_PATH);
+        FileOutputFormat.setOutputPath(conf, new Path(HDFS_OUTPUT_PATH));
 
-		conf.setInt(GenomixJob.KMER_LENGTH, 7);
-		driver = new Driver(
-				edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.CC_HOST,
-				edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.TEST_HYRACKS_CC_CLIENT_PORT,
-				numPartitionPerMachine);
-	}
+        conf.setInt(GenomixJob.KMER_LENGTH, 7);
+        driver = new Driver(edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.CC_HOST,
+                edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.TEST_HYRACKS_CC_CLIENT_PORT, numPartitionPerMachine);
+    }
 
-	private void cleanupStores() throws IOException {
-		FileUtils.forceMkdir(new File("teststore"));
-		FileUtils.forceMkdir(new File("build"));
-		FileUtils.cleanDirectory(new File("teststore"));
-		FileUtils.cleanDirectory(new File("build"));
-	}
+    private void cleanupStores() throws IOException {
+        FileUtils.forceMkdir(new File("teststore"));
+        FileUtils.forceMkdir(new File("build"));
+        FileUtils.cleanDirectory(new File("teststore"));
+        FileUtils.cleanDirectory(new File("build"));
+    }
 
-	private void startHDFS() throws IOException {
-		conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/core-site.xml"));
-		conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/mapred-site.xml"));
-		conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/hdfs-site.xml"));
+    private void startHDFS() throws IOException {
+        conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/core-site.xml"));
+        conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/mapred-site.xml"));
+        conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/hdfs-site.xml"));
 
-		FileSystem lfs = FileSystem.getLocal(new Configuration());
-		lfs.delete(new Path("build"), true);
-		System.setProperty("hadoop.log.dir", "logs");
-		dfsCluster = new MiniDFSCluster(conf, numberOfNC, true, null);
-		FileSystem dfs = FileSystem.get(conf);
-		Path src = new Path(DATA_PATH);
-		Path dest = new Path(HDFS_INPUT_PATH);
-		dfs.mkdirs(dest);
-		dfs.copyFromLocalFile(src, dest);
+        FileSystem lfs = FileSystem.getLocal(new Configuration());
+        lfs.delete(new Path("build"), true);
+        System.setProperty("hadoop.log.dir", "logs");
+        dfsCluster = new MiniDFSCluster(conf, numberOfNC, true, null);
+        FileSystem dfs = FileSystem.get(conf);
+        Path src = new Path(DATA_PATH);
+        Path dest = new Path(HDFS_INPUT_PATH);
+        dfs.mkdirs(dest);
+        dfs.copyFromLocalFile(src, dest);
 
-		DataOutputStream confOutput = new DataOutputStream(
-				new FileOutputStream(new File(HADOOP_CONF_PATH)));
-		conf.writeXml(confOutput);
-		confOutput.flush();
-		confOutput.close();
-	}
-	
-	public static Test suite() throws Exception {
-		GraphBuildTestSuite testSuite = new GraphBuildTestSuite();
-		testSuite.setUp();
-		testSuite.addTest(new GraphBuildTestCase(conf, driver));
-		return testSuite;
-	}
-	
-	/**
-	 * Runs the tests and collects their result in a TestResult.
-	 */
-	@Override
-	public void run(TestResult result) {
-		try {
-			int testCount = countTestCases();
-			for (int i = 0; i < testCount; i++) {
-				// cleanupStores();
-				Test each = this.testAt(i);
-				if (result.shouldStop())
-					break;
-				runTest(each, result);
-			}
-			tearDown();
-		} catch (Exception e) {
-			throw new IllegalStateException(e);
-		}
-	}
-	
-	public void tearDown() throws Exception {
-		edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.deinit();
-		cleanupHDFS();
-	}
+        DataOutputStream confOutput = new DataOutputStream(new FileOutputStream(new File(HADOOP_CONF_PATH)));
+        conf.writeXml(confOutput);
+        confOutput.flush();
+        confOutput.close();
+    }
 
-	private void cleanupHDFS() throws Exception {
-		dfsCluster.shutdown();
-	}
+    public static Test suite() throws Exception {
+        GraphBuildTestSuite testSuite = new GraphBuildTestSuite();
+        testSuite.setUp();
+        testSuite.addTest(new GraphBuildTestCase(conf, driver));
+        return testSuite;
+    }
+
+    /**
+     * Runs the tests and collects their result in a TestResult.
+     */
+    @Override
+    public void run(TestResult result) {
+        try {
+            int testCount = countTestCases();
+            for (int i = 0; i < testCount; i++) {
+                // cleanupStores();
+                Test each = this.testAt(i);
+                if (result.shouldStop())
+                    break;
+                runTest(each, result);
+            }
+            tearDown();
+        } catch (Exception e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
+    public void tearDown() throws Exception {
+        edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.deinit();
+        cleanupHDFS();
+    }
+
+    private void cleanupHDFS() throws Exception {
+        dfsCluster.shutdown();
+    }
 }
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 cb43b72..68c186a 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
@@ -18,119 +18,118 @@
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 
 public class MergePathTest {
-	public static final String PATH_TO_TESTSTORE = "testcase/pathmerge/"; 
-	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; 
-	
-	@Test
-	public void test() throws Exception {
-		FileUtils.forceMkdir(new File(PATH_TO_TESTSTORE));
-		FileUtils.cleanDirectory(new File(PATH_TO_TESTSTORE));
-		FileUtils.forceMkdir(new File(TEXT_OUTPUT));
-		FileUtils.cleanDirectory(new File(TEXT_OUTPUT));
-		FileUtils.forceMkdir(new File(CHAIN_OUTPUT));
-		FileUtils.cleanDirectory(new File(CHAIN_OUTPUT));
-		generateTextFromPathmergeResult(NAIVE_DATA_INPUT, TEXT_OUTPUT, "/naive");
-		generateTextFromPathmergeResult(LOG_DATA_INPUT, TEXT_OUTPUT, "/log");
-		//generateSpecificLengthChainFromNaivePathmergeResult(NAIVE_DATA_INPUT, CHAIN_OUTPUT, maxLength);
-		//generateSpecificLengthChainFromLogPathmergeResult(LOG_DATA_INPUT, CHAIN_OUTPUT, maxLength);
-	} 
-	
-	public static void generateTextFromPathmergeResult(String input, String outputDir, String fileName) throws IOException{
-		BufferedWriter bw = new BufferedWriter(new FileWriter(new File(outputDir + fileName)));
-		Configuration conf = new Configuration();
-		FileSystem fileSys = FileSystem.get(conf);
-		for(int i = 0; i < nc; i++){
-			Path path = new Path(input + "/part-" + i);
-			SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, path, conf);
-			KmerBytesWritable key = new KmerBytesWritable(kmerSize);
-		    ValueStateWritable value = new ValueStateWritable();
-		    
-		    while(reader.next(key, value)){
-				if (key == null || value == null){
-					break;
-				}
-				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();*/
-				}
-				//if(value.getLengthOfMergeChain() != 0
-				//		&& value.getLengthOfMergeChain() != -1
-				//		&& value.getState() == State.FINAL_VERTEX){
-					//bw.write(key.toString() + "\t" + 
-					//	value.toString());
-					//bw.write(value.getLengthOfMergeChain() + "\t" +
-					//		value.getMergeChain().toString() + "\t" +
-					//		GeneCode.getSymbolFromBitMap(value.getAdjMap()) + "\t" +
-					//		key.toString());
-							//value.getState());
-					
-				//}
-		    }
-		    reader.close();
-		}
-		bw.close();
-	}
-	
-	public static void generateSpecificLengthChainFromNaivePathmergeResult(String input, String output, int maxLength) throws IOException{
-		BufferedWriter bw = new BufferedWriter(new FileWriter(new File(output + "/naive")));
-		Configuration conf = new Configuration();
-		FileSystem fileSys = FileSystem.get(conf);
-		for(int i = 0; i < nc; i++){
-			Path path = new Path(input + "/part-" + i);
-			SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, path, conf);
-			KmerBytesWritable key = new KmerBytesWritable(kmerSize);
-		    ValueStateWritable value = new ValueStateWritable();
-		    
-		    while(reader.next(key, value)){
-				if (key == null || value == null){
-					break;
-				} 
-				if(value.getLengthOfMergeChain() != -1 && value.getLengthOfMergeChain() <= maxLength
-						&& value.getLengthOfMergeChain() != kmerSize){
-					bw.write(value.getLengthOfMergeChain() + "\t" +
-							value.getMergeChain().toString());
-					bw.newLine();
-				}
-		    }
-		    reader.close();
-		}
-		bw.close();
-	}
-	
-	public static void generateSpecificLengthChainFromLogPathmergeResult(String input, String output, int maxLength) throws IOException{
-		BufferedWriter bw = new BufferedWriter(new FileWriter(new File(output + "/log")));
-		Configuration conf = new Configuration();
-		FileSystem fileSys = FileSystem.get(conf);
-		for(int i = 0; i < nc; i++){
-			Path path = new Path(input + "/part-" + i);
-			SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, path, conf);
-			KmerBytesWritable key = new KmerBytesWritable(kmerSize);
-		    ValueStateWritable value = new ValueStateWritable();
-		    
-		    while(reader.next(key, value)){
-				if (key == null || value == null){
-					break;
-				} 
-				if(value.getLengthOfMergeChain() != -1 && value.getLengthOfMergeChain() <= maxLength
-						&& value.getState() == State.FINAL_VERTEX){
-					bw.write(value.getLengthOfMergeChain() + "\t" +
-							value.getMergeChain().toString());
-					bw.newLine();
-				}
-		    }
-		    reader.close();
-		}
-		bw.close();
-	}
+    public static final String PATH_TO_TESTSTORE = "testcase/pathmerge/";
+    public static final String NAIVE_DATA_INPUT = "genomix_result/p1_nc4_16vertex";
+    public static final String LOG_DATA_INPUT = "genomix_result/p2_nc4_16vertex";
+    public static final String TEXT_OUTPUT = PATH_TO_TESTSTORE + "textfile";
+    public static final String CHAIN_OUTPUT = PATH_TO_TESTSTORE + "chain";
+
+    private static int nc = 4;
+    private static int kmerSize = 55;
+
+    //private static int maxLength = 102; 
+
+    @Test
+    public void test() throws Exception {
+        FileUtils.forceMkdir(new File(PATH_TO_TESTSTORE));
+        FileUtils.cleanDirectory(new File(PATH_TO_TESTSTORE));
+        FileUtils.forceMkdir(new File(TEXT_OUTPUT));
+        FileUtils.cleanDirectory(new File(TEXT_OUTPUT));
+        FileUtils.forceMkdir(new File(CHAIN_OUTPUT));
+        FileUtils.cleanDirectory(new File(CHAIN_OUTPUT));
+        generateTextFromPathmergeResult(NAIVE_DATA_INPUT, TEXT_OUTPUT, "/naive");
+        generateTextFromPathmergeResult(LOG_DATA_INPUT, TEXT_OUTPUT, "/log");
+        //generateSpecificLengthChainFromNaivePathmergeResult(NAIVE_DATA_INPUT, CHAIN_OUTPUT, maxLength);
+        //generateSpecificLengthChainFromLogPathmergeResult(LOG_DATA_INPUT, CHAIN_OUTPUT, maxLength);
+    }
+
+    public static void generateTextFromPathmergeResult(String input, String outputDir, String fileName)
+            throws IOException {
+        BufferedWriter bw = new BufferedWriter(new FileWriter(new File(outputDir + fileName)));
+        Configuration conf = new Configuration();
+        FileSystem fileSys = FileSystem.get(conf);
+        for (int i = 0; i < nc; i++) {
+            Path path = new Path(input + "/part-" + i);
+            SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, path, conf);
+            KmerBytesWritable key = new KmerBytesWritable(kmerSize);
+            ValueStateWritable value = new ValueStateWritable();
+
+            while (reader.next(key, value)) {
+                if (key == null || value == null) {
+                    break;
+                }
+                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();
+                }
+                //if(value.getLengthOfMergeChain() != 0
+                //		&& value.getLengthOfMergeChain() != -1
+                //		&& value.getState() == State.FINAL_VERTEX){
+                //bw.write(key.toString() + "\t" + 
+                //	value.toString());
+                //bw.write(value.getLengthOfMergeChain() + "\t" +
+                //		value.getMergeChain().toString() + "\t" +
+                //		GeneCode.getSymbolFromBitMap(value.getAdjMap()) + "\t" +
+                //		key.toString());
+                //value.getState());
+
+                //}
+            }
+            reader.close();
+        }
+        bw.close();
+    }
+
+    public static void generateSpecificLengthChainFromNaivePathmergeResult(String input, String output, int maxLength)
+            throws IOException {
+        BufferedWriter bw = new BufferedWriter(new FileWriter(new File(output + "/naive")));
+        Configuration conf = new Configuration();
+        FileSystem fileSys = FileSystem.get(conf);
+        for (int i = 0; i < nc; i++) {
+            Path path = new Path(input + "/part-" + i);
+            SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, path, conf);
+            KmerBytesWritable key = new KmerBytesWritable(kmerSize);
+            ValueStateWritable value = new ValueStateWritable();
+
+            while (reader.next(key, value)) {
+                if (key == null || value == null) {
+                    break;
+                }
+                if (value.getLengthOfMergeChain() <= maxLength && value.getLengthOfMergeChain() != kmerSize) {
+                    bw.write(value.getLengthOfMergeChain() + "\t" + value.getMergeChain().toString());
+                    bw.newLine();
+                }
+            }
+            reader.close();
+        }
+        bw.close();
+    }
+
+    public static void generateSpecificLengthChainFromLogPathmergeResult(String input, String output, int maxLength)
+            throws IOException {
+        BufferedWriter bw = new BufferedWriter(new FileWriter(new File(output + "/log")));
+        Configuration conf = new Configuration();
+        FileSystem fileSys = FileSystem.get(conf);
+        for (int i = 0; i < nc; i++) {
+            Path path = new Path(input + "/part-" + i);
+            SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, path, conf);
+            KmerBytesWritable key = new KmerBytesWritable(kmerSize);
+            ValueStateWritable value = new ValueStateWritable();
+
+            while (reader.next(key, value)) {
+                if (key == null || value == null) {
+                    break;
+                }
+                if (value.getLengthOfMergeChain() <= maxLength && value.getState() == State.FINAL_VERTEX) {
+                    bw.write(value.getLengthOfMergeChain() + "\t" + value.getMergeChain().toString());
+                    bw.newLine();
+                }
+            }
+            reader.close();
+        }
+        bw.close();
+    }
 }