From 39678b6a20fc56f46eb5aff3732d9cabeaa9dca0 Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Thu, 10 Nov 2011 13:34:03 -0500 Subject: [PATCH 2/7] Check for reads with missing read groups and throw a UserException when encountered. Mauricio said this wouldn't break integration tests. --- .../gatk/filters/MalformedReadFilter.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/MalformedReadFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/MalformedReadFilter.java index 11bbf9e4c..46d28185b 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/MalformedReadFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/MalformedReadFilter.java @@ -50,19 +50,20 @@ public class MalformedReadFilter extends ReadFilter { public boolean filterOut(SAMRecord read) { // slowly changing the behavior to blow up first and filtering out if a parameter is explicitly provided - if (!checkMismatchingBasesAndQuals(read)) { - if (!filterMismatchingBaseAndQuals) - throw new UserException.MalformedBAM(read, "BAM file has a read with mismatching number of bases and base qualities. Offender: " + read.getReadName() +" [" + read.getReadLength() + " bases] [" +read.getBaseQualities().length +"] quals"); - else - return true; - } - return !checkInvalidAlignmentStart(read) || !checkInvalidAlignmentEnd(read) || !checkAlignmentDisagreesWithHeader(this.header,read) || + !checkHasReadGroup(read) || + !checkMismatchingBasesAndQuals(read, filterMismatchingBaseAndQuals) || !checkCigarDisagreesWithAlignment(read); } + private static boolean checkHasReadGroup(SAMRecord read) { + if ( read.getReadGroup() == null ) + throw new UserException.ReadMissingReadGroup(read); + return true; + } + /** * Check for the case in which the alignment start is inconsistent with the read unmapped flag. * @param read The read to validate. @@ -127,7 +128,9 @@ public class MalformedReadFilter extends ReadFilter { * @param read the read to validate * @return true if they have the same number. False otherwise. */ - private static boolean checkMismatchingBasesAndQuals(SAMRecord read) { + private static boolean checkMismatchingBasesAndQuals(SAMRecord read, boolean filterMismatchingBaseAndQuals) { + if (!filterMismatchingBaseAndQuals) + throw new UserException.MalformedBAM(read, "BAM file has a read with mismatching number of bases and base qualities. Offender: " + read.getReadName() +" [" + read.getReadLength() + " bases] [" +read.getBaseQualities().length +"] quals"); return (read.getReadLength() == read.getBaseQualities().length); } } From 060c7ce8aea6939c77aca62d87e8f5665bab1d80 Mon Sep 17 00:00:00 2001 From: Mauricio Carneiro Date: Thu, 10 Nov 2011 14:03:22 -0500 Subject: [PATCH 7/7] It wouldn't harm integrationtests if we had our logic right... :-) --- .../sting/gatk/filters/MalformedReadFilter.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/gatk/filters/MalformedReadFilter.java b/public/java/src/org/broadinstitute/sting/gatk/filters/MalformedReadFilter.java index 46d28185b..37a6cfc36 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/filters/MalformedReadFilter.java +++ b/public/java/src/org/broadinstitute/sting/gatk/filters/MalformedReadFilter.java @@ -129,8 +129,14 @@ public class MalformedReadFilter extends ReadFilter { * @return true if they have the same number. False otherwise. */ private static boolean checkMismatchingBasesAndQuals(SAMRecord read, boolean filterMismatchingBaseAndQuals) { - if (!filterMismatchingBaseAndQuals) - throw new UserException.MalformedBAM(read, "BAM file has a read with mismatching number of bases and base qualities. Offender: " + read.getReadName() +" [" + read.getReadLength() + " bases] [" +read.getBaseQualities().length +"] quals"); - return (read.getReadLength() == read.getBaseQualities().length); + boolean result; + if (read.getReadLength() == read.getBaseQualities().length) + result = true; + else if (filterMismatchingBaseAndQuals) + result = false; + else + throw new UserException.MalformedBAM(read, String.format("BAM file has a read with mismatching number of bases and base qualities. Offender: %s [%d bases] [%d quals]", read.getReadName(), read.getReadLength(), read.getBaseQualities().length)); + + return result; } }