Kmer factory uses VKmers
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritableFactory.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritableFactory.java
index f805610..16df821 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritableFactory.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritableFactory.java
@@ -16,10 +16,10 @@
package edu.uci.ics.genomix.type;
public class KmerBytesWritableFactory {
- private KmerBytesWritable kmer;
+ private VKmerBytesWritable kmer;
public KmerBytesWritableFactory(int k) {
- kmer = new KmerBytesWritable(k);
+ kmer = new VKmerBytesWritable(k);
}
/**
@@ -30,7 +30,7 @@
* @param array
* @param start
*/
- public KmerBytesWritable getKmerByRead(int k, byte[] array, int start) {
+ public VKmerBytesWritable getKmerByRead(int k, byte[] array, int start) {
kmer.reset(k);
kmer.setByRead(array, start);
return kmer;
@@ -43,7 +43,7 @@
* @param array
* @param start
*/
- public KmerBytesWritable getKmerByReadReverse(int k, byte[] array, int start) {
+ public VKmerBytesWritable getKmerByReadReverse(int k, byte[] array, int start) {
kmer.reset(k);
kmer.setByReadReverse(array, start);
return kmer;
@@ -59,28 +59,28 @@
* @param kmerChain
* @return LastKmer bytes array
*/
- public KmerBytesWritable getLastKmerFromChain(int lastK, final KmerBytesWritable kmerChain) {
- if (lastK > kmerChain.getKmerLength()) {
+ public VKmerBytesWritable getLastKmerFromChain(int lastK, final VKmerBytesWritable kmerChain) {
+ if (lastK > kmerChain.getKmerLetterLength()) {
return null;
}
- if (lastK == kmerChain.getKmerLength()) {
+ if (lastK == kmerChain.getKmerLetterLength()) {
kmer.setAsCopy(kmerChain);
return kmer;
}
kmer.reset(lastK);
/** from end to start */
- int byteInChain = kmerChain.getLength() - 1 - (kmerChain.getKmerLength() - lastK) / 4;
- int posInByteOfChain = ((kmerChain.getKmerLength() - lastK) % 4) << 1; // *2
- int byteInKmer = kmer.getLength() - 1;
+ int byteInChain = kmerChain.getKmerByteLength() - 1 - (kmerChain.getKmerLetterLength() - lastK) / 4;
+ int posInByteOfChain = ((kmerChain.getKmerLetterLength() - lastK) % 4) << 1; // *2
+ int byteInKmer = kmer.getKmerByteLength() - 1;
for (; byteInKmer >= 0 && byteInChain > 0; byteInKmer--, byteInChain--) {
- kmer.getBytes()[byteInKmer] = (byte) ((0xff & kmerChain.getBytes()[byteInChain]) >> posInByteOfChain);
- kmer.getBytes()[byteInKmer] |= ((kmerChain.getBytes()[byteInChain - 1] << (8 - posInByteOfChain)));
+ kmer.getBytes()[byteInKmer + kmer.getKmerOffset()] = (byte) ((0xff & kmerChain.getBytes()[byteInChain + kmerChain.getKmerOffset()]) >> posInByteOfChain);
+ kmer.getBytes()[byteInKmer + kmer.getKmerOffset()] |= ((kmerChain.getBytes()[byteInChain + kmerChain.getKmerOffset() - 1] << (8 - posInByteOfChain)));
}
/** last kmer byte */
if (byteInKmer == 0) {
- kmer.getBytes()[0] = (byte) ((kmerChain.getBytes()[0] & 0xff) >> posInByteOfChain);
+ kmer.getBytes()[0 + kmer.getKmerOffset()] = (byte) ((kmerChain.getBytes()[0 + kmerChain.getKmerOffset()] & 0xff) >> posInByteOfChain);
}
kmer.clearLeadBit();
return kmer;
@@ -95,52 +95,52 @@
* @param kmerChain
* @return FirstKmer bytes array
*/
- public KmerBytesWritable getFirstKmerFromChain(int firstK, final KmerBytesWritable kmerChain) {
- if (firstK > kmerChain.getKmerLength()) {
+ public VKmerBytesWritable getFirstKmerFromChain(int firstK, final VKmerBytesWritable kmerChain) {
+ if (firstK > kmerChain.getKmerLetterLength()) {
return null;
}
- if (firstK == kmerChain.getKmerLength()) {
+ if (firstK == kmerChain.getKmerLetterLength()) {
kmer.setAsCopy(kmerChain);
return kmer;
}
kmer.reset(firstK);
int i = 1;
- for (; i < kmer.getLength(); i++) {
- kmer.getBytes()[kmer.getLength() - i] = kmerChain.getBytes()[kmerChain.getLength() - i];
+ for (; i < kmer.getKmerByteLength(); i++) {
+ kmer.getBytes()[kmer.getKmerOffset() + kmer.getKmerByteLength() - i] = kmerChain.getBytes()[kmerChain.getKmerOffset() + kmerChain.getKmerByteLength() - i];
}
int posInByteOfChain = (firstK % 4) << 1; // *2
if (posInByteOfChain == 0) {
- kmer.getBytes()[0] = kmerChain.getBytes()[kmerChain.getLength() - i];
+ kmer.getBytes()[0 + kmer.getKmerOffset()] = kmerChain.getBytes()[kmerChain.getKmerOffset() + kmerChain.getKmerByteLength() - i];
} else {
- kmer.getBytes()[0] = (byte) (kmerChain.getBytes()[kmerChain.getLength() - i] & ((1 << posInByteOfChain) - 1));
+ kmer.getBytes()[0 + kmer.getKmerOffset()] = (byte) (kmerChain.getBytes()[kmerChain.getKmerOffset() + kmerChain.getKmerByteLength() - i] & ((1 << posInByteOfChain) - 1));
}
kmer.clearLeadBit();
return kmer;
}
- public KmerBytesWritable getSubKmerFromChain(int startK, int kSize, final KmerBytesWritable kmerChain) {
- if (startK + kSize > kmerChain.getKmerLength()) {
+ public VKmerBytesWritable getSubKmerFromChain(int startK, int kSize, final VKmerBytesWritable kmerChain) {
+ if (startK + kSize > kmerChain.getKmerLetterLength()) {
return null;
}
- if (startK == 0 && kSize == kmerChain.getKmerLength()) {
+ if (startK == 0 && kSize == kmerChain.getKmerLetterLength()) {
kmer.setAsCopy(kmerChain);
return kmer;
}
kmer.reset(kSize);
/** from end to start */
- int byteInChain = kmerChain.getLength() - 1 - startK / 4;
+ int byteInChain = kmerChain.getKmerByteLength() - 1 - startK / 4;
int posInByteOfChain = startK % 4 << 1; // *2
- int byteInKmer = kmer.getLength() - 1;
+ int byteInKmer = kmer.getKmerByteLength() - 1;
for (; byteInKmer >= 0 && byteInChain > 0; byteInKmer--, byteInChain--) {
- kmer.getBytes()[byteInKmer] = (byte) ((0xff & kmerChain.getBytes()[byteInChain]) >> posInByteOfChain);
- kmer.getBytes()[byteInKmer] |= ((kmerChain.getBytes()[byteInChain - 1] << (8 - posInByteOfChain)));
+ kmer.getBytes()[byteInKmer + kmer.getKmerOffset()] = (byte) ((0xff & kmerChain.getBytes()[byteInChain + kmerChain.getKmerOffset()]) >> posInByteOfChain);
+ kmer.getBytes()[byteInKmer + kmer.getKmerOffset()] |= ((kmerChain.getBytes()[byteInChain + kmerChain.getKmerOffset() - 1] << (8 - posInByteOfChain)));
}
/** last kmer byte */
if (byteInKmer == 0) {
- kmer.getBytes()[0] = (byte) ((kmerChain.getBytes()[0] & 0xff) >> posInByteOfChain);
+ kmer.getBytes()[0 + kmer.getKmerOffset()] = (byte) ((kmerChain.getBytes()[0 + kmerChain.getKmerOffset()] & 0xff) >> posInByteOfChain);
}
kmer.clearLeadBit();
return kmer;
@@ -159,15 +159,15 @@
* : next neighbor in gene-code format
* @return the merged Kmer, this K of this Kmer is k+1
*/
- public KmerBytesWritable mergeKmerWithNextCode(final KmerBytesWritable kmer, byte nextCode) {
- this.kmer.reset(kmer.getKmerLength() + 1);
- for (int i = 1; i <= kmer.getLength(); i++) {
- this.kmer.getBytes()[this.kmer.getLength() - i] = kmer.getBytes()[kmer.getLength() - i];
+ public VKmerBytesWritable mergeKmerWithNextCode(final VKmerBytesWritable kmer, byte nextCode) {
+ this.kmer.reset(kmer.getKmerLetterLength() + 1);
+ for (int i = 1; i <= kmer.getKmerByteLength(); i++) {
+ this.kmer.getBytes()[this.kmer.getKmerOffset() + this.kmer.getKmerByteLength() - i] = kmer.getBytes()[kmer.getKmerOffset() + kmer.getKmerByteLength() - i];
}
- if (this.kmer.getLength() > kmer.getLength()) {
- this.kmer.getBytes()[0] = (byte) (nextCode & 0x3);
+ if (this.kmer.getKmerByteLength() > kmer.getKmerByteLength()) {
+ this.kmer.getBytes()[0 + kmer.getKmerOffset()] = (byte) (nextCode & 0x3);
} else {
- this.kmer.getBytes()[0] = (byte) (kmer.getBytes()[0] | ((nextCode & 0x3) << ((kmer.getKmerLength() % 4) << 1)));
+ this.kmer.getBytes()[0 + kmer.getKmerOffset()] = (byte) (kmer.getBytes()[0 + kmer.getKmerOffset()] | ((nextCode & 0x3) << ((kmer.getKmerLetterLength() % 4) << 1)));
}
this.kmer.clearLeadBit();
return this.kmer;
@@ -186,17 +186,17 @@
* : next neighbor in gene-code format
* @return the merged Kmer,this K of this Kmer is k+1
*/
- public KmerBytesWritable mergeKmerWithPreCode(final KmerBytesWritable kmer, byte preCode) {
- this.kmer.reset(kmer.getKmerLength() + 1);
+ public VKmerBytesWritable mergeKmerWithPreCode(final VKmerBytesWritable kmer, byte preCode) {
+ this.kmer.reset(kmer.getKmerLetterLength() + 1);
int byteInMergedKmer = 0;
- if (kmer.getKmerLength() % 4 == 0) {
- this.kmer.getBytes()[0] = (byte) ((kmer.getBytes()[0] >> 6) & 0x3);
+ if (kmer.getKmerLetterLength() % 4 == 0) {
+ this.kmer.getBytes()[0 + kmer.getKmerOffset()] = (byte) ((kmer.getBytes()[0 + kmer.getKmerOffset()] >> 6) & 0x3);
byteInMergedKmer++;
}
- for (int i = 0; i < kmer.getLength() - 1; i++, byteInMergedKmer++) {
- this.kmer.getBytes()[byteInMergedKmer] = (byte) ((kmer.getBytes()[i] << 2) | ((kmer.getBytes()[i + 1] >> 6) & 0x3));
+ for (int i = 0; i < kmer.getKmerByteLength() - 1; i++, byteInMergedKmer++) {
+ this.kmer.getBytes()[byteInMergedKmer + kmer.getKmerOffset()] = (byte) ((kmer.getBytes()[i + kmer.getKmerOffset()] << 2) | ((kmer.getBytes()[i + kmer.getKmerOffset() + 1] >> 6) & 0x3));
}
- this.kmer.getBytes()[byteInMergedKmer] = (byte) ((kmer.getBytes()[kmer.getLength() - 1] << 2) | (preCode & 0x3));
+ this.kmer.getBytes()[byteInMergedKmer + kmer.getKmerOffset()] = (byte) ((kmer.getBytes()[kmer.getKmerOffset() + kmer.getKmerByteLength() - 1] << 2) | (preCode & 0x3));
this.kmer.clearLeadBit();
return this.kmer;
}
@@ -215,28 +215,28 @@
* : bytes array of next kmer
* @return merged kmer, the new k is @preK + @nextK
*/
- public KmerBytesWritable mergeTwoKmer(final KmerBytesWritable preKmer, final KmerBytesWritable nextKmer) {
- kmer.reset(preKmer.getKmerLength() + nextKmer.getKmerLength());
+ public VKmerBytesWritable mergeTwoKmer(final VKmerBytesWritable preKmer, final VKmerBytesWritable nextKmer) {
+ kmer.reset(preKmer.getKmerLetterLength() + nextKmer.getKmerLetterLength());
int i = 1;
- for (; i <= preKmer.getLength(); i++) {
- kmer.getBytes()[kmer.getLength() - i] = preKmer.getBytes()[preKmer.getLength() - i];
+ for (; i <= preKmer.getKmerByteLength(); i++) {
+ kmer.getBytes()[kmer.getKmerOffset() + kmer.getKmerByteLength() - i] = preKmer.getBytes()[preKmer.getKmerOffset() + preKmer.getKmerByteLength() - i];
}
if (i > 1) {
i--;
}
- if (preKmer.getKmerLength() % 4 == 0) {
- for (int j = 1; j <= nextKmer.getLength(); j++) {
- kmer.getBytes()[kmer.getLength() - i - j] = nextKmer.getBytes()[nextKmer.getLength() - j];
+ if (preKmer.getKmerLetterLength() % 4 == 0) {
+ for (int j = 1; j <= nextKmer.getKmerByteLength(); j++) {
+ kmer.getBytes()[kmer.getKmerOffset() + kmer.getKmerByteLength() - i - j] = nextKmer.getBytes()[nextKmer.getKmerOffset() + nextKmer.getKmerByteLength() - j];
}
} else {
- int posNeedToMove = ((preKmer.getKmerLength() % 4) << 1);
- kmer.getBytes()[kmer.getLength() - i] |= nextKmer.getBytes()[nextKmer.getLength() - 1] << posNeedToMove;
- for (int j = 1; j < nextKmer.getLength(); j++) {
- kmer.getBytes()[kmer.getLength() - i - j] = (byte) (((nextKmer.getBytes()[nextKmer.getLength() - j] & 0xff) >> (8 - posNeedToMove)) | (nextKmer
- .getBytes()[nextKmer.getLength() - j - 1] << posNeedToMove));
+ int posNeedToMove = ((preKmer.getKmerLetterLength() % 4) << 1);
+ kmer.getBytes()[kmer.getKmerOffset() + kmer.getKmerByteLength() - i] |= nextKmer.getBytes()[nextKmer.getKmerOffset() + nextKmer.getKmerByteLength() - 1] << posNeedToMove;
+ for (int j = 1; j < nextKmer.getKmerByteLength(); j++) {
+ kmer.getBytes()[kmer.getKmerOffset() + kmer.getKmerByteLength() - i - j] = (byte) (((nextKmer.getBytes()[nextKmer.getKmerOffset() + nextKmer.getKmerByteLength() - j] & 0xff) >> (8 - posNeedToMove)) | (nextKmer
+ .getBytes()[nextKmer.getKmerOffset() + nextKmer.getKmerByteLength() - j - 1] << posNeedToMove));
}
- if (nextKmer.getKmerLength() % 4 == 0 || (nextKmer.getKmerLength() % 4) * 2 + posNeedToMove > 8) {
- kmer.getBytes()[0] = (byte) ((0xff & nextKmer.getBytes()[0]) >> (8 - posNeedToMove));
+ if (nextKmer.getKmerLetterLength() % 4 == 0 || (nextKmer.getKmerLetterLength() % 4) * 2 + posNeedToMove > 8) {
+ kmer.getBytes()[0 + kmer.getKmerOffset()] = (byte) ((0xff & nextKmer.getBytes()[0 + nextKmer.getKmerOffset()]) >> (8 - posNeedToMove));
}
}
kmer.clearLeadBit();
@@ -255,7 +255,7 @@
* : input genecode
* @return new created kmer that shifted by afterCode, the K will not change
*/
- public KmerBytesWritable shiftKmerWithNextCode(final KmerBytesWritable kmer, byte afterCode) {
+ public VKmerBytesWritable shiftKmerWithNextCode(final VKmerBytesWritable kmer, byte afterCode) {
this.kmer.setAsCopy(kmer);
this.kmer.shiftKmerWithNextCode(afterCode);
return this.kmer;
@@ -273,7 +273,7 @@
* : input genecode
* @return new created kmer that shifted by preCode, the K will not change
*/
- public KmerBytesWritable shiftKmerWithPreCode(final KmerBytesWritable kmer, byte preCode) {
+ public VKmerBytesWritable shiftKmerWithPreCode(final VKmerBytesWritable kmer, byte preCode) {
this.kmer.setAsCopy(kmer);
this.kmer.shiftKmerWithPreCode(preCode);
return this.kmer;
@@ -284,22 +284,22 @@
*
* @param kmer
*/
- public KmerBytesWritable reverse(final KmerBytesWritable kmer) {
- this.kmer.reset(kmer.getKmerLength());
+ public VKmerBytesWritable reverse(final VKmerBytesWritable kmer) {
+ this.kmer.reset(kmer.getKmerLetterLength());
- int curPosAtKmer = ((kmer.getKmerLength() - 1) % 4) << 1;
+ int curPosAtKmer = ((kmer.getKmerLetterLength() - 1) % 4) << 1;
int curByteAtKmer = 0;
int curPosAtReverse = 0;
- int curByteAtReverse = this.kmer.getLength() - 1;
- this.kmer.getBytes()[curByteAtReverse] = 0;
- for (int i = 0; i < kmer.getKmerLength(); i++) {
- byte gene = (byte) ((kmer.getBytes()[curByteAtKmer] >> curPosAtKmer) & 0x03);
- this.kmer.getBytes()[curByteAtReverse] |= gene << curPosAtReverse;
+ int curByteAtReverse = this.kmer.getKmerByteLength() - 1;
+ this.kmer.getBytes()[curByteAtReverse + this.kmer.getKmerOffset()] = 0;
+ for (int i = 0; i < kmer.getKmerLetterLength(); i++) {
+ byte gene = (byte) ((kmer.getBytes()[curByteAtKmer + kmer.getKmerOffset()] >> curPosAtKmer) & 0x03);
+ this.kmer.getBytes()[curByteAtReverse + this.kmer.getKmerOffset()] |= gene << curPosAtReverse;
curPosAtReverse += 2;
if (curPosAtReverse >= 8) {
curPosAtReverse = 0;
- this.kmer.getBytes()[--curByteAtReverse] = 0;
+ this.kmer.getBytes()[--curByteAtReverse + this.kmer.getKmerOffset()] = 0;
}
curPosAtKmer -= 2;
if (curPosAtKmer < 0) {
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 48fc388..fc664c5 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
@@ -155,9 +155,12 @@
* @param k
*/
public void reset(int k) {
+ int newByteLength = KmerUtil.getByteNumFromK(k);
+ if (bytesUsed < newByteLength) {
+ bytes = new byte[newByteLength + HEADER_SIZE];
+ kmerStartOffset = HEADER_SIZE;
+ }
setKmerLength(k);
- setSize(bytesUsed);
- clearLeadBit();
}
protected void clearLeadBit() {
@@ -251,7 +254,7 @@
return output;
}
- public int getKmerLength() {
+ public int getKmerLetterLength() {
return lettersInKmer;
}
@@ -274,10 +277,21 @@
return kmerStartOffset;
}
+ /**
+ * Return the number of bytes used by both header and kmer chain
+ */
@Override
public int getLength() {
+ return bytesUsed + HEADER_SIZE;
+ }
+
+ /**
+ * Return the number of bytes used by the kmer chain
+ */
+ public int getKmerByteLength() {
return bytesUsed;
}
+
public void setKmerLength(int k) {
this.bytesUsed = KmerUtil.getByteNumFromK(k);
@@ -467,7 +481,7 @@
for (int i = 1; i <= preSize; i++) {
bytes[kmerStartOffset + bytesUsed - i] = bytes[kmerStartOffset + preSize - i];
}
- for (int k = initialKmerSize - 1; k < kmer.getKmerLength(); k += 4) {
+ for (int k = initialKmerSize - 1; k < kmer.getKmerLetterLength(); k += 4) {
byte onebyte = KmerBytesWritable.getOneByteFromKmerAtPosition(k, kmer.bytes, kmer.kmerStartOffset,
kmer.bytesUsed);
KmerBytesWritable.appendOneByteAtPosition(preKmerLength + k - initialKmerSize + 1, onebyte, bytes,
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableFactoryTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableFactoryTest.java
index 1eb58c8..663d8dd 100644
--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableFactoryTest.java
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableFactoryTest.java
@@ -19,8 +19,8 @@
import org.junit.Test;
import edu.uci.ics.genomix.type.GeneCode;
-import edu.uci.ics.genomix.type.KmerBytesWritable;
import edu.uci.ics.genomix.type.KmerBytesWritableFactory;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
public class KmerBytesWritableFactoryTest {
static byte[] array = { 'A', 'G', 'C', 'T', 'G', 'A', 'C', 'C', 'G', 'T' };
@@ -29,17 +29,17 @@
@Test
public void TestGetLastKmer() {
- KmerBytesWritable kmer = new KmerBytesWritable(9);
+ VKmerBytesWritable kmer = new VKmerBytesWritable(9);
kmer.setByRead(array, 0);
Assert.assertEquals("AGCTGACCG", kmer.toString());
- KmerBytesWritable lastKmer;
+ VKmerBytesWritable lastKmer;
for (int i = 8; i > 0; i--) {
lastKmer = kmerFactory.getLastKmerFromChain(i, kmer);
Assert.assertEquals("AGCTGACCG".substring(9 - i), lastKmer.toString());
lastKmer = kmerFactory.getSubKmerFromChain(9 - i, i, kmer);
Assert.assertEquals("AGCTGACCG".substring(9 - i), lastKmer.toString());
}
- KmerBytesWritable vlastKmer;
+ VKmerBytesWritable vlastKmer;
for (int i = 8; i > 0; i--) {
vlastKmer = kmerFactory.getLastKmerFromChain(i, kmer);
Assert.assertEquals("AGCTGACCG".substring(9 - i), vlastKmer.toString());
@@ -50,17 +50,17 @@
@Test
public void TestGetFirstKmer() {
- KmerBytesWritable kmer = new KmerBytesWritable(9);
+ VKmerBytesWritable kmer = new VKmerBytesWritable(9);
kmer.setByRead(array, 0);
Assert.assertEquals("AGCTGACCG", kmer.toString());
- KmerBytesWritable firstKmer;
+ VKmerBytesWritable firstKmer;
for (int i = 8; i > 0; i--) {
firstKmer = kmerFactory.getFirstKmerFromChain(i, kmer);
Assert.assertEquals("AGCTGACCG".substring(0, i), firstKmer.toString());
firstKmer = kmerFactory.getSubKmerFromChain(0, i, kmer);
Assert.assertEquals("AGCTGACCG".substring(0, i), firstKmer.toString());
}
- KmerBytesWritable vfirstKmer;
+ VKmerBytesWritable vfirstKmer;
for (int i = 8; i > 0; i--) {
vfirstKmer = kmerFactory.getFirstKmerFromChain(i, kmer);
Assert.assertEquals("AGCTGACCG".substring(0, i), vfirstKmer.toString());
@@ -71,12 +71,12 @@
@Test
public void TestGetSubKmer() {
- KmerBytesWritable kmer = new KmerBytesWritable(9);
+ VKmerBytesWritable kmer = new VKmerBytesWritable(9);
kmer.setByRead(array, 0);
Assert.assertEquals("AGCTGACCG", kmer.toString());
- KmerBytesWritable subKmer;
- for (int istart = 0; istart < kmer.getKmerLength() - 1; istart++) {
- for (int isize = 1; isize + istart <= kmer.getKmerLength(); isize++) {
+ VKmerBytesWritable subKmer;
+ for (int istart = 0; istart < kmer.getKmerLetterLength() - 1; istart++) {
+ for (int isize = 1; isize + istart <= kmer.getKmerLetterLength(); isize++) {
subKmer = kmerFactory.getSubKmerFromChain(istart, isize, kmer);
Assert.assertEquals("AGCTGACCG".substring(istart, istart + isize), subKmer.toString());
}
@@ -85,60 +85,60 @@
@Test
public void TestMergeNext() {
- KmerBytesWritable kmer = new KmerBytesWritable(9);
+ VKmerBytesWritable kmer = new VKmerBytesWritable(9);
kmer.setByRead(array, 0);
Assert.assertEquals("AGCTGACCG", kmer.toString());
String text = "AGCTGACCG";
for (byte x = GeneCode.A; x <= GeneCode.T; x++) {
- KmerBytesWritable newkmer = kmerFactory.mergeKmerWithNextCode(kmer, x);
+ VKmerBytesWritable newkmer = kmerFactory.mergeKmerWithNextCode(kmer, x);
text = text + (char) GeneCode.GENE_SYMBOL[x];
Assert.assertEquals(text, newkmer.toString());
- kmer = new KmerBytesWritable(newkmer);
+ kmer = new VKmerBytesWritable(newkmer);
}
for (byte x = GeneCode.A; x <= GeneCode.T; x++) {
- KmerBytesWritable newkmer = kmerFactory.mergeKmerWithNextCode(kmer, x);
+ VKmerBytesWritable newkmer = kmerFactory.mergeKmerWithNextCode(kmer, x);
text = text + (char) GeneCode.GENE_SYMBOL[x];
Assert.assertEquals(text, newkmer.toString());
- kmer = new KmerBytesWritable(newkmer);
+ kmer = new VKmerBytesWritable(newkmer);
}
}
@Test
public void TestMergePre() {
- KmerBytesWritable kmer = new KmerBytesWritable(9);
+ VKmerBytesWritable kmer = new VKmerBytesWritable(9);
kmer.setByRead(array, 0);
Assert.assertEquals("AGCTGACCG", kmer.toString());
String text = "AGCTGACCG";
for (byte x = GeneCode.A; x <= GeneCode.T; x++) {
- KmerBytesWritable newkmer = kmerFactory.mergeKmerWithPreCode(kmer, x);
+ VKmerBytesWritable newkmer = kmerFactory.mergeKmerWithPreCode(kmer, x);
text = (char) GeneCode.GENE_SYMBOL[x] + text;
Assert.assertEquals(text, newkmer.toString());
- kmer = new KmerBytesWritable(newkmer);
+ kmer = new VKmerBytesWritable(newkmer);
}
for (byte x = GeneCode.A; x <= GeneCode.T; x++) {
- KmerBytesWritable newkmer = kmerFactory.mergeKmerWithPreCode(kmer, x);
+ VKmerBytesWritable newkmer = kmerFactory.mergeKmerWithPreCode(kmer, x);
text = (char) GeneCode.GENE_SYMBOL[x] + text;
Assert.assertEquals(text, newkmer.toString());
- kmer = new KmerBytesWritable(newkmer);
+ kmer = new VKmerBytesWritable(newkmer);
}
}
@Test
public void TestMergeTwoKmer() {
- KmerBytesWritable kmer1 = new KmerBytesWritable(9);
+ VKmerBytesWritable kmer1 = new VKmerBytesWritable(9);
kmer1.setByRead(array, 0);
String text1 = "AGCTGACCG";
- KmerBytesWritable kmer2 = new KmerBytesWritable(9);
+ VKmerBytesWritable kmer2 = new VKmerBytesWritable(9);
kmer2.setByRead(array, 1);
String text2 = "GCTGACCGT";
Assert.assertEquals(text1, kmer1.toString());
Assert.assertEquals(text2, kmer2.toString());
- KmerBytesWritable merged = kmerFactory.mergeTwoKmer(kmer1, kmer2);
+ VKmerBytesWritable merged = kmerFactory.mergeTwoKmer(kmer1, kmer2);
Assert.assertEquals(text1 + text2, merged.toString());
- KmerBytesWritable kmer3 = new KmerBytesWritable(3);
+ VKmerBytesWritable kmer3 = new VKmerBytesWritable(3);
kmer3.setByRead(array, 1);
String text3 = "GCT";
Assert.assertEquals(text3, kmer3.toString());
@@ -148,17 +148,17 @@
merged = kmerFactory.mergeTwoKmer(kmer3, kmer1);
Assert.assertEquals(text3 + text1, merged.toString());
- KmerBytesWritable kmer4 = new KmerBytesWritable(8);
+ VKmerBytesWritable kmer4 = new VKmerBytesWritable(8);
kmer4.setByRead(array, 0);
String text4 = "AGCTGACC";
Assert.assertEquals(text4, kmer4.toString());
merged = kmerFactory.mergeTwoKmer(kmer4, kmer3);
Assert.assertEquals(text4 + text3, merged.toString());
- KmerBytesWritable kmer5 = new KmerBytesWritable(7);
+ VKmerBytesWritable kmer5 = new VKmerBytesWritable(7);
kmer5.setByRead(array, 0);
String text5 = "AGCTGAC";
- KmerBytesWritable kmer6 = new KmerBytesWritable(9);
+ VKmerBytesWritable kmer6 = new VKmerBytesWritable(9);
kmer6.setByRead(9, array, 1);
String text6 = "GCTGACCGT";
merged = kmerFactory.mergeTwoKmer(kmer5, kmer6);
@@ -173,19 +173,18 @@
String text8 = "GCTG";
merged = kmerFactory.mergeTwoKmer(kmer5, kmer6);
Assert.assertEquals(text5 + text8, merged.toString());
-
}
@Test
public void TestShift() {
- KmerBytesWritable kmer = new KmerBytesWritable(kmerFactory.getKmerByRead(9, array, 0));
+ VKmerBytesWritable kmer = new VKmerBytesWritable(kmerFactory.getKmerByRead(9, array, 0));
String text = "AGCTGACCG";
Assert.assertEquals(text, kmer.toString());
- KmerBytesWritable kmerForward = kmerFactory.shiftKmerWithNextCode(kmer, GeneCode.A);
+ VKmerBytesWritable kmerForward = kmerFactory.shiftKmerWithNextCode(kmer, GeneCode.A);
Assert.assertEquals(text, kmer.toString());
Assert.assertEquals("GCTGACCGA", kmerForward.toString());
- KmerBytesWritable kmerBackward = kmerFactory.shiftKmerWithPreCode(kmer, GeneCode.C);
+ VKmerBytesWritable kmerBackward = kmerFactory.shiftKmerWithPreCode(kmer, GeneCode.C);
Assert.assertEquals(text, kmer.toString());
Assert.assertEquals("CAGCTGACC", kmerBackward.toString());
@@ -193,10 +192,10 @@
@Test
public void TestReverseKmer() {
- KmerBytesWritable kmer = new KmerBytesWritable(7);
+ VKmerBytesWritable kmer = new VKmerBytesWritable(7);
kmer.setByRead(array, 0);
Assert.assertEquals(kmer.toString(), "AGCTGAC");
- KmerBytesWritable reversed = kmerFactory.reverse(kmer);
+ VKmerBytesWritable reversed = kmerFactory.reverse(kmer);
Assert.assertEquals(reversed.toString(), "CAGTCGA");
}
}
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/VKmerBytesWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/VKmerBytesWritableTest.java
index b2545e3..5dd4f82 100644
--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/VKmerBytesWritableTest.java
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/VKmerBytesWritableTest.java
@@ -102,14 +102,14 @@
Assert.assertEquals(string.substring(0, k), kmer.toString());
for (int b = 0; b < k; b++) {
byte byteActual = KmerBytesWritable.getOneByteFromKmerAtPosition(b, kmer.getBytes(),
- kmer.getKmerOffset(), kmer.getLength());
+ kmer.getKmerOffset(), kmer.getKmerByteLength());
byte byteExpect = GeneCode.getCodeFromSymbol(array[b]);
for (int i = 1; i < 4 && b + i < k; i++) {
byteExpect += GeneCode.getCodeFromSymbol(array[b + i]) << (i * 2);
}
Assert.assertEquals(byteActual, byteExpect);
KmerBytesWritable.appendOneByteAtPosition(b, byteActual, kmerAppend.getBytes(),
- kmerAppend.getKmerOffset(), kmerAppend.getLength());
+ kmerAppend.getKmerOffset(), kmerAppend.getKmerByteLength());
}
Assert.assertEquals(kmer.toString(), kmerAppend.toString());
}