From 5c6965575e49ca7d692c0b77bb3d5fac1f910e27 Mon Sep 17 00:00:00 2001 From: hanna Date: Wed, 4 May 2011 19:29:08 +0000 Subject: [PATCH] Some refactoring that Mauricio and I worked through together. Changed filters to extend from org.broadinstitute.sting.gatk.filters.ReadFilter rather than directly from net.sf.picard.filter.SamRecordFilter, which allows us to add an initialize(GATKEngine) method so that filters can do any initialization they'd like based on CL arguments, SAM headers, etc. git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@5760 348d0f76-0448-11de-a6fe-93d51630548a --- .../sting/gatk/CommandLineExecutable.java | 9 +++++---- .../sting/gatk/GenomeAnalysisEngine.java | 18 ++++++++---------- .../sting/gatk/ReadProperties.java | 7 ++++--- .../sting/gatk/WalkerManager.java | 15 ++++++++------- .../gatk/datasources/reads/SAMDataSource.java | 9 +++++---- .../performance/DownsamplerBenchmark.java | 3 ++- .../reads/performance/GATKWalkerBenchmark.java | 3 ++- .../sting/gatk/filters/BadCigarFilter.java | 2 +- .../sting/gatk/filters/BadMateFilter.java | 2 +- .../filters/CountingFilteringIterator.java | 4 ++-- .../gatk/filters/DuplicateReadFilter.java | 2 +- .../FailsVendorQualityCheckReadFilter.java | 2 +- .../sting/gatk/filters/FilterManager.java | 8 ++++---- .../gatk/filters/MalformedReadFilter.java | 7 +++---- .../gatk/filters/MappingQualityReadFilter.java | 2 +- .../gatk/filters/MaxReadLengthFilter.java | 2 +- .../gatk/filters/MissingReadGroupFilter.java | 2 +- .../filters/NoOriginalQualityScoresFilter.java | 2 +- .../filters/NotPrimaryAlignmentReadFilter.java | 2 +- .../sting/gatk/filters/Platform454Filter.java | 2 +- .../sting/gatk/filters/PlatformFilter.java | 2 +- .../sting/gatk/filters/PlatformUnitFilter.java | 2 +- ...RecordHeaderFilter.java => ReadFilter.java} | 7 ++++--- .../gatk/filters/ReadGroupBlackListFilter.java | 2 +- .../sting/gatk/filters/ReadStrandFilter.java | 2 +- .../sting/gatk/filters/SampleFilter.java | 2 +- .../gatk/filters/SingleReadGroupFilter.java | 2 +- .../sting/gatk/filters/UnmappedReadFilter.java | 2 +- .../filters/ZeroMappingQualityReadFilter.java | 2 +- .../gatk/GATKExtensionsGenerator.java | 3 ++- .../LocusIteratorByStateUnitTest.java | 3 ++- 31 files changed, 69 insertions(+), 63 deletions(-) rename java/src/org/broadinstitute/sting/gatk/filters/{SamRecordHeaderFilter.java => ReadFilter.java} (54%) diff --git a/java/src/org/broadinstitute/sting/gatk/CommandLineExecutable.java b/java/src/org/broadinstitute/sting/gatk/CommandLineExecutable.java index b001b62d8..5fcd3af6a 100644 --- a/java/src/org/broadinstitute/sting/gatk/CommandLineExecutable.java +++ b/java/src/org/broadinstitute/sting/gatk/CommandLineExecutable.java @@ -30,6 +30,7 @@ import org.broadinstitute.sting.gatk.arguments.GATKArgumentCollection; import org.broadinstitute.sting.commandline.CommandLineProgram; import org.broadinstitute.sting.commandline.ArgumentTypeDescriptor; import org.broadinstitute.sting.gatk.datasources.reads.SAMReaderID; +import org.broadinstitute.sting.gatk.filters.ReadFilter; import org.broadinstitute.sting.gatk.io.stubs.OutputStreamArgumentTypeDescriptor; import org.broadinstitute.sting.gatk.io.stubs.SAMFileReaderArgumentTypeDescriptor; import org.broadinstitute.sting.gatk.io.stubs.SAMFileWriterArgumentTypeDescriptor; @@ -98,7 +99,7 @@ public abstract class CommandLineExecutable extends CommandLineProgram { engine.setWalker(walker); walker.setToolkit(engine); - Collection filters = engine.createFilters(); + Collection filters = engine.createFilters(); engine.setFilters(filters); // load the arguments into the walker / filters. @@ -108,7 +109,7 @@ public abstract class CommandLineExecutable extends CommandLineProgram { loadArgumentsIntoObject(walker); argumentSources.add(walker); - for (SamRecordFilter filter: filters) { + for (ReadFilter filter: filters) { loadArgumentsIntoObject(filter); argumentSources.add(filter); } @@ -186,8 +187,8 @@ public abstract class CommandLineExecutable extends CommandLineProgram { walker.setToolkit(engine); argumentSources.add(walker.getClass()); - Collection filters = engine.createFilters(); - for(SamRecordFilter filter: filters) + Collection filters = engine.createFilters(); + for(ReadFilter filter: filters) argumentSources.add(filter.getClass()); Class[] argumentSourcesAsArray = new Class[argumentSources.size()]; diff --git a/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java b/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java index 199f4fff3..154250d01 100755 --- a/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java +++ b/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java @@ -49,8 +49,8 @@ import org.broadinstitute.sting.gatk.datasources.reads.ShardStrategyFactory; import org.broadinstitute.sting.gatk.datasources.reads.SAMDataSource; import org.broadinstitute.sting.gatk.executive.MicroScheduler; import org.broadinstitute.sting.gatk.filters.FilterManager; +import org.broadinstitute.sting.gatk.filters.ReadFilter; import org.broadinstitute.sting.gatk.filters.ReadGroupBlackListFilter; -import org.broadinstitute.sting.gatk.filters.SamRecordHeaderFilter; import org.broadinstitute.sting.gatk.io.OutputTracker; import org.broadinstitute.sting.gatk.io.stubs.Stub; import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrack; @@ -65,7 +65,6 @@ import org.broadinstitute.sting.utils.SequenceDictionaryUtils; import org.broadinstitute.sting.utils.baq.BAQ; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.UserException; -import org.broadinstitute.sting.utils.interval.IntervalMergingRule; import org.broadinstitute.sting.utils.interval.IntervalUtils; import java.io.File; @@ -139,7 +138,7 @@ public class GenomeAnalysisEngine { /** * Collection of the filters applied to the input data. */ - private Collection filters; + private Collection filters; /** * A currently hacky unique name for this GATK instance @@ -269,8 +268,8 @@ public class GenomeAnalysisEngine { * the caller must handle that directly. * @return A collection of available filters. */ - public Collection createFilters() { - Set filters = new HashSet(); + public Collection createFilters() { + Set filters = new HashSet(); filters.addAll(WalkerManager.getReadFilters(walker,this.getFilterManager())); if (this.getArguments().readGroupBlackList != null && this.getArguments().readGroupBlackList.size() > 0) filters.add(new ReadGroupBlackListFilter(this.getArguments().readGroupBlackList)); @@ -733,9 +732,8 @@ public class GenomeAnalysisEngine { sampleDataSource = new SampleDataSource(getSAMFileHeader(), argCollection.sampleFiles); - for (SamRecordFilter filter : filters) - if (filter instanceof SamRecordHeaderFilter) - ((SamRecordHeaderFilter)filter).setHeader(this.getSAMFileHeader()); + for (ReadFilter filter : filters) + filter.initialize(this); sampleDataSource = new SampleDataSource(getSAMFileHeader(), argCollection.sampleFiles); @@ -1020,7 +1018,7 @@ public class GenomeAnalysisEngine { * Gets the list of filters employed by this engine. * @return Collection of filters (actual instances) used by this engine. */ - public Collection getFilters() { + public Collection getFilters() { return this.filters; } @@ -1028,7 +1026,7 @@ public class GenomeAnalysisEngine { * Sets the list of filters employed by this engine. * @param filters Collection of filters (actual instances) used by this engine. */ - public void setFilters(Collection filters) { + public void setFilters(Collection filters) { this.filters = filters; } diff --git a/java/src/org/broadinstitute/sting/gatk/ReadProperties.java b/java/src/org/broadinstitute/sting/gatk/ReadProperties.java index 47af69fa7..1a361029a 100755 --- a/java/src/org/broadinstitute/sting/gatk/ReadProperties.java +++ b/java/src/org/broadinstitute/sting/gatk/ReadProperties.java @@ -6,6 +6,7 @@ import net.sf.samtools.SAMFileHeader; import net.sf.samtools.SAMFileReader; import org.broadinstitute.sting.gatk.arguments.ValidationExclusion; import org.broadinstitute.sting.gatk.datasources.reads.SAMReaderID; +import org.broadinstitute.sting.gatk.filters.ReadFilter; import org.broadinstitute.sting.utils.baq.BAQ; import java.util.Collection; @@ -33,7 +34,7 @@ public class ReadProperties { private Integer readBufferSize = null; private DownsamplingMethod downsamplingMethod = null; private ValidationExclusion exclusionList = null; - private Collection supplementalFilters = null; + private Collection supplementalFilters = null; private boolean includeReadsWithDeletionAtLoci = false; private boolean useOriginalBaseQualities = false; private boolean generateExtendedEvents = false; @@ -115,7 +116,7 @@ public class ReadProperties { return exclusionList; } - public Collection getSupplementalFilters() { + public Collection getSupplementalFilters() { return supplementalFilters; } @@ -172,7 +173,7 @@ public class ReadProperties { Integer readBufferSize, DownsamplingMethod downsamplingMethod, ValidationExclusion exclusionList, - Collection supplementalFilters, + Collection supplementalFilters, boolean includeReadsWithDeletionAtLoci, boolean generateExtendedEvents, BAQ.CalculationMode cmode, diff --git a/java/src/org/broadinstitute/sting/gatk/WalkerManager.java b/java/src/org/broadinstitute/sting/gatk/WalkerManager.java index 21ce28173..9553f651e 100755 --- a/java/src/org/broadinstitute/sting/gatk/WalkerManager.java +++ b/java/src/org/broadinstitute/sting/gatk/WalkerManager.java @@ -29,6 +29,7 @@ import net.sf.picard.filter.SamRecordFilter; import org.broadinstitute.sting.commandline.Hidden; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.filters.FilterManager; +import org.broadinstitute.sting.gatk.filters.ReadFilter; import org.broadinstitute.sting.gatk.walkers.*; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.classloader.PluginManager; @@ -322,9 +323,9 @@ public class WalkerManager extends PluginManager { * @param filterManager Manages the creation of filters. * @return A non-empty list of filters to apply to the reads. */ - public static List getReadFilters(Class walkerClass, FilterManager filterManager) { - List filters = new ArrayList(); - for(Class filterType: getReadFilterTypes(walkerClass)) + public static List getReadFilters(Class walkerClass, FilterManager filterManager) { + List filters = new ArrayList(); + for(Class filterType: getReadFilterTypes(walkerClass)) filters.add(filterManager.createFilterByType(filterType)); return filters; } @@ -335,7 +336,7 @@ public class WalkerManager extends PluginManager { * @param filterManager Manages the creation of filters. * @return A non-empty list of filters to apply to the reads. */ - public static List getReadFilters(Walker walker, FilterManager filterManager) { + public static List getReadFilters(Walker walker, FilterManager filterManager) { return getReadFilters(walker.getClass(), filterManager); } @@ -444,8 +445,8 @@ public class WalkerManager extends PluginManager { * @param walkerClass Class of the walker to inspect. * @return An array of types extending from SamRecordFilter. Will never be null. */ - public static Collection> getReadFilterTypes(Class walkerClass) { - List> filterTypes = new ArrayList>(); + public static Collection> getReadFilterTypes(Class walkerClass) { + List> filterTypes = new ArrayList>(); while(walkerClass != null) { if(walkerClass.isAnnotationPresent(ReadFilters.class)) { for ( Class c : walkerClass.getAnnotation(ReadFilters.class).value() ) { @@ -463,7 +464,7 @@ public class WalkerManager extends PluginManager { * @param walker The walker to inspect. * @return An array of types extending from SamRecordFilter. Will never be null. */ - public static Collection> getReadFilterTypes(Walker walker) { + public static Collection> getReadFilterTypes(Walker walker) { return getReadFilterTypes(walker.getClass()); } } diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/reads/SAMDataSource.java b/java/src/org/broadinstitute/sting/gatk/datasources/reads/SAMDataSource.java index ecfe15de7..7a4c632c7 100755 --- a/java/src/org/broadinstitute/sting/gatk/datasources/reads/SAMDataSource.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/reads/SAMDataSource.java @@ -33,6 +33,7 @@ import net.sf.picard.reference.IndexedFastaSequenceFile; import org.apache.log4j.Logger; import org.broadinstitute.sting.gatk.DownsamplingMethod; +import org.broadinstitute.sting.gatk.filters.ReadFilter; import org.broadinstitute.sting.gatk.iterators.*; import org.broadinstitute.sting.gatk.ReadProperties; import org.broadinstitute.sting.gatk.ReadMetrics; @@ -146,7 +147,7 @@ public class SAMDataSource { null, null, new ValidationExclusion(), - new ArrayList(), + new ArrayList(), false, false, false); @@ -163,7 +164,7 @@ public class SAMDataSource { Integer readBufferSize, DownsamplingMethod downsamplingMethod, ValidationExclusion exclusionList, - Collection supplementalFilters, + Collection supplementalFilters, boolean includeReadsWithDeletionAtLoci, boolean generateExtendedEvents, boolean enableLowMemorySharding) { @@ -209,7 +210,7 @@ public class SAMDataSource { Integer readBufferSize, DownsamplingMethod downsamplingMethod, ValidationExclusion exclusionList, - Collection supplementalFilters, + Collection supplementalFilters, boolean includeReadsWithDeletionAtLoci, boolean generateExtendedEvents, BAQ.CalculationMode cmode, @@ -632,7 +633,7 @@ public class SAMDataSource { StingSAMIterator wrappedIterator, Double downsamplingFraction, Boolean noValidationOfReadOrder, - Collection supplementalFilters, + Collection supplementalFilters, BAQ.CalculationMode cmode, BAQ.QualityMode qmode, IndexedFastaSequenceFile refReader, diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/reads/performance/DownsamplerBenchmark.java b/java/src/org/broadinstitute/sting/gatk/datasources/reads/performance/DownsamplerBenchmark.java index 931a04b2d..94b1c2025 100644 --- a/java/src/org/broadinstitute/sting/gatk/datasources/reads/performance/DownsamplerBenchmark.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/reads/performance/DownsamplerBenchmark.java @@ -36,6 +36,7 @@ import org.broadinstitute.sting.gatk.arguments.GATKArgumentCollection; import org.broadinstitute.sting.gatk.arguments.ValidationExclusion; import org.broadinstitute.sting.gatk.datasources.reads.SAMReaderID; import org.broadinstitute.sting.gatk.datasources.sample.SampleDataSource; +import org.broadinstitute.sting.gatk.filters.ReadFilter; import org.broadinstitute.sting.gatk.filters.UnmappedReadFilter; import org.broadinstitute.sting.gatk.iterators.LocusIteratorByState; import org.broadinstitute.sting.utils.GenomeLocParser; @@ -78,7 +79,7 @@ public class DownsamplerBenchmark extends ReadProcessingBenchmark { 0, downsampling.create(), new ValidationExclusion(Collections.singletonList(ValidationExclusion.TYPE.ALL)), - Collections.emptyList(), + Collections.emptyList(), false, false, BAQ.CalculationMode.OFF, diff --git a/java/src/org/broadinstitute/sting/gatk/datasources/reads/performance/GATKWalkerBenchmark.java b/java/src/org/broadinstitute/sting/gatk/datasources/reads/performance/GATKWalkerBenchmark.java index e9b75005c..1719f85e6 100644 --- a/java/src/org/broadinstitute/sting/gatk/datasources/reads/performance/GATKWalkerBenchmark.java +++ b/java/src/org/broadinstitute/sting/gatk/datasources/reads/performance/GATKWalkerBenchmark.java @@ -32,6 +32,7 @@ import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.arguments.GATKArgumentCollection; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.datasources.reads.SAMReaderID; +import org.broadinstitute.sting.gatk.filters.ReadFilter; import org.broadinstitute.sting.gatk.filters.UnmappedReadFilter; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.utils.RMDTriplet; @@ -88,7 +89,7 @@ public class GATKWalkerBenchmark extends ReadProcessingBenchmark { engine.setArguments(argCollection); // Bugs in the engine mean that this has to be set twice. engine.setSAMFileIDs(Collections.singletonList(new SAMReaderID(inputFile,new Tags()))); - engine.setFilters(Collections.singletonList(new UnmappedReadFilter())); + engine.setFilters(Collections.singletonList(new UnmappedReadFilter())); engine.setReferenceMetaDataFiles(Collections.emptyList()); // Create the walker diff --git a/java/src/org/broadinstitute/sting/gatk/filters/BadCigarFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/BadCigarFilter.java index d3e20909f..b8a3ee977 100755 --- a/java/src/org/broadinstitute/sting/gatk/filters/BadCigarFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/BadCigarFilter.java @@ -34,7 +34,7 @@ import net.sf.samtools.*; * @version 0.1 */ -public class BadCigarFilter implements SamRecordFilter { +public class BadCigarFilter extends ReadFilter { public boolean filterOut(final SAMRecord rec) { Cigar c = rec.getCigar(); diff --git a/java/src/org/broadinstitute/sting/gatk/filters/BadMateFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/BadMateFilter.java index 43dc6a6de..3b988c8fb 100755 --- a/java/src/org/broadinstitute/sting/gatk/filters/BadMateFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/BadMateFilter.java @@ -34,7 +34,7 @@ import net.sf.samtools.SAMRecord; * @version 0.1 */ -public class BadMateFilter implements SamRecordFilter { +public class BadMateFilter extends ReadFilter { public boolean filterOut(final SAMRecord rec) { return hasBadMate(rec); diff --git a/java/src/org/broadinstitute/sting/gatk/filters/CountingFilteringIterator.java b/java/src/org/broadinstitute/sting/gatk/filters/CountingFilteringIterator.java index aa5a75396..84390c173 100755 --- a/java/src/org/broadinstitute/sting/gatk/filters/CountingFilteringIterator.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/CountingFilteringIterator.java @@ -42,7 +42,7 @@ import org.broadinstitute.sting.gatk.ReadMetrics; public class CountingFilteringIterator implements CloseableIterator { private final ReadMetrics runtimeMetrics; private final Iterator iterator; - private final Collection filters; + private final Collection filters; private SAMRecord next = null; /** @@ -52,7 +52,7 @@ public class CountingFilteringIterator implements CloseableIterator { * @param iterator the backing iterator * @param filters the filter (which may be a FilterAggregator) */ - public CountingFilteringIterator(ReadMetrics metrics, Iterator iterator, Collection filters) { + public CountingFilteringIterator(ReadMetrics metrics, Iterator iterator, Collection filters) { this.runtimeMetrics = metrics; this.iterator = iterator; this.filters = filters; diff --git a/java/src/org/broadinstitute/sting/gatk/filters/DuplicateReadFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/DuplicateReadFilter.java index 241291cd4..fb3c38582 100755 --- a/java/src/org/broadinstitute/sting/gatk/filters/DuplicateReadFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/DuplicateReadFilter.java @@ -36,7 +36,7 @@ import net.sf.samtools.SAMRecord; * Filter out duplicate reads. */ -public class DuplicateReadFilter implements SamRecordFilter { +public class DuplicateReadFilter extends ReadFilter { public boolean filterOut( final SAMRecord read ) { return read.getDuplicateReadFlag(); } diff --git a/java/src/org/broadinstitute/sting/gatk/filters/FailsVendorQualityCheckReadFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/FailsVendorQualityCheckReadFilter.java index 872cba05c..b7806524a 100755 --- a/java/src/org/broadinstitute/sting/gatk/filters/FailsVendorQualityCheckReadFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/FailsVendorQualityCheckReadFilter.java @@ -35,7 +35,7 @@ import net.sf.samtools.SAMRecord; * Filter out FailsVendorQualityCheck reads. */ -public class FailsVendorQualityCheckReadFilter implements SamRecordFilter { +public class FailsVendorQualityCheckReadFilter extends ReadFilter { public boolean filterOut( final SAMRecord read ) { return read.getReadFailsVendorQualityCheckFlag(); } diff --git a/java/src/org/broadinstitute/sting/gatk/filters/FilterManager.java b/java/src/org/broadinstitute/sting/gatk/filters/FilterManager.java index 3bf11c0ac..cda08fb66 100644 --- a/java/src/org/broadinstitute/sting/gatk/filters/FilterManager.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/FilterManager.java @@ -39,9 +39,9 @@ import java.util.Collection; * @author mhanna * @version 0.1 */ -public class FilterManager extends PluginManager { +public class FilterManager extends PluginManager { public FilterManager() { - super(SamRecordFilter.class,"filter","Filter"); + super(ReadFilter.class,"filter","Filter"); } /** @@ -50,11 +50,11 @@ public class FilterManager extends PluginManager { * @param filterType The type of the filter * @return The filter */ - public SamRecordFilter createFilterByType(Class filterType) { + public ReadFilter createFilterByType(Class filterType) { return this.createByName(getName(filterType)); } - public Collection> getValues() { + public Collection> getValues() { return this.getPlugins(); } } diff --git a/java/src/org/broadinstitute/sting/gatk/filters/MalformedReadFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/MalformedReadFilter.java index d56b8b780..4deeb09ee 100644 --- a/java/src/org/broadinstitute/sting/gatk/filters/MalformedReadFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/MalformedReadFilter.java @@ -24,7 +24,6 @@ package org.broadinstitute.sting.gatk.filters; -import net.sf.picard.filter.SamRecordFilter; import net.sf.samtools.SAMRecord; import net.sf.samtools.SAMFileHeader; import net.sf.samtools.SAMSequenceRecord; @@ -36,12 +35,12 @@ import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; * @author mhanna * @version 0.1 */ -public class MalformedReadFilter implements SamRecordHeaderFilter { +public class MalformedReadFilter extends ReadFilter { private SAMFileHeader header; @Override - public void setHeader(SAMFileHeader header) { - this.header = header; + public void initialize(GenomeAnalysisEngine engine) { + this.header = engine.getSAMFileHeader(); } public boolean filterOut(SAMRecord read) { diff --git a/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityReadFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityReadFilter.java index d6ebcf487..bcd473b15 100755 --- a/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityReadFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/MappingQualityReadFilter.java @@ -36,7 +36,7 @@ import org.broadinstitute.sting.commandline.Argument; * @version 0.1 */ -public class MappingQualityReadFilter implements SamRecordFilter { +public class MappingQualityReadFilter extends ReadFilter { @Argument(fullName = "min_mapping_quality_score", shortName = "mmq", doc = "Minimum read mapping quality required to consider a read for calling", required = false) public int MIN_MAPPING_QUALTY_SCORE = 10; diff --git a/java/src/org/broadinstitute/sting/gatk/filters/MaxReadLengthFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/MaxReadLengthFilter.java index 48f12de40..8a2fd5af3 100644 --- a/java/src/org/broadinstitute/sting/gatk/filters/MaxReadLengthFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/MaxReadLengthFilter.java @@ -35,7 +35,7 @@ import org.broadinstitute.sting.commandline.Argument; * @author mhanna * @version 0.1 */ -public class MaxReadLengthFilter implements SamRecordFilter { +public class MaxReadLengthFilter extends ReadFilter { @Argument(fullName = "maxReadLength", shortName = "maxRead", doc="Discard reads with length greater than the specified value", required=true) private int maxReadLength; diff --git a/java/src/org/broadinstitute/sting/gatk/filters/MissingReadGroupFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/MissingReadGroupFilter.java index 88e09f989..d5d40ec38 100755 --- a/java/src/org/broadinstitute/sting/gatk/filters/MissingReadGroupFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/MissingReadGroupFilter.java @@ -34,7 +34,7 @@ import net.sf.samtools.SAMRecord; * @version 0.1 */ -public class MissingReadGroupFilter implements SamRecordFilter { +public class MissingReadGroupFilter extends ReadFilter { public boolean filterOut(SAMRecord rec) { return rec.getReadGroup() == null; } diff --git a/java/src/org/broadinstitute/sting/gatk/filters/NoOriginalQualityScoresFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/NoOriginalQualityScoresFilter.java index 67fd275c4..fc21538e8 100755 --- a/java/src/org/broadinstitute/sting/gatk/filters/NoOriginalQualityScoresFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/NoOriginalQualityScoresFilter.java @@ -35,7 +35,7 @@ import net.sf.samtools.SAMRecord; * * Filter out reads that don't have Original Quality scores inside. */ -public class NoOriginalQualityScoresFilter implements SamRecordFilter { +public class NoOriginalQualityScoresFilter extends ReadFilter { public boolean filterOut( final SAMRecord read ) { return (read.getAttribute("OQ") == null); } diff --git a/java/src/org/broadinstitute/sting/gatk/filters/NotPrimaryAlignmentReadFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/NotPrimaryAlignmentReadFilter.java index cbbd4a315..cfbba0383 100755 --- a/java/src/org/broadinstitute/sting/gatk/filters/NotPrimaryAlignmentReadFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/NotPrimaryAlignmentReadFilter.java @@ -35,7 +35,7 @@ import net.sf.samtools.SAMRecord; * Filter out duplicate reads. */ -public class NotPrimaryAlignmentReadFilter implements SamRecordFilter { +public class NotPrimaryAlignmentReadFilter extends ReadFilter { public boolean filterOut( final SAMRecord read ) { return read.getNotPrimaryAlignmentFlag(); } diff --git a/java/src/org/broadinstitute/sting/gatk/filters/Platform454Filter.java b/java/src/org/broadinstitute/sting/gatk/filters/Platform454Filter.java index f8a1c502a..dcddebd55 100755 --- a/java/src/org/broadinstitute/sting/gatk/filters/Platform454Filter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/Platform454Filter.java @@ -37,7 +37,7 @@ import org.broadinstitute.sting.utils.sam.ReadUtils; * @version 0.1 */ -public class Platform454Filter implements SamRecordFilter { +public class Platform454Filter extends ReadFilter { public boolean filterOut(SAMRecord rec) { return (ReadUtils.is454Read(rec)); } diff --git a/java/src/org/broadinstitute/sting/gatk/filters/PlatformFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/PlatformFilter.java index 710699ae2..691fd95f0 100755 --- a/java/src/org/broadinstitute/sting/gatk/filters/PlatformFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/PlatformFilter.java @@ -37,7 +37,7 @@ import org.broadinstitute.sting.commandline.Argument; * @author ebanks * @version 0.1 */ -public class PlatformFilter implements SamRecordFilter { +public class PlatformFilter extends ReadFilter { @Argument(fullName = "PLFilterName", shortName = "PLFilterName", doc="Discard reads with RG:PL attribute containing this strign", required=false) protected String[] PLFilterNames; diff --git a/java/src/org/broadinstitute/sting/gatk/filters/PlatformUnitFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/PlatformUnitFilter.java index 6d134794a..4ef88402d 100644 --- a/java/src/org/broadinstitute/sting/gatk/filters/PlatformUnitFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/PlatformUnitFilter.java @@ -16,7 +16,7 @@ import org.broadinstitute.sting.utils.exceptions.UserException; * Time: 2:54:23 PM * To change this template use File | Settings | File Templates. */ -public class PlatformUnitFilter implements SamRecordFilter { +public class PlatformUnitFilter extends ReadFilter { // a hack: use static in order to be able to fill it with the data from command line at runtime static private Set blackListedLanes = new HashSet(); diff --git a/java/src/org/broadinstitute/sting/gatk/filters/SamRecordHeaderFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/ReadFilter.java similarity index 54% rename from java/src/org/broadinstitute/sting/gatk/filters/SamRecordHeaderFilter.java rename to java/src/org/broadinstitute/sting/gatk/filters/ReadFilter.java index 548115b58..1d74ee20e 100644 --- a/java/src/org/broadinstitute/sting/gatk/filters/SamRecordHeaderFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/ReadFilter.java @@ -2,14 +2,15 @@ package org.broadinstitute.sting.gatk.filters; import net.sf.picard.filter.SamRecordFilter; import net.sf.samtools.SAMFileHeader; +import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; /** * A SamRecordFilter that also depends on the header. */ -public interface SamRecordHeaderFilter extends SamRecordFilter { +public abstract class ReadFilter implements SamRecordFilter { /** * Sets the header for use by this filter. - * @param header the header for use by this filter. + * @param engine the engine. */ - void setHeader(SAMFileHeader header); + public void initialize(GenomeAnalysisEngine engine) {} } diff --git a/java/src/org/broadinstitute/sting/gatk/filters/ReadGroupBlackListFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/ReadGroupBlackListFilter.java index 965fca0dd..69ebc8b04 100644 --- a/java/src/org/broadinstitute/sting/gatk/filters/ReadGroupBlackListFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/ReadGroupBlackListFilter.java @@ -42,7 +42,7 @@ import org.broadinstitute.sting.utils.text.XReadLines; * PU:1000G-mpimg-080821-1_1 * would filter out a read with the read group PU:1000G-mpimg-080821-1_1 */ -public class ReadGroupBlackListFilter implements SamRecordFilter { +public class ReadGroupBlackListFilter extends ReadFilter { private Set>> filterEntries; public ReadGroupBlackListFilter(List blackLists) { diff --git a/java/src/org/broadinstitute/sting/gatk/filters/ReadStrandFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/ReadStrandFilter.java index 174a0d94b..1b2a77f45 100644 --- a/java/src/org/broadinstitute/sting/gatk/filters/ReadStrandFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/ReadStrandFilter.java @@ -35,7 +35,7 @@ import org.broadinstitute.sting.commandline.Argument; * @author chartl * @version 0.1 */ -public class ReadStrandFilter implements SamRecordFilter { +public class ReadStrandFilter extends ReadFilter { @Argument(fullName = "filterPositive", shortName = "fp", doc="Discard reads on the forward strand",required=false) boolean filterForward = false; diff --git a/java/src/org/broadinstitute/sting/gatk/filters/SampleFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/SampleFilter.java index 7019fed13..682b22b1f 100755 --- a/java/src/org/broadinstitute/sting/gatk/filters/SampleFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/SampleFilter.java @@ -32,7 +32,7 @@ import org.broadinstitute.sting.commandline.Argument; import java.util.Set; -public class SampleFilter implements SamRecordFilter { +public class SampleFilter extends ReadFilter { @Argument(fullName = "sample_to_keep", shortName = "goodSM", doc="The name of the sample(s) to keep, filtering out all others", required=true) private Set SAMPLES_TO_KEEP = null; diff --git a/java/src/org/broadinstitute/sting/gatk/filters/SingleReadGroupFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/SingleReadGroupFilter.java index 639ef1486..05b472036 100755 --- a/java/src/org/broadinstitute/sting/gatk/filters/SingleReadGroupFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/SingleReadGroupFilter.java @@ -38,7 +38,7 @@ import org.broadinstitute.sting.commandline.Argument; * Only use reads from the specified read group. */ -public class SingleReadGroupFilter implements SamRecordFilter { +public class SingleReadGroupFilter extends ReadFilter { @Argument(fullName = "read_group_to_keep", shortName = "goodRG", doc="The name of the read group to keep, filtering out all others", required=true) private String READ_GROUP_TO_KEEP = null; diff --git a/java/src/org/broadinstitute/sting/gatk/filters/UnmappedReadFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/UnmappedReadFilter.java index fe6dfbb9e..ac4f4853a 100755 --- a/java/src/org/broadinstitute/sting/gatk/filters/UnmappedReadFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/UnmappedReadFilter.java @@ -35,7 +35,7 @@ import net.sf.samtools.SAMRecord; * Filter out duplicate reads. */ -public class UnmappedReadFilter implements SamRecordFilter { +public class UnmappedReadFilter extends ReadFilter { public boolean filterOut( final SAMRecord read ) { return read.getReadUnmappedFlag() || read.getAlignmentStart() == SAMRecord.NO_ALIGNMENT_START; } diff --git a/java/src/org/broadinstitute/sting/gatk/filters/ZeroMappingQualityReadFilter.java b/java/src/org/broadinstitute/sting/gatk/filters/ZeroMappingQualityReadFilter.java index 311d83cd0..7e6fc5e82 100644 --- a/java/src/org/broadinstitute/sting/gatk/filters/ZeroMappingQualityReadFilter.java +++ b/java/src/org/broadinstitute/sting/gatk/filters/ZeroMappingQualityReadFilter.java @@ -34,7 +34,7 @@ import net.sf.samtools.SAMRecord; * @version 0.1 */ -public class ZeroMappingQualityReadFilter implements SamRecordFilter { +public class ZeroMappingQualityReadFilter extends ReadFilter { public boolean filterOut(SAMRecord rec) { return (rec.getMappingQuality() == 0); } diff --git a/java/src/org/broadinstitute/sting/queue/extensions/gatk/GATKExtensionsGenerator.java b/java/src/org/broadinstitute/sting/queue/extensions/gatk/GATKExtensionsGenerator.java index 62e0f257a..6119e20a6 100644 --- a/java/src/org/broadinstitute/sting/queue/extensions/gatk/GATKExtensionsGenerator.java +++ b/java/src/org/broadinstitute/sting/queue/extensions/gatk/GATKExtensionsGenerator.java @@ -34,6 +34,7 @@ import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.WalkerManager; import org.broadinstitute.sting.gatk.arguments.ValidationExclusion; import org.broadinstitute.sting.gatk.filters.FilterManager; +import org.broadinstitute.sting.gatk.filters.ReadFilter; import org.broadinstitute.sting.gatk.io.stubs.VCFWriterArgumentTypeDescriptor; import org.broadinstitute.sting.gatk.io.stubs.OutputStreamArgumentTypeDescriptor; import org.broadinstitute.sting.gatk.io.stubs.SAMFileReaderArgumentTypeDescriptor; @@ -169,7 +170,7 @@ public class GATKExtensionsGenerator extends CommandLineProgram { } } - for (Class filter: filterManager.getValues()) { + for (Class filter: filterManager.getValues()) { String filterName = filterManager.getName(filter); writeFilter(filterName, ArgumentDefinitionField.getArgumentFields(new ParsingEngine(null),filter), dependents); } diff --git a/java/test/org/broadinstitute/sting/gatk/iterators/LocusIteratorByStateUnitTest.java b/java/test/org/broadinstitute/sting/gatk/iterators/LocusIteratorByStateUnitTest.java index 7a03b76db..32d3675b7 100644 --- a/java/test/org/broadinstitute/sting/gatk/iterators/LocusIteratorByStateUnitTest.java +++ b/java/test/org/broadinstitute/sting/gatk/iterators/LocusIteratorByStateUnitTest.java @@ -5,6 +5,7 @@ import net.sf.samtools.SAMFileHeader; import net.sf.samtools.SAMFileReader; import net.sf.samtools.SAMRecord; import net.sf.samtools.util.CloseableIterator; +import org.broadinstitute.sting.gatk.filters.ReadFilter; import org.broadinstitute.sting.utils.Utils; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import org.testng.Assert; @@ -302,7 +303,7 @@ public class LocusIteratorByStateUnitTest extends BaseTest { null, null, new ValidationExclusion(), - new ArrayList(), + Collections.emptyList(), false, false, BAQ.CalculationMode.OFF,