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;
|
||||
|
||||
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 java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 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() {
|
||||
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 MIXED:
|
||||
case SYMBOLIC:
|
||||
case STRUCTURAL_INDEL:
|
||||
return checkVariationClass( evalVC, VariantRecalibratorArgumentCollection.Mode.INDEL );
|
||||
default:
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -277,7 +277,7 @@ public class PluginManager<PluginType> {
|
|||
public PluginType createByName(String pluginName) {
|
||||
Class<? extends PluginType> plugin = pluginsByName.get(pluginName);
|
||||
if( plugin == null )
|
||||
throw new UserException(String.format("Could not find %s with name: %s", pluginCategory,pluginName));
|
||||
throw new UserException(formatErrorMessage(pluginCategory,pluginName));
|
||||
try {
|
||||
return plugin.newInstance();
|
||||
} catch (Exception e) {
|
||||
|
|
@ -330,4 +330,14 @@ public class PluginManager<PluginType> {
|
|||
|
||||
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,
|
||||
MNP, // a multi-nucleotide polymorphism
|
||||
INDEL,
|
||||
STRUCTURAL_INDEL,
|
||||
SYMBOLIC,
|
||||
MIXED,
|
||||
}
|
||||
|
|
@ -531,7 +530,17 @@ public class VariantContext implements Feature { // to enable tribble integratio
|
|||
}
|
||||
|
||||
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 )
|
||||
*/
|
||||
public List<Integer> getIndelLengths() {
|
||||
if ( getType() != Type.INDEL && getType() != Type.MIXED && getType() != Type.STRUCTURAL_INDEL ) {
|
||||
if ( getType() != Type.INDEL && getType() != Type.MIXED ) {
|
||||
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
|
||||
// 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;
|
||||
|
||||
// old incorrect logic:
|
||||
|
|
|
|||
Loading…
Reference in New Issue