public static String calculateMD5String(final byte[] data) throws NoSuchAlgorithmException { return SequenceUtil.calculateMD5String(data, 0, data.length); }
public static String calculateMD5String(final byte[] data) throws NoSuchAlgorithmException { return SequenceUtil.calculateMD5String(data, 0, data.length); }
public String md5(int alignmentStart, int alignmentSpan) { int from = (int) (alignmentStart - this.alignmentStart); if (from >= array.length) return SequenceUtil.calculateMD5String(new byte[0], 0, 0); // allow for hanging end: int to = (int) (alignmentStart + alignmentSpan - this.alignmentStart); return SequenceUtil.calculateMD5String(array, from, Math.min(to - from, array.length - from)); }
private static boolean validateRefMD5(final byte[] ref, final int alignmentStart, final int alignmentSpan, final byte[] expectedMD5) { final int span = Math.min(alignmentSpan, ref.length - alignmentStart + 1); final String md5 = SequenceUtil.calculateMD5String(ref, alignmentStart - 1, span); return md5.equals(String.format("%032x", new BigInteger(1, expectedMD5))); }
private static boolean validateRefMD5(final byte[] ref, final int alignmentStart, final int alignmentSpan, final byte[] expectedMD5) { final int span = Math.min(alignmentSpan, ref.length - alignmentStart + 1); final String md5 = SequenceUtil.calculateMD5String(ref, alignmentStart - 1, span); return md5.equals(String.format("%032x", new BigInteger(1, expectedMD5))); }
byte[] findBasesByMD5(final String md5) throws IOException { final String url = String.format(Defaults.EBI_REFERENCE_SERVICE_URL_MASK, md5); for (int i = 0; i < downloadTriesBeforeFailing; i++) { final InputStream is = new URL(url).openStream(); if (is == null) return null; log.debug("Downloading reference sequence: " + url); final byte[] data = InputStreamUtils.readFully(is); log.debug("Downloaded " + data.length + " bytes for md5 " + md5); is.close(); try { final String downloadedMD5 = SequenceUtil.calculateMD5String(data); if (md5.equals(downloadedMD5)) { return data; } else { final String message = String .format("Downloaded sequence is corrupt: requested md5=%s, received md5=%s", md5, downloadedMD5); log.error(message); } } catch (final NoSuchAlgorithmException e) { throw new RuntimeException(e); } } throw new RuntimeException("Giving up on downloading sequence for md5 " + md5); }
private byte[] findBasesByMD5(final String md5) { final String url = String.format(Defaults.EBI_REFERENCE_SERVICE_URL_MASK, md5); for (int i = 0; i < downloadTriesBeforeFailing; i++) { try (final InputStream is = new URL(url).openStream()) { if (is == null) return null; log.info("Downloading reference sequence: " + url); final byte[] data = InputStreamUtils.readFully(is); log.info("Downloaded " + data.length + " bytes for md5 " + md5); final String downloadedMD5 = SequenceUtil.calculateMD5String(data); if (md5.equals(downloadedMD5)) { return data; } else { final String message = String .format("Downloaded sequence is corrupt: requested md5=%s, received md5=%s", md5, downloadedMD5); log.error(message); } } catch (final NoSuchAlgorithmException | IOException e) { throw new RuntimeException(e); } } throw new GaveUpException("Giving up on downloading sequence for md5 " + md5); }
@Test public void test_HangingStartMD5() { ReferenceRegion region = new ReferenceRegion(data, 0, "chr1", 1); int start = data.length + 1; String expectedMD5 = SequenceUtil.calculateMD5String("".getBytes(), 0, 0); String md5 = region.md5(start, 10); Assert.assertEquals(expectedMD5, md5); }
@Test public void test_Start_1() { int start = 1; ReferenceRegion region = new ReferenceRegion(data, 0, "chr1", start); Assert.assertEquals(start, region.alignmentStart); Assert.assertEquals(0, region.arrayPosition(start)); for (int pos = start, index = 0; pos < start + 10; pos++, index++) { Assert.assertEquals(data[index], region.base(pos)); } int len = 10; String expectedMD5 = SequenceUtil.calculateMD5String(data, 0, len); String md5 = region.md5(start, len); Assert.assertEquals(expectedMD5, md5); }
@Test public void test_Start_2() { int start = 2; ReferenceRegion region = new ReferenceRegion(data, 0, "chr1", start); Assert.assertEquals(start, region.alignmentStart); Assert.assertEquals(0, region.arrayPosition(start)); for (int pos = start, index = 0; pos < start + 10; pos++, index++) { Assert.assertEquals(data[index], region.base(pos)); } int len = 10; String expectedMD5 = SequenceUtil.calculateMD5String(data, 0, len); String md5 = region.md5(start, len); Assert.assertEquals(expectedMD5, md5); }
@Test public void test_HangingEnd() { int start = 2; ReferenceRegion region = new ReferenceRegion(data, 0, "chr1", start); Assert.assertEquals(start, region.alignmentStart); Assert.assertEquals(0, region.arrayPosition(start)); for (int pos = start, index = 0; pos < start + 10; pos++, index++) { Assert.assertEquals(data[index], region.base(pos)); } String expectedMD5 = SequenceUtil.calculateMD5String(data, 0, data.length); String md5 = region.md5(start, data.length + 10); Assert.assertEquals(expectedMD5, md5); md5 = region.md5(start, data.length + 100); Assert.assertEquals(expectedMD5, md5); }