/** * Report error if a tag value is a Long. */ private void validateTags(final SAMRecord record, final long recordNumber) { for (final SAMRecord.SAMTagAndValue tagAndValue : record.getAttributes()) { if (tagAndValue.value instanceof Long) { addError(new SAMValidationError(Type.TAG_VALUE_TOO_LARGE, "Numeric value too large for tag " + tagAndValue.tag, record.getReadName(), recordNumber)); } } }
public void validateBamFileTermination(final File inputFile) { try { if (!IOUtil.isBlockCompressed(inputFile.toPath())) { return; } final BlockCompressedInputStream.FileTermination terminationState = BlockCompressedInputStream.checkTermination(inputFile); if (terminationState.equals(BlockCompressedInputStream.FileTermination.DEFECTIVE)) { addError(new SAMValidationError(Type.TRUNCATED_FILE, "BAM file has defective last gzip block", inputFile.getPath())); } else if (terminationState.equals(BlockCompressedInputStream.FileTermination.HAS_HEALTHY_LAST_BLOCK)) { addError(new SAMValidationError(Type.BAM_FILE_MISSING_TERMINATOR_BLOCK, "Older BAM file -- does not have terminator block", inputFile.getPath())); } } catch (IOException e) { throw new SAMException("IOException", e); } }
public void validateBamFileTermination(final File inputFile) { try { if (!IOUtil.isBlockCompressed(inputFile.toPath())) { return; } final BlockCompressedInputStream.FileTermination terminationState = BlockCompressedInputStream.checkTermination(inputFile); if (terminationState.equals(BlockCompressedInputStream.FileTermination.DEFECTIVE)) { addError(new SAMValidationError(Type.TRUNCATED_FILE, "BAM file has defective last gzip block", inputFile.getPath())); } else if (terminationState.equals(BlockCompressedInputStream.FileTermination.HAS_HEALTHY_LAST_BLOCK)) { addError(new SAMValidationError(Type.BAM_FILE_MISSING_TERMINATOR_BLOCK, "Older BAM file -- does not have terminator block", inputFile.getPath())); } } catch (IOException e) { throw new SAMException("IOException", e); } }
private void validateReadGroup(final SAMRecord record, final SAMFileHeader header) { final SAMReadGroupRecord rg = record.getReadGroup(); if (rg == null) { addError(new SAMValidationError(Type.RECORD_MISSING_READ_GROUP, "A record is missing a read group", record.getReadName())); } else if (header.getReadGroup(rg.getId()) == null) { addError(new SAMValidationError(Type.READ_GROUP_NOT_FOUND, "A record has a read group not found in the header: ", record.getReadName() + ", " + rg.getReadGroupId())); } }
private void validateReadGroup(final SAMRecord record, final SAMFileHeader header) { final SAMReadGroupRecord rg = record.getReadGroup(); if (rg == null) { addError(new SAMValidationError(Type.RECORD_MISSING_READ_GROUP, "A record is missing a read group", record.getReadName())); } else if (header.getReadGroup(rg.getId()) == null) { addError(new SAMValidationError(Type.READ_GROUP_NOT_FOUND, "A record has a read group not found in the header: ", record.getReadName() + ", " + rg.getReadGroupId())); } }
private void validateReadGroup(final SAMRecord record, final SAMFileHeader header) { final SAMReadGroupRecord rg = record.getReadGroup(); if (rg == null) { addError(new SAMValidationError(Type.RECORD_MISSING_READ_GROUP, "A record is missing a read group", record.getReadName())); } else if (header.getReadGroup(rg.getId()) == null) { addError(new SAMValidationError(Type.READ_GROUP_NOT_FOUND, "A record has a read group not found in the header: ", record.getReadName() + ", " + rg.getReadGroupId())); } }
private boolean validateCigar(final SAMRecord record, final long recordNumber, final boolean isReadCigar) { final ValidationStringency savedStringency = record.getValidationStringency(); record.setValidationStringency(ValidationStringency.LENIENT); final List<SAMValidationError> errors = isReadCigar ? record.validateCigar(recordNumber) : SAMUtils.validateMateCigar(record, recordNumber); record.setValidationStringency(savedStringency); if (errors == null) { return true; } boolean valid = true; for (final SAMValidationError error : errors) { addError(error); valid = false; } return valid; }
private boolean validateCigar(final SAMRecord record, final long recordNumber, final boolean isReadCigar) { final ValidationStringency savedStringency = record.getValidationStringency(); record.setValidationStringency(ValidationStringency.LENIENT); final List<SAMValidationError> errors = isReadCigar ? record.validateCigar(recordNumber) : SAMUtils.validateMateCigar(record, recordNumber); record.setValidationStringency(savedStringency); if (errors == null) { return true; } boolean valid = true; for (final SAMValidationError error : errors) { addError(error); valid = false; } return valid; }
private boolean validateCigar(final SAMRecord record, final long recordNumber, final boolean isReadCigar) { final ValidationStringency savedStringency = record.getValidationStringency(); record.setValidationStringency(ValidationStringency.LENIENT); final List<SAMValidationError> errors = isReadCigar ? record.validateCigar(recordNumber) : SAMUtils.validateMateCigar(record, recordNumber); record.setValidationStringency(savedStringency); if (errors == null) { return true; } boolean valid = true; for (final SAMValidationError error : errors) { addError(error); valid = false; } return valid; }
private void validateNmTag(final SAMRecord record, final long recordNumber) { if (!record.getReadUnmappedFlag()) { final Integer tagNucleotideDiffs = record.getIntegerAttribute(ReservedTagConstants.NM); if (tagNucleotideDiffs == null) { addError(new SAMValidationError( Type.MISSING_TAG_NM, "NM tag (nucleotide differences) is missing", record.getReadName(), recordNumber)); } else if (refFileWalker != null) { final ReferenceSequence refSequence = refFileWalker.get(record.getReferenceIndex()); final int actualNucleotideDiffs = SequenceUtil.calculateSamNmTag(record, refSequence.getBases(), 0, isBisulfiteSequenced()); if (!tagNucleotideDiffs.equals(actualNucleotideDiffs)) { addError(new SAMValidationError( Type.INVALID_TAG_NM, "NM tag (nucleotide differences) in file [" + tagNucleotideDiffs + "] does not match reality [" + actualNucleotideDiffs + "]", record.getReadName(), recordNumber)); } } } }
private void validateNmTag(final SAMRecord record, final long recordNumber) { if (!record.getReadUnmappedFlag()) { final Integer tagNucleotideDiffs = record.getIntegerAttribute(ReservedTagConstants.NM); if (tagNucleotideDiffs == null) { addError(new SAMValidationError( Type.MISSING_TAG_NM, "NM tag (nucleotide differences) is missing", record.getReadName(), recordNumber)); } else if (refFileWalker != null) { final ReferenceSequence refSequence = refFileWalker.get(record.getReferenceIndex()); final int actualNucleotideDiffs = SequenceUtil.calculateSamNmTag(record, refSequence.getBases(), 0, isBisulfiteSequenced()); if (!tagNucleotideDiffs.equals(actualNucleotideDiffs)) { addError(new SAMValidationError( Type.INVALID_TAG_NM, "NM tag (nucleotide differences) in file [" + tagNucleotideDiffs + "] does not match reality [" + actualNucleotideDiffs + "]", record.getReadName(), recordNumber)); } } } }
private void validateSamFile(final SAMFileReader samReader, final PrintWriter out) { try { samReader.setValidationStringency(ValidationStringency.SILENT); validateHeader(samReader.getFileHeader()); orderChecker = new SAMSortOrderChecker(samReader.getFileHeader().getSortOrder()); validateSamRecordsAndQualityFormat(samReader, samReader.getFileHeader()); validateUnmatchedPairs(); if (validateIndex) { try { BamIndexValidator.exhaustivelyTestIndex(samReader); } catch (Exception e) { addError(new SAMValidationError(Type.INVALID_INDEX_FILE_POINTER, e.getMessage(), null)); } } if (errorsByType.isEmpty()) { out.println("No errors found"); } } finally { out.flush(); } }
private void validateSamFile(final SamReader samReader, final PrintWriter out) { try { validateHeader(samReader.getFileHeader()); orderChecker = new SAMSortOrderChecker(samReader.getFileHeader().getSortOrder()); validateSamRecordsAndQualityFormat(samReader, samReader.getFileHeader()); validateUnmatchedPairs(); if (indexValidationStringency != IndexValidationStringency.NONE) { try { if (indexValidationStringency == IndexValidationStringency.LESS_EXHAUSTIVE) { BamIndexValidator.lessExhaustivelyTestIndex(samReader); } else { BamIndexValidator.exhaustivelyTestIndex(samReader); } } catch (Exception e) { addError(new SAMValidationError(Type.INVALID_INDEX_FILE_POINTER, e.getMessage(), null)); } } if (errorsByType.isEmpty()) { out.println("No errors found"); } } finally { out.flush(); } }
private void validateSamFile(final SamReader samReader, final PrintWriter out) { try { validateHeader(samReader.getFileHeader()); orderChecker = new SAMSortOrderChecker(samReader.getFileHeader().getSortOrder()); validateSamRecordsAndQualityFormat(samReader, samReader.getFileHeader()); validateUnmatchedPairs(); if (indexValidationStringency != IndexValidationStringency.NONE) { try { if (indexValidationStringency == IndexValidationStringency.LESS_EXHAUSTIVE) { BamIndexValidator.lessExhaustivelyTestIndex(samReader); } else { BamIndexValidator.exhaustivelyTestIndex(samReader); } } catch (Exception e) { addError(new SAMValidationError(Type.INVALID_INDEX_FILE_POINTER, e.getMessage(), null)); } } if (errorsByType.isEmpty()) { out.println("No errors found"); } } finally { out.flush(); } }
private void validateSortOrder(final SAMRecord record, final long recordNumber) { final SAMRecord prev = orderChecker.getPreviousRecord(); if (!orderChecker.isSorted(record)) { addError(new SAMValidationError( Type.RECORD_OUT_OF_ORDER, String.format( "The record is out of [%s] order, prior read name [%s], prior coodinates [%d:%d]", record.getHeader().getSortOrder().name(), prev.getReadName(), prev.getReferenceIndex(), prev.getAlignmentStart()), record.getReadName(), recordNumber)); } }
private boolean validateSortOrder(final SAMRecord record, final long recordNumber) { final SAMRecord prev = orderChecker.getPreviousRecord(); boolean isValidSortOrder = orderChecker.isSorted(record); if (!isValidSortOrder) { addError(new SAMValidationError( Type.RECORD_OUT_OF_ORDER, String.format( "The record is out of [%s] order, prior read name [%s], prior coodinates [%d:%d]", record.getHeader().getSortOrder().name(), prev.getReadName(), prev.getReferenceIndex(), prev.getAlignmentStart()), record.getReadName(), recordNumber)); } return isValidSortOrder; }
private boolean validateSortOrder(final SAMRecord record, final long recordNumber) { final SAMRecord prev = orderChecker.getPreviousRecord(); boolean isValidSortOrder = orderChecker.isSorted(record); if (!isValidSortOrder) { addError(new SAMValidationError( Type.RECORD_OUT_OF_ORDER, String.format( "The record is out of [%s] order, prior read name [%s], prior coodinates [%d:%d]", record.getHeader().getSortOrder().name(), prev.getReadName(), prev.getReferenceIndex(), prev.getAlignmentStart()), record.getReadName(), recordNumber)); } return isValidSortOrder; }
private void validateMateFields(final SAMRecord record, final long recordNumber) { if (!record.getReadPairedFlag() || record.isSecondaryOrSupplementary()) { return; } validateMateCigar(record, recordNumber); final PairEndInfo pairEndInfo = pairEndInfoByName.remove(record.getReferenceIndex(), record.getReadName()); if (pairEndInfo == null) { pairEndInfoByName.put(record.getMateReferenceIndex(), record.getReadName(), new PairEndInfo(record, recordNumber)); } else { final List<SAMValidationError> errors = pairEndInfo.validateMates(new PairEndInfo(record, recordNumber), record.getReadName()); for (final SAMValidationError error : errors) { addError(error); } } }
private void validateMateFields(final SAMRecord record, final long recordNumber) { if (!record.getReadPairedFlag() || record.isSecondaryOrSupplementary()) { return; } validateMateCigar(record, recordNumber); if (skipMateValidation) { return; } final PairEndInfo pairEndInfo = pairEndInfoByName.remove(record.getReferenceIndex(), record.getReadName()); if (pairEndInfo == null) { pairEndInfoByName.put(record.getMateReferenceIndex(), record.getReadName(), new PairEndInfo(record, recordNumber)); } else { final List<SAMValidationError> errors = pairEndInfo.validateMates(new PairEndInfo(record, recordNumber), record.getReadName()); for (final SAMValidationError error : errors) { addError(error); } } }
private void validateMateFields(final SAMRecord record, final long recordNumber) { if (!record.getReadPairedFlag() || record.isSecondaryOrSupplementary()) { return; } validateMateCigar(record, recordNumber); if (skipMateValidation) { return; } final PairEndInfo pairEndInfo = pairEndInfoByName.remove(record.getReferenceIndex(), record.getReadName()); if (pairEndInfo == null) { pairEndInfoByName.put(record.getMateReferenceIndex(), record.getReadName(), new PairEndInfo(record, recordNumber)); } else { final List<SAMValidationError> errors = pairEndInfo.validateMates(new PairEndInfo(record, recordNumber), record.getReadName()); for (final SAMValidationError error : errors) { addError(error); } } }