Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

More CRAM Encoding tests + updates #1203

Merged
merged 9 commits into from
Nov 6, 2018
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import htsjdk.samtools.cram.encoding.ExternalByteEncoding;
import htsjdk.samtools.cram.encoding.ExternalCompressor;
import htsjdk.samtools.cram.encoding.ExternalIntegerEncoding;
import htsjdk.samtools.cram.encoding.huffman.codec.HuffmanIntegerEncoding;
import htsjdk.samtools.cram.encoding.huffman.codec.CanonicalHuffmanIntegerEncoding;
import htsjdk.samtools.cram.encoding.rans.RANS;
import htsjdk.samtools.cram.encoding.readfeatures.ReadFeature;
import htsjdk.samtools.cram.encoding.readfeatures.Substitution;
Expand Down Expand Up @@ -422,21 +422,21 @@ private EncodingDetails buildEncodingForTag(final List<CramCompressionRecord> re
case 'c':
case 'C':
details.params = ByteArrayLenEncoding.toParam(
HuffmanIntegerEncoding.toParam(new int[] { 1 }, new int[] { 0 }),
CanonicalHuffmanIntegerEncoding.toParam(new int[] { 1 }, new int[] { 0 }),
ExternalByteEncoding.toParam(tagID));
return details;
case 'I':
case 'i':
case 'f':
details.params = ByteArrayLenEncoding.toParam(
HuffmanIntegerEncoding.toParam(new int[] { 4 }, new int[] { 0 }),
CanonicalHuffmanIntegerEncoding.toParam(new int[] { 4 }, new int[] { 0 }),
ExternalByteEncoding.toParam(tagID));
return details;

case 's':
case 'S':
details.params = ByteArrayLenEncoding.toParam(
HuffmanIntegerEncoding.toParam(new int[] { 2 }, new int[] { 0 }),
CanonicalHuffmanIntegerEncoding.toParam(new int[] { 2 }, new int[] { 0 }),
ExternalByteEncoding.toParam(tagID));
return details;
case 'Z':
Expand All @@ -445,7 +445,7 @@ private EncodingDetails buildEncodingForTag(final List<CramCompressionRecord> re
final boolean singleSize = stats.min == stats.max;
if (singleSize) {
details.params = ByteArrayLenEncoding.toParam(
HuffmanIntegerEncoding.toParam(new int[] { stats.min }, new int[] { 0 }),
CanonicalHuffmanIntegerEncoding.toParam(new int[] { stats.min }, new int[] { 0 }),
ExternalByteEncoding.toParam(tagID));
return details;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
*/
package htsjdk.samtools.cram.encoding;

import htsjdk.samtools.cram.encoding.huffman.codec.HuffmanByteEncoding;
import htsjdk.samtools.cram.encoding.huffman.codec.HuffmanIntegerEncoding;
import htsjdk.samtools.cram.encoding.huffman.codec.CanonicalHuffmanByteEncoding;
import htsjdk.samtools.cram.encoding.huffman.codec.CanonicalHuffmanIntegerEncoding;
import htsjdk.samtools.cram.structure.EncodingID;

/**
Expand All @@ -45,7 +45,7 @@ public <T> Encoding<T> createEncoding(final DataSeriesType valueType,
case EXTERNAL:
return (Encoding<T>) new ExternalByteEncoding();
case HUFFMAN:
return (Encoding<T>) new HuffmanByteEncoding();
return (Encoding<T>) new CanonicalHuffmanByteEncoding();
case NULL:
return new NullEncoding<T>();

Expand All @@ -58,7 +58,7 @@ public <T> Encoding<T> createEncoding(final DataSeriesType valueType,
case INT:
switch (id) {
case HUFFMAN:
return (Encoding<T>) new HuffmanIntegerEncoding();
return (Encoding<T>) new CanonicalHuffmanIntegerEncoding();
case NULL:
return new NullEncoding<T>();
case EXTERNAL:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,7 @@ public long write(final BitOutputStream bitOutputStream, final Integer value) th

@Override
public long numberOfBits(final Integer value) {
try {
return ITF8.writeUnsignedITF8(value, nullOutputStream);
} catch (final IOException e) {
// this should never happened but still:
throw new RuntimeException(e);
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yay thanks.

return ITF8.writeUnsignedITF8(value, nullOutputStream);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@
import java.nio.ByteBuffer;
import java.util.Map;

public class HuffmanByteEncoding implements Encoding<Byte> {
public class CanonicalHuffmanByteEncoding implements Encoding<Byte> {
private static final EncodingID ENCODING_ID = EncodingID.HUFFMAN;
private int[] bitLengths;
private byte[] values;
private ByteBuffer buf = ByteBuffer.allocate(1024);

public HuffmanByteEncoding() {
public CanonicalHuffmanByteEncoding() {
}

@Override
Expand Down Expand Up @@ -82,7 +82,7 @@ public BitCodec<Byte> buildCodec(final Map<Integer, InputStream> inputMap,
}

public static EncodingParams toParam(final byte[] bfValues, final int[] bfBitLens) {
final HuffmanByteEncoding e = new HuffmanByteEncoding();
final CanonicalHuffmanByteEncoding e = new CanonicalHuffmanByteEncoding();
e.values = bfValues;
e.bitLengths = bfBitLens;
return new EncodingParams(ENCODING_ID, e.toByteArray());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@
import java.util.Arrays;
import java.util.Map;

public class HuffmanIntegerEncoding implements Encoding<Integer> {
public class CanonicalHuffmanIntegerEncoding implements Encoding<Integer> {
private static final EncodingID ENCODING_ID = EncodingID.HUFFMAN;
private int[] bitLengths;
private int[] values;
private final ByteBuffer buf = ByteBuffer.allocate(1024 * 10);

public HuffmanIntegerEncoding() {
public CanonicalHuffmanIntegerEncoding() {
}

@Override
Expand Down Expand Up @@ -82,16 +82,16 @@ public BitCodec<Integer> buildCodec(final Map<Integer, InputStream> inputMap,
}

public static EncodingParams toParam(final int[] bfValues, final int[] bfBitLens) {
final HuffmanIntegerEncoding e = new HuffmanIntegerEncoding();
final CanonicalHuffmanIntegerEncoding e = new CanonicalHuffmanIntegerEncoding();
e.values = bfValues;
e.bitLengths = bfBitLens;
return new EncodingParams(ENCODING_ID, e.toByteArray());
}

@Override
public boolean equals(final Object obj) {
if (obj instanceof HuffmanIntegerEncoding) {
final HuffmanIntegerEncoding foe = (HuffmanIntegerEncoding) obj;
if (obj instanceof CanonicalHuffmanIntegerEncoding) {
final CanonicalHuffmanIntegerEncoding foe = (CanonicalHuffmanIntegerEncoding) obj;
return Arrays.equals(bitLengths, foe.bitLengths) && Arrays.equals(values, foe.values);

}
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/htsjdk/samtools/cram/io/CramIntArray.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public class CramIntArray {
* @return array of integers from the input stream
* @throws IOException as per java IO contract
*/
public static int[] array(final InputStream inputStream) throws IOException {
public static int[] array(final InputStream inputStream) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Javadoc @throws can be removed for these now.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good catch, thanks

final int size = ITF8.readUnsignedITF8(inputStream);
final int[] array = new int[size];
for (int i = 0; i < size; i++)
Expand All @@ -32,7 +32,7 @@ public static int[] array(final InputStream inputStream) throws IOException {
* @return the number of bits written out
* @throws IOException as per java IO contract
*/
public static int write(final int[] array, final OutputStream outputStream) throws IOException {
public static int write(final int[] array, final OutputStream outputStream) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as above.

int length = ITF8.writeUnsignedITF8(array.length, outputStream);
for (final int intValue : array) length += ITF8.writeUnsignedITF8(intValue, outputStream);

Expand Down
Loading