- New UserExceptions added for when ReadFilters or Walkers specified on the command line are not found. When -rf xxxx cannot find the class corresponding to xxxx, all read filters are printed in a better formatted way, with links to their gatk docs.
- VariantAnnotatorEngine changed to call genotype annotations even if pilups and allele -> likelihood mappings are not present. Current genotype annotations altered to check for null pilupes and null mappings.
This commit is contained in:
parent
9cc1a9931b
commit
d795437202
|
|
@ -29,6 +29,7 @@ import com.google.common.base.Function;
|
||||||
import com.google.common.collect.Collections2;
|
import com.google.common.collect.Collections2;
|
||||||
import org.broadinstitute.sting.utils.Utils;
|
import org.broadinstitute.sting.utils.Utils;
|
||||||
import org.broadinstitute.sting.utils.classloader.PluginManager;
|
import org.broadinstitute.sting.utils.classloader.PluginManager;
|
||||||
|
import org.broadinstitute.sting.utils.help.GATKDocUtils;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -68,16 +69,29 @@ public class FilterManager extends PluginManager<ReadFilter> {
|
||||||
@Override
|
@Override
|
||||||
protected String formatErrorMessage(String pluginCategory, String pluginName) {
|
protected String formatErrorMessage(String pluginCategory, String pluginName) {
|
||||||
List<Class<? extends ReadFilter>> availableFilters = this.getPluginsImplementing(ReadFilter.class);
|
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,
|
return String.format("Read filter %s not found. Available read filters:%n%n%s%n%n%s",pluginName,
|
||||||
Utils.join(String.format(", "),availableFilterNames),
|
userFriendlyListofReadFilters(availableFilters),
|
||||||
"Please consult the GATK Documentation (http://www.broadinstitute.org/gatk/gatkdocs/) for more information.");
|
"Please consult the GATK Documentation (http://www.broadinstitute.org/gatk/gatkdocs/) for more information.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String userFriendlyListofReadFilters(List<Class<? extends ReadFilter>> filters) {
|
||||||
|
final String headName = "FilterName", headDoc = "Documentation";
|
||||||
|
int longestNameLength = -1;
|
||||||
|
for ( Class < ? extends ReadFilter> filter : filters ) {
|
||||||
|
longestNameLength = Math.max(longestNameLength,this.getName(filter).length());
|
||||||
|
}
|
||||||
|
String format = " %"+longestNameLength+"s %s%n";
|
||||||
|
|
||||||
|
StringBuilder listBuilder = new StringBuilder();
|
||||||
|
listBuilder.append(String.format(format,headName,headDoc));
|
||||||
|
for ( Class<? extends ReadFilter> filter : filters ) {
|
||||||
|
String helpLink = GATKDocUtils.helpLinksToGATKDocs(filter);
|
||||||
|
String filterName = this.getName(filter);
|
||||||
|
listBuilder.append(String.format(format,filterName,helpLink));
|
||||||
|
}
|
||||||
|
|
||||||
|
return listBuilder.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,9 @@ public class AlleleBalanceBySample extends GenotypeAnnotation implements Experim
|
||||||
final Genotype g,
|
final Genotype g,
|
||||||
final GenotypeBuilder gb,
|
final GenotypeBuilder gb,
|
||||||
final PerReadAlleleLikelihoodMap alleleLikelihoodMap){
|
final PerReadAlleleLikelihoodMap alleleLikelihoodMap){
|
||||||
|
if ( stratifiedContext == null )
|
||||||
|
return;
|
||||||
|
|
||||||
Double ratio = annotateSNP(stratifiedContext, vc, g);
|
Double ratio = annotateSNP(stratifiedContext, vc, g);
|
||||||
if (ratio == null)
|
if (ratio == null)
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ public class DepthPerAlleleBySample extends GenotypeAnnotation implements Standa
|
||||||
final Genotype g,
|
final Genotype g,
|
||||||
final GenotypeBuilder gb,
|
final GenotypeBuilder gb,
|
||||||
final PerReadAlleleLikelihoodMap alleleLikelihoodMap) {
|
final PerReadAlleleLikelihoodMap alleleLikelihoodMap) {
|
||||||
if ( g == null || !g.isCalled() )
|
if ( g == null || !g.isCalled() || ( stratifiedContext == null && alleleLikelihoodMap == null) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (alleleLikelihoodMap != null && !alleleLikelihoodMap.isEmpty())
|
if (alleleLikelihoodMap != null && !alleleLikelihoodMap.isEmpty())
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ public class MappingQualityZeroBySample extends GenotypeAnnotation {
|
||||||
final Genotype g,
|
final Genotype g,
|
||||||
final GenotypeBuilder gb,
|
final GenotypeBuilder gb,
|
||||||
final PerReadAlleleLikelihoodMap alleleLikelihoodMap){
|
final PerReadAlleleLikelihoodMap alleleLikelihoodMap){
|
||||||
if ( g == null || !g.isCalled() )
|
if ( g == null || !g.isCalled() || stratifiedContext == null )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int mq0 = 0;
|
int mq0 = 0;
|
||||||
|
|
|
||||||
|
|
@ -300,17 +300,13 @@ public class VariantAnnotatorEngine {
|
||||||
if (stratifiedPerReadAlleleLikelihoodMap != null)
|
if (stratifiedPerReadAlleleLikelihoodMap != null)
|
||||||
perReadAlleleLikelihoodMap = stratifiedPerReadAlleleLikelihoodMap.get(genotype.getSampleName());
|
perReadAlleleLikelihoodMap = stratifiedPerReadAlleleLikelihoodMap.get(genotype.getSampleName());
|
||||||
|
|
||||||
if ( context == null && perReadAlleleLikelihoodMap == null) {
|
|
||||||
// no likelihoods nor pileup available: just move on to next sample
|
|
||||||
genotypes.add(genotype);
|
|
||||||
} else {
|
|
||||||
final GenotypeBuilder gb = new GenotypeBuilder(genotype);
|
final GenotypeBuilder gb = new GenotypeBuilder(genotype);
|
||||||
for ( final GenotypeAnnotation annotation : requestedGenotypeAnnotations ) {
|
for ( final GenotypeAnnotation annotation : requestedGenotypeAnnotations ) {
|
||||||
annotation.annotate(tracker, walker, ref, context, vc, genotype, gb, perReadAlleleLikelihoodMap);
|
annotation.annotate(tracker, walker, ref, context, vc, genotype, gb, perReadAlleleLikelihoodMap);
|
||||||
}
|
}
|
||||||
genotypes.add(gb.make());
|
genotypes.add(gb.make());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return genotypes;
|
return genotypes;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,8 @@ package org.broadinstitute.sting.utils.classloader;
|
||||||
|
|
||||||
import ch.qos.logback.classic.Level;
|
import ch.qos.logback.classic.Level;
|
||||||
import ch.qos.logback.classic.Logger;
|
import ch.qos.logback.classic.Logger;
|
||||||
|
import org.broadinstitute.sting.gatk.WalkerManager;
|
||||||
|
import org.broadinstitute.sting.gatk.filters.FilterManager;
|
||||||
import org.broadinstitute.sting.utils.exceptions.DynamicClassResolutionException;
|
import org.broadinstitute.sting.utils.exceptions.DynamicClassResolutionException;
|
||||||
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;
|
||||||
|
|
@ -276,8 +278,16 @@ 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(formatErrorMessage(pluginCategory,pluginName));
|
String errorMessage = formatErrorMessage(pluginCategory,pluginName);
|
||||||
|
if ( this.getClass().isAssignableFrom(FilterManager.class) ) {
|
||||||
|
throw new UserException.MalformedReadFilterException(errorMessage);
|
||||||
|
} else if ( this.getClass().isAssignableFrom(WalkerManager.class) ) {
|
||||||
|
throw new UserException.MalformedWalkerArgumentsException(errorMessage);
|
||||||
|
} else {
|
||||||
|
throw new UserException.CommandLineException(errorMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
return plugin.newInstance();
|
return plugin.newInstance();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,18 @@ public class UserException extends ReviewedStingException {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class MalformedReadFilterException extends CommandLineException {
|
||||||
|
public MalformedReadFilterException(String message) {
|
||||||
|
super(String.format("Malformed read filter: %s",message));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class MalformedWalkerArgumentsException extends CommandLineException {
|
||||||
|
public MalformedWalkerArgumentsException(String message) {
|
||||||
|
super(String.format("Malformed walker argument: %s",message));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class MalformedGenomeLoc extends UserException {
|
public static class MalformedGenomeLoc extends UserException {
|
||||||
public MalformedGenomeLoc(String message, GenomeLoc loc) {
|
public MalformedGenomeLoc(String message, GenomeLoc loc) {
|
||||||
super(String.format("Badly formed genome loc: %s: %s", message, loc));
|
super(String.format("Badly formed genome loc: %s: %s", message, loc));
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
package org.broadinstitute.sting.commandline;
|
||||||
|
|
||||||
|
import org.broadinstitute.sting.BaseTest;
|
||||||
|
import org.broadinstitute.sting.WalkerTest;
|
||||||
|
import org.broadinstitute.sting.utils.exceptions.UserException;
|
||||||
|
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.testng.annotations.DataProvider;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by IntelliJ IDEA.
|
||||||
|
* User: chartl
|
||||||
|
* Date: 8/31/12
|
||||||
|
* Time: 11:03 AM
|
||||||
|
* To change this template use File | Settings | File Templates.
|
||||||
|
*/
|
||||||
|
public class InvalidArgumentIntegrationTest extends WalkerTest {
|
||||||
|
private static final String callsB36 = BaseTest.validationDataLocation + "lowpass.N3.chr1.raw.vcf";
|
||||||
|
|
||||||
|
private WalkerTest.WalkerTestSpec baseTest(String flag, String arg, Class exeption) {
|
||||||
|
return new WalkerTest.WalkerTestSpec("-T VariantsToTable -M 10 --variant:vcf "
|
||||||
|
+ callsB36 + " -F POS,CHROM -R "
|
||||||
|
+ b36KGReference + " -o %s " + flag + " " + arg,
|
||||||
|
1, exeption);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUnknownReadFilter() {
|
||||||
|
executeTest("UnknownReadFilter",baseTest("-rf","TestUnknownReadFilter", UserException.MalformedReadFilterException.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMalformedWalkerArgs() {
|
||||||
|
executeTest("MalformedWalkerArgs",
|
||||||
|
new WalkerTest.WalkerTestSpec("-T UnknownWalkerName -M 10 --variant:vcf "
|
||||||
|
+ callsB36 + " -F POS,CHROM -R "
|
||||||
|
+ b36KGReference + " -o %s ",
|
||||||
|
1, UserException.MalformedWalkerArgumentsException.class));
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue