add shiftKmer into KmerUtil
git-svn-id: https://hyracks.googlecode.com/svn/branches/fullstack_genomix@3334 123451ca-8445-de46-9d55-352943316053
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerUtil.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerUtil.java
index 83f7f32..8f99c2d 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerUtil.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerUtil.java
@@ -150,5 +150,33 @@
}
return mergedKmer;
}
+
+ /**
+ * Safely shifted the kmer forward without change the input kmer
+ * e.g. AGCGC shift with T => GCGCT
+ * @param k: kmer length
+ * @param kmer: input kmer
+ * @param afterCode: input genecode
+ * @return new created kmer that shifted by afterCode
+ */
+ public static byte[] shiftKmerWithNextCode(int k, final byte[] kmer, byte afterCode){
+ byte[] shifted = kmer.clone();
+ Kmer.moveKmer(k, shifted, Kmer.GENE_CODE.getSymbolFromCode(afterCode));
+ return shifted;
+ }
+
+ /**
+ * Safely shifted the kmer backward without change the input kmer
+ * e.g. AGCGC shift with T => TAGCG
+ * @param k: kmer length
+ * @param kmer: input kmer
+ * @param preCode: input genecode
+ * @return new created kmer that shifted by preCode
+ */
+ public static byte[] shiftKmerWithPreCode(int k, final byte[] kmer, byte preCode){
+ byte[] shifted = kmer.clone();
+ Kmer.moveKmerReverse(k, shifted, Kmer.GENE_CODE.getSymbolFromCode(preCode));
+ return shifted;
+ }
}
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/example/kmer/KmerUtilTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/example/kmer/KmerUtilTest.java
index 58e4b22..206e279 100644
--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/example/kmer/KmerUtilTest.java
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/example/kmer/KmerUtilTest.java
@@ -107,5 +107,18 @@
Assert.assertEquals(text5+text7, Kmer.recoverKmerFrom(7+6, merged, 0, merged.length));
}
-
+ @Test
+ public void TestShift(){
+ byte[] kmer = Kmer.compressKmer(9, array, 0);
+ String text = "AGCTGACCG";
+ Assert.assertEquals(text, Kmer.recoverKmerFrom(9, kmer, 0, kmer.length));
+
+ byte [] kmerForward = KmerUtil.shiftKmerWithNextCode(9, kmer, Kmer.GENE_CODE.A);
+ Assert.assertEquals(text, Kmer.recoverKmerFrom(9, kmer, 0, kmer.length));
+ Assert.assertEquals("GCTGACCGA", Kmer.recoverKmerFrom(9, kmerForward, 0, kmerForward.length));
+ byte [] kmerBackward = KmerUtil.shiftKmerWithPreCode(9, kmer, Kmer.GENE_CODE.C);
+ Assert.assertEquals(text, Kmer.recoverKmerFrom(9, kmer, 0, kmer.length));
+ Assert.assertEquals("CAGCTGACC", Kmer.recoverKmerFrom(9, kmerBackward, 0, kmerBackward.length));
+
+ }
}