From a40a8006b5e4ea583808cb79f61e38045017251e Mon Sep 17 00:00:00 2001 From: chartl Date: Sun, 6 Mar 2011 16:54:02 +0000 Subject: [PATCH] Added in unit tests for the statistics calculated by the test runner; and bug-fixes to the calculations; so we have some assurance that the statistics coming out the back-end are correct. git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@5380 348d0f76-0448-11de-a6fe-93d51630548a --- .../association/AssociationTestRunner.java | 30 +++- .../RegionalAssociationWalker.java | 6 +- .../association/modules/MateOtherContig.java | 2 +- .../association/modules/MateUnmapped.java | 4 +- .../association/modules/SampleDepth.java | 24 ++- .../statistics/casecontrol/CaseControl.java | 4 +- .../statistics/casecontrol/UStatistic.java | 4 +- .../sting/utils/MannWhitneyU.java | 28 +-- .../walkers/RegionalAssociationUnitTest.java | 159 ++++++++++++++++++ scala/qscript/oneoffs/chartl/BootstrapCalls.q | 9 +- 10 files changed, 230 insertions(+), 40 deletions(-) create mode 100755 java/test/org/broadinstitute/sting/oneoffprojects/walkers/RegionalAssociationUnitTest.java diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/AssociationTestRunner.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/AssociationTestRunner.java index 376f0747c..fb376577b 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/AssociationTestRunner.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/AssociationTestRunner.java @@ -41,6 +41,13 @@ public class AssociationTestRunner { } public static String runStudentT(TStatistic context) { + Pair stats = testStudentT(context); + double t = stats.first; + double p = stats.second; + return String.format("T: %.2f\tP: %.2e",t,p); + } + + public static Pair testStudentT(TStatistic context) { Map> caseControlVectors = context.getCaseControl(); double meanCase = MathUtils.average(caseControlVectors.get(CaseControl.Cohort.CASE)); double varCase = MathUtils.variance(caseControlVectors.get(CaseControl.Cohort.CASE),meanCase); @@ -55,10 +62,18 @@ public class AssociationTestRunner { StudentT studentT = new StudentT(df_num/df_denom,null); double p = t < 0 ? 2*studentT.cdf(t) : 2*(1-studentT.cdf(t)); - return String.format("T: %.2f\tP: %.2e",t,p); + + return new Pair(t,p); } public static String runZ(ZStatistic context) { + Pair stats = testZ(context); + double z = stats.first; + double p = stats.second; + return String.format("Z: %.2f\tP: %.2e",z,p); + } + + public static Pair testZ(ZStatistic context) { Map> caseControlCounts = context.getCaseControl(); double pCase = caseControlCounts.get(CaseControl.Cohort.CASE).first.doubleValue()/caseControlCounts.get(CaseControl.Cohort.CASE).second.doubleValue(); double pControl = caseControlCounts.get(CaseControl.Cohort.CONTROL).first.doubleValue()/caseControlCounts.get(CaseControl.Cohort.CONTROL).second.doubleValue(); @@ -66,15 +81,21 @@ public class AssociationTestRunner { double nControl = caseControlCounts.get(CaseControl.Cohort.CONTROL).second.doubleValue(); double p2 = (caseControlCounts.get(CaseControl.Cohort.CASE).first.doubleValue()+caseControlCounts.get(CaseControl.Cohort.CONTROL).first.doubleValue())/ - (caseControlCounts.get(CaseControl.Cohort.CASE).second.doubleValue()+caseControlCounts.get(CaseControl.Cohort.CONTROL).first.doubleValue()); + (caseControlCounts.get(CaseControl.Cohort.CASE).second.doubleValue()+caseControlCounts.get(CaseControl.Cohort.CONTROL).second.doubleValue()); double se = Math.sqrt(p2*(1-p2)*(1/nCase + 1/nControl)); double z = (pCase-pControl)/se; double p = z < 0 ? 2*standardNormal.cdf(z) : 2*(1-standardNormal.cdf(z)); - return String.format("Z: %.2f\tP: %.2e",z,p); + + return new Pair(z,p); } public static String runU(UStatistic context) { + Pair results = mannWhitneyUTest(context); + return String.format("U: %d\tP: %.2e",results.first,results.second); + } + + public static Pair mannWhitneyUTest(UStatistic context) { Map> caseControlVectors = context.getCaseControl(); MannWhitneyU mwu = new MannWhitneyU(); for ( Number n : caseControlVectors.get(CaseControl.Cohort.CASE) ) { @@ -83,8 +104,7 @@ public class AssociationTestRunner { for ( Number n : caseControlVectors.get(CaseControl.Cohort.CONTROL) ) { mwu.add(n,MannWhitneyU.USet.SET2); } - Pair results = mwu.runTwoSidedTest(); - return String.format("U: %d\tP: %.2e",results.first,results.second); + return mwu.runTwoSidedTest(); } public static String runFisherExact(AssociationContext context) { diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/RegionalAssociationWalker.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/RegionalAssociationWalker.java index e652c8c3d..c103252f3 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/RegionalAssociationWalker.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/RegionalAssociationWalker.java @@ -61,16 +61,14 @@ public class RegionalAssociationWalker extends LocusWalker> contexts = new PluginManager(AssociationContext.class).getPlugins(); Map> classNameToClass = new HashMap>(contexts.size()); for ( Class clazz : contexts ) { - if (! Modifier.isAbstract(clazz.getModifiers())) { - classNameToClass.put(clazz.getSimpleName(),clazz); - } + classNameToClass.put(clazz.getSimpleName(),clazz); } Set validAssociations = new HashSet(); for ( String s : associationsToUse ) { AssociationContext context; try { - context = classNameToClass.get(s).getConstructor(new Class[]{}).newInstance(new Object[]{}); + context = classNameToClass.get(s).newInstance(); } catch ( Exception e ) { throw new StingException("The class "+s+" could not be instantiated.",e); } diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/MateOtherContig.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/MateOtherContig.java index cdc6513df..b2af3d6a7 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/MateOtherContig.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/MateOtherContig.java @@ -30,7 +30,7 @@ public class MateOtherContig extends ZStatistic { } } - return new Pair(tot,otherCon); + return new Pair(otherCon,tot); } } diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/MateUnmapped.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/MateUnmapped.java index 70cd04c1a..f0c0c7df6 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/MateUnmapped.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/MateUnmapped.java @@ -18,7 +18,7 @@ public class MateUnmapped extends ZStatistic { int numMatedReads = 0; int numPairUnmapped = 0; for (PileupElement e : pileup ) { - if ( e.getRead().getProperPairFlag() ) { + if (e.getRead().getReadPairedFlag() ) { ++numMatedReads; if ( e.getRead().getMateUnmappedFlag() ) { ++numPairUnmapped; @@ -26,7 +26,7 @@ public class MateUnmapped extends ZStatistic { } } - return new Pair(numMatedReads,numPairUnmapped); + return new Pair(numPairUnmapped,numMatedReads); } public int getWindowSize() { return 100; } diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/SampleDepth.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/SampleDepth.java index 94203c4be..1315dc315 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/SampleDepth.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/SampleDepth.java @@ -3,6 +3,7 @@ package org.broadinstitute.sting.oneoffprojects.walkers.association.modules; import org.broadinstitute.sting.gatk.datasources.sample.Sample; import org.broadinstitute.sting.gatk.walkers.LocusWalker; import org.broadinstitute.sting.gatk.walkers.Walker; +import org.broadinstitute.sting.oneoffprojects.walkers.association.MapExtender; import org.broadinstitute.sting.oneoffprojects.walkers.association.RegionalAssociationWalker; import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.UStatistic; import org.broadinstitute.sting.utils.MathUtils; @@ -39,16 +40,18 @@ public class SampleDepth extends UStatistic { } } - public Collection map(ReadBackedPileup pileup) { - Collection samples = pileup.getSamples(); - Sample sample; - if ( samples.size() > 1 ) { - throw new StingException("Multiple samples inside a sample-specific pileup"); - } else if ( samples.size() == 0 ) { - return Arrays.asList(); - } else { - sample = samples.iterator().next(); + @Override + public Map mapLocus(MapExtender extender) { + Map pileups = extender.getReadFilteredPileup(); + Map maps = new HashMap(pileups.size()); + for ( Map.Entry samPileup : pileups.entrySet() ) { + maps.put(samPileup.getKey(),map(samPileup.getKey(),samPileup.getValue())); } + + return maps; + } + + public Collection map(Sample sample, ReadBackedPileup pileup) { Object stats = sampleStats.get(sample); double mn; double std; @@ -68,6 +71,9 @@ public class SampleDepth extends UStatistic { return Arrays.asList((Number)((pileup.size()-mn)/std)); } + // note: this is to satisfy the interface, and is never called due to override + public Collection map(ReadBackedPileup pileup) { return null; } + public int getWindowSize() { return 25; } public int slideByValue() { return 5; } public boolean usePreviouslySeenReads() { return true; } diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/CaseControl.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/CaseControl.java index c43898327..e41747c0a 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/CaseControl.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/CaseControl.java @@ -24,9 +24,9 @@ public abstract class CaseControl extends AssociationContext { for ( Map sampleXMap : window ) { for ( Map.Entry entry : sampleXMap.entrySet() ) { if ( entry.getKey().getProperty("cohort").equals("case") ) { - accum(accumCase, entry.getValue()); + accumCase = accum(accumCase, entry.getValue()); } else if ( entry.getKey().getProperty("cohort").equals("control") ) { - accum(accumControl,entry.getValue()); + accumControl = accum(accumControl,entry.getValue()); } } } diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/UStatistic.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/UStatistic.java index dab1e1122..3249c2f85 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/UStatistic.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/UStatistic.java @@ -19,8 +19,8 @@ public abstract class UStatistic extends CaseControl> { public abstract Collection map(ReadBackedPileup rbp ); public Collection add(Collection left, Collection right) { - if ( left instanceof List) { - ((List) left).addAll(right); + if ( left instanceof ArrayList ) { + ((ArrayList) left).addAll(right); return left; } else if ( left instanceof Set) { ((Set) left).addAll(right); diff --git a/java/src/org/broadinstitute/sting/utils/MannWhitneyU.java b/java/src/org/broadinstitute/sting/utils/MannWhitneyU.java index 195cd1f84..825374982 100755 --- a/java/src/org/broadinstitute/sting/utils/MannWhitneyU.java +++ b/java/src/org/broadinstitute/sting/utils/MannWhitneyU.java @@ -14,6 +14,8 @@ import java.util.TreeSet; */ public class MannWhitneyU { + private static Normal STANDARD_NORMAL = new Normal(0.0,1.0,null); + private TreeSet> observations; private int sizeSet1; private int sizeSet2; @@ -64,7 +66,7 @@ public class MannWhitneyU { double pval; if ( n > 8 && m > 8 ) { pval = calculatePNormalApproximation(n,m,u); - } else if ( n > 4 && m > 8 ) { + } else if ( n > 4 && m > 7 ) { pval = calculatePUniformApproximation(n,m,u); } else { pval = calculatePRecursively(n,m,u); @@ -82,8 +84,9 @@ public class MannWhitneyU { */ public static double calculatePNormalApproximation(int n,int m,int u) { double mean = ((double) m*n+1)/2; - Normal normal = new Normal( mean , ((double) n*m*(n+m+1))/12, null); - return u < mean ? normal.cdf(u) : 1.0-normal.cdf(u); + double var = (n*m*(n+m+1))/12; + double z = ( u - mean )/Math.sqrt(var); + return z < 0 ? STANDARD_NORMAL.cdf(z) : 1.0-STANDARD_NORMAL.cdf(z); } /** @@ -134,13 +137,6 @@ public class MannWhitneyU { int uSet2DomSet1 = 0; USet previous = null; for ( Pair dataPoint : observed ) { - if ( previous != null && previous != dataPoint.second ) { - if ( dataPoint.second == USet.SET1 ) { - uSet2DomSet1 += set2SeenSoFar; - } else { - uSet1DomSet2 += set1SeenSoFar; - } - } if ( dataPoint.second == USet.SET1 ) { ++set1SeenSoFar; @@ -148,6 +144,14 @@ public class MannWhitneyU { ++set2SeenSoFar; } + if ( previous != null ) { + if ( dataPoint.second == USet.SET1 ) { + uSet2DomSet1 += set2SeenSoFar; + } else { + uSet1DomSet2 += set1SeenSoFar; + } + } + previous = dataPoint.second; } @@ -164,7 +168,7 @@ public class MannWhitneyU { * @return the probability under the hypothesis that all sequences are equally likely of finding a set-two entry preceding a set-one entry "u" times. */ public static double calculatePRecursively(int n, int m, int u) { - if ( m > 6 && n > 4 || m + n > 16 ) { throw new StingException("Please use the appropriate (normal or sum of uniform) approximation"); } + if ( m + n > 16 ) { throw new StingException("Please use the appropriate (normal or sum of uniform) approximation"); } return cpr(n,m,u); } @@ -185,7 +189,7 @@ public class MannWhitneyU { } - return (n/(n+m))*cpr(n-1,m,u-m) + (m/(n+m))*cpr(n,m-1,u); + return (((double)n)/(n+m))*cpr(n-1,m,u-m) + (((double)m)/(n+m))*cpr(n,m-1,u); } /** diff --git a/java/test/org/broadinstitute/sting/oneoffprojects/walkers/RegionalAssociationUnitTest.java b/java/test/org/broadinstitute/sting/oneoffprojects/walkers/RegionalAssociationUnitTest.java new file mode 100755 index 000000000..c3be42103 --- /dev/null +++ b/java/test/org/broadinstitute/sting/oneoffprojects/walkers/RegionalAssociationUnitTest.java @@ -0,0 +1,159 @@ +package org.broadinstitute.sting.oneoffprojects.walkers; + +import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.UStatistic; +import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.ZStatistic; +import org.broadinstitute.sting.utils.MathUtils; +import org.broadinstitute.sting.BaseTest; +import org.broadinstitute.sting.oneoffprojects.walkers.association.AssociationTestRunner; +import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.TStatistic; +import org.broadinstitute.sting.utils.collections.Pair; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; + +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import org.broadinstitute.sting.BaseTest; +import org.testng.Assert; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +/** + * Created by IntelliJ IDEA. + * User: Ghost + * Date: 3/5/11 + * Time: 2:06 PM + * To change this template use File | Settings | File Templates. + */ +public class RegionalAssociationUnitTest extends BaseTest { + @BeforeClass + public void init() { } + + @Test + private void testTStatistics() { + logger.warn("Testing T statistics"); + TTest test1 = new TTest(); + test1.setCaseData((Collection) Arrays.asList(1,1,2,3,4)); + test1.setControlData((Collection) Arrays.asList(10, 10, 20, 30, 40)); + Assert.assertEquals(AssociationTestRunner.testStudentT(test1).second,0.1702,1e-2); + TTest test2 = new TTest(); + test2.setCaseData((Collection) Arrays.asList(5, 6, 5, 2, 3, 8, 7, 12, 10, 6, 4, 2, 8, 7, 3)); + test2.setControlData((Collection) Arrays.asList(1, 6, 7, 2, 3, 3, 4, 1, 2, 5, 7, 3, 10, 3, 3, 2, 3)); + Assert.assertEquals(AssociationTestRunner.testStudentT(test2).second, 0.5805, 1e-2); + TTest test3 = new TTest(); + test3.setCaseData((Collection) Arrays.asList(94,25,68,4,27,51,9,10,91,61,61,37,39,44,36,27,86,33,3,38,5,6,28,93,30,56,81,8,40,44)); + test3.setControlData((Collection) Arrays.asList(6,64,96,85,20,74,93,18,31,20,88,38,80,50,33,81,35,8,2,69,49,6,26,74,79,63,63,96,45,18)); + Assert.assertEquals(AssociationTestRunner.testStudentT(test3).second,0.8229,1e-4); + TTest test4 = new TTest(); + test4.setCaseData((Collection) Arrays.asList(14,8,8,17,8,12,10,10,13,9,13,9,9,12,12,11,16,12,13,16,10,13,11,16,13,16,11,13,9,16,16,14,9,14,17,10,15,15,9,15,17,15,17,12,10,13,11,14,8,14)); + test4.setControlData((Collection) Arrays.asList(7,1,4,2,3,7,8,5,5,4,10,6,4,9,2,9,9,3,3,10,1,8,9,5,3,7,2,7,10,9,4,9,2,10,10,3,2,3,4,4,5,10,9,4,3,5,6,10,5,10)); + Assert.assertEquals(AssociationTestRunner.testStudentT(test4).second,0.1006,1e-4); + Assert.assertEquals(AssociationTestRunner.testStudentT(test4).first,1.657989,1e-6); + } + + @Test + private void testZStatistics() { + logger.warn("Testing Z statistics"); + ZTest test1 = new ZTest(); + test1.setCaseData(new Pair(100,500)); + test1.setControlData(new Pair(55,300)); + Assert.assertEquals(AssociationTestRunner.testZ(test1).first,0.57742362050306,2e-6); + Assert.assertEquals(AssociationTestRunner.testZ(test1).second,0.56367,2e-5); + ZTest test2 = new ZTest(); + test1.setCaseData(new Pair(1020, 1800)); + test1.setControlData(new Pair(680, 1670)); + Assert.assertEquals(AssociationTestRunner.testZ(test1).first,9.3898178216531,2e-6); + ZTest test3 = new ZTest(); + test3.setCaseData(new Pair(20,60)); + test3.setControlData(new Pair(30,80)); + Assert.assertEquals(AssociationTestRunner.testZ(test3).first,-0.50917511840392,2e-6); + Assert.assertEquals(AssociationTestRunner.testZ(test3).second,0.610643593,2e-4); + } + + @Test + private void testUStatistic() { + logger.warn("Testing U statistics"); + UTest test1 = new UTest(); + test1.setCaseData((Collection) Arrays.asList(2,4,5,6,8)); + test1.setControlData((Collection) Arrays.asList(1,3,7,9,10,11,12,13)); + Assert.assertEquals(AssociationTestRunner.mannWhitneyUTest(test1).first,10,0); + Assert.assertEquals(AssociationTestRunner.mannWhitneyUTest(test1).second,0.092292,5e-2); // z-approximation, off by about 0.05 + Assert.assertEquals(AssociationTestRunner.mannWhitneyUTest(test1).second,0.044444,1e-3); // recursive calculation + UTest test2 = new UTest(); + test2.setCaseData((Collection) Arrays.asList(1,7,8,9,10,11,15,18)); + test2.setControlData((Collection) Arrays.asList(2,3,4,5,6,12,13,14,16,17)); + Assert.assertEquals(AssociationTestRunner.mannWhitneyUTest(test2).first,37,0); + UTest test3 = new UTest(); + test3.setCaseData((Collection)Arrays.asList(13,14,7,18,5,2,9,17,8,10,3,15,19,6,20,16,11,4,12,1)); + test3.setControlData((Collection) Arrays.asList(29,21,14,10,12,11,28,19,18,13,7,27,20,5,17,16,9,23,22,26)); + Assert.assertEquals(AssociationTestRunner.mannWhitneyUTest(test3).first,93,0); + Assert.assertEquals(AssociationTestRunner.mannWhitneyUTest(test3).second,2*0.00302,1e-3); + UTest test4 = new UTest(); + test4.setCaseData((Collection) Arrays.asList(1,2,4,5,6,9)); + test4.setControlData((Collection) Arrays.asList(3,8,11,12,13)); + Assert.assertEquals(AssociationTestRunner.mannWhitneyUTest(test4).first,5,0); + Assert.assertEquals(AssociationTestRunner.mannWhitneyUTest(test4).second,0.0303,1e-4); + + } + + + private class TTest extends TStatistic { + Map> toTest = new HashMap>(2); + + @Override + public Map> getCaseControl() { + return toTest; + } + + public void setCaseData(Collection data) { + toTest.put(Cohort.CASE,data); + } + + public void setControlData(Collection data) { + toTest.put(Cohort.CONTROL,data); + } + + public Collection map(ReadBackedPileup rbp) { return null; } + public int getWindowSize() { return 1; } + public int slideByValue() { return 1; } + public boolean usePreviouslySeenReads() { return false; } + } + + private class ZTest extends ZStatistic { + Map> toTest = new HashMap>(2); + + @Override + public Map> getCaseControl() { + return toTest; + } + + public void setCaseData(Pair data) { + toTest.put(Cohort.CASE,data); + } + + public void setControlData(Pair data) { + toTest.put(Cohort.CONTROL,data); + } + + public Pair map(ReadBackedPileup p) { return null; } + public int getWindowSize() { return 1; } + public int slideByValue() { return 1; } + public boolean usePreviouslySeenReads() { return true; } + } + + private class UTest extends UStatistic { + TTest test = new TTest(); + public boolean usePreviouslySeenReads() { return false; } + public int getWindowSize() { return 1; } + public int slideByValue() { return 1; } + public Collection map(ReadBackedPileup p ){ return null; } + + @Override + public Map> getCaseControl() { + return test.getCaseControl(); + } + + public void setCaseData(Collection data) { test.setCaseData(data);} + public void setControlData(Collection data) { test.setControlData(data); } + } +} diff --git a/scala/qscript/oneoffs/chartl/BootstrapCalls.q b/scala/qscript/oneoffs/chartl/BootstrapCalls.q index db8ce545f..9e9954446 100755 --- a/scala/qscript/oneoffs/chartl/BootstrapCalls.q +++ b/scala/qscript/oneoffs/chartl/BootstrapCalls.q @@ -147,13 +147,14 @@ class BootstrapCalls extends QScript { trait CombineArgs extends CombineVariants { this.reference_sequence = reference this.intervals :+= intervalFile - this.rodBind :+= new RodBind("hiCov","vcf",rm.noheadvcf) - this.rodBind :+= new RodBind("loCov","vcf",new File("/humgen/gsa-pipeline/PVQF4/all_batches_v001/batch_001/SnpCalls/ESPGO_Gabriel_NHLBI_EOMI_setone_EOMI_Project.cleaned.annotated.handfiltered.vcf")) + this.rodBind :+= new RodBind("loCov","vcf",rm.noheadvcf) + this.rodBind :+= new RodBind("hiCov","vcf",new File("/humgen/gsa-pipeline/PVQF4/all_batches_v001/batch_001/SnpCalls/ESPGO_Gabriel_NHLBI_EOMI_setone_EOMI_Project.cleaned.annotated.handfiltered.vcf")) this.variantMergeOptions = Some(VariantMergeType.UNION) this.genotypeMergeOptions = Some(GenotypeMergeType.PRIORITIZE) this.priority = "hiCov,loCov" this.out = swapExt(bootstrapMergedOut,".vcf",".merged.combined.vcf") this.jarFile = sting + this.memoryLimit = Some(6) } var combine : CombineVariants = new CombineVariants with CombineArgs @@ -162,7 +163,9 @@ class BootstrapCalls extends QScript { trait EvalArgs extends VariantEval { this.reference_sequence = reference this.intervals :+= intervalFile - this.rodBind :+= new RodBind("eval","vcf",combine.out) + this.rodBind :+= new RodBind("evalCombined","vcf",combine.out) + //this.rodBind :+= new RodBind("evalCut","vcf",rm.noheadvcf) + //this.rodBind :+= new RodBind("evalFCP","vcf",new File("/humgen/gsa-pipeline/PVQF4/all_batches_v001/batch_001/SnpCalls/ESPGO_Gabriel_NHLBI_EOMI_setone_EOMI_Project.cleaned.annotated.handfiltered.vcf")) this.rodBind :+= new RodBind("dbsnp","vcf",dbsnp) this.jarFile = sting this.ST = List("Filter","Novelty","JexlExpression")