Merge branch 'fullstack_genomix' of https://code.google.com/p/hyracks into fullstack_genomix

Conflicts:
	genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
index 614c696..648f28e 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
@@ -183,6 +183,7 @@
         int pos = ((kmerlength - 1) % 4) << 1;
         byte code = (byte) (c << pos);
         bytes[0] = (byte) (((bytes[0] >>> 2) & 0x3f) | code);
+        clearLeadBit();
         return output;
     }
 
@@ -212,12 +213,14 @@
             bytes[i] = (byte) ((bytes[i] << 2) | in);
         }
         bytes[size - 1] = (byte) ((bytes[size - 1] << 2) | c);
-        // (k%4) * 2
+        clearLeadBit();
+        return output;
+    }
+    
+    protected void clearLeadBit(){
         if (kmerlength % 4 != 0) {
             bytes[0] &= (1 << ((kmerlength % 4) << 1)) - 1;
         }
-        
-        return output;
     }
 
     public void set(KmerBytesWritable newData) {
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
index fc63fd8..5a4329e 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
@@ -107,6 +107,7 @@
         this.kmerlength = k;
         setSize(0);
         setSize(KmerUtil.getByteNumFromK(k));
+        clearLeadBit();
     }
 
 }
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritableFactory.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritableFactory.java
index 9bd6acb..c00967f 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritableFactory.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritableFactory.java
@@ -80,6 +80,7 @@
         if (byteInKmer == 0) {
             kmer.getBytes()[0] = (byte) ((kmerChain.getBytes()[0] & 0xff) >> posInByteOfChain);
         }
+        kmer.clearLeadBit();
         return kmer;
     }
 
@@ -112,6 +113,7 @@
         } else {
             kmer.getBytes()[0] = (byte) (kmerChain.getBytes()[kmerChain.getLength() - i] & ((1 << posInByteOfChain) - 1));
         }
+        kmer.clearLeadBit();
         return kmer;
     }
 
@@ -138,9 +140,7 @@
         if (byteInKmer == 0) {
             kmer.getBytes()[0] = (byte) ((kmerChain.getBytes()[0] & 0xff) >> posInByteOfChain);
         }
-        if (kSize % 4 != 0) {
-            kmer.getBytes()[0] &= (1 << ((kSize % 4) << 1)) - 1;
-        }
+        kmer.clearLeadBit();
         return kmer;
     }
 
@@ -167,6 +167,7 @@
         } else {
             this.kmer.getBytes()[0] = (byte) (kmer.getBytes()[0] | ((nextCode & 0x3) << ((kmer.getKmerLength() % 4) << 1)));
         }
+        this.kmer.clearLeadBit();
         return this.kmer;
     }
 
@@ -194,6 +195,7 @@
             this.kmer.getBytes()[byteInMergedKmer] = (byte) ((kmer.getBytes()[i] << 2) | ((kmer.getBytes()[i + 1] >> 6) & 0x3));
         }
         this.kmer.getBytes()[byteInMergedKmer] = (byte) ((kmer.getBytes()[kmer.getLength() - 1] << 2) | (preCode & 0x3));
+        this.kmer.clearLeadBit();
         return this.kmer;
     }
 
@@ -235,6 +237,7 @@
                 kmer.getBytes()[0] = (byte) ((0xff & nextKmer.getBytes()[0]) >> (8 - posNeedToMove));
             }
         }
+        kmer.clearLeadBit();
         return kmer;
     }
 
@@ -302,6 +305,7 @@
                 curByteAtKmer++;
             }
         }
+        this.kmer.clearLeadBit();
         return this.kmer;
     }
 }
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/pathmergingh2/MergePathH2Mapper.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/pathmergingh2/MergePathH2Mapper.java
index 3c5b192..de7ecfc 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/pathmergingh2/MergePathH2Mapper.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/pathmergingh2/MergePathH2Mapper.java
@@ -41,7 +41,7 @@
         byte bitStartEnd = (byte) (0x81 & bitFlag);
 
         switch (bitStartEnd) {
-            case 0x01:
+            case (byte) 0x01:
                 byte succeedCode = GeneCode.getGeneCodeFromBitMap(succeed);
                 tmpKmer.set(outputKmerFactory.getLastKmerFromChain(KMER_SIZE, key));
                 outputKmer.set(outputKmerFactory.shiftKmerWithNextCode(tmpKmer, succeedCode));
@@ -59,7 +59,7 @@
                 outputValue.set(tmpKmer, adjBitMap, bitFlag);
                 output.collect(outputKmer, outputValue);
                 break;
-            case 0x00:
+            case (byte) 0x00:
                 succeedCode = GeneCode.getGeneCodeFromBitMap(succeed);
                 tmpKmer.set(outputKmerFactory.getLastKmerFromChain(KMER_SIZE, key));
                 outputKmer.set(outputKmerFactory.shiftKmerWithNextCode(tmpKmer, succeedCode));
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/pathmergingh2/MergePathValueWritable.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/pathmergingh2/MergePathValueWritable.java
index 5a6b722..3faba46 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/pathmergingh2/MergePathValueWritable.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/pathmergingh2/MergePathValueWritable.java
@@ -44,17 +44,11 @@
     }
 
     public void set(MergePathValueWritable right) {
-        set(right.getBytes(), 0, right.getLength(), right.getAdjBitMap(), right.getFlag(), right.getKmerLength());
+        set(right.getAdjBitMap(), right.getFlag(), right.getKmer());
     }
 
-    public void set(KmerBytesWritable mergedKmer, byte adjBitMap, byte bitFlag) {
-        set(mergedKmer.getBytes(), 0, mergedKmer.getLength(), adjBitMap, bitFlag, mergedKmer.getKmerLength());
-    }
-
-    public void set(byte[] newData, int offset, int length, byte adjBitMap, byte flag, int kmerSize) {
-        if (length != 0) {
-            kmer.set(kmerSize, newData, offset, length);
-        }
+    public void set(byte adjBitMap, byte flag, VKmerBytesWritable kmer) {
+        this.kmer.set(kmer);
         this.adjBitMap = adjBitMap;
         this.flag = flag;
     }
@@ -76,7 +70,7 @@
         arg0.writeByte(flag);
     }
 
-    public KmerBytesWritable getKmer() {
+    public VKmerBytesWritable getKmer() {
         if (kmer.getLength() != 0) {
             return kmer;
         }
@@ -102,6 +96,7 @@
             return kmer.getBytes();
         } else
             return null;
+
     }
 
     public int getKmerLength() {
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/pathmergingh2/SNodeInitialMapper.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/pathmergingh2/SNodeInitialMapper.java
index 498b7c8..076b3d9 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/pathmergingh2/SNodeInitialMapper.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/pathmergingh2/SNodeInitialMapper.java
@@ -108,7 +108,7 @@
             output.collect(outputKmer, outputAdjList);
         } else {
             for (int i = 0; i < 4; i++) {
-                byte temp = 0x01;
+                byte temp = (byte) 0x01;
                 byte shiftedCode = 0;
                 temp = (byte) (temp << i);
                 temp = (byte) (precursor & temp);
@@ -116,9 +116,6 @@
                     byte precurCode = GeneCode.getGeneCodeFromBitMap(temp);
                     shiftedCode = key.shiftKmerWithPreCode(precurCode);
                     outputKmer.set(key);
-                    for(int j = 0; j < key.getLength(); j ++){
-                        System.out.println(key.getBytes()[j]);                        
-                    }
                     bitFlag = (byte) 0x80;
                     outputAdjList.set(null, 0, 0, (byte) 0, bitFlag, 0);
                     output.collect(outputKmer, outputAdjList);
@@ -126,7 +123,7 @@
                 }
             }
             for (int i = 0; i < 4; i++) {
-                byte temp = 0x01;
+                byte temp = (byte) 0x01;
                 byte shiftedCode = 0;
                 temp = (byte) (temp << i);
                 temp = (byte) (succeed & temp);
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/pathmergingh2/SNodeInitialReducer.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/pathmergingh2/SNodeInitialReducer.java
index e840965..a858524 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/pathmergingh2/SNodeInitialReducer.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/pathmergingh2/SNodeInitialReducer.java
@@ -32,13 +32,13 @@
         if (values.hasNext() == true) {
             switch (outputValue.getFlag()) {
                 case (byte) 0x01:
-                    startFlag = 0x01;
+                    startFlag = (byte) 0x01;
                     break;
                 case (byte) 0x80:
                     endFlag = (byte) 0x80;
                     break;
                 case (byte) 0x02:
-                    targetPointFlag = 0x02;
+                    targetPointFlag = (byte) 0x02;
                     targetAdjList = outputValue.getAdjBitMap();
                     break;
             }
@@ -56,10 +56,10 @@
                         targetAdjList = outputValue.getAdjBitMap();
                         break;
                 }
-                if(startFlag != 0x00 && endFlag!= 0x00 && targetPointFlag != 0x00)
+                if(startFlag != (byte) 0x00 && endFlag!= (byte) 0x00 && targetPointFlag != (byte) 0x00)
                     break;
             }
-            if(targetPointFlag == 0x02) {
+            if(targetPointFlag == (byte) 0x02) {
                 if(startFlag == (byte) 0x01) {
                     outputFlag = (byte) (outputFlag | startFlag);
                 }