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
This commit is contained in:
hanna 2011-05-04 19:29:08 +00:00
parent b66c6dced1
commit 5c6965575e
31 changed files with 69 additions and 63 deletions

View File

@ -30,6 +30,7 @@ import org.broadinstitute.sting.gatk.arguments.GATKArgumentCollection;
import org.broadinstitute.sting.commandline.CommandLineProgram; import org.broadinstitute.sting.commandline.CommandLineProgram;
import org.broadinstitute.sting.commandline.ArgumentTypeDescriptor; import org.broadinstitute.sting.commandline.ArgumentTypeDescriptor;
import org.broadinstitute.sting.gatk.datasources.reads.SAMReaderID; 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.OutputStreamArgumentTypeDescriptor;
import org.broadinstitute.sting.gatk.io.stubs.SAMFileReaderArgumentTypeDescriptor; import org.broadinstitute.sting.gatk.io.stubs.SAMFileReaderArgumentTypeDescriptor;
import org.broadinstitute.sting.gatk.io.stubs.SAMFileWriterArgumentTypeDescriptor; import org.broadinstitute.sting.gatk.io.stubs.SAMFileWriterArgumentTypeDescriptor;
@ -98,7 +99,7 @@ public abstract class CommandLineExecutable extends CommandLineProgram {
engine.setWalker(walker); engine.setWalker(walker);
walker.setToolkit(engine); walker.setToolkit(engine);
Collection<SamRecordFilter> filters = engine.createFilters(); Collection<ReadFilter> filters = engine.createFilters();
engine.setFilters(filters); engine.setFilters(filters);
// load the arguments into the walker / filters. // load the arguments into the walker / filters.
@ -108,7 +109,7 @@ public abstract class CommandLineExecutable extends CommandLineProgram {
loadArgumentsIntoObject(walker); loadArgumentsIntoObject(walker);
argumentSources.add(walker); argumentSources.add(walker);
for (SamRecordFilter filter: filters) { for (ReadFilter filter: filters) {
loadArgumentsIntoObject(filter); loadArgumentsIntoObject(filter);
argumentSources.add(filter); argumentSources.add(filter);
} }
@ -186,8 +187,8 @@ public abstract class CommandLineExecutable extends CommandLineProgram {
walker.setToolkit(engine); walker.setToolkit(engine);
argumentSources.add(walker.getClass()); argumentSources.add(walker.getClass());
Collection<SamRecordFilter> filters = engine.createFilters(); Collection<ReadFilter> filters = engine.createFilters();
for(SamRecordFilter filter: filters) for(ReadFilter filter: filters)
argumentSources.add(filter.getClass()); argumentSources.add(filter.getClass());
Class[] argumentSourcesAsArray = new Class[argumentSources.size()]; Class[] argumentSourcesAsArray = new Class[argumentSources.size()];

View File

@ -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.datasources.reads.SAMDataSource;
import org.broadinstitute.sting.gatk.executive.MicroScheduler; import org.broadinstitute.sting.gatk.executive.MicroScheduler;
import org.broadinstitute.sting.gatk.filters.FilterManager; 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.ReadGroupBlackListFilter;
import org.broadinstitute.sting.gatk.filters.SamRecordHeaderFilter;
import org.broadinstitute.sting.gatk.io.OutputTracker; import org.broadinstitute.sting.gatk.io.OutputTracker;
import org.broadinstitute.sting.gatk.io.stubs.Stub; import org.broadinstitute.sting.gatk.io.stubs.Stub;
import org.broadinstitute.sting.gatk.refdata.tracks.RMDTrack; 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.baq.BAQ;
import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException;
import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.exceptions.UserException;
import org.broadinstitute.sting.utils.interval.IntervalMergingRule;
import org.broadinstitute.sting.utils.interval.IntervalUtils; import org.broadinstitute.sting.utils.interval.IntervalUtils;
import java.io.File; import java.io.File;
@ -139,7 +138,7 @@ public class GenomeAnalysisEngine {
/** /**
* Collection of the filters applied to the input data. * Collection of the filters applied to the input data.
*/ */
private Collection<SamRecordFilter> filters; private Collection<ReadFilter> filters;
/** /**
* A currently hacky unique name for this GATK instance * A currently hacky unique name for this GATK instance
@ -269,8 +268,8 @@ public class GenomeAnalysisEngine {
* the caller must handle that directly. * the caller must handle that directly.
* @return A collection of available filters. * @return A collection of available filters.
*/ */
public Collection<SamRecordFilter> createFilters() { public Collection<ReadFilter> createFilters() {
Set<SamRecordFilter> filters = new HashSet<SamRecordFilter>(); Set<ReadFilter> filters = new HashSet<ReadFilter>();
filters.addAll(WalkerManager.getReadFilters(walker,this.getFilterManager())); filters.addAll(WalkerManager.getReadFilters(walker,this.getFilterManager()));
if (this.getArguments().readGroupBlackList != null && this.getArguments().readGroupBlackList.size() > 0) if (this.getArguments().readGroupBlackList != null && this.getArguments().readGroupBlackList.size() > 0)
filters.add(new ReadGroupBlackListFilter(this.getArguments().readGroupBlackList)); filters.add(new ReadGroupBlackListFilter(this.getArguments().readGroupBlackList));
@ -733,9 +732,8 @@ public class GenomeAnalysisEngine {
sampleDataSource = new SampleDataSource(getSAMFileHeader(), argCollection.sampleFiles); sampleDataSource = new SampleDataSource(getSAMFileHeader(), argCollection.sampleFiles);
for (SamRecordFilter filter : filters) for (ReadFilter filter : filters)
if (filter instanceof SamRecordHeaderFilter) filter.initialize(this);
((SamRecordHeaderFilter)filter).setHeader(this.getSAMFileHeader());
sampleDataSource = new SampleDataSource(getSAMFileHeader(), argCollection.sampleFiles); sampleDataSource = new SampleDataSource(getSAMFileHeader(), argCollection.sampleFiles);
@ -1020,7 +1018,7 @@ public class GenomeAnalysisEngine {
* Gets the list of filters employed by this engine. * Gets the list of filters employed by this engine.
* @return Collection of filters (actual instances) used by this engine. * @return Collection of filters (actual instances) used by this engine.
*/ */
public Collection<SamRecordFilter> getFilters() { public Collection<ReadFilter> getFilters() {
return this.filters; return this.filters;
} }
@ -1028,7 +1026,7 @@ public class GenomeAnalysisEngine {
* Sets the list of filters employed by this engine. * Sets the list of filters employed by this engine.
* @param filters Collection of filters (actual instances) used by this engine. * @param filters Collection of filters (actual instances) used by this engine.
*/ */
public void setFilters(Collection<SamRecordFilter> filters) { public void setFilters(Collection<ReadFilter> filters) {
this.filters = filters; this.filters = filters;
} }

View File

@ -6,6 +6,7 @@ import net.sf.samtools.SAMFileHeader;
import net.sf.samtools.SAMFileReader; import net.sf.samtools.SAMFileReader;
import org.broadinstitute.sting.gatk.arguments.ValidationExclusion; import org.broadinstitute.sting.gatk.arguments.ValidationExclusion;
import org.broadinstitute.sting.gatk.datasources.reads.SAMReaderID; import org.broadinstitute.sting.gatk.datasources.reads.SAMReaderID;
import org.broadinstitute.sting.gatk.filters.ReadFilter;
import org.broadinstitute.sting.utils.baq.BAQ; import org.broadinstitute.sting.utils.baq.BAQ;
import java.util.Collection; import java.util.Collection;
@ -33,7 +34,7 @@ public class ReadProperties {
private Integer readBufferSize = null; private Integer readBufferSize = null;
private DownsamplingMethod downsamplingMethod = null; private DownsamplingMethod downsamplingMethod = null;
private ValidationExclusion exclusionList = null; private ValidationExclusion exclusionList = null;
private Collection<SamRecordFilter> supplementalFilters = null; private Collection<ReadFilter> supplementalFilters = null;
private boolean includeReadsWithDeletionAtLoci = false; private boolean includeReadsWithDeletionAtLoci = false;
private boolean useOriginalBaseQualities = false; private boolean useOriginalBaseQualities = false;
private boolean generateExtendedEvents = false; private boolean generateExtendedEvents = false;
@ -115,7 +116,7 @@ public class ReadProperties {
return exclusionList; return exclusionList;
} }
public Collection<SamRecordFilter> getSupplementalFilters() { public Collection<ReadFilter> getSupplementalFilters() {
return supplementalFilters; return supplementalFilters;
} }
@ -172,7 +173,7 @@ public class ReadProperties {
Integer readBufferSize, Integer readBufferSize,
DownsamplingMethod downsamplingMethod, DownsamplingMethod downsamplingMethod,
ValidationExclusion exclusionList, ValidationExclusion exclusionList,
Collection<SamRecordFilter> supplementalFilters, Collection<ReadFilter> supplementalFilters,
boolean includeReadsWithDeletionAtLoci, boolean includeReadsWithDeletionAtLoci,
boolean generateExtendedEvents, boolean generateExtendedEvents,
BAQ.CalculationMode cmode, BAQ.CalculationMode cmode,

View File

@ -29,6 +29,7 @@ import net.sf.picard.filter.SamRecordFilter;
import org.broadinstitute.sting.commandline.Hidden; import org.broadinstitute.sting.commandline.Hidden;
import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource;
import org.broadinstitute.sting.gatk.filters.FilterManager; import org.broadinstitute.sting.gatk.filters.FilterManager;
import org.broadinstitute.sting.gatk.filters.ReadFilter;
import org.broadinstitute.sting.gatk.walkers.*; import org.broadinstitute.sting.gatk.walkers.*;
import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.exceptions.ReviewedStingException;
import org.broadinstitute.sting.utils.classloader.PluginManager; import org.broadinstitute.sting.utils.classloader.PluginManager;
@ -322,9 +323,9 @@ public class WalkerManager extends PluginManager<Walker> {
* @param filterManager Manages the creation of filters. * @param filterManager Manages the creation of filters.
* @return A non-empty list of filters to apply to the reads. * @return A non-empty list of filters to apply to the reads.
*/ */
public static List<SamRecordFilter> getReadFilters(Class<? extends Walker> walkerClass, FilterManager filterManager) { public static List<ReadFilter> getReadFilters(Class<? extends Walker> walkerClass, FilterManager filterManager) {
List<SamRecordFilter> filters = new ArrayList<SamRecordFilter>(); List<ReadFilter> filters = new ArrayList<ReadFilter>();
for(Class<? extends SamRecordFilter> filterType: getReadFilterTypes(walkerClass)) for(Class<? extends ReadFilter> filterType: getReadFilterTypes(walkerClass))
filters.add(filterManager.createFilterByType(filterType)); filters.add(filterManager.createFilterByType(filterType));
return filters; return filters;
} }
@ -335,7 +336,7 @@ public class WalkerManager extends PluginManager<Walker> {
* @param filterManager Manages the creation of filters. * @param filterManager Manages the creation of filters.
* @return A non-empty list of filters to apply to the reads. * @return A non-empty list of filters to apply to the reads.
*/ */
public static List<SamRecordFilter> getReadFilters(Walker walker, FilterManager filterManager) { public static List<ReadFilter> getReadFilters(Walker walker, FilterManager filterManager) {
return getReadFilters(walker.getClass(), filterManager); return getReadFilters(walker.getClass(), filterManager);
} }
@ -444,8 +445,8 @@ public class WalkerManager extends PluginManager<Walker> {
* @param walkerClass Class of the walker to inspect. * @param walkerClass Class of the walker to inspect.
* @return An array of types extending from SamRecordFilter. Will never be null. * @return An array of types extending from SamRecordFilter. Will never be null.
*/ */
public static Collection<Class<? extends SamRecordFilter>> getReadFilterTypes(Class<?> walkerClass) { public static Collection<Class<? extends ReadFilter>> getReadFilterTypes(Class<?> walkerClass) {
List<Class<? extends SamRecordFilter>> filterTypes = new ArrayList<Class<? extends SamRecordFilter>>(); List<Class<? extends ReadFilter>> filterTypes = new ArrayList<Class<? extends ReadFilter>>();
while(walkerClass != null) { while(walkerClass != null) {
if(walkerClass.isAnnotationPresent(ReadFilters.class)) { if(walkerClass.isAnnotationPresent(ReadFilters.class)) {
for ( Class c : walkerClass.getAnnotation(ReadFilters.class).value() ) { for ( Class c : walkerClass.getAnnotation(ReadFilters.class).value() ) {
@ -463,7 +464,7 @@ public class WalkerManager extends PluginManager<Walker> {
* @param walker The walker to inspect. * @param walker The walker to inspect.
* @return An array of types extending from SamRecordFilter. Will never be null. * @return An array of types extending from SamRecordFilter. Will never be null.
*/ */
public static Collection<Class<? extends SamRecordFilter>> getReadFilterTypes(Walker walker) { public static Collection<Class<? extends ReadFilter>> getReadFilterTypes(Walker walker) {
return getReadFilterTypes(walker.getClass()); return getReadFilterTypes(walker.getClass());
} }
} }

View File

@ -33,6 +33,7 @@ import net.sf.picard.reference.IndexedFastaSequenceFile;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.broadinstitute.sting.gatk.DownsamplingMethod; import org.broadinstitute.sting.gatk.DownsamplingMethod;
import org.broadinstitute.sting.gatk.filters.ReadFilter;
import org.broadinstitute.sting.gatk.iterators.*; import org.broadinstitute.sting.gatk.iterators.*;
import org.broadinstitute.sting.gatk.ReadProperties; import org.broadinstitute.sting.gatk.ReadProperties;
import org.broadinstitute.sting.gatk.ReadMetrics; import org.broadinstitute.sting.gatk.ReadMetrics;
@ -146,7 +147,7 @@ public class SAMDataSource {
null, null,
null, null,
new ValidationExclusion(), new ValidationExclusion(),
new ArrayList<SamRecordFilter>(), new ArrayList<ReadFilter>(),
false, false,
false, false,
false); false);
@ -163,7 +164,7 @@ public class SAMDataSource {
Integer readBufferSize, Integer readBufferSize,
DownsamplingMethod downsamplingMethod, DownsamplingMethod downsamplingMethod,
ValidationExclusion exclusionList, ValidationExclusion exclusionList,
Collection<SamRecordFilter> supplementalFilters, Collection<ReadFilter> supplementalFilters,
boolean includeReadsWithDeletionAtLoci, boolean includeReadsWithDeletionAtLoci,
boolean generateExtendedEvents, boolean generateExtendedEvents,
boolean enableLowMemorySharding) { boolean enableLowMemorySharding) {
@ -209,7 +210,7 @@ public class SAMDataSource {
Integer readBufferSize, Integer readBufferSize,
DownsamplingMethod downsamplingMethod, DownsamplingMethod downsamplingMethod,
ValidationExclusion exclusionList, ValidationExclusion exclusionList,
Collection<SamRecordFilter> supplementalFilters, Collection<ReadFilter> supplementalFilters,
boolean includeReadsWithDeletionAtLoci, boolean includeReadsWithDeletionAtLoci,
boolean generateExtendedEvents, boolean generateExtendedEvents,
BAQ.CalculationMode cmode, BAQ.CalculationMode cmode,
@ -632,7 +633,7 @@ public class SAMDataSource {
StingSAMIterator wrappedIterator, StingSAMIterator wrappedIterator,
Double downsamplingFraction, Double downsamplingFraction,
Boolean noValidationOfReadOrder, Boolean noValidationOfReadOrder,
Collection<SamRecordFilter> supplementalFilters, Collection<ReadFilter> supplementalFilters,
BAQ.CalculationMode cmode, BAQ.CalculationMode cmode,
BAQ.QualityMode qmode, BAQ.QualityMode qmode,
IndexedFastaSequenceFile refReader, IndexedFastaSequenceFile refReader,

View File

@ -36,6 +36,7 @@ import org.broadinstitute.sting.gatk.arguments.GATKArgumentCollection;
import org.broadinstitute.sting.gatk.arguments.ValidationExclusion; import org.broadinstitute.sting.gatk.arguments.ValidationExclusion;
import org.broadinstitute.sting.gatk.datasources.reads.SAMReaderID; import org.broadinstitute.sting.gatk.datasources.reads.SAMReaderID;
import org.broadinstitute.sting.gatk.datasources.sample.SampleDataSource; 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.filters.UnmappedReadFilter;
import org.broadinstitute.sting.gatk.iterators.LocusIteratorByState; import org.broadinstitute.sting.gatk.iterators.LocusIteratorByState;
import org.broadinstitute.sting.utils.GenomeLocParser; import org.broadinstitute.sting.utils.GenomeLocParser;
@ -78,7 +79,7 @@ public class DownsamplerBenchmark extends ReadProcessingBenchmark {
0, 0,
downsampling.create(), downsampling.create(),
new ValidationExclusion(Collections.singletonList(ValidationExclusion.TYPE.ALL)), new ValidationExclusion(Collections.singletonList(ValidationExclusion.TYPE.ALL)),
Collections.<SamRecordFilter>emptyList(), Collections.<ReadFilter>emptyList(),
false, false,
false, false,
BAQ.CalculationMode.OFF, BAQ.CalculationMode.OFF,

View File

@ -32,6 +32,7 @@ import org.broadinstitute.sting.gatk.GenomeAnalysisEngine;
import org.broadinstitute.sting.gatk.arguments.GATKArgumentCollection; import org.broadinstitute.sting.gatk.arguments.GATKArgumentCollection;
import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
import org.broadinstitute.sting.gatk.datasources.reads.SAMReaderID; 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.filters.UnmappedReadFilter;
import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker;
import org.broadinstitute.sting.gatk.refdata.utils.RMDTriplet; import org.broadinstitute.sting.gatk.refdata.utils.RMDTriplet;
@ -88,7 +89,7 @@ public class GATKWalkerBenchmark extends ReadProcessingBenchmark {
engine.setArguments(argCollection); engine.setArguments(argCollection);
// Bugs in the engine mean that this has to be set twice. // Bugs in the engine mean that this has to be set twice.
engine.setSAMFileIDs(Collections.singletonList(new SAMReaderID(inputFile,new Tags()))); engine.setSAMFileIDs(Collections.singletonList(new SAMReaderID(inputFile,new Tags())));
engine.setFilters(Collections.<SamRecordFilter>singletonList(new UnmappedReadFilter())); engine.setFilters(Collections.<ReadFilter>singletonList(new UnmappedReadFilter()));
engine.setReferenceMetaDataFiles(Collections.<RMDTriplet>emptyList()); engine.setReferenceMetaDataFiles(Collections.<RMDTriplet>emptyList());
// Create the walker // Create the walker

View File

@ -34,7 +34,7 @@ import net.sf.samtools.*;
* @version 0.1 * @version 0.1
*/ */
public class BadCigarFilter implements SamRecordFilter { public class BadCigarFilter extends ReadFilter {
public boolean filterOut(final SAMRecord rec) { public boolean filterOut(final SAMRecord rec) {
Cigar c = rec.getCigar(); Cigar c = rec.getCigar();

View File

@ -34,7 +34,7 @@ import net.sf.samtools.SAMRecord;
* @version 0.1 * @version 0.1
*/ */
public class BadMateFilter implements SamRecordFilter { public class BadMateFilter extends ReadFilter {
public boolean filterOut(final SAMRecord rec) { public boolean filterOut(final SAMRecord rec) {
return hasBadMate(rec); return hasBadMate(rec);

View File

@ -42,7 +42,7 @@ import org.broadinstitute.sting.gatk.ReadMetrics;
public class CountingFilteringIterator implements CloseableIterator<SAMRecord> { public class CountingFilteringIterator implements CloseableIterator<SAMRecord> {
private final ReadMetrics runtimeMetrics; private final ReadMetrics runtimeMetrics;
private final Iterator<SAMRecord> iterator; private final Iterator<SAMRecord> iterator;
private final Collection<SamRecordFilter> filters; private final Collection<ReadFilter> filters;
private SAMRecord next = null; private SAMRecord next = null;
/** /**
@ -52,7 +52,7 @@ public class CountingFilteringIterator implements CloseableIterator<SAMRecord> {
* @param iterator the backing iterator * @param iterator the backing iterator
* @param filters the filter (which may be a FilterAggregator) * @param filters the filter (which may be a FilterAggregator)
*/ */
public CountingFilteringIterator(ReadMetrics metrics, Iterator<SAMRecord> iterator, Collection<SamRecordFilter> filters) { public CountingFilteringIterator(ReadMetrics metrics, Iterator<SAMRecord> iterator, Collection<ReadFilter> filters) {
this.runtimeMetrics = metrics; this.runtimeMetrics = metrics;
this.iterator = iterator; this.iterator = iterator;
this.filters = filters; this.filters = filters;

View File

@ -36,7 +36,7 @@ import net.sf.samtools.SAMRecord;
* Filter out duplicate reads. * Filter out duplicate reads.
*/ */
public class DuplicateReadFilter implements SamRecordFilter { public class DuplicateReadFilter extends ReadFilter {
public boolean filterOut( final SAMRecord read ) { public boolean filterOut( final SAMRecord read ) {
return read.getDuplicateReadFlag(); return read.getDuplicateReadFlag();
} }

View File

@ -35,7 +35,7 @@ import net.sf.samtools.SAMRecord;
* Filter out FailsVendorQualityCheck reads. * Filter out FailsVendorQualityCheck reads.
*/ */
public class FailsVendorQualityCheckReadFilter implements SamRecordFilter { public class FailsVendorQualityCheckReadFilter extends ReadFilter {
public boolean filterOut( final SAMRecord read ) { public boolean filterOut( final SAMRecord read ) {
return read.getReadFailsVendorQualityCheckFlag(); return read.getReadFailsVendorQualityCheckFlag();
} }

View File

@ -39,9 +39,9 @@ import java.util.Collection;
* @author mhanna * @author mhanna
* @version 0.1 * @version 0.1
*/ */
public class FilterManager extends PluginManager<SamRecordFilter> { public class FilterManager extends PluginManager<ReadFilter> {
public FilterManager() { public FilterManager() {
super(SamRecordFilter.class,"filter","Filter"); super(ReadFilter.class,"filter","Filter");
} }
/** /**
@ -50,11 +50,11 @@ public class FilterManager extends PluginManager<SamRecordFilter> {
* @param filterType The type of the filter * @param filterType The type of the filter
* @return The filter * @return The filter
*/ */
public SamRecordFilter createFilterByType(Class<? extends SamRecordFilter> filterType) { public ReadFilter createFilterByType(Class<? extends ReadFilter> filterType) {
return this.createByName(getName(filterType)); return this.createByName(getName(filterType));
} }
public Collection<Class<? extends SamRecordFilter>> getValues() { public Collection<Class<? extends ReadFilter>> getValues() {
return this.getPlugins(); return this.getPlugins();
} }
} }

View File

@ -24,7 +24,6 @@
package org.broadinstitute.sting.gatk.filters; package org.broadinstitute.sting.gatk.filters;
import net.sf.picard.filter.SamRecordFilter;
import net.sf.samtools.SAMRecord; import net.sf.samtools.SAMRecord;
import net.sf.samtools.SAMFileHeader; import net.sf.samtools.SAMFileHeader;
import net.sf.samtools.SAMSequenceRecord; import net.sf.samtools.SAMSequenceRecord;
@ -36,12 +35,12 @@ import org.broadinstitute.sting.gatk.GenomeAnalysisEngine;
* @author mhanna * @author mhanna
* @version 0.1 * @version 0.1
*/ */
public class MalformedReadFilter implements SamRecordHeaderFilter { public class MalformedReadFilter extends ReadFilter {
private SAMFileHeader header; private SAMFileHeader header;
@Override @Override
public void setHeader(SAMFileHeader header) { public void initialize(GenomeAnalysisEngine engine) {
this.header = header; this.header = engine.getSAMFileHeader();
} }
public boolean filterOut(SAMRecord read) { public boolean filterOut(SAMRecord read) {

View File

@ -36,7 +36,7 @@ import org.broadinstitute.sting.commandline.Argument;
* @version 0.1 * @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) @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; public int MIN_MAPPING_QUALTY_SCORE = 10;

View File

@ -35,7 +35,7 @@ import org.broadinstitute.sting.commandline.Argument;
* @author mhanna * @author mhanna
* @version 0.1 * @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) @Argument(fullName = "maxReadLength", shortName = "maxRead", doc="Discard reads with length greater than the specified value", required=true)
private int maxReadLength; private int maxReadLength;

View File

@ -34,7 +34,7 @@ import net.sf.samtools.SAMRecord;
* @version 0.1 * @version 0.1
*/ */
public class MissingReadGroupFilter implements SamRecordFilter { public class MissingReadGroupFilter extends ReadFilter {
public boolean filterOut(SAMRecord rec) { public boolean filterOut(SAMRecord rec) {
return rec.getReadGroup() == null; return rec.getReadGroup() == null;
} }

View File

@ -35,7 +35,7 @@ import net.sf.samtools.SAMRecord;
* *
* Filter out reads that don't have Original Quality scores inside. * 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 ) { public boolean filterOut( final SAMRecord read ) {
return (read.getAttribute("OQ") == null); return (read.getAttribute("OQ") == null);
} }

View File

@ -35,7 +35,7 @@ import net.sf.samtools.SAMRecord;
* Filter out duplicate reads. * Filter out duplicate reads.
*/ */
public class NotPrimaryAlignmentReadFilter implements SamRecordFilter { public class NotPrimaryAlignmentReadFilter extends ReadFilter {
public boolean filterOut( final SAMRecord read ) { public boolean filterOut( final SAMRecord read ) {
return read.getNotPrimaryAlignmentFlag(); return read.getNotPrimaryAlignmentFlag();
} }

View File

@ -37,7 +37,7 @@ import org.broadinstitute.sting.utils.sam.ReadUtils;
* @version 0.1 * @version 0.1
*/ */
public class Platform454Filter implements SamRecordFilter { public class Platform454Filter extends ReadFilter {
public boolean filterOut(SAMRecord rec) { public boolean filterOut(SAMRecord rec) {
return (ReadUtils.is454Read(rec)); return (ReadUtils.is454Read(rec));
} }

View File

@ -37,7 +37,7 @@ import org.broadinstitute.sting.commandline.Argument;
* @author ebanks * @author ebanks
* @version 0.1 * @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) @Argument(fullName = "PLFilterName", shortName = "PLFilterName", doc="Discard reads with RG:PL attribute containing this strign", required=false)
protected String[] PLFilterNames; protected String[] PLFilterNames;

View File

@ -16,7 +16,7 @@ import org.broadinstitute.sting.utils.exceptions.UserException;
* Time: 2:54:23 PM * Time: 2:54:23 PM
* To change this template use File | Settings | File Templates. * 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 // a hack: use static in order to be able to fill it with the data from command line at runtime
static private Set<String> blackListedLanes = new HashSet<String>(); static private Set<String> blackListedLanes = new HashSet<String>();

View File

@ -2,14 +2,15 @@ package org.broadinstitute.sting.gatk.filters;
import net.sf.picard.filter.SamRecordFilter; import net.sf.picard.filter.SamRecordFilter;
import net.sf.samtools.SAMFileHeader; import net.sf.samtools.SAMFileHeader;
import org.broadinstitute.sting.gatk.GenomeAnalysisEngine;
/** /**
* A SamRecordFilter that also depends on the header. * 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. * 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) {}
} }

View File

@ -42,7 +42,7 @@ import org.broadinstitute.sting.utils.text.XReadLines;
* PU:1000G-mpimg-080821-1_1 * PU:1000G-mpimg-080821-1_1
* would filter out a read with the read group 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<Entry<String, Collection<String>>> filterEntries; private Set<Entry<String, Collection<String>>> filterEntries;
public ReadGroupBlackListFilter(List<String> blackLists) { public ReadGroupBlackListFilter(List<String> blackLists) {

View File

@ -35,7 +35,7 @@ import org.broadinstitute.sting.commandline.Argument;
* @author chartl * @author chartl
* @version 0.1 * @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) @Argument(fullName = "filterPositive", shortName = "fp", doc="Discard reads on the forward strand",required=false)
boolean filterForward = false; boolean filterForward = false;

View File

@ -32,7 +32,7 @@ import org.broadinstitute.sting.commandline.Argument;
import java.util.Set; 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) @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; private Set SAMPLES_TO_KEEP = null;

View File

@ -38,7 +38,7 @@ import org.broadinstitute.sting.commandline.Argument;
* Only use reads from the specified read group. * 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) @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; private String READ_GROUP_TO_KEEP = null;

View File

@ -35,7 +35,7 @@ import net.sf.samtools.SAMRecord;
* Filter out duplicate reads. * Filter out duplicate reads.
*/ */
public class UnmappedReadFilter implements SamRecordFilter { public class UnmappedReadFilter extends ReadFilter {
public boolean filterOut( final SAMRecord read ) { public boolean filterOut( final SAMRecord read ) {
return read.getReadUnmappedFlag() || read.getAlignmentStart() == SAMRecord.NO_ALIGNMENT_START; return read.getReadUnmappedFlag() || read.getAlignmentStart() == SAMRecord.NO_ALIGNMENT_START;
} }

View File

@ -34,7 +34,7 @@ import net.sf.samtools.SAMRecord;
* @version 0.1 * @version 0.1
*/ */
public class ZeroMappingQualityReadFilter implements SamRecordFilter { public class ZeroMappingQualityReadFilter extends ReadFilter {
public boolean filterOut(SAMRecord rec) { public boolean filterOut(SAMRecord rec) {
return (rec.getMappingQuality() == 0); return (rec.getMappingQuality() == 0);
} }

View File

@ -34,6 +34,7 @@ import org.broadinstitute.sting.gatk.GenomeAnalysisEngine;
import org.broadinstitute.sting.gatk.WalkerManager; import org.broadinstitute.sting.gatk.WalkerManager;
import org.broadinstitute.sting.gatk.arguments.ValidationExclusion; import org.broadinstitute.sting.gatk.arguments.ValidationExclusion;
import org.broadinstitute.sting.gatk.filters.FilterManager; 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.VCFWriterArgumentTypeDescriptor;
import org.broadinstitute.sting.gatk.io.stubs.OutputStreamArgumentTypeDescriptor; import org.broadinstitute.sting.gatk.io.stubs.OutputStreamArgumentTypeDescriptor;
import org.broadinstitute.sting.gatk.io.stubs.SAMFileReaderArgumentTypeDescriptor; import org.broadinstitute.sting.gatk.io.stubs.SAMFileReaderArgumentTypeDescriptor;
@ -169,7 +170,7 @@ public class GATKExtensionsGenerator extends CommandLineProgram {
} }
} }
for (Class<? extends SamRecordFilter> filter: filterManager.getValues()) { for (Class<? extends ReadFilter> filter: filterManager.getValues()) {
String filterName = filterManager.getName(filter); String filterName = filterManager.getName(filter);
writeFilter(filterName, ArgumentDefinitionField.getArgumentFields(new ParsingEngine(null),filter), dependents); writeFilter(filterName, ArgumentDefinitionField.getArgumentFields(new ParsingEngine(null),filter), dependents);
} }

View File

@ -5,6 +5,7 @@ import net.sf.samtools.SAMFileHeader;
import net.sf.samtools.SAMFileReader; import net.sf.samtools.SAMFileReader;
import net.sf.samtools.SAMRecord; import net.sf.samtools.SAMRecord;
import net.sf.samtools.util.CloseableIterator; import net.sf.samtools.util.CloseableIterator;
import org.broadinstitute.sting.gatk.filters.ReadFilter;
import org.broadinstitute.sting.utils.Utils; import org.broadinstitute.sting.utils.Utils;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
import org.testng.Assert; import org.testng.Assert;
@ -302,7 +303,7 @@ public class LocusIteratorByStateUnitTest extends BaseTest {
null, null,
null, null,
new ValidationExclusion(), new ValidationExclusion(),
new ArrayList<SamRecordFilter>(), Collections.<ReadFilter>emptyList(),
false, false,
false, false,
BAQ.CalculationMode.OFF, BAQ.CalculationMode.OFF,