- 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 org.broadinstitute.sting.utils.Utils;
|
||||
import org.broadinstitute.sting.utils.classloader.PluginManager;
|
||||
import org.broadinstitute.sting.utils.help.GATKDocUtils;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
|
@ -68,16 +69,29 @@ public class FilterManager extends PluginManager<ReadFilter> {
|
|||
@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),
|
||||
return String.format("Read filter %s not found. Available read filters:%n%n%s%n%n%s",pluginName,
|
||||
userFriendlyListofReadFilters(availableFilters),
|
||||
"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 GenotypeBuilder gb,
|
||||
final PerReadAlleleLikelihoodMap alleleLikelihoodMap){
|
||||
if ( stratifiedContext == null )
|
||||
return;
|
||||
|
||||
Double ratio = annotateSNP(stratifiedContext, vc, g);
|
||||
if (ratio == null)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ public class DepthPerAlleleBySample extends GenotypeAnnotation implements Standa
|
|||
final Genotype g,
|
||||
final GenotypeBuilder gb,
|
||||
final PerReadAlleleLikelihoodMap alleleLikelihoodMap) {
|
||||
if ( g == null || !g.isCalled() )
|
||||
if ( g == null || !g.isCalled() || ( stratifiedContext == null && alleleLikelihoodMap == null) )
|
||||
return;
|
||||
|
||||
if (alleleLikelihoodMap != null && !alleleLikelihoodMap.isEmpty())
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ public class MappingQualityZeroBySample extends GenotypeAnnotation {
|
|||
final Genotype g,
|
||||
final GenotypeBuilder gb,
|
||||
final PerReadAlleleLikelihoodMap alleleLikelihoodMap){
|
||||
if ( g == null || !g.isCalled() )
|
||||
if ( g == null || !g.isCalled() || stratifiedContext == null )
|
||||
return;
|
||||
|
||||
int mq0 = 0;
|
||||
|
|
|
|||
|
|
@ -300,16 +300,12 @@ public class VariantAnnotatorEngine {
|
|||
if (stratifiedPerReadAlleleLikelihoodMap != null)
|
||||
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);
|
||||
for ( final GenotypeAnnotation annotation : requestedGenotypeAnnotations ) {
|
||||
annotation.annotate(tracker, walker, ref, context, vc, genotype, gb, perReadAlleleLikelihoodMap);
|
||||
}
|
||||
genotypes.add(gb.make());
|
||||
|
||||
final GenotypeBuilder gb = new GenotypeBuilder(genotype);
|
||||
for ( final GenotypeAnnotation annotation : requestedGenotypeAnnotations ) {
|
||||
annotation.annotate(tracker, walker, ref, context, vc, genotype, gb, perReadAlleleLikelihoodMap);
|
||||
}
|
||||
genotypes.add(gb.make());
|
||||
}
|
||||
|
||||
return genotypes;
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@ package org.broadinstitute.sting.utils.classloader;
|
|||
|
||||
import ch.qos.logback.classic.Level;
|
||||
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.ReviewedStingException;
|
||||
import org.broadinstitute.sting.utils.exceptions.UserException;
|
||||
|
|
@ -276,8 +278,16 @@ public class PluginManager<PluginType> {
|
|||
*/
|
||||
public PluginType createByName(String pluginName) {
|
||||
Class<? extends PluginType> plugin = pluginsByName.get(pluginName);
|
||||
if( plugin == null )
|
||||
throw new UserException(formatErrorMessage(pluginCategory,pluginName));
|
||||
if( plugin == null ) {
|
||||
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 {
|
||||
return plugin.newInstance();
|
||||
} 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 MalformedGenomeLoc(String message, GenomeLoc 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