Merge pull request #289 from broadinstitute/md_fix_bq
Bugfix: defaultBaseQualities actually works now
This commit is contained in:
commit
6a5502c94a
|
|
@ -187,6 +187,12 @@ public class GATKArgumentCollection {
|
||||||
@Argument(fullName = "allow_potentially_misencoded_quality_scores", shortName="allowPotentiallyMisencodedQuals", doc="Do not fail when encountering base qualities that are too high and that seemingly indicate a problem with the base quality encoding of the BAM file", required = false)
|
@Argument(fullName = "allow_potentially_misencoded_quality_scores", shortName="allowPotentiallyMisencodedQuals", doc="Do not fail when encountering base qualities that are too high and that seemingly indicate a problem with the base quality encoding of the BAM file", required = false)
|
||||||
public boolean ALLOW_POTENTIALLY_MISENCODED_QUALS = false;
|
public boolean ALLOW_POTENTIALLY_MISENCODED_QUALS = false;
|
||||||
|
|
||||||
|
@Argument(fullName="useOriginalQualities", shortName = "OQ", doc = "If set, use the original base quality scores from the OQ tag when present instead of the standard scores", required=false)
|
||||||
|
public Boolean useOriginalBaseQualities = false;
|
||||||
|
|
||||||
|
@Argument(fullName="defaultBaseQualities", shortName = "DBQ", doc = "If reads are missing some or all base quality scores, this value will be used for all base quality scores", required=false)
|
||||||
|
public byte defaultBaseQualities = -1;
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// performance log arguments
|
// performance log arguments
|
||||||
|
|
@ -201,9 +207,6 @@ public class GATKArgumentCollection {
|
||||||
@Argument(fullName = "performanceLog", shortName="PF", doc="If provided, a GATK runtime performance log will be written to this file", required = false)
|
@Argument(fullName = "performanceLog", shortName="PF", doc="If provided, a GATK runtime performance log will be written to this file", required = false)
|
||||||
public File performanceLog = null;
|
public File performanceLog = null;
|
||||||
|
|
||||||
@Argument(fullName="useOriginalQualities", shortName = "OQ", doc = "If set, use the original base quality scores from the OQ tag when present instead of the standard scores", required=false)
|
|
||||||
public Boolean useOriginalBaseQualities = false;
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// BQSR arguments
|
// BQSR arguments
|
||||||
|
|
@ -267,9 +270,6 @@ public class GATKArgumentCollection {
|
||||||
//
|
//
|
||||||
// --------------------------------------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
@Argument(fullName="defaultBaseQualities", shortName = "DBQ", doc = "If reads are missing some or all base quality scores, this value will be used for all base quality scores", required=false)
|
|
||||||
public byte defaultBaseQualities = -1;
|
|
||||||
|
|
||||||
@Argument(fullName = "validation_strictness", shortName = "S", doc = "How strict should we be with validation", required = false)
|
@Argument(fullName = "validation_strictness", shortName = "S", doc = "How strict should we be with validation", required = false)
|
||||||
public SAMFileReader.ValidationStringency strictnessLevel = SAMFileReader.ValidationStringency.SILENT;
|
public SAMFileReader.ValidationStringency strictnessLevel = SAMFileReader.ValidationStringency.SILENT;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -630,6 +630,10 @@ public class SAMDataSource {
|
||||||
// * (otherwise we will process something that we may end up throwing away) * //
|
// * (otherwise we will process something that we may end up throwing away) * //
|
||||||
// ************************************************************************************************ //
|
// ************************************************************************************************ //
|
||||||
|
|
||||||
|
if (useOriginalBaseQualities || defaultBaseQualities >= 0)
|
||||||
|
// only wrap if we are replacing the original qualities or using a default base quality
|
||||||
|
wrappedIterator = new ReadFormattingIterator(wrappedIterator, useOriginalBaseQualities, defaultBaseQualities);
|
||||||
|
|
||||||
// Filters:
|
// Filters:
|
||||||
wrappedIterator = StingSAMIteratorAdapter.adapt(new CountingFilteringIterator(readMetrics,wrappedIterator,supplementalFilters));
|
wrappedIterator = StingSAMIteratorAdapter.adapt(new CountingFilteringIterator(readMetrics,wrappedIterator,supplementalFilters));
|
||||||
|
|
||||||
|
|
@ -654,10 +658,6 @@ public class SAMDataSource {
|
||||||
if (!noValidationOfReadOrder && enableVerification)
|
if (!noValidationOfReadOrder && enableVerification)
|
||||||
wrappedIterator = new VerifyingSamIterator(wrappedIterator);
|
wrappedIterator = new VerifyingSamIterator(wrappedIterator);
|
||||||
|
|
||||||
if (useOriginalBaseQualities || defaultBaseQualities >= 0)
|
|
||||||
// only wrap if we are replacing the original qualities or using a default base quality
|
|
||||||
wrappedIterator = new ReadFormattingIterator(wrappedIterator, useOriginalBaseQualities, defaultBaseQualities);
|
|
||||||
|
|
||||||
// set up read transformers
|
// set up read transformers
|
||||||
for ( final ReadTransformer readTransformer : readTransformers ) {
|
for ( final ReadTransformer readTransformer : readTransformers ) {
|
||||||
if ( readTransformer.enabled() && readTransformer.getApplicationTime() == ReadTransformer.ApplicationTime.ON_INPUT )
|
if ( readTransformer.enabled() && readTransformer.getApplicationTime() == ReadTransformer.ApplicationTime.ON_INPUT )
|
||||||
|
|
|
||||||
|
|
@ -234,7 +234,10 @@ public class MalformedReadFilter extends ReadFilter {
|
||||||
else if (filterMismatchingBaseAndQuals)
|
else if (filterMismatchingBaseAndQuals)
|
||||||
result = false;
|
result = false;
|
||||||
else
|
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));
|
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].%s",
|
||||||
|
read.getReadName(), read.getReadLength(), read.getBaseQualities().length,
|
||||||
|
read.getBaseQualities().length == 0 ? " You can use --defaultBaseQualities to assign a default base quality for all reads, but this can be dangerous in you don't know what you are doing." : ""));
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -227,4 +227,32 @@ public class EngineFeaturesIntegrationTest extends WalkerTest {
|
||||||
nLines++;
|
nLines++;
|
||||||
Assert.assertTrue(nLines > 0);
|
Assert.assertTrue(nLines > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Test that defaultBaseQualities actually works
|
||||||
|
//
|
||||||
|
// --------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
public WalkerTestSpec testDefaultBaseQualities(final Integer value, final String md5) {
|
||||||
|
return new WalkerTestSpec("-T PrintReads -R " + b37KGReference + " -I " + privateTestDir + "/baseQualitiesToFix.bam -o %s"
|
||||||
|
+ (value != null ? " --defaultBaseQualities " + value : ""),
|
||||||
|
1, Arrays.asList(md5));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test()
|
||||||
|
public void testDefaultBaseQualities20() {
|
||||||
|
executeTest("testDefaultBaseQualities20", testDefaultBaseQualities(20, "7d254a9d0ec59c66ee3e137f56f4c78f"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test()
|
||||||
|
public void testDefaultBaseQualities30() {
|
||||||
|
executeTest("testDefaultBaseQualities30", testDefaultBaseQualities(30, "0f50def6cbbbd8ccd4739e2b3998e503"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expectedExceptions = Exception.class)
|
||||||
|
public void testDefaultBaseQualitiesNoneProvided() {
|
||||||
|
executeTest("testDefaultBaseQualitiesNoneProvided", testDefaultBaseQualities(null, ""));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue