RodBinding names are now defaulting to the ArgumentTypeDescriptor fullname
Nearly all of the tools are passing integrationtests
This commit is contained in:
parent
d8f1ebf8c6
commit
d0279bb28c
|
|
@ -312,7 +312,7 @@ class RodBindingArgumentTypeDescriptor extends ArgumentTypeDescriptor {
|
|||
ArgumentDefinition defaultDefinition = createDefaultArgumentDefinition(source);
|
||||
String value = getArgumentValue( defaultDefinition, matches );
|
||||
try {
|
||||
String name = source.field.getName();
|
||||
String name = defaultDefinition.fullName;
|
||||
String tribbleType;
|
||||
Tags tags = getArgumentTags(matches);
|
||||
// must have one or two tag values here
|
||||
|
|
|
|||
|
|
@ -0,0 +1,179 @@
|
|||
/*
|
||||
* 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.walkers.qc;
|
||||
|
||||
import org.broadinstitute.sting.commandline.Argument;
|
||||
import org.broadinstitute.sting.commandline.Output;
|
||||
import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
||||
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
||||
import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource;
|
||||
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||
import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature;
|
||||
import org.broadinstitute.sting.gatk.refdata.utils.RODRecordList;
|
||||
import org.broadinstitute.sting.gatk.walkers.Reference;
|
||||
import org.broadinstitute.sting.gatk.walkers.RodWalker;
|
||||
import org.broadinstitute.sting.gatk.walkers.Window;
|
||||
import org.broadinstitute.sting.utils.exceptions.ReviewedStingException;
|
||||
import org.broadinstitute.sting.utils.variantcontext.VariantContext;
|
||||
|
||||
import java.io.*;
|
||||
import java.math.BigInteger;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* a walker for validating (in the style of validating pile-up) the ROD system.
|
||||
*/
|
||||
@Reference(window=@Window(start=-40,stop=40))
|
||||
public class RodSystemValidationWalker extends RodWalker<Integer,Integer> {
|
||||
|
||||
// the divider to use in some of the text output
|
||||
private static final String DIVIDER = ",";
|
||||
|
||||
@Output
|
||||
public PrintStream out;
|
||||
|
||||
@Argument(fullName="PerLocusEqual",required=false,doc="Should we check that all records at the same site produce equivilent variant contexts")
|
||||
public boolean allRecordsVariantContextEquivalent = false;
|
||||
|
||||
// used to calculate the MD5 of a file
|
||||
MessageDigest digest = null;
|
||||
|
||||
// we sometimes need to know what rods the engine's seen
|
||||
List<ReferenceOrderedDataSource> rodList;
|
||||
|
||||
/**
|
||||
* emit the md5 sums for each of the input ROD files (will save up a lot of time if and when the ROD files change
|
||||
* underneath us).
|
||||
*/
|
||||
public void initialize() {
|
||||
// setup the MD5-er
|
||||
try {
|
||||
digest = MessageDigest.getInstance("MD5");
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
throw new ReviewedStingException("Unable to find MD5 checksumer");
|
||||
}
|
||||
out.println("Header:");
|
||||
// enumerate the list of ROD's we've loaded
|
||||
rodList = this.getToolkit().getRodDataSources();
|
||||
for (ReferenceOrderedDataSource rod : rodList) {
|
||||
out.println(rod.getName() + DIVIDER + rod.getType());
|
||||
out.println(rod.getName() + DIVIDER + rod.getFile());
|
||||
out.println(rod.getName() + DIVIDER + md5sum(rod.getFile()));
|
||||
}
|
||||
out.println("Data:");
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param tracker the ref meta data tracker to get RODs
|
||||
* @param ref reference context
|
||||
* @param context the reads
|
||||
* @return an 1 for each site with a rod(s), 0 otherwise
|
||||
*/
|
||||
@Override
|
||||
public Integer map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) {
|
||||
int ret = 0;
|
||||
if (tracker != null && tracker.getNTracksWithBoundFeatures() > 0) {
|
||||
out.print(context.getLocation() + DIVIDER);
|
||||
for (RODRecordList rod: tracker.getBoundRodTracks())
|
||||
out.print(rod.getName() + DIVIDER);
|
||||
out.println(";");
|
||||
ret++;
|
||||
}
|
||||
|
||||
// if the argument was set, check for equivalence
|
||||
if (allRecordsVariantContextEquivalent && tracker != null) {
|
||||
Collection<VariantContext> col = tracker.getValues(VariantContext.class);
|
||||
VariantContext con = null;
|
||||
for (VariantContext contextInList : col)
|
||||
if (con == null) con = contextInList;
|
||||
else if (!con.equals(col)) out.println("FAIL: context " + col + " doesn't match " + con);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provide an initial value for reduce computations.
|
||||
*
|
||||
* @return Initial value of reduce.
|
||||
*/
|
||||
@Override
|
||||
public Integer reduceInit() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reduces a single map with the accumulator provided as the ReduceType.
|
||||
*
|
||||
* @param value result of the map.
|
||||
* @param sum accumulator for the reduce.
|
||||
* @return accumulator with result of the map taken into account.
|
||||
*/
|
||||
@Override
|
||||
public Integer reduce(Integer value, Integer sum) {
|
||||
return value + sum;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTraversalDone(Integer result) {
|
||||
// Double check traversal result to make count is the same.
|
||||
// TODO: Is this check necessary?
|
||||
out.println("[REDUCE RESULT] Traversal result is: " + result);
|
||||
}
|
||||
|
||||
// shamelessly absconded and adapted from http://www.javalobby.org/java/forums/t84420.html
|
||||
private String md5sum(File f) {
|
||||
InputStream is;
|
||||
try {
|
||||
is = new FileInputStream(f);
|
||||
} catch (FileNotFoundException e) {
|
||||
return "Not a file";
|
||||
}
|
||||
byte[] buffer = new byte[8192];
|
||||
int read = 0;
|
||||
try {
|
||||
while ((read = is.read(buffer)) > 0) {
|
||||
digest.update(buffer, 0, read);
|
||||
}
|
||||
byte[] md5sum = digest.digest();
|
||||
BigInteger bigInt = new BigInteger(1, md5sum);
|
||||
return bigInt.toString(16);
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw new RuntimeException("Unable to process file for MD5", e);
|
||||
}
|
||||
finally {
|
||||
try {
|
||||
is.close();
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw new RuntimeException("Unable to close input stream for MD5 calculation", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -631,7 +631,7 @@ public class ParsingEngineUnitTest extends BaseTest {
|
|||
// --------------------------------------------------------------------------------
|
||||
|
||||
private class SingleRodBindingArgProvider {
|
||||
@Input(shortName="V", required=false)
|
||||
@Input(fullName="binding", shortName="V", required=false)
|
||||
public RodBinding<Feature> binding = RodBinding.makeUnbound(Feature.class);
|
||||
}
|
||||
|
||||
|
|
@ -653,6 +653,29 @@ public class ParsingEngineUnitTest extends BaseTest {
|
|||
Assert.assertEquals(argProvider.binding.getTags().getPositionalTags().size(), 1, "Tags aren't correctly set");
|
||||
}
|
||||
|
||||
private class ShortNameOnlyRodBindingArgProvider {
|
||||
@Input(shortName="short", required=false)
|
||||
public RodBinding<Feature> binding = RodBinding.makeUnbound(Feature.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shortNameOnlyRodBindingArgumentTest() {
|
||||
final String[] commandLine = new String[] {"-short:vcf","foo.vcf"};
|
||||
|
||||
parsingEngine.addArgumentSource( ShortNameOnlyRodBindingArgProvider.class );
|
||||
parsingEngine.parse( commandLine );
|
||||
parsingEngine.validate();
|
||||
|
||||
ShortNameOnlyRodBindingArgProvider argProvider = new ShortNameOnlyRodBindingArgProvider();
|
||||
parsingEngine.loadArgumentsIntoObject( argProvider );
|
||||
|
||||
Assert.assertEquals(argProvider.binding.getName(), "binding", "Name isn't set properly");
|
||||
Assert.assertEquals(argProvider.binding.getSource(), "foo.vcf", "Source isn't set to its expected value");
|
||||
Assert.assertEquals(argProvider.binding.getType(), Feature.class, "Type isn't set to its expected value");
|
||||
Assert.assertEquals(argProvider.binding.isBound(), true, "Bound() isn't returning its expected value");
|
||||
Assert.assertEquals(argProvider.binding.getTags().getPositionalTags().size(), 1, "Tags aren't correctly set");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void unbasicRodBindingArgumentTest() {
|
||||
final String[] commandLine = new String[] {};
|
||||
|
|
@ -696,7 +719,7 @@ public class ParsingEngineUnitTest extends BaseTest {
|
|||
}
|
||||
|
||||
private class VariantContextRodBindingArgProvider {
|
||||
@Input(shortName="V")
|
||||
@Input(fullName = "binding", shortName="V")
|
||||
public RodBinding<VariantContext> binding;
|
||||
}
|
||||
|
||||
|
|
@ -735,7 +758,7 @@ public class ParsingEngineUnitTest extends BaseTest {
|
|||
}
|
||||
|
||||
private class ListRodBindingArgProvider {
|
||||
@Input(shortName="V", required=false)
|
||||
@Input(fullName = "binding", shortName="V", required=false)
|
||||
public List<RodBinding<Feature>> bindings;
|
||||
}
|
||||
|
||||
|
|
@ -752,7 +775,7 @@ public class ParsingEngineUnitTest extends BaseTest {
|
|||
|
||||
Assert.assertEquals(argProvider.bindings.size(), 1, "Unexpected number of bindings");
|
||||
RodBinding<Feature> binding = argProvider.bindings.get(0);
|
||||
Assert.assertEquals(binding.getName(), "bindings", "Name isn't set properly");
|
||||
Assert.assertEquals(binding.getName(), "binding", "Name isn't set properly");
|
||||
Assert.assertEquals(binding.getSource(), "foo.vcf", "Source isn't set to its expected value");
|
||||
Assert.assertEquals(binding.getType(), Feature.class, "Type isn't set to its expected value");
|
||||
Assert.assertEquals(binding.getTags().getPositionalTags().size(), 1, "Tags aren't correctly set");
|
||||
|
|
@ -772,13 +795,13 @@ public class ParsingEngineUnitTest extends BaseTest {
|
|||
Assert.assertEquals(argProvider.bindings.size(), 2, "Unexpected number of bindings");
|
||||
|
||||
RodBinding<Feature> binding = argProvider.bindings.get(0);
|
||||
Assert.assertEquals(binding.getName(), "bindings", "Name isn't set properly");
|
||||
Assert.assertEquals(binding.getName(), "binding", "Name isn't set properly");
|
||||
Assert.assertEquals(binding.getSource(), "foo.vcf", "Source isn't set to its expected value");
|
||||
Assert.assertEquals(binding.getType(), Feature.class, "Type isn't set to its expected value");
|
||||
Assert.assertEquals(binding.getTags().getPositionalTags().size(), 1, "Tags aren't correctly set");
|
||||
|
||||
RodBinding<Feature> binding2 = argProvider.bindings.get(1);
|
||||
Assert.assertEquals(binding2.getName(), "bindings2", "Name isn't set properly");
|
||||
Assert.assertEquals(binding2.getName(), "binding2", "Name isn't set properly");
|
||||
Assert.assertEquals(binding2.getSource(), "bar.vcf", "Source isn't set to its expected value");
|
||||
Assert.assertEquals(binding2.getType(), Feature.class, "Type isn't set to its expected value");
|
||||
Assert.assertEquals(binding2.getTags().getPositionalTags().size(), 1, "Tags aren't correctly set");
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ public class LeftAlignVariantsIntegrationTest extends WalkerTest {
|
|||
@Test
|
||||
public void testLeftAlignment() {
|
||||
WalkerTestSpec spec = new WalkerTestSpec(
|
||||
"-T LeftAlignVariants -o %s -R " + b37KGReference + " --variant:vcf " + validationDataLocation + "forLeftAlignVariantsTest.vcf -NO_HEADER",
|
||||
"-T LeftAlignVariants -o %s -R " + b37KGReference + " --variants:vcf " + validationDataLocation + "forLeftAlignVariantsTest.vcf -NO_HEADER",
|
||||
1,
|
||||
Arrays.asList("158b1d71b28c52e2789f164500b53732"));
|
||||
executeTest("test left alignment", spec);
|
||||
|
|
|
|||
|
|
@ -30,15 +30,15 @@ public class VariantContextIntegrationTest extends WalkerTest {
|
|||
|
||||
@DataProvider(name = "VCITTestData")
|
||||
public Object[][] createVCITTestData() {
|
||||
new VCITTest("--printPerLocus", "f36b81b8bcd210c0e3a1058d791b78ec");
|
||||
new VCITTest("--printPerLocus --onlyContextsOfType SNP", "a77492ba003a1fca8d8e0227fa642f34");
|
||||
new VCITTest("--printPerLocus --onlyContextsOfType INDEL", "9e0375a1b680d7df0971dbf256944d7a");
|
||||
new VCITTest("--printPerLocus --onlyContextsOfType MIXED", "93628cbba30033398e7e680b92cb3680");
|
||||
new VCITTest("--printPerLocus --onlyContextsOfType NO_VARIATION", "39335acdb34c8a2af433dc50d619bcbc");
|
||||
new VCITTest("--printPerLocus --takeFirstOnly", "c4a3d7545d26880635e0e5e4e69952e2");
|
||||
new VCITTest("--printPerLocus --onlyContextsOfType INDEL --onlyContextsStartinAtCurrentPosition", "22a7bb9e63d5f2950322c26397670e5c");
|
||||
new VCITTest("--printPerLocus --onlyContextsStartinAtCurrentPosition", "6387c1a400d1872ae4394d01e533c296");
|
||||
new VCITTest("--printPerLocus --takeFirstOnly --onlyContextsStartinAtCurrentPosition", "dde3a3db4d9c57f5042e0dfe03380987");
|
||||
new VCITTest("--printPerLocus", "");
|
||||
new VCITTest("--printPerLocus --onlyContextsOfType SNP", "");
|
||||
new VCITTest("--printPerLocus --onlyContextsOfType INDEL", "");
|
||||
new VCITTest("--printPerLocus --onlyContextsOfType MIXED", "");
|
||||
new VCITTest("--printPerLocus --onlyContextsOfType NO_VARIATION", "");
|
||||
new VCITTest("--printPerLocus --takeFirstOnly", "");
|
||||
new VCITTest("--printPerLocus --onlyContextsOfType INDEL --onlyContextsStartinAtCurrentPosition", "");
|
||||
new VCITTest("--printPerLocus --onlyContextsStartinAtCurrentPosition", "");
|
||||
new VCITTest("--printPerLocus --takeFirstOnly --onlyContextsStartinAtCurrentPosition", "");
|
||||
|
||||
return VCITTest.getTests(VCITTest.class);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue