Merge pull request #1295 from broadinstitute/rhl_sv_error_output_1194

Correct error messages and error handling in multiple tools
This commit is contained in:
Ron Levine 2016-02-29 17:05:24 -05:00
commit 5e2ffc188b
8 changed files with 46 additions and 11 deletions

View File

@ -264,14 +264,14 @@ public class ContEst extends RodWalker<Map<String, Map<String, ContaminationStat
useSequencingGenotypes = true;
// if were not using arrays, we need to figure out what samples are what
for(SAMReaderID id : getToolkit().getReadsDataSource().getReaderIDs()) {
if (id.getTags().getPositionalTags().size() == 0)
if (id.getTags().getPositionalTags().isEmpty())
throw new UserException.BadInput("BAMs must be tagged with " + GENOTYPE_BAM_TAG + " and " + EVAL_BAM_TAG + " when running in array-free mode. Please see the ContEst documentation for more details");
// now sort out what tags go with what bam
for (String tag : id.getTags().getPositionalTags()) {
if (GENOTYPE_BAM_TAG.equalsIgnoreCase(tag)) {
try {
if (getToolkit().getReadsDataSource().getHeader(id).getReadGroups().size() == 0)
if (getToolkit().getReadsDataSource().getHeader(id).getReadGroups().isEmpty())
throw new RuntimeException("No Read Groups found for Genotyping BAM -- Read Groups are Required in sequencing genotype mode!");
genotypeSample = getToolkit().getReadsDataSource().getHeader(id).getReadGroups().get(0).getSample();
} catch (NullPointerException npe) {
@ -279,7 +279,7 @@ public class ContEst extends RodWalker<Map<String, Map<String, ContaminationStat
}
} else if (EVAL_BAM_TAG.equalsIgnoreCase(tag)) {
try {
if (getToolkit().getReadsDataSource().getHeader(id).getReadGroups().size() == 0)
if (getToolkit().getReadsDataSource().getHeader(id).getReadGroups().isEmpty())
throw new RuntimeException("No Read Groups found for Genotyping BAM -- Read Groups are Required in sequencing genotype mode!");
evalSample = getToolkit().getReadsDataSource().getHeader(id).getReadGroups().get(0).getSample();
} catch (NullPointerException npe) {
@ -410,7 +410,7 @@ public class ContEst extends RodWalker<Map<String, Map<String, ContaminationStat
namePair.getKey(),
populationsToEvaluate);
if (results.size() > 0) {
if (!results.isEmpty()) {
countResults++;
stats.put(namePair.getKey(), results);
}
@ -498,7 +498,7 @@ public class ContEst extends RodWalker<Map<String, Map<String, ContaminationStat
private static Genotype getGenotypeFromArray(RefMetaDataTracker tracker, RodBinding<VariantContext> genotypes, boolean verifiedSampleName, boolean verifySample, String sampleName) {
// get the truthForSample and the hapmap information for this site; if either are null we can't move forward
Collection<VariantContext> truths = tracker.getValues(genotypes);
if (truths == null || truths.size() == 0) return null;
if (truths == null || truths.isEmpty()) return null;
VariantContext truthForSample = truths.iterator().next();
@ -506,7 +506,7 @@ public class ContEst extends RodWalker<Map<String, Map<String, ContaminationStat
if (!verifiedSampleName && verifySample) {
if (!truthForSample.getSampleNames().contains(sampleName))
throw new UserException.BadInput("The sample name was set to " + sampleName + " but this sample isn't in your genotypes file. Please Verify your sample name");
verifiedSampleName = true;
verifiedSampleName = true;
}
GenotypesContext gt = truthForSample.getGenotypes();
@ -622,6 +622,9 @@ public class ContEst extends RodWalker<Map<String, Map<String, ContaminationStat
for (String pop : pops) {
PopulationFrequencyInfo info = parsePopulationFrequencyInfo(popVC, pop);
if ( info == null )
throw new RuntimeException("No population frequency annotation for " + pop + " in " + popVC.toString());
double alleleFreq = info.getMinorAlleleFrequency();
if (alleleFreq > 0.5) {
throw new RuntimeException("Minor allele frequency is greater than 0.5, this is an error; we saw AF of " + alleleFreq);
@ -708,7 +711,7 @@ public class ContEst extends RodWalker<Map<String, Map<String, ContaminationStat
}
if (newMap.size() > 0)
if (!newMap.isEmpty())
cleanedMap.put(entry.getKey(), newMap);
else
out.println("Warning: We're throwing out lane " + entry.getKey() + " since it has fewer than " + minBaseCount +

View File

@ -52,6 +52,7 @@
package org.broadinstitute.gatk.tools.walkers.cancer.contamination;
import org.broadinstitute.gatk.engine.walkers.WalkerTest;
import org.broadinstitute.gatk.utils.exceptions.UserException;
import org.testng.annotations.Test;
import java.util.Arrays;
@ -100,4 +101,17 @@ public class ContEstIntegrationTest extends WalkerTest {
" -isr INTERSECTION",md5sums);
executeTest("testArrayFree",spec);
}
@Test(enabled = true)
public void testArrayNoPop(){
WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec(
"-T ContEst" +
" -I:eval " + ContaminatedBamsDirectory + "HCC1143_BL.small.0.05.contaminated.with.SM-612V3.small.0.95.bam" +
" -I:genotype " + NormalBamsDirectory + "SM-612V4.bam" +
" -R " + b37KGReference +
" --popfile " + validationDataLocation + "hg19_population_stratified_af_hapmap_3.3.fixed_no_pop.vcf",
0,
UserException.class);
executeTest("testArrayNoPop",spec);
}
}

View File

@ -202,7 +202,7 @@ public class ASEReadCounter extends LocusWalker<String, Integer> {
final List<VariantContext> VCs = tracker.getValues(sites, context.getLocation());
if(VCs != null && VCs.size() > 1)
throw new UserException("More then one variant context at position: "+contig+":"+position);
if(VCs == null || VCs.size() == 0)
if(VCs == null || VCs.isEmpty())
return null;
final VariantContext vc = VCs.get(0);
@ -211,7 +211,11 @@ public class ASEReadCounter extends LocusWalker<String, Integer> {
return null;
}
if ( vc.getNAlleles() == 1 || vc.getAlternateAllele(0).getBases().length == 0 )
throw new UserException("The file of variant sites must contain heterozygous sites and cannot be a GVCF file containing <NON_REF> alleles.");
final char altAllele = (char)vc.getAlternateAllele(0).getBases()[0];
final String siteID = vc.getID();
final ReadBackedPileup pileup = filterPileup(context.getBasePileup(), countType, includeReadsWithDeletionAtLoci());

View File

@ -664,7 +664,7 @@ public class SelectVariants extends RodWalker<Integer, Integer> implements TreeR
"Samples entered on command line (through -sf or -sn) that are not present in the VCF.",
"A list of these samples:",
Utils.join(",", commandLineUniqueSamples),
"To ignore these samples, run with --allowNonOverlappingCommandLineSamples"));
"To ignore these samples, run with --ALLOW_NONOVERLAPPING_COMMAND_LINE_SAMPLES"));
}
}

View File

@ -26,6 +26,7 @@
package org.broadinstitute.gatk.tools.walkers.rnaseq;
import org.broadinstitute.gatk.engine.walkers.WalkerTest;
import org.broadinstitute.gatk.utils.exceptions.UserException;
import org.testng.annotations.Test;
import java.util.Arrays;
@ -100,6 +101,14 @@ public class ASEReadCounterIntegrationTest extends WalkerTest {
executeTest("test high mq with no read passing", spec);
}
@Test
public void testASEReadCounterNonRef() {
WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec(
"-T ASEReadCounter -R " + b37KGReference + " -I " + privateTestDir + "NA12878.RNAseq.bam -sites "+privateTestDir +"NA12878.chr20_2444518_2637800.RNAseq.NonRef.vcf -U ALLOW_N_CIGAR_READS", 0,
UserException.class);
executeTest("test <NON_REF> sites VCF file", spec);
}

View File

@ -373,7 +373,7 @@ public class UserException extends ReviewedGATKException {
public static class LexicographicallySortedSequenceDictionary extends UserException {
public LexicographicallySortedSequenceDictionary(String name, SAMSequenceDictionary dict) {
super(String.format("Lexicographically sorted human genome sequence detected in %s. Please see " + HelpConstants.forumPost("discussion/58/companion-utilities-reordersam") + "for more information. Error details: %s contigs = %s",
super(String.format("Lexicographically sorted human genome sequence detected in %s. Please see " + HelpConstants.articlePost("1328") + "for more information. Error details: %s contigs = %s",
name, name, ReadUtils.prettyPrintSequenceRecords(dict)));
}
}

View File

@ -29,6 +29,7 @@ public class HelpConstants {
public final static String BASE_GATK_URL = "http://www.broadinstitute.org/gatk";
public final static String GATK_DOCS_URL = BASE_GATK_URL + "/guide/tooldocs/";
public final static String GATK_ARTICLE_URL = BASE_GATK_URL + "/guide/article";
public final static String GATK_FORUM_URL = "http://gatkforums.broadinstitute.org/";
public final static String GATK_FORUM_API_URL = "https://gatkforums.broadinstitute.org/api/v1/";
@ -61,6 +62,10 @@ public class HelpConstants {
return GATK_FORUM_URL + post;
}
public static String articlePost(String id) {
return GATK_ARTICLE_URL + "?id=" + id;
}
/**
* Go-to developer name codes for tracking and display purposes. Only current team members should be in this list.
* When someone leaves, their charges should be redistributed. The actual string should be closest to the dev's

View File

@ -372,7 +372,7 @@ public abstract class PairHMM {
{
doProfiling = (numThreads == 1);
if(numThreads > 1)
logger.info("Performance profiling for PairHMM is disabled because HaplotypeCaller is being run with multiple threads (-nct>1) option\nProfiling is enabled only when running in single thread mode\n");
logger.info("Performance profiling for PairHMM is disabled because the program is being run with multiple threads (-nct>1) option\nProfiling is enabled only when running in single thread mode\n");
}
/**