diff --git a/build.xml b/build.xml index 4acb2086a..85955d774 100644 --- a/build.xml +++ b/build.xml @@ -43,6 +43,9 @@ + + + @@ -50,9 +53,6 @@ - - - @@ -89,7 +89,6 @@ - @@ -171,6 +170,12 @@ + + + + + + @@ -245,6 +250,7 @@ + @@ -276,7 +282,7 @@ - + @@ -337,7 +343,7 @@ - + @@ -863,7 +869,7 @@ - + @@ -911,86 +917,59 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - + - - - - - + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1080,7 +1059,7 @@ - + diff --git a/ivy.xml b/ivy.xml index a394aa6d7..115f4062a 100644 --- a/ivy.xml +++ b/ivy.xml @@ -12,6 +12,9 @@ + + + diff --git a/public/java/src/org/broadinstitute/sting/gatk/examples/GATKDocsExample.java b/public/java/src/org/broadinstitute/sting/gatk/examples/GATKDocsExample.java new file mode 100644 index 000000000..4541a0537 --- /dev/null +++ b/public/java/src/org/broadinstitute/sting/gatk/examples/GATKDocsExample.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2011, The Broad Institute + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +package org.broadinstitute.sting.gatk.examples; + +import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.ArgumentCollection; +import org.broadinstitute.sting.gatk.arguments.StandardVariantContextInputArgumentCollection; +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.RodWalker; + +/** + * [Short one sentence description of this walker] + * + *

+ * [Functionality of this walker] + *

+ * + *

Input

+ *

+ * [Input description] + *

+ * + *

Output

+ *

+ * [Output description] + *

+ * + *

Examples

+ *
+ *    java
+ *      -jar GenomeAnalysisTK.jar
+ *      -T $WalkerName
+ *  
+ * + * @author Your Name + * @since Date created + */ +public class GATKDocsExample extends RodWalker { + /** + * Put detailed documentation about the argument here. No need to duplicate the summary information + * in doc annotation field, as that will be added before this text in the documentation page. + * + * Notes: + *
    + *
  • This field can contain HTML as a normal javadoc
  • + *
  • Don't include information about the default value, as gatkdocs adds this automatically
  • + *
  • Try your best to describe in detail the behavior of the argument, as ultimately confusing + * docs here will just result in user posts on the forum
  • + *
+ */ + @Argument(fullName="full", shortName="short", doc="Brief summary of argument [~ 80 characters of text]", required=false) + private boolean myWalkerArgument = false; + + public Integer map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) { return 0; } + public Integer reduceInit() { return 0; } + public Integer reduce(Integer value, Integer sum) { return value + sum; } + public void onTraversalDone(Integer result) { } +} diff --git a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/DbSNPHelper.java b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/DbSNPHelper.java index 8d32a9bf9..a2132cee5 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/refdata/features/DbSNPHelper.java +++ b/public/java/src/org/broadinstitute/sting/gatk/refdata/features/DbSNPHelper.java @@ -39,7 +39,6 @@ import java.util.List; * this class contains static helper methods for DbSNP */ public class DbSNPHelper { - public static final String STANDARD_DBSNP_TRACK_NAME = "dbsnp"; private DbSNPHelper() {} // don't make a DbSNPHelper diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/GenotypeLikelihoodsCalculationModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/GenotypeLikelihoodsCalculationModel.java index 8261cd588..594c1dd28 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/GenotypeLikelihoodsCalculationModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/GenotypeLikelihoodsCalculationModel.java @@ -26,6 +26,7 @@ package org.broadinstitute.sting.gatk.walkers.genotyper; import org.apache.log4j.Logger; +import org.broadinstitute.sting.commandline.RodBinding; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContextUtils; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; @@ -35,6 +36,7 @@ import org.broadinstitute.sting.utils.exceptions.ReviewedStingException; import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import org.broadinstitute.sting.utils.variantcontext.Allele; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.util.Map; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java index 897e1a668..41b340058 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/IndelGenotypeLikelihoodsCalculationModel.java @@ -321,7 +321,7 @@ public class IndelGenotypeLikelihoodsCalculationModel extends GenotypeLikelihood haplotypeMap.clear(); if (getAlleleListFromVCF) { - for( final VariantContext vc_input : tracker.getValues(VariantContext.class, "alleles") ) { + for( final VariantContext vc_input : tracker.getValues(UAC.alleles) ) { if( vc_input != null && allowableTypes.contains(vc_input.getType()) && ref.getLocus().getStart() == vc_input.getStart()) { diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SNPGenotypeLikelihoodsCalculationModel.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SNPGenotypeLikelihoodsCalculationModel.java index 9205e33a0..477155241 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SNPGenotypeLikelihoodsCalculationModel.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/SNPGenotypeLikelihoodsCalculationModel.java @@ -26,6 +26,7 @@ package org.broadinstitute.sting.gatk.walkers.genotyper; import org.apache.log4j.Logger; +import org.broadinstitute.sting.commandline.RodBinding; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContextUtils; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; @@ -57,13 +58,13 @@ public class SNPGenotypeLikelihoodsCalculationModel extends GenotypeLikelihoodsC useAlleleFromVCF = UAC.GenotypingMode == GENOTYPING_MODE.GENOTYPE_GIVEN_ALLELES; } - public static VariantContext getSNPVCFromAllelesRod(RefMetaDataTracker tracker, ReferenceContext ref, boolean requireSNP, Logger logger) { + public static VariantContext getSNPVCFromAllelesRod(RefMetaDataTracker tracker, ReferenceContext ref, boolean requireSNP, Logger logger, final RodBinding allelesBinding) { if ( tracker == null || ref == null || logger == null ) throw new ReviewedStingException("Bad arguments: tracker=" + tracker + " ref=" + ref + " logger=" + logger); VariantContext vc = null; // search for usable record - for( final VariantContext vc_input : tracker.getValues(VariantContext.class, "alleles", ref.getLocus()) ) { + for( final VariantContext vc_input : tracker.getValues(allelesBinding) ) { if ( vc_input != null && ! vc_input.isFiltered() && (! requireSNP || vc_input.isSNP() )) { if ( vc == null ) { vc = vc_input; @@ -95,7 +96,7 @@ public class SNPGenotypeLikelihoodsCalculationModel extends GenotypeLikelihoodsC if ( alternateAlleleToUse != null ) { bestAlternateAllele = alternateAlleleToUse.getBases()[0]; } else if ( useAlleleFromVCF ) { - VariantContext vc = getSNPVCFromAllelesRod(tracker, ref, true, logger); + VariantContext vc = getSNPVCFromAllelesRod(tracker, ref, true, logger, UAC.alleles); // ignore places where we don't have a variant if ( vc == null ) diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java index 52bf3f715..1a76bfd07 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedArgumentCollection.java @@ -27,6 +27,9 @@ package org.broadinstitute.sting.gatk.walkers.genotyper; import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.Hidden; +import org.broadinstitute.sting.commandline.Input; +import org.broadinstitute.sting.commandline.RodBinding; +import org.broadinstitute.sting.utils.variantcontext.VariantContext; import java.io.File; @@ -61,6 +64,11 @@ public class UnifiedArgumentCollection { @Argument(fullName = "computeSLOD", shortName = "sl", doc = "If provided, we will calculate the SLOD", required = false) public boolean COMPUTE_SLOD = false; + /** + * When the UnifiedGenotyper is put into GENOTYPE_GIVEN_ALLELES mode it will genotype the samples using only the alleles provide in this rod binding + */ + @Input(fullName="alleles", shortName = "alleles", doc="The set of alleles at which to genotype when in GENOTYPE_MODE = GENOTYPE_GIVEN_ALLELES", required=false) + public RodBinding alleles; // control the error modes @Hidden @@ -168,6 +176,7 @@ public class UnifiedArgumentCollection { uac.OUTPUT_DEBUG_INDEL_INFO = OUTPUT_DEBUG_INDEL_INFO; uac.INDEL_HAPLOTYPE_SIZE = INDEL_HAPLOTYPE_SIZE; uac.DO_CONTEXT_DEPENDENT_PENALTIES = DO_CONTEXT_DEPENDENT_PENALTIES; + uac.alleles = alleles; uac.GET_GAP_PENALTIES_FROM_DATA = GET_GAP_PENALTIES_FROM_DATA; uac.INDEL_RECAL_FILE = INDEL_RECAL_FILE; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyper.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyper.java index 0f2d73c3a..d31bb6fb9 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyper.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyper.java @@ -25,10 +25,7 @@ package org.broadinstitute.sting.gatk.walkers.genotyper; -import org.broadinstitute.sting.commandline.Argument; -import org.broadinstitute.sting.commandline.ArgumentCollection; -import org.broadinstitute.sting.commandline.Output; -import org.broadinstitute.sting.commandline.RodBinding; +import org.broadinstitute.sting.commandline.*; import org.broadinstitute.sting.gatk.DownsampleType; import org.broadinstitute.sting.gatk.arguments.DbsnpArgumentCollection; import org.broadinstitute.sting.gatk.contexts.AlignmentContext; @@ -60,14 +57,16 @@ import java.util.*; @Downsample(by=DownsampleType.BY_SAMPLE, toCoverage=250) public class UnifiedGenotyper extends LocusWalker implements TreeReducible, AnnotatorCompatibleWalker { - @ArgumentCollection private UnifiedArgumentCollection UAC = new UnifiedArgumentCollection(); + @ArgumentCollection + private UnifiedArgumentCollection UAC = new UnifiedArgumentCollection(); /** * A dbSNP VCF file from which to annotate. * * rsIDs from this file are used to populate the ID column of the output. Also, the DB INFO flag will be set when appropriate. */ - @ArgumentCollection protected DbsnpArgumentCollection dbsnp = new DbsnpArgumentCollection(); + @ArgumentCollection + protected DbsnpArgumentCollection dbsnp = new DbsnpArgumentCollection(); public RodBinding getDbsnpRodBinding() { return dbsnp.dbsnp; } public RodBinding getSnpEffRodBinding() { return null; } public List> getCompRodBindings() { return Collections.emptyList(); } diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java index 77f1c5e25..dc728ff6b 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperEngine.java @@ -58,6 +58,7 @@ public class UnifiedGenotyperEngine { // the unified argument collection private final UnifiedArgumentCollection UAC; + public UnifiedArgumentCollection getUAC() { return UAC; } // the annotation engine private final VariantAnnotatorEngine annotationEngine; @@ -232,7 +233,7 @@ public class UnifiedGenotyperEngine { private VariantCallContext generateEmptyContext(RefMetaDataTracker tracker, ReferenceContext ref, Map stratifiedContexts, AlignmentContext rawContext) { VariantContext vc; if ( UAC.GenotypingMode == GenotypeLikelihoodsCalculationModel.GENOTYPING_MODE.GENOTYPE_GIVEN_ALLELES ) { - VariantContext vcInput = SNPGenotypeLikelihoodsCalculationModel.getSNPVCFromAllelesRod(tracker, ref, false, logger); + VariantContext vcInput = SNPGenotypeLikelihoodsCalculationModel.getSNPVCFromAllelesRod(tracker, ref, false, logger, UAC.alleles); if ( vcInput == null ) return null; vc = new VariantContext("UG_call", vcInput.getChr(), vcInput.getStart(), vcInput.getEnd(), vcInput.getAlleles()); @@ -630,7 +631,7 @@ public class UnifiedGenotyperEngine { // no extended event pileup // if we're genotyping given alleles and we have a requested SNP at this position, do SNP if (UAC.GenotypingMode == GenotypeLikelihoodsCalculationModel.GENOTYPING_MODE.GENOTYPE_GIVEN_ALLELES) { - VariantContext vcInput = SNPGenotypeLikelihoodsCalculationModel.getSNPVCFromAllelesRod(tracker, refContext, false, logger); + VariantContext vcInput = SNPGenotypeLikelihoodsCalculationModel.getSNPVCFromAllelesRod(tracker, refContext, false, logger, UAC.alleles); if (vcInput == null) return null; diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/TableRecalibrationWalker.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/TableRecalibrationWalker.java index f61fc901b..a044abecb 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/TableRecalibrationWalker.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/recalibration/TableRecalibrationWalker.java @@ -29,10 +29,8 @@ import net.sf.samtools.*; import net.sf.samtools.util.SequenceUtil; import org.broadinstitute.sting.commandline.*; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.io.StingSAMFileWriter; import org.broadinstitute.sting.gatk.refdata.ReadMetaDataTracker; -import org.broadinstitute.sting.gatk.refdata.features.DbSNPHelper; import org.broadinstitute.sting.gatk.walkers.*; import org.broadinstitute.sting.utils.QualityUtils; import org.broadinstitute.sting.utils.Utils; @@ -155,17 +153,6 @@ public class TableRecalibrationWalker extends ReadWalker implements Tr @Output protected PrintStream out; + @Input(fullName="eval", shortName = "eval", doc="Input evaluation file(s)", required=true) + public List> evals; + + @Input(fullName="comp", shortName = "comp", doc="Input comparison file(s)", required=false) + public List> compsProvided = Collections.emptyList(); + private List> comps = new ArrayList>(); + + @ArgumentCollection + protected DbsnpArgumentCollection dbsnp = new DbsnpArgumentCollection(); + // Help arguments @Argument(fullName="list", shortName="ls", doc="List the available eval modules and exit") protected Boolean LIST = false; @@ -61,7 +68,7 @@ public class VariantEvalWalker extends RodWalker implements Tr protected Set SAMPLE_EXPRESSIONS; @Argument(shortName="knownName", doc="Name of ROD bindings containing variant sites that should be treated as known when splitting eval rods into known and novel subsets", required=false) - protected String[] KNOWN_NAMES = {DbSNPHelper.STANDARD_DBSNP_TRACK_NAME}; + protected String[] KNOWN_NAMES = {}; // Stratification arguments @Argument(fullName="stratificationModule", shortName="ST", doc="One or more specific stratification modules to apply to the eval track(s) (in addition to the standard stratifications, unless -noS is specified)", required=false) @@ -115,6 +122,10 @@ public class VariantEvalWalker extends RodWalker implements Tr // The set of all possible evaluation contexts private HashMap evaluationContexts = null; + // important stratifications + private boolean byFilterIsEnabled = false; + private boolean perSampleIsEnabled = false; + // Output report private GATKReport report = null; @@ -134,28 +145,25 @@ public class VariantEvalWalker extends RodWalker implements Tr // Just list the modules, and exit quickly. if (LIST) { variantEvalUtils.listModulesAndExit(); } - // Categorize each rod as an eval or a comp rod. - for ( ReferenceOrderedDataSource d : this.getToolkit().getRodDataSources() ) { - if ( d.getName().startsWith("eval") ) { - evalNames.add(d.getName()); - } else if ( d.getName().startsWith("comp") || d.getName().startsWith(DbSNPHelper.STANDARD_DBSNP_TRACK_NAME) ) { - compNames.add(d.getName()); - } else { - logger.info(String.format("Not evaluating ROD binding '%s' because the name did not start with %s, comp, or eval", d.getName(), Utils.join(", ", KNOWN_NAMES))); - } - } - - // Barf if we don't have any eval tracks. - if (evalNames.size() == 0) { - throw new UserException("No evaluation tracks were specified. Please bind one or more callsets to evaluate using the -B argument with a trackname that starts with the word 'eval'."); + // maintain the full list of comps + comps.addAll(compsProvided); + if ( dbsnp.dbsnp.isBound() ) { + comps.add(dbsnp.dbsnp); + knownNames.add(dbsnp.dbsnp.getName()); } // Add a dummy comp track if none exists - if (compNames.size() == 0) { - compNames.add("none"); - } + if ( comps.size() == 0 ) + comps.add(new RodBinding(VariantContext.class, "none", "UNBOUND", "", new Tags())); - // Set up set of known names + // Cache the rod names + for ( RodBinding compRod : comps ) + compNames.add(compRod.getName()); + + for ( RodBinding evalRod : evals ) + evalNames.add(evalRod.getName()); + + // Set up set of additional known names knownNames.addAll(Arrays.asList(KNOWN_NAMES)); // Now that we have all the rods categorized, determine the sample list from the eval rods. @@ -190,6 +198,12 @@ public class VariantEvalWalker extends RodWalker implements Tr // Initialize the set of stratifications and evaluations to use stratificationObjects = variantEvalUtils.initializeStratificationObjects(this, NO_STANDARD_STRATIFICATIONS, STRATIFICATIONS_TO_USE); Set> evaluationObjects = variantEvalUtils.initializeEvaluationObjects(NO_STANDARD_MODULES, MODULES_TO_USE); + for ( VariantStratifier vs : getStratificationObjects() ) { + if ( vs.getClass().getSimpleName().equals("Filter") ) + byFilterIsEnabled = true; + else if ( vs.getClass().getSimpleName().equals("Sample") ) + perSampleIsEnabled = true; + } // Initialize the evaluation contexts evaluationContexts = variantEvalUtils.initializeEvaluationContexts(stratificationObjects, evaluationObjects, null, null); @@ -221,61 +235,66 @@ public class VariantEvalWalker extends RodWalker implements Tr if (tracker != null) { String aastr = (ancestralAlignments == null) ? null : new String(ancestralAlignments.getSubsequenceAt(ref.getLocus().getContig(), ref.getLocus().getStart(), ref.getLocus().getStop()).getBases()); - // track sample vc - HashMap> vcs = variantEvalUtils.getVariantContexts(tracker, ref, compNames, evalNames, typesToUse != null); + // --------- track --------- sample - VariantContexts - + HashMap, HashMap>> evalVCs = variantEvalUtils.bindVariantContexts(tracker, ref, evals, byFilterIsEnabled, true, perSampleIsEnabled); + HashMap, HashMap>> compVCs = variantEvalUtils.bindVariantContexts(tracker, ref, comps, byFilterIsEnabled, false, false); - for ( String compName : compNames ) { - VariantContext comp = vcs.containsKey(compName) && vcs.get(compName) != null && vcs.get(compName).containsKey(ALL_SAMPLE_NAME) ? vcs.get(compName).get(ALL_SAMPLE_NAME) : null; + // for each eval track + for ( final RodBinding evalRod : evals ) { + final HashMap> evalSet = evalVCs.containsKey(evalRod) ? evalVCs.get(evalRod) : new HashMap>(0); - for ( String evalName : evalNames ) { - for ( String sampleName : sampleNamesForStratification ) { - VariantContext eval = vcs.containsKey(evalName) && vcs.get(evalName) != null ? vcs.get(evalName).get(sampleName) : null; + // for each sample stratifier + for ( final String sampleName : sampleNamesForStratification ) { + Set evalSetBySample = evalSet.get(sampleName); + if ( evalSetBySample == null ) { + evalSetBySample = new HashSet(1); + evalSetBySample.add(null); + } - // todo: Eric, this is really the problem. We select single eval and comp VCs independently - // todo: discarding multiple eval tracks at the sites and not providing matched comps - // todo: where appropriate. Really this loop should look like: - // todo: for each eval track: - // todo: for each eval in track: - // todo: for each compTrack: - // todo: comp = findMatchingComp(eval, compTrack) // find the matching comp in compTrack - // todo: call evalModule(eval, comp) - // todo: // may return null if no such comp exists, but proceed as eval modules may need to see eval / null pair - // todo: for each comp not matched by an eval in compTrack: - // todo: call evalModule(null, comp) - // todo: // need to call with null comp, as module - // todo: note that the reason Kiran pre-computed the possible VCs is to apply the modifiers - // todo: like subset to sample, etc. So you probably will want a master map that maps - // todo: from special eval bindings to the digested VC for efficiency. - - if ( typesToUse != null ) { - if ( eval != null && ! typesToUse.contains(eval.getType()) ) eval = null; - if ( comp != null && ! typesToUse.contains(comp.getType()) ) comp = null; -// if ( eval != null ) logger.info("Keeping " + eval); - } - - if (eval != null && aastr != null) { + // for each eval in the track + for ( VariantContext eval : evalSetBySample ) { + // deal with ancestral alleles if requested + if ( eval != null && aastr != null ) { HashMap newAts = new HashMap(eval.getAttributes()); newAts.put("ANCESTRALALLELE", aastr); - eval = VariantContext.modifyAttributes(eval, newAts); } - HashMap> stateMap = new HashMap>(); - for ( VariantStratifier vs : stratificationObjects ) { - ArrayList states = vs.getRelevantStates(ref, tracker, comp, compName, eval, evalName, sampleName); - stateMap.put(vs, states); - } + // for each comp track + for ( final RodBinding compRod : comps ) { + // no sample stratification for comps + final Set compSet = compVCs.get(compRod) == null ? new HashSet(0) : compVCs.get(compRod).values().iterator().next(); - ArrayList stateKeys = new ArrayList(); - variantEvalUtils.initializeStateKeys(stateMap, null, null, stateKeys); + // find the comp + final VariantContext comp = findMatchingComp(eval, compSet); - HashSet stateKeysHash = new HashSet(stateKeys); + HashMap> stateMap = new HashMap>(); + for ( VariantStratifier vs : stratificationObjects ) { + ArrayList states = vs.getRelevantStates(ref, tracker, comp, compRod.getName(), eval, evalRod.getName(), sampleName); + stateMap.put(vs, states); + } - for ( StateKey stateKey : stateKeysHash ) { - NewEvaluationContext nec = evaluationContexts.get(stateKey); + ArrayList stateKeys = new ArrayList(); + variantEvalUtils.initializeStateKeys(stateMap, null, null, stateKeys); - synchronized (nec) { - nec.apply(tracker, ref, context, comp, eval); + HashSet stateKeysHash = new HashSet(stateKeys); + + for ( StateKey stateKey : stateKeysHash ) { + NewEvaluationContext nec = evaluationContexts.get(stateKey); + + // eval against the comp + synchronized (nec) { + nec.apply(tracker, ref, context, comp, eval); + } + + // eval=null against all comps of different type + for ( VariantContext otherComp : compSet ) { + if ( otherComp != comp ) { + synchronized (nec) { + nec.apply(tracker, ref, context, otherComp, null); + } + } + } } } } @@ -286,6 +305,38 @@ public class VariantEvalWalker extends RodWalker implements Tr return null; } + private VariantContext findMatchingComp(final VariantContext eval, final Set comps) { + // if no comps, return null + if ( comps == null || comps.isEmpty() ) + return null; + + // if no eval, return any comp + if ( eval == null ) + return comps.iterator().next(); + + // find all of the matching comps + List matchingComps = new ArrayList(comps.size()); + for ( VariantContext comp : comps ) { + if ( comp.getType() == eval.getType() ) + matchingComps.add(comp); + } + + // if no matching comp, return null + if ( matchingComps.size() == 0 ) + return null; + + // find the comp which matches the alternate allele from eval + Allele altEval = eval.getAlternateAlleles().size() == 0 ? null : eval.getAlternateAllele(0); + for ( VariantContext comp : matchingComps ) { + Allele altComp = comp.getAlternateAlleles().size() == 0 ? null : comp.getAlternateAllele(0); + if ( (altEval == null && altComp == null) || (altEval != null && altEval.equals(altComp)) ) + return comp; + } + + // if none match, just return the first one + return matchingComps.get(0); + } + public Integer treeReduce(Integer lhs, Integer rhs) { return null; } @Override diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CountVariants.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CountVariants.java index 8c281b2f8..87b8bac1d 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CountVariants.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/evaluators/CountVariants.java @@ -93,28 +93,35 @@ public class CountVariants extends VariantEvaluator implements StandardEval { public String update1(VariantContext vc1, RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) { nCalledLoci++; - if (vc1.isVariant()) nVariantLoci++; - switch (vc1.getType()) { - case NO_VARIATION: - nRefLoci++; - break; - case SNP: - nSNPs++; - if (vc1.getAttributeAsBoolean("ISSINGLETON")) nSingletons++; - break; - case MNP: - nMNPs++; - if (vc1.getAttributeAsBoolean("ISSINGLETON")) nSingletons++; - break; - case INDEL: - if (vc1.isInsertion()) nInsertions++; - else nDeletions++; - break; - case MIXED: - nComplex++; - break; - default: - throw new ReviewedStingException("Unexpected VariantContext type " + vc1.getType()); + // Note from Eric: + // This is really not correct. What we really want here is a polymorphic vs. monomorphic count (i.e. on the Genotypes). + // So in order to maintain consistency with the previous implementation (and the intention of the original author), I've + // added in a proxy check for monomorphic status here. + if ( !vc1.isVariant() || (vc1.hasGenotypes() && vc1.getHomRefCount() == vc1.getNSamples()) ) { + nRefLoci++; + } else { + nVariantLoci++; + switch (vc1.getType()) { + case NO_VARIATION: + break; + case SNP: + nSNPs++; + if (vc1.getAttributeAsBoolean("ISSINGLETON")) nSingletons++; + break; + case MNP: + nMNPs++; + if (vc1.getAttributeAsBoolean("ISSINGLETON")) nSingletons++; + break; + case INDEL: + if (vc1.isInsertion()) nInsertions++; + else nDeletions++; + break; + case MIXED: + nComplex++; + break; + default: + throw new ReviewedStingException("Unexpected VariantContext type " + vc1.getType()); + } } String refStr = vc1.getReference().getBaseString().toUpperCase(); diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/VariantEvalUtils.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/VariantEvalUtils.java index 61a959c99..33fb008ca 100755 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/VariantEvalUtils.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/varianteval/util/VariantEvalUtils.java @@ -1,6 +1,7 @@ package org.broadinstitute.sting.gatk.walkers.varianteval.util; import org.apache.log4j.Logger; +import org.broadinstitute.sting.commandline.RodBinding; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.report.GATKReport; @@ -56,8 +57,9 @@ public class VariantEvalUtils { /** * Initialize required, standard and user-specified stratification objects * - * @param noStandardStrats don't use the standard stratifications - * @param modulesToUse the list of stratification modules to use + * @param variantEvalWalker the parent walker + * @param noStandardStrats don't use the standard stratifications + * @param modulesToUse the list of stratification modules to use * @return set of stratifications to use */ public TreeSet initializeStratificationObjects(VariantEvalWalker variantEvalWalker, boolean noStandardStrats, String[] modulesToUse) { @@ -256,23 +258,6 @@ public class VariantEvalUtils { return report; } - /** - * Figure out what the allowable variation types are based on the eval context - * - * @param tracker the reference metadata tracker - * @param ref the reference context - * @param compNames the comp track names - * @param evalNames the evaluation track names - * @return the set of allowable variation types - */ - public EnumSet getAllowableVariationTypes(RefMetaDataTracker tracker, - ReferenceContext ref, - Set compNames, - Set evalNames, - boolean dynamicSelectTypes ) { - return EnumSet.allOf(VariantContext.Type.class); - } - /** * Subset a VariantContext to a single sample * @@ -295,7 +280,7 @@ public class VariantEvalUtils { * @return a new VariantContext with just the requested samples */ public VariantContext getSubsetOfVariantContext(VariantContext vc, Collection sampleNames) { - VariantContext vcsub = vc.subContextFromGenotypes(vc.getGenotypes(sampleNames).values()); + VariantContext vcsub = vc.subContextFromGenotypes(vc.getGenotypes(sampleNames).values(), vc.getAlleles()); HashMap newAts = new HashMap(vcsub.getAttributes()); @@ -321,78 +306,59 @@ public class VariantEvalUtils { * * @param tracker the metadata tracker * @param ref the reference context - * @param trackNames the list of track names to process - * @param allowableTypes a set of allowable variation types + * @param tracks the list of tracks to process * @param byFilter if false, only accept PASSing VariantContexts. Otherwise, accept both PASSing and filtered * sites * @param subsetBySample if false, do not separate the track into per-sample VCs * @param trackPerSample if false, don't stratify per sample (and don't cut up the VariantContext like we would need * to do this) - * @return a mapping of track names to a list of VariantContext objects + * + * @return the mapping of track to VC list that should be populated */ - protected void bindVariantContexts(HashMap> bindings, RefMetaDataTracker tracker, ReferenceContext ref, Set trackNames, EnumSet allowableTypes, boolean byFilter, boolean subsetBySample, boolean trackPerSample) { - for (String trackName : trackNames) { - HashMap vcs = new HashMap(); + public HashMap, HashMap>> bindVariantContexts(RefMetaDataTracker tracker, ReferenceContext ref, List> tracks, boolean byFilter, boolean subsetBySample, boolean trackPerSample) { + if ( tracker == null ) + return null; - VariantContext vc = tracker == null ? null : tracker.getFirstValue(VariantContext.class, trackName, ref.getLocus()); + HashMap, HashMap>> bindings = new HashMap, HashMap>>(); - // First, filter the VariantContext to represent only the samples for evaluation - if (vc != null) { + for ( RodBinding track : tracks ) { + HashMap> mapping = new HashMap>(); + + for ( VariantContext vc : tracker.getValues(track, ref.getLocus()) ) { + + // First, filter the VariantContext to represent only the samples for evaluation VariantContext vcsub = vc; - if (subsetBySample && vc.hasGenotypes() && vc.hasGenotypes(variantEvalWalker.getSampleNamesForEvaluation())) { + if ( subsetBySample && vc.hasGenotypes() && vc.hasGenotypes(variantEvalWalker.getSampleNamesForEvaluation()) ) { vcsub = getSubsetOfVariantContext(vc, variantEvalWalker.getSampleNamesForEvaluation()); } - if ((byFilter || !vcsub.isFiltered())) { - vcs.put(VariantEvalWalker.getAllSampleName(), vcsub); + if ( (byFilter || !vcsub.isFiltered()) ) { + addMapping(mapping, VariantEvalWalker.getAllSampleName(), vcsub); } // Now, if stratifying, split the subsetted vc per sample and add each as a new context - if (vc.hasGenotypes() && trackPerSample) { - for (String sampleName : variantEvalWalker.getSampleNamesForEvaluation()) { + if ( vc.hasGenotypes() && trackPerSample ) { + for ( String sampleName : variantEvalWalker.getSampleNamesForEvaluation() ) { VariantContext samplevc = getSubsetOfVariantContext(vc, sampleName); - if ((byFilter || !samplevc.isFiltered())) { - vcs.put(sampleName, samplevc); + if ( byFilter || !samplevc.isFiltered() ) { + addMapping(mapping, sampleName, samplevc); } } } - bindings.put(trackName, vcs); + bindings.put(track, mapping); } } + + return bindings; } - /** - * Maps track names to sample name to VariantContext objects. For eval tracks, VariantContexts per specified sample - * are also included. - * - * @param tracker the metadata tracker - * @param ref the reference context - * @param compNames the list of comp names to process - * @param evalNames the list of eval names to process - * @return a mapping of track names to a list of VariantContext objects - */ - public HashMap> getVariantContexts(RefMetaDataTracker tracker, ReferenceContext ref, Set compNames, Set evalNames, boolean dynamicSelectTypes) { - HashMap> vcs = new HashMap>(); - - EnumSet allowableTypes = getAllowableVariationTypes(tracker, ref, compNames, evalNames, dynamicSelectTypes); - - boolean byFilter = false; - boolean perSampleIsEnabled = false; - for (VariantStratifier vs : variantEvalWalker.getStratificationObjects()) { - if (vs.getClass().getSimpleName().equals("Filter")) { - byFilter = true; - } else if (vs.getClass().getSimpleName().equals("Sample")) { - perSampleIsEnabled = true; - } - } - - bindVariantContexts(vcs, tracker, ref, evalNames, allowableTypes, byFilter, true, perSampleIsEnabled); - bindVariantContexts(vcs, tracker, ref, compNames, allowableTypes, byFilter, false, false); - - return vcs; + private void addMapping(HashMap> mappings, String sample, VariantContext vc) { + if ( !mappings.containsKey(sample) ) + mappings.put(sample, new HashSet()); + mappings.get(sample).add(vc); } /** diff --git a/public/java/test/org/broadinstitute/sting/BaseTest.java b/public/java/test/org/broadinstitute/sting/BaseTest.java index 7a749c0a2..63faf1ab9 100755 --- a/public/java/test/org/broadinstitute/sting/BaseTest.java +++ b/public/java/test/org/broadinstitute/sting/BaseTest.java @@ -67,6 +67,7 @@ public abstract class BaseTest { public static final String b36dbSNP129 = dbsnpDataLocation + "dbsnp_129_b36.vcf"; public static final String b37dbSNP129 = dbsnpDataLocation + "dbsnp_129_b37.vcf"; public static final String b37dbSNP132 = dbsnpDataLocation + "dbsnp_132_b37.vcf"; + public static final String hg18dbSNP132 = dbsnpDataLocation + "dbsnp_132.hg18.vcf"; public static final String hapmapDataLocation = comparisonDataLocation + "Validated/HapMap/3.3/"; public static final String b37hapmapGenotypes = hapmapDataLocation + "genotypes_r27_nr.b37_fwd.vcf"; diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java index 88c5116b1..da0c8f81f 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperIntegrationTest.java @@ -16,8 +16,8 @@ import java.util.Map; public class UnifiedGenotyperIntegrationTest extends WalkerTest { - private final static String baseCommand = "-T UnifiedGenotyper -R " + b36KGReference + " -NO_HEADER -glm BOTH"; - private final static String baseCommandIndels = "-T UnifiedGenotyper -R " + b36KGReference + " -NO_HEADER -glm INDEL"; + private final static String baseCommand = "-T UnifiedGenotyper -R " + b36KGReference + " -NO_HEADER -glm BOTH --dbsnp " + b36dbSNP129; + private final static String baseCommandIndels = "-T UnifiedGenotyper -R " + b36KGReference + " -NO_HEADER -glm INDEL --dbsnp " + b36dbSNP129; // -------------------------------------------------------------------------------------------------------------- // @@ -28,7 +28,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { public void testMultiSamplePilot1() { WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( baseCommand + " -I " + validationDataLocation + "low_coverage_CEU.chr1.10k-11k.bam -o %s -L 1:10,022,000-10,025,000", 1, - Arrays.asList("16b0c7b47745abcd1ddaa2e261719530")); + Arrays.asList("149e6ad9b3fd23551254a691286a96b3")); executeTest("test MultiSample Pilot1", spec); } @@ -45,7 +45,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { GenomeAnalysisEngine.resetRandomGenerator(); WalkerTest.WalkerTestSpec spec2 = new WalkerTest.WalkerTestSpec( - baseCommand + " --genotyping_mode GENOTYPE_GIVEN_ALLELES -B:alleles,vcf " + result.get(0).getAbsolutePath() + " -I " + validationDataLocation + "pilot2_daughters.chr20.10k-11k.bam -o %s -L 20:10,000,000-10,050,000", 1, + baseCommand + " --genotyping_mode GENOTYPE_GIVEN_ALLELES -alleles " + result.get(0).getAbsolutePath() + " -I " + validationDataLocation + "pilot2_daughters.chr20.10k-11k.bam -o %s -L 20:10,000,000-10,050,000", 1, Arrays.asList(md5)); executeTest("test MultiSample Pilot2 with alleles passed in", spec2); } @@ -53,13 +53,13 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { @Test public void testWithAllelesPassedIn() { WalkerTest.WalkerTestSpec spec1 = new WalkerTest.WalkerTestSpec( - baseCommand + " --genotyping_mode GENOTYPE_GIVEN_ALLELES -B:alleles,vcf " + validationDataLocation + "allelesForUG.vcf -I " + validationDataLocation + "pilot2_daughters.chr20.10k-11k.bam -o %s -L 20:10,000,000-10,025,000", 1, - Arrays.asList("811ddc0bd8322b14f14f58df8c627aa9")); + baseCommand + " --genotyping_mode GENOTYPE_GIVEN_ALLELES -alleles " + validationDataLocation + "allelesForUG.vcf -I " + validationDataLocation + "pilot2_daughters.chr20.10k-11k.bam -o %s -L 20:10,000,000-10,025,000", 1, + Arrays.asList("8de2602679ffc92388da0b6cb4325ef6")); executeTest("test MultiSample Pilot2 with alleles passed in", spec1); WalkerTest.WalkerTestSpec spec2 = new WalkerTest.WalkerTestSpec( - baseCommand + " --output_mode EMIT_ALL_SITES --genotyping_mode GENOTYPE_GIVEN_ALLELES -B:alleles,vcf " + validationDataLocation + "allelesForUG.vcf -I " + validationDataLocation + "pilot2_daughters.chr20.10k-11k.bam -o %s -L 20:10,000,000-10,025,000", 1, - Arrays.asList("5cf08dd7ac3d218082f7be3915ce0b15")); + baseCommand + " --output_mode EMIT_ALL_SITES --genotyping_mode GENOTYPE_GIVEN_ALLELES -alleles " + validationDataLocation + "allelesForUG.vcf -I " + validationDataLocation + "pilot2_daughters.chr20.10k-11k.bam -o %s -L 20:10,000,000-10,025,000", 1, + Arrays.asList("ec43daadfb15b00b41aeb0017a45df0b")); executeTest("test MultiSample Pilot2 with alleles passed in and emitting all sites", spec2); } @@ -67,7 +67,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { public void testSingleSamplePilot2() { WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -o %s -L 1:10,000,000-10,100,000", 1, - Arrays.asList("75156264696563c2f47620fef9424f7c")); + Arrays.asList("82d469145c174486ccc494884852cc58")); executeTest("test SingleSample Pilot2", spec); } @@ -77,7 +77,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { // // -------------------------------------------------------------------------------------------------------------- - private final static String COMPRESSED_OUTPUT_MD5 = "7255e03430549cb97d8fcae34cbffb02"; + private final static String COMPRESSED_OUTPUT_MD5 = "a5a9f38c645d6004d4640765a8b77ce4"; @Test public void testCompressedOutput() { @@ -107,7 +107,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { // Note that we need to turn off any randomization for this to work, so no downsampling and no annotations - String md5 = "7912109e83fda21dae90ef8d5dd0140d"; + String md5 = "0a45761c0e557d9c2080eb9e7f4f6c41"; WalkerTest.WalkerTestSpec spec1 = new WalkerTest.WalkerTestSpec( baseCommand + " -dt NONE -G none -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -o %s -L 1:10,000,000-10,075,000", 1, @@ -138,10 +138,9 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { @Test public void testCallingParameters() { HashMap e = new HashMap(); - e.put( "--min_base_quality_score 26", "6d3aa9f783ca63f37c952f83eeda593c" ); - e.put( "--min_mapping_quality_score 26", "51bfdf777123bf49de5d92ffde5c74e7" ); - e.put( "--p_nonref_model GRID_SEARCH", "333328ab2c8da2875fade599e80a271f" ); - e.put( "--computeSLOD", "226caa28a4fa9fe34f3beb8a23f3d53d" ); + e.put( "--min_base_quality_score 26", "531966aee1cd5dced61c96c4fedb59a9" ); + e.put( "--min_mapping_quality_score 26", "c71ca370947739cb7d87b59452be7a07" ); + e.put( "--computeSLOD", "1a5648f26c18ced27df4be031b44e72d" ); for ( Map.Entry entry : e.entrySet() ) { WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( @@ -154,9 +153,9 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { @Test public void testOutputParameter() { HashMap e = new HashMap(); - e.put( "-sites_only", "5f659dee408710d3709ed72005cd863a" ); - e.put( "--output_mode EMIT_ALL_CONFIDENT_SITES", "55d09bf13149bddc06cc36be0801507b" ); - e.put( "--output_mode EMIT_ALL_SITES", "727f49dcb2439b18446829efc3b1561c" ); + e.put( "-sites_only", "d40114aa201aa33ff5f174f15b6b73af" ); + e.put( "--output_mode EMIT_ALL_CONFIDENT_SITES", "3c681b053fd2280f3c42041d24243752" ); + e.put( "--output_mode EMIT_ALL_SITES", "eafa6d71c5ecd64dfee5d7a3f60e392e" ); for ( Map.Entry entry : e.entrySet() ) { WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( @@ -170,12 +169,12 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { public void testConfidence() { WalkerTest.WalkerTestSpec spec1 = new WalkerTest.WalkerTestSpec( baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -o %s -L 1:10,000,000-10,010,000 -stand_call_conf 10 ", 1, - Arrays.asList("51bfdf777123bf49de5d92ffde5c74e7")); + Arrays.asList("c71ca370947739cb7d87b59452be7a07")); executeTest("test confidence 1", spec1); WalkerTest.WalkerTestSpec spec2 = new WalkerTest.WalkerTestSpec( baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -o %s -L 1:10,000,000-10,010,000 -stand_emit_conf 10 ", 1, - Arrays.asList("c67c285e70fd4457c9f9ce7bd878ddca")); + Arrays.asList("1c0a599d475cc7d5e745df6e9b6c0d29")); executeTest("test confidence 2", spec2); } @@ -187,8 +186,8 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { @Test public void testHeterozyosity() { HashMap e = new HashMap(); - e.put( 0.01, "7ecc564d4db97d5932cef2e558550ed2" ); - e.put( 1.0 / 1850, "aa9e101bb9f9e111fe292fec467d915a" ); + e.put( 0.01, "af5199fbc0853cf5888acdcc88f012bc" ); + e.put( 1.0 / 1850, "4e6938645ccde1fdf204ffbf4e88170f" ); for ( Map.Entry entry : e.entrySet() ) { WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( @@ -212,7 +211,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { " -o %s" + " -L 1:10,000,000-10,100,000", 1, - Arrays.asList("2efd686186b2c5129be4cf89274a24dd")); + Arrays.asList("213ebaaaacf850312d885e918eb33500")); executeTest(String.format("test multiple technologies"), spec); } @@ -231,7 +230,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { " -L 1:10,000,000-10,100,000" + " -baq CALCULATE_AS_NECESSARY", 1, - Arrays.asList("2892d35331fe9fc141ba19269ec7caed")); + Arrays.asList("3aecba34a89f3525afa57a38dc20e6cd")); executeTest(String.format("test calling with BAQ"), spec); } @@ -250,7 +249,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { " -o %s" + " -L 1:10,000,000-10,500,000", 1, - Arrays.asList("8c2afb4289ed44521933d1a74c8d6c7f")); + Arrays.asList("043973c719a85de29a35a33a674616fb")); executeTest(String.format("test indel caller in SLX"), spec); } @@ -265,7 +264,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { " -minIndelCnt 1" + " -L 1:10,000,000-10,100,000", 1, - Arrays.asList("b6fb70590a10e1c27fb611732916f27d")); + Arrays.asList("68d4e6c1849e892467aed61c33e7bf24")); executeTest(String.format("test indel caller in SLX witn low min allele count"), spec); } @@ -278,7 +277,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { " -o %s" + " -L 1:10,000,000-10,500,000", 1, - Arrays.asList("61642502bd08cc03cdaaeb83a5426b46")); + Arrays.asList("f86d453c5d2d2f33fb28ae2050658a5e")); executeTest(String.format("test indel calling, multiple technologies"), spec); } @@ -286,16 +285,16 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest { @Test public void testWithIndelAllelesPassedIn() { WalkerTest.WalkerTestSpec spec1 = new WalkerTest.WalkerTestSpec( - baseCommandIndels + " --genotyping_mode GENOTYPE_GIVEN_ALLELES -B:alleles,vcf " + validationDataLocation + "indelAllelesForUG.vcf -I " + validationDataLocation + + baseCommandIndels + " --genotyping_mode GENOTYPE_GIVEN_ALLELES -alleles " + validationDataLocation + "indelAllelesForUG.vcf -I " + validationDataLocation + "pilot2_daughters.chr20.10k-11k.bam -o %s -L 20:10,000,000-10,100,000", 1, - Arrays.asList("69b0b3f089c80b9864294d838a061336")); + Arrays.asList("408d3aba4d094c067fc00a43992c2292")); executeTest("test MultiSample Pilot2 indels with alleles passed in", spec1); WalkerTest.WalkerTestSpec spec2 = new WalkerTest.WalkerTestSpec( - baseCommandIndels + " --output_mode EMIT_ALL_SITES --genotyping_mode GENOTYPE_GIVEN_ALLELES -B:alleles,vcf " + baseCommandIndels + " --output_mode EMIT_ALL_SITES --genotyping_mode GENOTYPE_GIVEN_ALLELES -alleles " + validationDataLocation + "indelAllelesForUG.vcf -I " + validationDataLocation + "pilot2_daughters.chr20.10k-11k.bam -o %s -L 20:10,000,000-10,100,000", 1, - Arrays.asList("c90174cfd7dd68bdef36fe2c60145e10")); + Arrays.asList("94977d6e42e764280e9deaf4e3ac8c80")); executeTest("test MultiSample Pilot2 indels with alleles passed in and emitting all sites", spec2); } diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperPerformanceTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperPerformanceTest.java index fb7e84d22..3ff453dab 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperPerformanceTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/genotyper/UnifiedGenotyperPerformanceTest.java @@ -15,7 +15,7 @@ public class UnifiedGenotyperPerformanceTest extends WalkerTest { " -glm BOTH" + " -I " + evaluationDataLocation + "NA12878.GAII.chr1.50MB.bam" + " -L chr1:1-50,000,000" + - " --dbsnp:VCF " + b36dbSNP129 + + " --dbsnp:VCF " + hg18dbSNP132 + " -o /dev/null", 0, new ArrayList(0)); @@ -30,7 +30,7 @@ public class UnifiedGenotyperPerformanceTest extends WalkerTest { " -glm BOTH" + " -I " + evaluationDataLocation + "NA12878.ESP.WEx.chr1.bam" + " -L " + evaluationDataLocation + "whole_exome_agilent_designed_120.targets.chr1.interval_list" + - " --dbsnp:vcf " + b36dbSNP129 + + " --dbsnp:vcf " + hg18dbSNP132 + " -o /dev/null", 0, new ArrayList(0)); @@ -46,7 +46,7 @@ public class UnifiedGenotyperPerformanceTest extends WalkerTest { " -glm BOTH" + " -L chr1:1-50,000,000" + " -nt 10" + - " --dbsnp:vcf " + b36dbSNP129 + + " --dbsnp:vcf " + hg18dbSNP132 + " -o /dev/null", 0, new ArrayList(0)); diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/recalibration/RecalibrationWalkersPerformanceTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/recalibration/RecalibrationWalkersPerformanceTest.java index 43ea401f7..bccb95795 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/recalibration/RecalibrationWalkersPerformanceTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/recalibration/RecalibrationWalkersPerformanceTest.java @@ -16,7 +16,7 @@ public class RecalibrationWalkersPerformanceTest extends WalkerTest { " -L chr1:1-50,000,000" + " -standard" + " -OQ" + - " -B:dbsnp,VCF " + GATKDataLocation + "dbsnp_132.hg18.vcf" + + " -knownSites " + GATKDataLocation + "dbsnp_132.hg18.vcf" + " -recalFile /dev/null" + moreArgs, 0, new ArrayList(0)); @@ -31,7 +31,7 @@ public class RecalibrationWalkersPerformanceTest extends WalkerTest { " -L " + evaluationDataLocation + "whole_exome_agilent_designed_120.targets.chr1.interval_list" + " -standard" + " -OQ" + - " -B:dbsnp,VCF " + GATKDataLocation + "dbsnp_132.hg18.vcf" + + " -knownSites " + GATKDataLocation + "dbsnp_132.hg18.vcf" + " -recalFile /dev/null" + moreArgs, 0, new ArrayList(0)); diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java index 8fa5f0c29..1de9a72d8 100755 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalIntegrationTest.java @@ -20,8 +20,8 @@ public class VariantEvalIntegrationTest extends WalkerTest { buildCommandLine( "-T VariantEval", "-R " + b37KGReference, - "-B:dbsnp,VCF " + b37dbSNP132, - "-B:eval,VCF " + fundamentalTestVCF, + "--dbsnp " + b37dbSNP132, + "--eval " + fundamentalTestVCF, "-noEV", "-EV CountVariants", "-noST", @@ -40,8 +40,8 @@ public class VariantEvalIntegrationTest extends WalkerTest { buildCommandLine( "-T VariantEval", "-R " + b37KGReference, - "-B:dbsnp,VCF " + b37dbSNP132, - "-B:eval,VCF " + fundamentalTestVCF, + "--dbsnp " + b37dbSNP132, + "--eval " + fundamentalTestVCF, "-noEV", "-EV CountVariants", "-noST", @@ -61,8 +61,8 @@ public class VariantEvalIntegrationTest extends WalkerTest { buildCommandLine( "-T VariantEval", "-R " + b37KGReference, - "-B:dbsnp,VCF " + b37dbSNP132, - "-B:eval,VCF " + fundamentalTestVCF, + "--dbsnp " + b37dbSNP132, + "--eval " + fundamentalTestVCF, "-noEV", "-EV CountVariants", "-noST", @@ -83,8 +83,8 @@ public class VariantEvalIntegrationTest extends WalkerTest { buildCommandLine( "-T VariantEval", "-R " + b37KGReference, - "-B:dbsnp,VCF " + b37dbSNP132, - "-B:eval,VCF " + fundamentalTestVCF, + "--dbsnp " + b37dbSNP132, + "--eval " + fundamentalTestVCF, "-noEV", "-EV CountVariants", "-noST", @@ -104,8 +104,8 @@ public class VariantEvalIntegrationTest extends WalkerTest { buildCommandLine( "-T VariantEval", "-R " + b37KGReference, - "-B:dbsnp,VCF " + b37dbSNP132, - "-B:eval,VCF " + fundamentalTestVCF, + "--dbsnp " + b37dbSNP132, + "--eval " + fundamentalTestVCF, "-noEV", "-EV CountVariants", "-noST", @@ -125,8 +125,8 @@ public class VariantEvalIntegrationTest extends WalkerTest { buildCommandLine( "-T VariantEval", "-R " + b37KGReference, - "-B:dbsnp,VCF " + b37dbSNP132, - "-B:eval,VCF " + fundamentalTestVCF, + "--dbsnp " + b37dbSNP132, + "--eval " + fundamentalTestVCF, "-noEV", "-EV CountVariants", "-noST", @@ -146,8 +146,8 @@ public class VariantEvalIntegrationTest extends WalkerTest { buildCommandLine( "-T VariantEval", "-R " + b37KGReference, - "-B:dbsnp,VCF " + b37dbSNP132, - "-B:eval,VCF " + fundamentalTestVCF, + "--dbsnp " + b37dbSNP132, + "--eval " + fundamentalTestVCF, "-noEV", "-EV CountVariants", "-noST", @@ -167,8 +167,8 @@ public class VariantEvalIntegrationTest extends WalkerTest { buildCommandLine( "-T VariantEval", "-R " + b37KGReference, - "-B:dbsnp,VCF " + b37dbSNP132, - "-B:eval,VCF " + fundamentalTestVCF, + "--dbsnp " + b37dbSNP132, + "--eval " + fundamentalTestVCF, "-noEV", "-EV CountVariants", "-noST", @@ -190,8 +190,8 @@ public class VariantEvalIntegrationTest extends WalkerTest { buildCommandLine( "-T VariantEval", "-R " + b37KGReference, - "-B:dbsnp,VCF " + b37dbSNP132, - "-B:eval,VCF " + fundamentalTestVCF, + "--dbsnp " + b37dbSNP132, + "--eval " + fundamentalTestVCF, "-noEV", "-EV CountVariants", "-noST", @@ -215,7 +215,7 @@ public class VariantEvalIntegrationTest extends WalkerTest { buildCommandLine( "-T VariantEval", "-R " + b37KGReference, - "-B:eval,VCF " + fundamentalTestVCF, + "--eval " + fundamentalTestVCF, "-noEV", "-EV CountVariants", "-noST", @@ -232,11 +232,11 @@ public class VariantEvalIntegrationTest extends WalkerTest { public void testSelect1() { String extraArgs = "-L 1:1-10,000,000"; String tests = cmdRoot + - " -B:dbsnp,VCF " + b36dbSNP129 + - " -B:eval,VCF3 " + validationDataLocation + "yri.trio.gatk_glftrio.intersection.annotated.filtered.chr1.vcf" + - " -B:comp_genotypes,VCF3 " + validationDataLocation + "yri.trio.gatk.ug.head.vcf"; + " --dbsnp " + b36dbSNP129 + + " --eval " + validationDataLocation + "yri.trio.gatk_glftrio.intersection.annotated.filtered.chr1.vcf" + + " --comp:comp_genotypes,VCF3 " + validationDataLocation + "yri.trio.gatk.ug.head.vcf"; WalkerTestSpec spec = new WalkerTestSpec(withSelect(tests, "DP < 50", "DP50") + " " + extraArgs + " -ST CpG -o %s", - 1, Arrays.asList("14054badcd89b24c2375e1d09918f681")); + 1, Arrays.asList("125fe0a04b5d933cc14016598b2791cd")); executeTestParallel("testSelect1", spec); } @@ -244,7 +244,7 @@ public class VariantEvalIntegrationTest extends WalkerTest { public void testVEGenotypeConcordance() { String vcfFile = "GenotypeConcordanceEval.vcf"; - WalkerTestSpec spec = new WalkerTestSpec(cmdRoot + " -ST CpG -B:eval,VCF3 " + validationDataLocation + vcfFile + " -B:comp,VCF3 " + validationDataLocation + "GenotypeConcordanceComp.vcf -noEV -EV GenotypeConcordance -o %s", + WalkerTestSpec spec = new WalkerTestSpec(cmdRoot + " -ST CpG --eval:VCF3 " + validationDataLocation + vcfFile + " --comp:VCF3 " + validationDataLocation + "GenotypeConcordanceComp.vcf -noEV -EV GenotypeConcordance -o %s", 1, Arrays.asList("96f27163f16bb945f19c6623cd6db34e")); executeTestParallel("testVEGenotypeConcordance" + vcfFile, spec); @@ -252,7 +252,7 @@ public class VariantEvalIntegrationTest extends WalkerTest { @Test public void testCompVsEvalAC() { - String extraArgs = "-T VariantEval -R "+b36KGReference+" -o %s -ST CpG -EV GenotypeConcordance -B:evalYRI,VCF3 " + validationDataLocation + "yri.trio.gatk.ug.very.few.lines.vcf -B:compYRI,VCF3 " + validationDataLocation + "yri.trio.gatk.fake.genotypes.ac.test.vcf"; + String extraArgs = "-T VariantEval -R "+b36KGReference+" -o %s -ST CpG -EV GenotypeConcordance --eval:evalYRI,VCF3 " + validationDataLocation + "yri.trio.gatk.ug.very.few.lines.vcf --comp:compYRI,VCF3 " + validationDataLocation + "yri.trio.gatk.fake.genotypes.ac.test.vcf"; WalkerTestSpec spec = new WalkerTestSpec(extraArgs,1,Arrays.asList("d1932be3748fcf6da77dc51aec323710")); executeTestParallel("testCompVsEvalAC",spec); } @@ -263,14 +263,14 @@ public class VariantEvalIntegrationTest extends WalkerTest { @Test public void testTranches() { - String extraArgs = "-T VariantEval -R "+ hg18Reference +" -B:eval,vcf " + validationDataLocation + "GA2.WEx.cleaned.ug.snpfiltered.indelfiltered.optimized.vcf -o %s -EV TiTvVariantEvaluator -L chr1 -noEV -ST CpG -tf " + testDir + "tranches.6.txt"; + String extraArgs = "-T VariantEval -R "+ hg18Reference +" --eval " + validationDataLocation + "GA2.WEx.cleaned.ug.snpfiltered.indelfiltered.optimized.vcf -o %s -EV TiTvVariantEvaluator -L chr1 -noEV -ST CpG -tf " + testDir + "tranches.6.txt"; WalkerTestSpec spec = new WalkerTestSpec(extraArgs,1,Arrays.asList("984df6e94a546294fc7e0846cbac2dfe")); executeTestParallel("testTranches",spec); } @Test public void testCompOverlap() { - String extraArgs = "-T VariantEval -R " + b37KGReference + " -L " + validationDataLocation + "VariantEval/pacbio.hg19.intervals -B:comphapmap,vcf " + comparisonDataLocation + "Validated/HapMap/3.3/genotypes_r27_nr.b37_fwd.vcf -B:eval,vcf " + validationDataLocation + "VariantEval/pacbio.ts.recalibrated.vcf -noEV -EV CompOverlap -sn NA12878 -noST -ST Novelty -o %s"; + String extraArgs = "-T VariantEval -R " + b37KGReference + " -L " + validationDataLocation + "VariantEval/pacbio.hg19.intervals --comp:comphapmap " + comparisonDataLocation + "Validated/HapMap/3.3/genotypes_r27_nr.b37_fwd.vcf --eval " + validationDataLocation + "VariantEval/pacbio.ts.recalibrated.vcf -noEV -EV CompOverlap -sn NA12878 -noST -ST Novelty -o %s"; WalkerTestSpec spec = new WalkerTestSpec(extraArgs,1,Arrays.asList("462d4784dd55294ef9d5118217b157a5")); executeTestParallel("testCompOverlap",spec); } @@ -280,10 +280,10 @@ public class VariantEvalIntegrationTest extends WalkerTest { String extraArgs = "-T VariantEval -R " + b37KGReference + " -L 20" + - " -B:dbsnp,VCF " + b37dbSNP132 + - " -B:evalBI,VCF " + validationDataLocation + "VariantEval/ALL.20100201.chr20.bi.sites.vcf" + + " --dbsnp " + b37dbSNP132 + + " --eval:evalBI " + validationDataLocation + "VariantEval/ALL.20100201.chr20.bi.sites.vcf" + " -noST -ST Novelty -o %s"; - WalkerTestSpec spec = new WalkerTestSpec(extraArgs,1,Arrays.asList("0897dfba2f4a245faddce38000555cce")); + WalkerTestSpec spec = new WalkerTestSpec(extraArgs,1,Arrays.asList("cbea5f9f8c046d4c014d261db352c43b")); executeTestParallel("testEvalTrackWithoutGenotypes",spec); } @@ -291,11 +291,11 @@ public class VariantEvalIntegrationTest extends WalkerTest { public void testMultipleEvalTracksWithoutGenotypes() { String extraArgs = "-T VariantEval -R " + b37KGReference + " -L 20" + - " -B:dbsnp,VCF " + b37dbSNP132 + - " -B:evalBI,VCF " + validationDataLocation + "VariantEval/ALL.20100201.chr20.bi.sites.vcf" + - " -B:evalBC,VCF " + validationDataLocation + "VariantEval/ALL.20100201.chr20.bc.sites.vcf" + + " --dbsnp " + b37dbSNP132 + + " --eval:evalBI " + validationDataLocation + "VariantEval/ALL.20100201.chr20.bi.sites.vcf" + + " --eval:evalBC " + validationDataLocation + "VariantEval/ALL.20100201.chr20.bc.sites.vcf" + " -noST -ST Novelty -o %s"; - WalkerTestSpec spec = new WalkerTestSpec(extraArgs,1,Arrays.asList("ead3602e14ec2944b5d9e4dacc08c819")); + WalkerTestSpec spec = new WalkerTestSpec(extraArgs,1,Arrays.asList("d07a246963ae609643620c839b20cd1e")); executeTestParallel("testMultipleEvalTracksWithoutGenotypes",spec); } @@ -305,27 +305,27 @@ public class VariantEvalIntegrationTest extends WalkerTest { String extraArgs = "-T VariantEval" + " -R " + b37KGReference + - " -B:comp,VCF " + validationDataLocation + "/VariantEval/ALL.phase1.chr20.broad.snps.genotypes.subset.vcf" + - " -B:eval,VCF " + validationDataLocation + "/VariantEval/NA12878.hg19.HiSeq.WGS.cleaned.ug.snpfiltered.indelfiltered.optimized.cut.subset.vcf" + - " -B:dbsnp,VCF " + dbsnp + + " --comp " + validationDataLocation + "/VariantEval/ALL.phase1.chr20.broad.snps.genotypes.subset.vcf" + + " --eval " + validationDataLocation + "/VariantEval/NA12878.hg19.HiSeq.WGS.cleaned.ug.snpfiltered.indelfiltered.optimized.cut.subset.vcf" + + " --dbsnp " + dbsnp + " -L 20:10000000-10100000" + " -noST -noEV -ST Novelty -EV CompOverlap" + " -o %s"; - WalkerTestSpec spec = new WalkerTestSpec(extraArgs,1,Arrays.asList("167a347ce0729d1bc3d4fd5069ebd674")); + WalkerTestSpec spec = new WalkerTestSpec(extraArgs,1,Arrays.asList("a3c2177849cb00fdff99574cff7f0e4f")); executeTestParallel("testMultipleCompTracks",spec); } @Test public void testPerSampleAndSubsettedSampleHaveSameResults() { - String md5 = "40471a84b501eb440ee2d42e3081f228"; + String md5 = "dab415cc76846e18fcf8c78f2b2ee033"; WalkerTestSpec spec = new WalkerTestSpec( buildCommandLine( "-T VariantEval", "-R " + b37KGReference, - "-B:dbsnp,VCF " + b37dbSNP132, - "-B:eval,VCF " + fundamentalTestSNPsVCF, + "--dbsnp " + b37dbSNP132, + "--eval " + fundamentalTestSNPsVCF, "-noEV", "-EV CompOverlap", "-sn HG00625", @@ -342,8 +342,8 @@ public class VariantEvalIntegrationTest extends WalkerTest { buildCommandLine( "-T VariantEval", "-R " + b37KGReference, - "-B:dbsnp,VCF " + b37dbSNP132, - "-B:eval,VCF " + fundamentalTestSNPsOneSampleVCF, + "--dbsnp " + b37dbSNP132, + "--eval " + fundamentalTestSNPsOneSampleVCF, "-noEV", "-EV CompOverlap", "-noST", @@ -363,8 +363,8 @@ public class VariantEvalIntegrationTest extends WalkerTest { buildCommandLine( "-T VariantEval", "-R " + b37KGReference, - "-B:dbsnp,VCF " + b37dbSNP132, - "-B:eval,VCF " + fundamentalTestSNPsVCF, + "--dbsnp " + b37dbSNP132, + "--eval " + fundamentalTestSNPsVCF, "-noEV", "-EV CountVariants", "-noST", diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/VCFStreamingIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/VCFStreamingIntegrationTest.java index ec3d1f580..132a11273 100644 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/VCFStreamingIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/variantutils/VCFStreamingIntegrationTest.java @@ -93,8 +93,8 @@ public class VCFStreamingIntegrationTest extends WalkerTest { selectTestSpec = new WalkerTestSpec( "-T VariantEval" + " -R " + b36KGReference + - " -B:eval,vcf3 " + testFile + - " -B:comp,vcf,storage=STREAM " + tmpFifo.getAbsolutePath() + + " --eval,vcf3 " + testFile + + " --comp,vcf,storage=STREAM " + tmpFifo.getAbsolutePath() + " -EV CompOverlap -noEV -noST" + " -o %s", 1, diff --git a/settings/repository/org.broad/tribble-16.xml b/settings/repository/org.broad/tribble-16.xml deleted file mode 100644 index e23eec339..000000000 --- a/settings/repository/org.broad/tribble-16.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/settings/repository/org.broad/tribble-16.jar b/settings/repository/org.broad/tribble-18.jar similarity index 87% rename from settings/repository/org.broad/tribble-16.jar rename to settings/repository/org.broad/tribble-18.jar index 331f28ec3..1ea101dd0 100644 Binary files a/settings/repository/org.broad/tribble-16.jar and b/settings/repository/org.broad/tribble-18.jar differ diff --git a/settings/repository/org.broad/tribble-18.xml b/settings/repository/org.broad/tribble-18.xml new file mode 100644 index 000000000..d2648ddad --- /dev/null +++ b/settings/repository/org.broad/tribble-18.xml @@ -0,0 +1,3 @@ + + +