diff --git a/build.xml b/build.xml index a79c4dbe9..9cada6c4a 100644 --- a/build.xml +++ b/build.xml @@ -8,9 +8,6 @@ - - - @@ -297,7 +294,9 @@ - + + + @@ -307,67 +306,63 @@ - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + - * Class TrivalInstrumenter - *

- * A simple instrumentation class, that adds information to our test cases. - */ - -/** A trivial example program that basically just says hello! */ -@Ignore -public class TrivialInstrumenter implements ClassFileTransformer { - public static void premain(String options, Instrumentation ins) { - if (options != null) { - System.out.printf(" I've been called with options: \"%s\"\n", options); - } else - ins.addTransformer(new TrivialInstrumenter()); - } - - public byte[] transform(ClassLoader loader, - String className, - Class cBR, java.security.ProtectionDomain pD, - byte[] classfileBuffer) - throws IllegalClassFormatException { - int size = classfileBuffer.length; - - if (className.contains("broadinstitute") && - className.endsWith("Test") && - !(className.endsWith("BaseTest"))) { - ClassPool pool = ClassPool.getDefault(); - CtClass cl = null; - - try { - cl = pool.makeClass(new java.io.ByteArrayInputStream(classfileBuffer)); - if (cl.isInterface() == false) { - for (CtBehavior meth : cl.getDeclaredMethods()) { - - if (meth.isEmpty() == false) { - Object anns[] = meth.getAvailableAnnotations(); - boolean weAreAJunitTest = false; - for (Object obj : anns) { - if (obj instanceof org.junit.Test) { - weAreAJunitTest = true; - } - } - if (weAreAJunitTest) { - addAnnouncement(meth, cl); - } - } - } - classfileBuffer = cl.toBytecode(); - return classfileBuffer; - } - - // baseTearDown - } catch (NotFoundException e) { - e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. - } catch (IOException e) { - e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. - } catch (CannotCompileException e) { - e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. - } finally { - if (cl != null) { - cl.detach(); - } - } - - } - return null; - } - - private static void addTiming(CtClass clas, String mname) - throws NotFoundException, CannotCompileException { - - // get the method information (throws exception if method with - // given name is not declared directly by this class, returns - // arbitrary choice if more than one with the given name) - CtMethod mold = clas.getDeclaredMethod(mname); - - // rename old method to synthetic name, then duplicate the - // method with original name for use as interceptor - String nname = mname + "$impl"; - mold.setName(nname); - CtMethod mnew = CtNewMethod.copy(mold, mname, clas, null); - - // start the body text generation by saving the start time - // to a local variable, then call the timed method; the - // actual code generated needs to depend on whether the - // timed method returns a value - String type = mold.getReturnType().getName(); - StringBuffer body = new StringBuffer(); - body.append("{\nlong start = System.currentTimeMillis();\n"); - if (!"void".equals(type)) { - body.append(type + " result = "); - } - body.append(nname + "($$);\n"); - - // finish body text generation with call to print the timing - // information, and return saved value (if not void) - body.append("System.out.println(\"Call to method " + mname + - " took \" +\n (System.currentTimeMillis()-start) + " + - "\" ms.\");\n"); - if (!"void".equals(type)) { - body.append("return result;\n"); - } - body.append("}"); - - // replace the body of the interceptor method with generated - // code block and add it to class - mnew.setBody(body.toString()); - clas.addMethod(mnew); - - // print the generated code block just to show what was done - //System.out.println("Interceptor method body:"); - //System.out.println(body.toString()); - } - - private void addAnnouncement(CtBehavior method, CtClass cl) - throws NotFoundException, CannotCompileException { - String name = method.getName(); - method.insertAfter("logger.warn(\"\");"); - } -} - - diff --git a/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalPerformanceTest.java b/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalPerformanceTest.java new file mode 100644 index 000000000..ec057b7a2 --- /dev/null +++ b/java/test/org/broadinstitute/sting/gatk/walkers/varianteval/VariantEvalPerformanceTest.java @@ -0,0 +1,222 @@ +package org.broadinstitute.sting.gatk.walkers.varianteval; + +import org.broadinstitute.sting.WalkerTest; +import org.junit.Test; + +import java.io.File; +import java.util.*; + + +/** + * + * @author aaron + * + * Class VariantEvalPerformanceTest + * + * TODO: remove me Eric + */ +public class VariantEvalPerformanceTest extends WalkerTest { + + @Test + public void testEvalVariantROD() { + HashMap md5 = new HashMap(); + md5.put("", "9cfda40f521d75a3e8bafc44a663c14a"); + md5.put("-A", "8fea7cc25f551ce170636fc35c5ae0fe"); + + /** + * the above MD5 was calculated from running the following command: + * + * java -jar ./dist/GenomeAnalysisTK.jar \ + * -R /broad/1KG/reference/human_b36_both.fasta \ + * -T VariantEval \ + * --DBSNP /humgen/gsa-scr1/GATK_Data/dbsnp_129_b36.rod \ + * -L 1:10,000,000-11,000,000 \ + * --outerr myVariantEval \ + * --supressDateInformation \ + * --rodBind eval,Variants,/humgen/gsa-scr1/GATK_Data/Validation_Data/NA12878.1kg.p2.chr1_10mb_11_mb.SLX.lod5.variants.geli.calls + * + */ + for ( Map.Entry e : md5.entrySet() ) { + WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( + "-R " + oneKGLocation + "reference/human_b36_both.fasta" + + " --rodBind eval,Variants," + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.lod5.variants.geli.calls" + + " -T VariantEval" + + " --DBSNP /humgen/gsa-scr1/GATK_Data/dbsnp_129_b36.rod" + + " -L 1:10,000,000-11,000,000" + + " --outerr %s" + + " --supressDateInformation " + e.getKey(), + 1, // just one output file + Arrays.asList(e.getValue())); + List result = executeTest("testEvalVariantROD", spec).getFirst(); + } + } + + @Test + public void testEvalVariantRODConfSix() { + List md5 = new ArrayList(); + md5.add("11d636d105f902680c46b9f2e330d922"); + + /** + * the above MD5 was calculated from running the following command: + * + * java -jar ./dist/GenomeAnalysisTK.jar \ + * -R /broad/1KG/reference/human_b36_both.fasta \ + * -T VariantEval \ + * --DBSNP /humgen/gsa-scr1/GATK_Data/dbsnp_129_b36.rod \ + * -L 1:10,000,000-11,000,000 \ + * --outerr myVariantEval \ + * --supressDateInformation \ + * --rodBind eval,Variants,/humgen/gsa-scr1/GATK_Data/Validation_Data/NA12878.1kg.p2.chr1_10mb_11_mb.SLX.lod5.variants.geli.calls \ + * -minConfidenceScore 6 + */ + WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( + "-R " + oneKGLocation + "reference/human_b36_both.fasta" + + " --rodBind eval,Variants," + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.lod5.variants.geli.calls" + + " -T VariantEval" + + " --DBSNP /humgen/gsa-scr1/GATK_Data/dbsnp_129_b36.rod" + + " -L 1:10,000,000-11,000,000" + + " --outerr %s" + + " --supressDateInformation" + + " -minPhredConfidenceScore 60", + 1, // just one output file + md5); + List result = executeTest("testEvalVariantRODConfSixty", spec).getFirst(); + } + + @Test + public void testEvalVariantRODOutputViolations() { + List md5 = new ArrayList(); + md5.add("12ecd457d62329e9d4e593de904a457d"); + + /** + * the above MD5 was calculated from running the following command: + * + * java -jar ./dist/GenomeAnalysisTK.jar \ + * -R /broad/1KG/reference/human_b36_both.fasta \ + * -T VariantEval \ + * --DBSNP /humgen/gsa-scr1/GATK_Data/dbsnp_129_b36.rod \ + * -L 1:10,000,000-11,000,000 \ + * --outerr myVariantEval \ + * --supressDateInformation \ + * --rodBind eval,Variants,/humgen/gsa-scr1/GATK_Data/Validation_Data/NA12878.1kg.p2.chr1_10mb_11_mb.SLX.lod5.variants.geli.calls \ + * --includeViolations + */ + WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( + "-R " + oneKGLocation + "reference/human_b36_both.fasta" + + " --rodBind eval,Variants," + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.lod5.variants.geli.calls" + + " -T VariantEval" + + " --DBSNP /humgen/gsa-scr1/GATK_Data/dbsnp_129_b36.rod" + + " -L 1:10,000,000-11,000,000" + + " --outerr %s" + + " --supressDateInformation" + + " --includeViolations", + 1, // just one output file + md5); + List result = executeTest("testEvalVariantRODOutputViolations", spec).getFirst(); + } + + @Test + public void testEvalGenotypeROD() { + List md5 = new ArrayList(); + md5.add("6ed44fd586c89dafd40cb8e0194dc456"); + /** + * the above MD5 was calculated after running the following command: + * + * java -jar ./dist/GenomeAnalysisTK.jar \ + * -R /broad/1KG/reference/human_b36_both.fasta \ + * -T VariantEval \ + * --DBSNP /humgen/gsa-scr1/GATK_Data/dbsnp_129_b36.rod \ + * -L 1:10,000,000-11,000,000 \ + * --outerr myVariantEval \ + * --supressDateInformation \ + * --evalContainsGenotypes \ + * --rodBind eval,Variants,/humgen/gsa-scr1/GATK_Data/Validation_Data/NA12878.1kg.p2.chr1_10mb_11_mb.SLX.lod5.genotypes.geli.calls \ + * --rodBind hapmap-chip,GFF,/humgen/gsa-scr1/GATK_Data/1KG_gffs/NA12878.1kg.gff + */ + + WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( + "-R " + oneKGLocation + "reference/human_b36_both.fasta" + + " --rodBind eval,Variants," + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.lod5.genotypes.geli.calls" + + " -T VariantEval" + + " --DBSNP /humgen/gsa-scr1/GATK_Data/dbsnp_129_b36.rod" + + " -L 1:10,000,000-11,000,000" + + " --outerr %s" + + " --supressDateInformation" + + " --evalContainsGenotypes" + + " --rodBind hapmap-chip,GFF,/humgen/gsa-scr1/GATK_Data/1KG_gffs/NA12878.1kg.gff", + 1, // just one output file + md5); + List result = executeTest("testEvalGenotypeROD", spec).getFirst(); + } + + @Test + public void testEvalMarksGenotypingExample() { + List md5 = new ArrayList(); + md5.add("c0396cfe89a63948aebbbae0a0e06678"); + /** + * Run with the following commands: + * + * java -Xmx2048m -jar /humgen/gsa-hphome1/depristo/dev/GenomeAnalysisTK/trunk/dist/GenomeAnalysisTK.jar + * -T VariantEval -R /broad/1KG/reference/human_b36_both.fasta -l INFO + * -B eval,Variants,/humgen/gsa-scr1/ebanks/concordanceForMark/UMichVsBroad.venn.set1Only.calls + * -D /humgen/gsa-scr1/GATK_Data/dbsnp_129_b36.rod -hc /humgen/gsa-scr1/GATK_Data/1KG_gffs/NA12878.1kg.gff + * -G -L 1 -o /humgen/gsa-scr1/ebanks/concordanceForMark/UMichVsBroad.venn.set1Only.calls.eval + */ + + WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( + "-T VariantEval -R " + oneKGLocation + "reference/human_b36_both.fasta " + + "-B eval,Variants," + validationDataLocation + "UMichVsBroad.venn.set1Only.calls " + + "-D /humgen/gsa-scr1/GATK_Data/dbsnp_129_b36.rod -hc /humgen/gsa-scr1/GATK_Data/1KG_gffs/NA12878.1kg.gff " + + "-G " + + "--supressDateInformation " + + "-L 1:1-10,000,000 " + + "--outerr %s", + 1, // just one output file + md5); + List result = executeTest("testEvalMarksGenotypingExample", spec).getFirst(); + } + + @Test + public void testEvalRuntimeWithLotsOfIntervals() { + List md5 = new ArrayList(); + md5.add("6a90341517fc3c5026529301d9970c7b"); + WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( + "-T VariantEval -R " + oneKGLocation + "reference/human_b36_both.fasta " + + "-B eval,Variants," + validationDataLocation + "NA12878.pilot_3.all.geli.calls " + + "-D /humgen/gsa-scr1/GATK_Data/dbsnp_129_b36.rod " + + "--supressDateInformation " + + "-L /humgen/gsa-scr1/GATK_Data/thousand_genomes_alpha_redesign.targets.b36.interval_list " + + "--outerr %s", + 1, // just one output file + md5); + List result = executeTest("testEvalRuntimeWithLotsOfIntervals", spec).getFirst(); + } + + @Test + public void testVCFVariantEvals() { + HashMap md5 = new HashMap(); + md5.put("", "ee6b096169d6c5e2ce49d394fbec799b"); + md5.put("-A", "a443193c0810363f85278b1cfaed2fff"); + md5.put("-A --includeFilteredRecords", "812d7f2ecac28b1be7e7028af17df9c0"); + md5.put("-A --sampleName NA12878", "a443193c0810363f85278b1cfaed2fff"); + md5.put("-A -vcfInfoSelector AF=0.50", "afed4bf0c9f11b86f6e5356012f9cf2d"); + + for ( Map.Entry e : md5.entrySet() ) { + WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( + "-R " + oneKGLocation + "reference/human_b36_both.fasta" + + " --rodBind eval,VCF," + validationDataLocation + "NA12878.example1.vcf" + + " -T VariantEval" + + " --DBSNP /humgen/gsa-scr1/GATK_Data/dbsnp_129_b36.rod" + + " -hc /humgen/gsa-scr1/GATK_Data/1KG_gffs/NA12878.1kg.gff" + + " -G" + + " -L 1:1-10,000" + + " --outerr %s" + + " --supressDateInformation " + e.getKey(), + 1, // just one output file + Arrays.asList(e.getValue())); + List result = executeTest("testVCFVariantEvals", spec).getFirst(); + } + } + + +}