After dicussion with Ryan/Eric, the Structural_Indel variant type is now gone, and has been entirely replaced with the access pattern .isStructuralIndel(). This makes it a strict subtype of indel. I agree that this method is a bit more sensible.
In addition, fix for GSA-310. If supplied -rf argument does not match a known read filter, the list of read filters will be printed, and users directed to the documentation for more information.
This commit is contained in:
parent
82b2845b9f
commit
5a142fe265
|
|
@ -25,9 +25,13 @@
|
||||||
|
|
||||||
package org.broadinstitute.sting.gatk.filters;
|
package org.broadinstitute.sting.gatk.filters;
|
||||||
|
|
||||||
|
import com.google.common.base.Function;
|
||||||
|
import com.google.common.collect.Collections2;
|
||||||
|
import org.broadinstitute.sting.utils.Utils;
|
||||||
import org.broadinstitute.sting.utils.classloader.PluginManager;
|
import org.broadinstitute.sting.utils.classloader.PluginManager;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manage filters and filter options. Any requests for basic filtering classes
|
* Manage filters and filter options. Any requests for basic filtering classes
|
||||||
|
|
@ -54,4 +58,26 @@ public class FilterManager extends PluginManager<ReadFilter> {
|
||||||
public Collection<Class<? extends ReadFilter>> getValues() {
|
public Collection<Class<? extends ReadFilter>> getValues() {
|
||||||
return this.getPlugins();
|
return this.getPlugins();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rather than use the default error message, print out a list of read filters as well.
|
||||||
|
* @param pluginCategory - string, the category of the plugin (e.g. read filter)
|
||||||
|
* @param pluginName - string, what we were trying to match (but failed to)
|
||||||
|
* @return - A wall of text with the default message, followed by a listing of available read filters
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected String formatErrorMessage(String pluginCategory, String pluginName) {
|
||||||
|
List<Class<? extends ReadFilter>> availableFilters = this.getPluginsImplementing(ReadFilter.class);
|
||||||
|
Collection<String> availableFilterNames = Collections2.transform(availableFilters, new Function<Class<? extends ReadFilter>,String>(){
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String apply(final Class<? extends ReadFilter> input) {
|
||||||
|
return getName(input);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return String.format("Read filter %s not found. Available read filters:%n%s.%n%n%s",pluginName,
|
||||||
|
Utils.join(String.format(", "),availableFilterNames),
|
||||||
|
"Please consult the GATK Documentation (http://www.broadinstitute.org/gatk/gatkdocs/) for more information.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -286,7 +286,6 @@ public class VariantDataManager {
|
||||||
case INDEL:
|
case INDEL:
|
||||||
case MIXED:
|
case MIXED:
|
||||||
case SYMBOLIC:
|
case SYMBOLIC:
|
||||||
case STRUCTURAL_INDEL:
|
|
||||||
return checkVariationClass( evalVC, VariantRecalibratorArgumentCollection.Mode.INDEL );
|
return checkVariationClass( evalVC, VariantRecalibratorArgumentCollection.Mode.INDEL );
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -277,7 +277,7 @@ public class PluginManager<PluginType> {
|
||||||
public PluginType createByName(String pluginName) {
|
public PluginType createByName(String pluginName) {
|
||||||
Class<? extends PluginType> plugin = pluginsByName.get(pluginName);
|
Class<? extends PluginType> plugin = pluginsByName.get(pluginName);
|
||||||
if( plugin == null )
|
if( plugin == null )
|
||||||
throw new UserException(String.format("Could not find %s with name: %s", pluginCategory,pluginName));
|
throw new UserException(formatErrorMessage(pluginCategory,pluginName));
|
||||||
try {
|
try {
|
||||||
return plugin.newInstance();
|
return plugin.newInstance();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
@ -330,4 +330,14 @@ public class PluginManager<PluginType> {
|
||||||
|
|
||||||
return pluginName;
|
return pluginName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate the error message for the plugin manager. The message is allowed to depend on the class.
|
||||||
|
* @param pluginCategory - string, the category of the plugin (e.g. read filter)
|
||||||
|
* @param pluginName - string, what we were trying to match (but failed to)
|
||||||
|
* @return error message text describing the error
|
||||||
|
*/
|
||||||
|
protected String formatErrorMessage(String pluginCategory, String pluginName ) {
|
||||||
|
return String.format("Could not find %s with name: %s", pluginCategory,pluginName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -457,7 +457,6 @@ public class VariantContext implements Feature { // to enable tribble integratio
|
||||||
SNP,
|
SNP,
|
||||||
MNP, // a multi-nucleotide polymorphism
|
MNP, // a multi-nucleotide polymorphism
|
||||||
INDEL,
|
INDEL,
|
||||||
STRUCTURAL_INDEL,
|
|
||||||
SYMBOLIC,
|
SYMBOLIC,
|
||||||
MIXED,
|
MIXED,
|
||||||
}
|
}
|
||||||
|
|
@ -531,7 +530,17 @@ public class VariantContext implements Feature { // to enable tribble integratio
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isStructuralIndel() {
|
public boolean isStructuralIndel() {
|
||||||
return getType() == Type.STRUCTURAL_INDEL;
|
if ( getType() == Type.INDEL ) {
|
||||||
|
List<Integer> sizes = getIndelLengths();
|
||||||
|
if ( sizes != null ) {
|
||||||
|
for ( Integer length : sizes ) {
|
||||||
|
if ( length > MAX_ALLELE_SIZE_FOR_NON_SV ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -716,7 +725,7 @@ public class VariantContext implements Feature { // to enable tribble integratio
|
||||||
* @return a list of indel lengths ( null if not of type indel or mixed )
|
* @return a list of indel lengths ( null if not of type indel or mixed )
|
||||||
*/
|
*/
|
||||||
public List<Integer> getIndelLengths() {
|
public List<Integer> getIndelLengths() {
|
||||||
if ( getType() != Type.INDEL && getType() != Type.MIXED && getType() != Type.STRUCTURAL_INDEL ) {
|
if ( getType() != Type.INDEL && getType() != Type.MIXED ) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1263,13 +1272,6 @@ public class VariantContext implements Feature { // to enable tribble integratio
|
||||||
// is reserved for cases of multiple alternate alleles of different types). Therefore, if we've reached this point
|
// is reserved for cases of multiple alternate alleles of different types). Therefore, if we've reached this point
|
||||||
// in the code (so we're not a SNP, MNP, or symbolic allele), we absolutely must be an INDEL.
|
// in the code (so we're not a SNP, MNP, or symbolic allele), we absolutely must be an INDEL.
|
||||||
|
|
||||||
// Because a number of structural variation callers write the whole alternate allele into the VCF where possible,
|
|
||||||
// this can result in insertion/deletion alleles of structural variant size, e.g. 151+. As of July 2012, we now
|
|
||||||
// classify these as structural events, rather than indel events, as we think differently about the mechanism,
|
|
||||||
// representation, and handling of these events. Check for this case here:
|
|
||||||
if ( ref.length() > MAX_ALLELE_SIZE_FOR_NON_SV || allele.length() > MAX_ALLELE_SIZE_FOR_NON_SV )
|
|
||||||
return Type.STRUCTURAL_INDEL;
|
|
||||||
|
|
||||||
return Type.INDEL;
|
return Type.INDEL;
|
||||||
|
|
||||||
// old incorrect logic:
|
// old incorrect logic:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue