public void setRefMD5(final byte[] ref) { alignmentBordersSanityCheck(ref); if (sequenceId < 0 && alignmentStart < 1) { refMD5 = new byte[16]; Arrays.fill(refMD5, (byte) 0); log.debug("Empty slice ref md5 is set."); } else { final int span = Math.min(alignmentSpan, ref.length - alignmentStart + 1); if (alignmentStart + span > ref.length + 1) throw new RuntimeException("Invalid alignment boundaries."); refMD5 = SequenceUtil.calculateMD5(ref, alignmentStart - 1, span); if (log.isEnabled(Log.LogLevel.DEBUG)) { final StringBuilder sb = new StringBuilder(); final int shoulder = 10; if (ref.length <= shoulder * 2) sb.append(new String(ref)); else { sb.append(getBrief(alignmentStart, alignmentSpan, ref, shoulder)); } log.debug(String.format("Slice md5: %s for %d:%d-%d, %s", String.format("%032x", new BigInteger(1, refMD5)), sequenceId, alignmentStart, alignmentStart + span - 1, sb.toString())); } } }
public void setRefMD5(final byte[] ref) { alignmentBordersSanityCheck(ref); if (sequenceId < 0 && alignmentStart < 1) { refMD5 = new byte[16]; Arrays.fill(refMD5, (byte) 0); log.debug("Empty slice ref md5 is set."); } else { final int span = Math.min(alignmentSpan, ref.length - alignmentStart + 1); if (alignmentStart + span > ref.length + 1) throw new RuntimeException("Invalid alignment boundaries."); refMD5 = SequenceUtil.calculateMD5(ref, alignmentStart - 1, span); if (log.isEnabled(Log.LogLevel.DEBUG)) { final StringBuilder sb = new StringBuilder(); final int shoulder = 10; if (ref.length <= shoulder * 2) sb.append(new String(ref)); else { sb.append(getBrief(alignmentStart, alignmentSpan, ref, shoulder)); } log.debug(String.format("Slice md5: %s for %d:%d-%d, %s", String.format("%032x", new BigInteger(1, refMD5)), sequenceId, alignmentStart, alignmentStart + span - 1, sb.toString())); } } }
public boolean validateRefMD5(final byte[] ref) { if(sequenceId == Slice.MULTI_REFERENCE) throw new SAMException("Cannot verify a slice with multiple references on a single reference."); if (sequenceId == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) return true; alignmentBordersSanityCheck(ref); if (!validateRefMD5(ref, alignmentStart, alignmentSpan, refMD5)) { final int shoulderLength = 10; final String excerpt = getBrief(alignmentStart, alignmentSpan, ref, shoulderLength); if (validateRefMD5(ref, alignmentStart, alignmentSpan - 1, refMD5)) { log.warn(String.format("Reference MD5 matches partially for slice %d:%d-%d, %s", sequenceId, alignmentStart, alignmentStart + alignmentSpan - 1, excerpt)); return true; } log.error(String.format("Reference MD5 mismatch for slice %d:%d-%d, %s", sequenceId, alignmentStart, alignmentStart + alignmentSpan - 1, excerpt)); return false; } return true; }
public boolean validateRefMD5(final byte[] ref) { if(sequenceId == Slice.MULTI_REFERENCE) throw new SAMException("Cannot verify a slice with multiple references on a single reference."); if (sequenceId == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) return true; alignmentBordersSanityCheck(ref); if (!validateRefMD5(ref, alignmentStart, alignmentSpan, refMD5)) { final int shoulderLength = 10; final String excerpt = getBrief(alignmentStart, alignmentSpan, ref, shoulderLength); if (validateRefMD5(ref, alignmentStart, alignmentSpan - 1, refMD5)) { log.warn(String.format("Reference MD5 matches partially for slice %d:%d-%d, %s", sequenceId, alignmentStart, alignmentStart + alignmentSpan - 1, excerpt)); return true; } log.error(String.format("Reference MD5 mismatch for slice %d:%d-%d, %s", sequenceId, alignmentStart, alignmentStart + alignmentSpan - 1, excerpt)); return false; } return true; }