Simpler naming convention for AlleleFrequencyCalculation => AFCalc

This commit is contained in:
Mark DePristo 2012-10-05 15:56:06 -07:00
parent cf3f9d6ee8
commit ee2f12e2ac
17 changed files with 123 additions and 122 deletions

View File

@ -53,14 +53,14 @@ public class ExactAFCalculationPerformanceTest {
final SimpleTimer timer = new SimpleTimer(); final SimpleTimer timer = new SimpleTimer();
for ( final int nonTypePL : Arrays.asList(10, 100, 1000) ) { for ( final int nonTypePL : Arrays.asList(10, 100, 1000) ) {
final ExactAFCalculation calc = testBuilder.makeModel(); final ExactAFCalc calc = testBuilder.makeModel();
final double[] priors = testBuilder.makePriors(); final double[] priors = testBuilder.makePriors();
for ( int[] ACs : makeACs(testBuilder.numAltAlleles, testBuilder.nSamples*2) ) { for ( int[] ACs : makeACs(testBuilder.numAltAlleles, testBuilder.nSamples*2) ) {
final VariantContext vc = testBuilder.makeACTest(ACs, 0, nonTypePL); final VariantContext vc = testBuilder.makeACTest(ACs, 0, nonTypePL);
timer.start(); timer.start();
final AlleleFrequencyCalculationResult result = calc.getLog10PNonRef(vc, priors); final AFCalcResult result = calc.getLog10PNonRef(vc, priors);
final long runtime = timer.getElapsedTimeNano(); final long runtime = timer.getElapsedTimeNano();
int otherAC = 0; int otherAC = 0;
@ -109,7 +109,7 @@ public class ExactAFCalculationPerformanceTest {
final SimpleTimer timer = new SimpleTimer(); final SimpleTimer timer = new SimpleTimer();
for ( final int nonTypePL : Arrays.asList(100) ) { for ( final int nonTypePL : Arrays.asList(100) ) {
final ExactAFCalculation calc = testBuilder.makeModel(); final ExactAFCalc calc = testBuilder.makeModel();
final double[] priors = testBuilder.makePriors(); final double[] priors = testBuilder.makePriors();
final int[] ac = new int[testBuilder.numAltAlleles]; final int[] ac = new int[testBuilder.numAltAlleles];
@ -123,7 +123,7 @@ public class ExactAFCalculationPerformanceTest {
vcb.genotypes(genotypes); vcb.genotypes(genotypes);
timer.start(); timer.start();
final AlleleFrequencyCalculationResult result = calc.getLog10PNonRef(vcb.make(), priors); final AFCalcResult result = calc.getLog10PNonRef(vcb.make(), priors);
final long runtime = timer.getElapsedTimeNano(); final long runtime = timer.getElapsedTimeNano();
final List<Object> columns = new LinkedList<Object>(coreValues); final List<Object> columns = new LinkedList<Object>(coreValues);
@ -143,7 +143,7 @@ public class ExactAFCalculationPerformanceTest {
final SimpleTimer timer = new SimpleTimer(); final SimpleTimer timer = new SimpleTimer();
for ( final int nonTypePL : Arrays.asList(100) ) { for ( final int nonTypePL : Arrays.asList(100) ) {
final ExactAFCalculation calc = testBuilder.makeModel(); final ExactAFCalc calc = testBuilder.makeModel();
final double[] priors = testBuilder.makePriors(); final double[] priors = testBuilder.makePriors();
final int[] ac = new int[testBuilder.numAltAlleles]; final int[] ac = new int[testBuilder.numAltAlleles];
@ -153,7 +153,7 @@ public class ExactAFCalculationPerformanceTest {
final VariantContext vc = testBuilder.makeACTest(ac, nNonInformative, nonTypePL); final VariantContext vc = testBuilder.makeACTest(ac, nNonInformative, nonTypePL);
timer.start(); timer.start();
final AlleleFrequencyCalculationResult result = calc.getLog10PNonRef(vc, priors); final AFCalcResult result = calc.getLog10PNonRef(vc, priors);
final long runtime = timer.getElapsedTimeNano(); final long runtime = timer.getElapsedTimeNano();
final List<Object> columns = new LinkedList<Object>(coreValues); final List<Object> columns = new LinkedList<Object>(coreValues);

View File

@ -47,11 +47,11 @@ public class ExactAFCalculationTestBuilder {
return nSamples; return nSamples;
} }
public ExactAFCalculation makeModel() { public ExactAFCalc makeModel() {
switch (modelType) { switch (modelType) {
case ReferenceDiploidExact: return new ReferenceDiploidExactAFCalculation(nSamples, 4); case ReferenceDiploidExact: return new ReferenceDiploidExactAFCalc(nSamples, 4);
case ConstrainedDiploidExact: return new ConstrainedDiploidExactAFCalculation(nSamples, 4); case ConstrainedDiploidExact: return new ConstrainedDiploidExactAFCalc(nSamples, 4);
case GeneralExact: return new GeneralPloidyExactAFCalculation(nSamples, 4, 2); case GeneralExact: return new GeneralPloidyExactAFCalc(nSamples, 4, 2);
default: throw new RuntimeException("Unexpected type " + modelType); default: throw new RuntimeException("Unexpected type " + modelType);
} }
} }

View File

@ -37,19 +37,19 @@ import org.broadinstitute.sting.utils.variantcontext.*;
import java.io.PrintStream; import java.io.PrintStream;
import java.util.*; import java.util.*;
public class GeneralPloidyExactAFCalculation extends ExactAFCalculation { public class GeneralPloidyExactAFCalc extends ExactAFCalc {
static final int MAX_LENGTH_FOR_POOL_PL_LOGGING = 10; // if PL vectors longer than this # of elements, don't log them static final int MAX_LENGTH_FOR_POOL_PL_LOGGING = 10; // if PL vectors longer than this # of elements, don't log them
private final int ploidy; private final int ploidy;
private final static double MAX_LOG10_ERROR_TO_STOP_EARLY = 6; // we want the calculation to be accurate to 1 / 10^6 private final static double MAX_LOG10_ERROR_TO_STOP_EARLY = 6; // we want the calculation to be accurate to 1 / 10^6
private final static boolean VERBOSE = false; private final static boolean VERBOSE = false;
protected GeneralPloidyExactAFCalculation(UnifiedArgumentCollection UAC, int N, Logger logger, PrintStream verboseWriter) { protected GeneralPloidyExactAFCalc(UnifiedArgumentCollection UAC, int N, Logger logger, PrintStream verboseWriter) {
super(UAC, N, logger, verboseWriter); super(UAC, N, logger, verboseWriter);
ploidy = UAC.samplePloidy; ploidy = UAC.samplePloidy;
} }
public GeneralPloidyExactAFCalculation(final int nSamples, final int maxAltAlleles, final int ploidy) { public GeneralPloidyExactAFCalc(final int nSamples, final int maxAltAlleles, final int ploidy) {
super(nSamples, maxAltAlleles, maxAltAlleles, null, null, null); super(nSamples, maxAltAlleles, maxAltAlleles, null, null, null);
this.ploidy = ploidy; this.ploidy = ploidy;
} }
@ -78,7 +78,7 @@ public class GeneralPloidyExactAFCalculation extends ExactAFCalculation {
@Override @Override
public void computeLog10PNonRef(final VariantContext vc, public void computeLog10PNonRef(final VariantContext vc,
final double[] log10AlleleFrequencyPriors, final double[] log10AlleleFrequencyPriors,
final AlleleFrequencyCalculationResult result) { final AFCalcResult result) {
combineSinglePools(vc.getGenotypes(), vc.getNAlleles(), ploidy, log10AlleleFrequencyPriors, result); combineSinglePools(vc.getGenotypes(), vc.getNAlleles(), ploidy, log10AlleleFrequencyPriors, result);
} }
@ -186,7 +186,7 @@ public class GeneralPloidyExactAFCalculation extends ExactAFCalculation {
final int numAlleles, final int numAlleles,
final int ploidyPerPool, final int ploidyPerPool,
final double[] log10AlleleFrequencyPriors, final double[] log10AlleleFrequencyPriors,
final AlleleFrequencyCalculationResult result) { final AFCalcResult result) {
final ArrayList<double[]> genotypeLikelihoods = getGLs(GLs); final ArrayList<double[]> genotypeLikelihoods = getGLs(GLs);
@ -213,7 +213,7 @@ public class GeneralPloidyExactAFCalculation extends ExactAFCalculation {
public static CombinedPoolLikelihoods fastCombineMultiallelicPool(final CombinedPoolLikelihoods originalPool, double[] newGL, int originalPloidy, int newGLPloidy, int numAlleles, public static CombinedPoolLikelihoods fastCombineMultiallelicPool(final CombinedPoolLikelihoods originalPool, double[] newGL, int originalPloidy, int newGLPloidy, int numAlleles,
final double[] log10AlleleFrequencyPriors, final double[] log10AlleleFrequencyPriors,
final AlleleFrequencyCalculationResult result) { final AFCalcResult result) {
@ -276,7 +276,7 @@ public class GeneralPloidyExactAFCalculation extends ExactAFCalculation {
final double[] log10AlleleFrequencyPriors, final double[] log10AlleleFrequencyPriors,
final int originalPloidy, final int originalPloidy,
final int newGLPloidy, final int newGLPloidy,
final AlleleFrequencyCalculationResult result, final AFCalcResult result,
final StateTracker stateTracker, final StateTracker stateTracker,
final LinkedList<ExactACset> ACqueue, final LinkedList<ExactACset> ACqueue,
final HashMap<ExactACcounts, ExactACset> indexesToACset) { final HashMap<ExactACcounts, ExactACset> indexesToACset) {
@ -343,7 +343,7 @@ public class GeneralPloidyExactAFCalculation extends ExactAFCalculation {
*/ */
public static void combineMultiallelicPoolNaively(CombinedPoolLikelihoods originalPool, double[] yy, int ploidy1, int ploidy2, int numAlleles, public static void combineMultiallelicPoolNaively(CombinedPoolLikelihoods originalPool, double[] yy, int ploidy1, int ploidy2, int numAlleles,
final double[] log10AlleleFrequencyPriors, final double[] log10AlleleFrequencyPriors,
final AlleleFrequencyCalculationResult result) { final AFCalcResult result) {
/* /*
final int dim1 = GenotypeLikelihoods.numLikelihoods(numAlleles, ploidy1); final int dim1 = GenotypeLikelihoods.numLikelihoods(numAlleles, ploidy1);
final int dim2 = GenotypeLikelihoods.numLikelihoods(numAlleles, ploidy2); final int dim2 = GenotypeLikelihoods.numLikelihoods(numAlleles, ploidy2);
@ -405,7 +405,7 @@ public class GeneralPloidyExactAFCalculation extends ExactAFCalculation {
final double[] secondGL, final double[] secondGL,
final double[] log10AlleleFrequencyPriors, final double[] log10AlleleFrequencyPriors,
final int numAlleles, final int ploidy1, final int ploidy2, final int numAlleles, final int ploidy1, final int ploidy2,
final AlleleFrequencyCalculationResult result) { final AFCalcResult result) {
final int newPloidy = ploidy1 + ploidy2; final int newPloidy = ploidy1 + ploidy2;
@ -511,7 +511,7 @@ public class GeneralPloidyExactAFCalculation extends ExactAFCalculation {
*/ */
public static ProbabilityVector combineBiallelicPoolsNaively(final ProbabilityVector originalPool, final double[] newPLVector, public static ProbabilityVector combineBiallelicPoolsNaively(final ProbabilityVector originalPool, final double[] newPLVector,
final int ploidy1, final int ploidy2, final double[] log10AlleleFrequencyPriors, final int ploidy1, final int ploidy2, final double[] log10AlleleFrequencyPriors,
final AlleleFrequencyCalculationResult result) { final AFCalcResult result) {
final int newPloidy = ploidy1 + ploidy2; final int newPloidy = ploidy1 + ploidy2;

View File

@ -53,16 +53,16 @@ public class ExactAFCalculationModelUnitTest extends BaseTest {
private class GetGLsTest extends TestDataProvider { private class GetGLsTest extends TestDataProvider {
GenotypesContext GLs; GenotypesContext GLs;
int numAltAlleles; int numAltAlleles;
final ExactAFCalculation calc; final ExactAFCalc calc;
final int[] expectedACs; final int[] expectedACs;
final double[] priors; final double[] priors;
final String priorName; final String priorName;
private GetGLsTest(final ExactAFCalculation calculation, int numAltAlleles, List<Genotype> arg, final double[] priors, final String priorName) { private GetGLsTest(final ExactAFCalc calc, int numAltAlleles, List<Genotype> arg, final double[] priors, final String priorName) {
super(GetGLsTest.class); super(GetGLsTest.class);
GLs = GenotypesContext.create(new ArrayList<Genotype>(arg)); GLs = GenotypesContext.create(new ArrayList<Genotype>(arg));
this.numAltAlleles = numAltAlleles; this.numAltAlleles = numAltAlleles;
this.calc = calculation; this.calc = calc;
this.priors = priors; this.priors = priors;
this.priorName = priorName; this.priorName = priorName;
@ -76,12 +76,12 @@ public class ExactAFCalculationModelUnitTest extends BaseTest {
} }
} }
public AlleleFrequencyCalculationResult execute() { public AFCalcResult execute() {
return getCalc().getLog10PNonRef(getVC(), getPriors()); return getCalc().getLog10PNonRef(getVC(), getPriors());
} }
public AlleleFrequencyCalculationResult executeRef() { public AFCalcResult executeRef() {
final ExactAFCalculation ref = new ReferenceDiploidExactAFCalculation(getCalc().nSamples, getCalc().getMaxAltAlleles()); final ExactAFCalc ref = new ReferenceDiploidExactAFCalc(getCalc().nSamples, getCalc().getMaxAltAlleles());
return ref.getLog10PNonRef(getVC(), getPriors()); return ref.getLog10PNonRef(getVC(), getPriors());
} }
@ -89,7 +89,7 @@ public class ExactAFCalculationModelUnitTest extends BaseTest {
return priors; return priors;
} }
public ExactAFCalculation getCalc() { public ExactAFCalc getCalc() {
return calc; return calc;
} }
@ -122,9 +122,9 @@ public class ExactAFCalculationModelUnitTest extends BaseTest {
final List<Genotype> triAllelicSamples = Arrays.asList(AA2, AB2, BB2, AC2, BC2, CC2); final List<Genotype> triAllelicSamples = Arrays.asList(AA2, AB2, BB2, AC2, BC2, CC2);
for ( final int nSamples : Arrays.asList(1, 2, 3, 4) ) { for ( final int nSamples : Arrays.asList(1, 2, 3, 4) ) {
final ExactAFCalculation diploidCalc = new ReferenceDiploidExactAFCalculation(nSamples, 4); final ExactAFCalc diploidCalc = new ReferenceDiploidExactAFCalc(nSamples, 4);
final ExactAFCalculation optDiploidCalc = new ConstrainedDiploidExactAFCalculation(nSamples, 4); final ExactAFCalc optDiploidCalc = new ConstrainedDiploidExactAFCalc(nSamples, 4);
final ExactAFCalculation generalCalc = new GeneralPloidyExactAFCalculation(nSamples, 4, 2); final ExactAFCalc generalCalc = new GeneralPloidyExactAFCalc(nSamples, 4, 2);
final int nPriorValues = 2*nSamples+1; final int nPriorValues = 2*nSamples+1;
final double[] flatPriors = MathUtils.normalizeFromLog10(new double[nPriorValues], true); // flat priors final double[] flatPriors = MathUtils.normalizeFromLog10(new double[nPriorValues], true); // flat priors
@ -132,7 +132,7 @@ public class ExactAFCalculationModelUnitTest extends BaseTest {
UnifiedGenotyperEngine.computeAlleleFrequencyPriors(nPriorValues - 1, humanPriors, 0.001); UnifiedGenotyperEngine.computeAlleleFrequencyPriors(nPriorValues - 1, humanPriors, 0.001);
for ( final double[] priors : Arrays.asList(flatPriors, humanPriors) ) { // , humanPriors) ) { for ( final double[] priors : Arrays.asList(flatPriors, humanPriors) ) { // , humanPriors) ) {
for ( ExactAFCalculation model : Arrays.asList(diploidCalc, generalCalc, optDiploidCalc) ) { for ( ExactAFCalc model : Arrays.asList(diploidCalc, generalCalc, optDiploidCalc) ) {
final String priorName = priors == humanPriors ? "human" : "flat"; final String priorName = priors == humanPriors ? "human" : "flat";
// bi-allelic // bi-allelic
@ -179,12 +179,12 @@ public class ExactAFCalculationModelUnitTest extends BaseTest {
samples.addAll(Collections.nCopies(nNonInformative, testData.nonInformative)); samples.addAll(Collections.nCopies(nNonInformative, testData.nonInformative));
final int nSamples = samples.size(); final int nSamples = samples.size();
final ExactAFCalculation diploidCalc = new ReferenceDiploidExactAFCalculation(nSamples, 4); final ExactAFCalc diploidCalc = new ReferenceDiploidExactAFCalc(nSamples, 4);
final ExactAFCalculation optDiploidCalc = new ConstrainedDiploidExactAFCalculation(nSamples, 4); final ExactAFCalc optDiploidCalc = new ConstrainedDiploidExactAFCalc(nSamples, 4);
final ExactAFCalculation generalCalc = new GeneralPloidyExactAFCalculation(nSamples, 4, 2); final ExactAFCalc generalCalc = new GeneralPloidyExactAFCalc(nSamples, 4, 2);
final double[] priors = new double[2*nSamples+1]; // flat priors final double[] priors = new double[2*nSamples+1]; // flat priors
for ( ExactAFCalculation model : Arrays.asList(diploidCalc, optDiploidCalc, generalCalc) ) { for ( ExactAFCalc model : Arrays.asList(diploidCalc, optDiploidCalc, generalCalc) ) {
final GetGLsTest onlyInformative = new GetGLsTest(model, testData.nAltAlleles, testData.called, priors, "flat"); final GetGLsTest onlyInformative = new GetGLsTest(model, testData.nAltAlleles, testData.called, priors, "flat");
for ( int rotation = 0; rotation < nSamples; rotation++ ) { for ( int rotation = 0; rotation < nSamples; rotation++ ) {
@ -206,8 +206,8 @@ public class ExactAFCalculationModelUnitTest extends BaseTest {
@Test(enabled = true, dataProvider = "GLsWithNonInformative", dependsOnMethods = "testGLs") @Test(enabled = true, dataProvider = "GLsWithNonInformative", dependsOnMethods = "testGLs")
public void testGLsWithNonInformative(GetGLsTest onlyInformative, GetGLsTest withNonInformative) { public void testGLsWithNonInformative(GetGLsTest onlyInformative, GetGLsTest withNonInformative) {
final AlleleFrequencyCalculationResult expected = onlyInformative.execute(); final AFCalcResult expected = onlyInformative.execute();
final AlleleFrequencyCalculationResult actual = withNonInformative.execute(); final AFCalcResult actual = withNonInformative.execute();
testResultSimple(withNonInformative); testResultSimple(withNonInformative);
@ -222,8 +222,8 @@ public class ExactAFCalculationModelUnitTest extends BaseTest {
} }
private void testResultSimple(final GetGLsTest cfg) { private void testResultSimple(final GetGLsTest cfg) {
final AlleleFrequencyCalculationResult refResult = cfg.executeRef(); final AFCalcResult refResult = cfg.executeRef();
final AlleleFrequencyCalculationResult result = cfg.execute(); final AFCalcResult result = cfg.execute();
compareToRefResult(refResult, result); compareToRefResult(refResult, result);
@ -254,8 +254,8 @@ public class ExactAFCalculationModelUnitTest extends BaseTest {
// } // }
} }
private void compareToRefResult(final AlleleFrequencyCalculationResult refResult, private void compareToRefResult(final AFCalcResult refResult,
final AlleleFrequencyCalculationResult result) { final AFCalcResult result) {
final double TOLERANCE = 1; final double TOLERANCE = 1;
// MAP may not be equal // MAP may not be equal
// Assert.assertEquals(result.getAlleleCountsOfMAP(), refResult.getAlleleCountsOfMAP()); // Assert.assertEquals(result.getAlleleCountsOfMAP(), refResult.getAlleleCountsOfMAP());
@ -271,23 +271,23 @@ public class ExactAFCalculationModelUnitTest extends BaseTest {
} }
@Test(enabled = true, dataProvider = "Models") @Test(enabled = true, dataProvider = "Models")
public void testLargeGLs(final ExactAFCalculation calc) { public void testLargeGLs(final ExactAFCalc calc) {
final Genotype BB = makePL(Arrays.asList(C, C), 20000000, 20000000, 0); final Genotype BB = makePL(Arrays.asList(C, C), 20000000, 20000000, 0);
GetGLsTest cfg = new GetGLsTest(calc, 1, Arrays.asList(BB, BB, BB), FLAT_3SAMPLE_PRIORS, "flat"); GetGLsTest cfg = new GetGLsTest(calc, 1, Arrays.asList(BB, BB, BB), FLAT_3SAMPLE_PRIORS, "flat");
final AlleleFrequencyCalculationResult result = cfg.execute(); final AFCalcResult result = cfg.execute();
int calculatedAlleleCount = result.getAlleleCountsOfMAP()[0]; int calculatedAlleleCount = result.getAlleleCountsOfMAP()[0];
Assert.assertEquals(calculatedAlleleCount, 6); Assert.assertEquals(calculatedAlleleCount, 6);
} }
@Test(enabled = true, dataProvider = "Models") @Test(enabled = true, dataProvider = "Models")
public void testMismatchedGLs(final ExactAFCalculation calc) { public void testMismatchedGLs(final ExactAFCalc calc) {
final Genotype AB = makePL(Arrays.asList(A, C), 2000, 0, 2000, 2000, 2000, 2000); final Genotype AB = makePL(Arrays.asList(A, C), 2000, 0, 2000, 2000, 2000, 2000);
final Genotype AC = makePL(Arrays.asList(A, G), 100, 100, 100, 0, 100, 100); final Genotype AC = makePL(Arrays.asList(A, G), 100, 100, 100, 0, 100, 100);
GetGLsTest cfg = new GetGLsTest(calc, 2, Arrays.asList(AB, AC), FLAT_3SAMPLE_PRIORS, "flat"); GetGLsTest cfg = new GetGLsTest(calc, 2, Arrays.asList(AB, AC), FLAT_3SAMPLE_PRIORS, "flat");
final AlleleFrequencyCalculationResult result = cfg.execute(); final AFCalcResult result = cfg.execute();
Assert.assertEquals(result.getAlleleCountsOfMAP()[0], 1); Assert.assertEquals(result.getAlleleCountsOfMAP()[0], 1);
Assert.assertEquals(result.getAlleleCountsOfMAP()[1], 1); Assert.assertEquals(result.getAlleleCountsOfMAP()[1], 1);
@ -297,15 +297,15 @@ public class ExactAFCalculationModelUnitTest extends BaseTest {
public Object[][] makeModels() { public Object[][] makeModels() {
List<Object[]> tests = new ArrayList<Object[]>(); List<Object[]> tests = new ArrayList<Object[]>();
tests.add(new Object[]{new ReferenceDiploidExactAFCalculation(2, 4)}); tests.add(new Object[]{new ReferenceDiploidExactAFCalc(2, 4)});
// tests.add(new Object[]{new ConstrainedDiploidExactAFCalculation(2, 4)}); // tests.add(new Object[]{new ConstrainedDiploidExactAFCalc(2, 4)});
// tests.add(new Object[]{new GeneralPloidyExactAFCalculation(2, 4, 2)}); // tests.add(new Object[]{new GeneralPloidyExactAFCalc(2, 4, 2)});
return tests.toArray(new Object[][]{}); return tests.toArray(new Object[][]{});
} }
@Test(enabled = true, dataProvider = "Models") @Test(enabled = true, dataProvider = "Models")
public void testBiallelicPriors(final ExactAFCalculation model) { public void testBiallelicPriors(final ExactAFCalc model) {
final int REF_PL = 10; final int REF_PL = 10;
final Genotype AB = makePL(Arrays.asList(A,C), REF_PL, 0, 10000); final Genotype AB = makePL(Arrays.asList(A,C), REF_PL, 0, 10000);
@ -313,7 +313,7 @@ public class ExactAFCalculationModelUnitTest extends BaseTest {
final double refPrior = 1 - QualityUtils.qualToErrorProb(log10NonRefPrior); final double refPrior = 1 - QualityUtils.qualToErrorProb(log10NonRefPrior);
final double[] priors = MathUtils.toLog10(new double[]{refPrior, (1-refPrior) / 2, (1-refPrior) / 2}); final double[] priors = MathUtils.toLog10(new double[]{refPrior, (1-refPrior) / 2, (1-refPrior) / 2});
GetGLsTest cfg = new GetGLsTest(model, 1, Arrays.asList(AB), priors, "pNonRef" + log10NonRefPrior); GetGLsTest cfg = new GetGLsTest(model, 1, Arrays.asList(AB), priors, "pNonRef" + log10NonRefPrior);
final AlleleFrequencyCalculationResult result = cfg.execute(); final AFCalcResult result = cfg.execute();
final int actualAC = result.getAlleleCountsOfMAP()[0]; final int actualAC = result.getAlleleCountsOfMAP()[0];
final double pRefWithPrior = AB.getLikelihoods().getAsVector()[0] + priors[0]; final double pRefWithPrior = AB.getLikelihoods().getAsVector()[0] + priors[0];
@ -333,7 +333,7 @@ public class ExactAFCalculationModelUnitTest extends BaseTest {
} }
@Test(enabled = false, dataProvider = "Models") @Test(enabled = false, dataProvider = "Models")
public void testTriallelicPriors(final ExactAFCalculation model) { public void testTriallelicPriors(final ExactAFCalc model) {
// TODO // TODO
// TODO // TODO
// TODO THIS SEEMS TO ID A BUG IN THE EXACT MODEL FOR MULTI-ALLELICS, AS THE // TODO THIS SEEMS TO ID A BUG IN THE EXACT MODEL FOR MULTI-ALLELICS, AS THE
@ -349,7 +349,7 @@ public class ExactAFCalculationModelUnitTest extends BaseTest {
final double nonRefPrior = (1-refPrior) / 2; final double nonRefPrior = (1-refPrior) / 2;
final double[] priors = MathUtils.toLog10(new double[]{refPrior, nonRefPrior, nonRefPrior, nonRefPrior, nonRefPrior, nonRefPrior}); final double[] priors = MathUtils.toLog10(new double[]{refPrior, nonRefPrior, nonRefPrior, nonRefPrior, nonRefPrior, nonRefPrior});
GetGLsTest cfg = new GetGLsTest(model, 2, Arrays.asList(AB, AC), priors, "pNonRef" + log10NonRefPrior); GetGLsTest cfg = new GetGLsTest(model, 2, Arrays.asList(AB, AC), priors, "pNonRef" + log10NonRefPrior);
final AlleleFrequencyCalculationResult result = cfg.execute(); final AFCalcResult result = cfg.execute();
final int actualAC_AB = result.getAlleleCountsOfMAP()[0]; final int actualAC_AB = result.getAlleleCountsOfMAP()[0];
final double pRefABWithPrior = AB.getLikelihoods().getAsVector()[0] + priors[0]; final double pRefABWithPrior = AB.getLikelihoods().getAsVector()[0] + priors[0];
@ -401,7 +401,7 @@ public class ExactAFCalculationModelUnitTest extends BaseTest {
ExactAFCalculationTestBuilder.PriorType.human); ExactAFCalculationTestBuilder.PriorType.human);
final VariantContext vc = testBuilder.makeACTest(requestedACs, nNonInformative, 100); final VariantContext vc = testBuilder.makeACTest(requestedACs, nNonInformative, 100);
final int[] maxACsToVisit = ((ConstrainedDiploidExactAFCalculation)testBuilder.makeModel()).computeMaxACs(vc); final int[] maxACsToVisit = ((ConstrainedDiploidExactAFCalc)testBuilder.makeModel()).computeMaxACs(vc);
testExpectedACs(vc, maxACsToVisit); testExpectedACs(vc, maxACsToVisit);
} }
@ -466,7 +466,7 @@ public class ExactAFCalculationModelUnitTest extends BaseTest {
final ExactAFCalculationTestBuilder testBuilder final ExactAFCalculationTestBuilder testBuilder
= new ExactAFCalculationTestBuilder(1, vc.getNAlleles()-1, modelType, = new ExactAFCalculationTestBuilder(1, vc.getNAlleles()-1, modelType,
ExactAFCalculationTestBuilder.PriorType.human); ExactAFCalculationTestBuilder.PriorType.human);
final int[] maxACsToVisit = ((ConstrainedDiploidExactAFCalculation)testBuilder.makeModel()).computeMaxACs(vc); final int[] maxACsToVisit = ((ConstrainedDiploidExactAFCalc)testBuilder.makeModel()).computeMaxACs(vc);
testExpectedACs(vc, maxACsToVisit); testExpectedACs(vc, maxACsToVisit);
} }
} }

View File

@ -138,11 +138,11 @@ public class GeneralPloidyAFCalculationModelUnitTest extends BaseTest {
@Test(dataProvider = "getGLs") @Test(dataProvider = "getGLs")
public void testGLs(GetGLsTest cfg) { public void testGLs(GetGLsTest cfg) {
final AlleleFrequencyCalculationResult result = new AlleleFrequencyCalculationResult(cfg.numAltAlleles); final AFCalcResult result = new AFCalcResult(cfg.numAltAlleles);
final int len = GeneralPloidyGenotypeLikelihoods.getNumLikelihoodElements(1 + cfg.numAltAlleles, cfg.ploidy * cfg.GLs.size()); final int len = GeneralPloidyGenotypeLikelihoods.getNumLikelihoodElements(1 + cfg.numAltAlleles, cfg.ploidy * cfg.GLs.size());
double[] priors = new double[len]; // flat priors double[] priors = new double[len]; // flat priors
GeneralPloidyExactAFCalculation.combineSinglePools(cfg.GLs, 1 + cfg.numAltAlleles, cfg.ploidy, priors, result); GeneralPloidyExactAFCalc.combineSinglePools(cfg.GLs, 1 + cfg.numAltAlleles, cfg.ploidy, priors, result);
int nameIndex = 1; int nameIndex = 1;
for ( int allele = 0; allele < cfg.numAltAlleles; allele++, nameIndex+=2 ) { for ( int allele = 0; allele < cfg.numAltAlleles; allele++, nameIndex+=2 ) {
int expectedAlleleCount = Integer.valueOf(cfg.name.substring(nameIndex, nameIndex+1)); int expectedAlleleCount = Integer.valueOf(cfg.name.substring(nameIndex, nameIndex+1));

View File

@ -27,7 +27,7 @@ package org.broadinstitute.sting.gatk.walkers.genotyper;
import org.broadinstitute.sting.commandline.*; import org.broadinstitute.sting.commandline.*;
import org.broadinstitute.sting.gatk.arguments.StandardCallerArgumentCollection; import org.broadinstitute.sting.gatk.arguments.StandardCallerArgumentCollection;
import org.broadinstitute.sting.gatk.walkers.genotyper.afcalc.AlleleFrequencyCalculation; import org.broadinstitute.sting.gatk.walkers.genotyper.afcalc.AFCalc;
import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.utils.variantcontext.VariantContext;
import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils;
@ -42,7 +42,7 @@ public class UnifiedArgumentCollection extends StandardCallerArgumentCollection
*/ */
@Advanced @Advanced
@Argument(fullName = "p_nonref_model", shortName = "pnrm", doc = "Non-reference probability calculation model to employ", required = false) @Argument(fullName = "p_nonref_model", shortName = "pnrm", doc = "Non-reference probability calculation model to employ", required = false)
protected AlleleFrequencyCalculation.Model AFmodel = AlleleFrequencyCalculation.Model.EXACT; protected AFCalc.Model AFmodel = AFCalc.Model.EXACT;
/** /**
* The PCR error rate is independent of the sequencing error rate, which is necessary because we cannot necessarily * The PCR error rate is independent of the sequencing error rate, which is necessary because we cannot necessarily

View File

@ -249,7 +249,7 @@ public class UnifiedGenotyper extends LocusWalker<List<VariantCallContext>, Unif
throw new UserException("Incorrect genotype calculation model chosen. Only [POOLSNP|POOLINDEL|POOLBOTH] supported with this walker if sample ploidy != 2"); throw new UserException("Incorrect genotype calculation model chosen. Only [POOLSNP|POOLINDEL|POOLBOTH] supported with this walker if sample ploidy != 2");
} }
if (UAC.AFmodel != AlleleFrequencyCalculation.Model.POOL) if (UAC.AFmodel != AFCalc.Model.POOL)
throw new UserException("Incorrect AF Calculation model. Only POOL model supported if sample ploidy != 2"); throw new UserException("Incorrect AF Calculation model. Only POOL model supported if sample ploidy != 2");
} }

View File

@ -34,8 +34,8 @@ import org.broadinstitute.sting.gatk.contexts.AlignmentContextUtils;
import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
import org.broadinstitute.sting.gatk.walkers.annotator.VariantAnnotatorEngine; import org.broadinstitute.sting.gatk.walkers.annotator.VariantAnnotatorEngine;
import org.broadinstitute.sting.gatk.walkers.genotyper.afcalc.AlleleFrequencyCalculation; import org.broadinstitute.sting.gatk.walkers.genotyper.afcalc.AFCalc;
import org.broadinstitute.sting.gatk.walkers.genotyper.afcalc.AlleleFrequencyCalculationResult; import org.broadinstitute.sting.gatk.walkers.genotyper.afcalc.AFCalcResult;
import org.broadinstitute.sting.utils.*; import org.broadinstitute.sting.utils.*;
import org.broadinstitute.sting.utils.baq.BAQ; import org.broadinstitute.sting.utils.baq.BAQ;
import org.broadinstitute.sting.utils.classloader.PluginManager; import org.broadinstitute.sting.utils.classloader.PluginManager;
@ -80,10 +80,10 @@ public class UnifiedGenotyperEngine {
private ThreadLocal<Map<String, GenotypeLikelihoodsCalculationModel>> glcm = new ThreadLocal<Map<String, GenotypeLikelihoodsCalculationModel>>(); private ThreadLocal<Map<String, GenotypeLikelihoodsCalculationModel>> glcm = new ThreadLocal<Map<String, GenotypeLikelihoodsCalculationModel>>();
// the model used for calculating p(non-ref) // the model used for calculating p(non-ref)
private ThreadLocal<AlleleFrequencyCalculation> afcm = new ThreadLocal<AlleleFrequencyCalculation>(); private ThreadLocal<AFCalc> afcm = new ThreadLocal<AFCalc>();
// the allele frequency likelihoods and posteriors (allocated once as an optimization) // the allele frequency likelihoods and posteriors (allocated once as an optimization)
private ThreadLocal<AlleleFrequencyCalculationResult> alleleFrequencyCalculationResult = new ThreadLocal<AlleleFrequencyCalculationResult>(); private ThreadLocal<AFCalcResult> alleleFrequencyCalculationResult = new ThreadLocal<AFCalcResult>();
// because the allele frequency priors are constant for a given i, we cache the results to avoid having to recompute everything // because the allele frequency priors are constant for a given i, we cache the results to avoid having to recompute everything
private final double[] log10AlleleFrequencyPriorsSNPs; private final double[] log10AlleleFrequencyPriorsSNPs;
@ -355,9 +355,9 @@ public class UnifiedGenotyperEngine {
// initialize the data for this thread if that hasn't been done yet // initialize the data for this thread if that hasn't been done yet
if ( afcm.get() == null ) { if ( afcm.get() == null ) {
afcm.set(getAlleleFrequencyCalculationObject(N, logger, verboseWriter, UAC)); afcm.set(getAlleleFrequencyCalculationObject(N, logger, verboseWriter, UAC));
alleleFrequencyCalculationResult.set(new AlleleFrequencyCalculationResult(UAC.MAX_ALTERNATE_ALLELES)); alleleFrequencyCalculationResult.set(new AFCalcResult(UAC.MAX_ALTERNATE_ALLELES));
} }
AlleleFrequencyCalculationResult AFresult = alleleFrequencyCalculationResult.get(); AFCalcResult AFresult = alleleFrequencyCalculationResult.get();
// estimate our confidence in a reference call and return // estimate our confidence in a reference call and return
if ( vc.getNSamples() == 0 ) { if ( vc.getNSamples() == 0 ) {
@ -743,9 +743,9 @@ public class UnifiedGenotyperEngine {
return glcm; return glcm;
} }
private static AlleleFrequencyCalculation getAlleleFrequencyCalculationObject(int N, Logger logger, PrintStream verboseWriter, UnifiedArgumentCollection UAC) { private static AFCalc getAlleleFrequencyCalculationObject(int N, Logger logger, PrintStream verboseWriter, UnifiedArgumentCollection UAC) {
List<Class<? extends AlleleFrequencyCalculation>> afClasses = new PluginManager<AlleleFrequencyCalculation>(AlleleFrequencyCalculation.class).getPlugins(); List<Class<? extends AFCalc>> afClasses = new PluginManager<AFCalc>(AFCalc.class).getPlugins();
// user-specified name // user-specified name
String afModelName = UAC.AFmodel.implementationName; String afModelName = UAC.AFmodel.implementationName;
@ -756,21 +756,21 @@ public class UnifiedGenotyperEngine {
afModelName = "Diploid" + afModelName; afModelName = "Diploid" + afModelName;
for (int i = 0; i < afClasses.size(); i++) { for (int i = 0; i < afClasses.size(); i++) {
Class<? extends AlleleFrequencyCalculation> afClass = afClasses.get(i); Class<? extends AFCalc> afClass = afClasses.get(i);
String key = afClass.getSimpleName().replace("AFCalculationModel","").toUpperCase(); String key = afClass.getSimpleName().replace("AFCalculationModel","").toUpperCase();
if (afModelName.equalsIgnoreCase(key)) { if (afModelName.equalsIgnoreCase(key)) {
try { try {
Object args[] = new Object[]{UAC,N,logger,verboseWriter}; Object args[] = new Object[]{UAC,N,logger,verboseWriter};
Constructor c = afClass.getDeclaredConstructor(UnifiedArgumentCollection.class, int.class, Logger.class, PrintStream.class); Constructor c = afClass.getDeclaredConstructor(UnifiedArgumentCollection.class, int.class, Logger.class, PrintStream.class);
return (AlleleFrequencyCalculation)c.newInstance(args); return (AFCalc)c.newInstance(args);
} }
catch (Exception e) { catch (Exception e) {
throw new IllegalArgumentException("Unexpected AlleleFrequencyCalculation " + UAC.AFmodel); throw new IllegalArgumentException("Unexpected AFCalc " + UAC.AFmodel);
} }
} }
} }
throw new IllegalArgumentException("Unexpected AlleleFrequencyCalculation " + UAC.AFmodel); throw new IllegalArgumentException("Unexpected AFCalc " + UAC.AFmodel);
} }
public static VariantContext getVCFromAllelesRod(RefMetaDataTracker tracker, ReferenceContext ref, GenomeLoc loc, boolean requireSNP, Logger logger, final RodBinding<VariantContext> allelesBinding) { public static VariantContext getVCFromAllelesRod(RefMetaDataTracker tracker, ReferenceContext ref, GenomeLoc loc, boolean requireSNP, Logger logger, final RodBinding<VariantContext> allelesBinding) {

View File

@ -48,12 +48,12 @@ import java.util.List;
/** /**
* Generic interface for calculating the probability of alleles segregating given priors and genotype likelihoods * Generic interface for calculating the probability of alleles segregating given priors and genotype likelihoods
*/ */
public abstract class AlleleFrequencyCalculation implements Cloneable { public abstract class AFCalc implements Cloneable {
private final static Logger defaultLogger = Logger.getLogger(AlleleFrequencyCalculation.class); private final static Logger defaultLogger = Logger.getLogger(AFCalc.class);
public enum Model { public enum Model {
/** The default model with the best performance in all cases */ /** The default model with the best performance in all cases */
EXACT("ExactAFCalculation"); EXACT("ExactAFCalc");
public final String implementationName; public final String implementationName;
@ -74,11 +74,11 @@ public abstract class AlleleFrequencyCalculation implements Cloneable {
private SimpleTimer callTimer = new SimpleTimer(); private SimpleTimer callTimer = new SimpleTimer();
private PrintStream callReport = null; private PrintStream callReport = null;
protected AlleleFrequencyCalculation(final UnifiedArgumentCollection UAC, final int nSamples, final Logger logger, final PrintStream verboseWriter) { protected AFCalc(final UnifiedArgumentCollection UAC, final int nSamples, final Logger logger, final PrintStream verboseWriter) {
this(nSamples, UAC.MAX_ALTERNATE_ALLELES, UAC.MAX_ALTERNATE_ALLELES_FOR_INDELS, UAC.exactCallsLog, logger, verboseWriter); this(nSamples, UAC.MAX_ALTERNATE_ALLELES, UAC.MAX_ALTERNATE_ALLELES_FOR_INDELS, UAC.exactCallsLog, logger, verboseWriter);
} }
protected AlleleFrequencyCalculation(final int nSamples, protected AFCalc(final int nSamples,
final int maxAltAlleles, final int maxAltAlleles,
final int maxAltAllelesForIndels, final int maxAltAllelesForIndels,
final File exactCallsLog, final File exactCallsLog,
@ -97,13 +97,13 @@ public abstract class AlleleFrequencyCalculation implements Cloneable {
} }
/** /**
* @see #getLog10PNonRef(org.broadinstitute.sting.utils.variantcontext.VariantContext, double[], AlleleFrequencyCalculationResult) * @see #getLog10PNonRef(org.broadinstitute.sting.utils.variantcontext.VariantContext, double[], AFCalcResult)
* *
* Allocates a new results object. Useful for testing but slow in practice. * Allocates a new results object. Useful for testing but slow in practice.
*/ */
public final AlleleFrequencyCalculationResult getLog10PNonRef(final VariantContext vc, public final AFCalcResult getLog10PNonRef(final VariantContext vc,
final double[] log10AlleleFrequencyPriors) { final double[] log10AlleleFrequencyPriors) {
return getLog10PNonRef(vc, log10AlleleFrequencyPriors, new AlleleFrequencyCalculationResult(getMaxAltAlleles())); return getLog10PNonRef(vc, log10AlleleFrequencyPriors, new AFCalcResult(getMaxAltAlleles()));
} }
/** /**
@ -114,9 +114,9 @@ public abstract class AlleleFrequencyCalculation implements Cloneable {
* @param result a pre-allocated (for efficiency) object to hold the result of the calculation * @param result a pre-allocated (for efficiency) object to hold the result of the calculation
* @return result (for programming convenience) * @return result (for programming convenience)
*/ */
public final AlleleFrequencyCalculationResult getLog10PNonRef(final VariantContext vc, public final AFCalcResult getLog10PNonRef(final VariantContext vc,
final double[] log10AlleleFrequencyPriors, final double[] log10AlleleFrequencyPriors,
final AlleleFrequencyCalculationResult result) { final AFCalcResult result) {
if ( vc == null ) throw new IllegalArgumentException("VariantContext cannot be null"); if ( vc == null ) throw new IllegalArgumentException("VariantContext cannot be null");
if ( log10AlleleFrequencyPriors == null ) throw new IllegalArgumentException("priors vector cannot be null"); if ( log10AlleleFrequencyPriors == null ) throw new IllegalArgumentException("priors vector cannot be null");
if ( result == null ) throw new IllegalArgumentException("Results object cannot be null"); if ( result == null ) throw new IllegalArgumentException("Results object cannot be null");
@ -168,7 +168,7 @@ public abstract class AlleleFrequencyCalculation implements Cloneable {
// TODO -- add consistent requires among args // TODO -- add consistent requires among args
public abstract void computeLog10PNonRef(final VariantContext vc, public abstract void computeLog10PNonRef(final VariantContext vc,
final double[] log10AlleleFrequencyPriors, final double[] log10AlleleFrequencyPriors,
final AlleleFrequencyCalculationResult result); final AFCalcResult result);
/** /**
* Must be overridden by concrete subclasses * Must be overridden by concrete subclasses

View File

@ -41,7 +41,7 @@ import java.util.List;
* *
* TODO -- WHAT IS THE CONTRACT ON MAP AC AND P NON REF? * TODO -- WHAT IS THE CONTRACT ON MAP AC AND P NON REF?
*/ */
public class AlleleFrequencyCalculationResult { public class AFCalcResult {
// These variables are intended to contain the MLE and MAP (and their corresponding allele counts) of the site over all alternate alleles // These variables are intended to contain the MLE and MAP (and their corresponding allele counts) of the site over all alternate alleles
private double log10MLE; private double log10MLE;
private double log10MAP; private double log10MAP;
@ -71,7 +71,7 @@ public class AlleleFrequencyCalculationResult {
* *
* @param maxAltAlleles an integer >= 1 * @param maxAltAlleles an integer >= 1
*/ */
public AlleleFrequencyCalculationResult(final int maxAltAlleles) { public AFCalcResult(final int maxAltAlleles) {
if ( maxAltAlleles < 1 ) throw new IllegalArgumentException("maxAltAlleles must be >= 0, saw " + maxAltAlleles); if ( maxAltAlleles < 1 ) throw new IllegalArgumentException("maxAltAlleles must be >= 0, saw " + maxAltAlleles);
alleleCountsOfMLE = new int[maxAltAlleles]; alleleCountsOfMLE = new int[maxAltAlleles];
@ -227,7 +227,7 @@ public class AlleleFrequencyCalculationResult {
* Resetting of the data is done by the calculation model itself, so shouldn't be done by callers any longer * Resetting of the data is done by the calculation model itself, so shouldn't be done by callers any longer
*/ */
protected void reset() { protected void reset() {
log10MLE = log10MAP = log10LikelihoodOfAFzero = log10PosteriorOfAFzero = AlleleFrequencyCalculation.VALUE_NOT_CALCULATED; log10MLE = log10MAP = log10LikelihoodOfAFzero = log10PosteriorOfAFzero = AFCalc.VALUE_NOT_CALCULATED;
for ( int i = 0; i < alleleCountsOfMLE.length; i++ ) { for ( int i = 0; i < alleleCountsOfMLE.length; i++ ) {
alleleCountsOfMLE[i] = 0; alleleCountsOfMLE[i] = 0;
alleleCountsOfMAP[i] = 0; alleleCountsOfMAP[i] = 0;

View File

@ -10,16 +10,16 @@ import org.broadinstitute.sting.utils.variantcontext.VariantContext;
import java.io.PrintStream; import java.io.PrintStream;
public class ConstrainedDiploidExactAFCalculation extends DiploidExactAFCalculation { public class ConstrainedDiploidExactAFCalc extends DiploidExactAFCalc {
public ConstrainedDiploidExactAFCalculation(final int nSamples, final int maxAltAlleles) { public ConstrainedDiploidExactAFCalc(final int nSamples, final int maxAltAlleles) {
super(nSamples, maxAltAlleles); super(nSamples, maxAltAlleles);
} }
public ConstrainedDiploidExactAFCalculation(UnifiedArgumentCollection UAC, int N, Logger logger, PrintStream verboseWriter) { public ConstrainedDiploidExactAFCalc(UnifiedArgumentCollection UAC, int N, Logger logger, PrintStream verboseWriter) {
super(UAC, N, logger, verboseWriter); super(UAC, N, logger, verboseWriter);
} }
protected StateTracker makeMaxLikelihood(final VariantContext vc, final AlleleFrequencyCalculationResult result) { protected StateTracker makeMaxLikelihood(final VariantContext vc, final AFCalcResult result) {
final int[] maxACsToConsider = computeMaxACs(vc); final int[] maxACsToConsider = computeMaxACs(vc);
result.setAClimits(maxACsToConsider); result.setAClimits(maxACsToConsider);
return new StateTracker(maxACsToConsider); return new StateTracker(maxACsToConsider);

View File

@ -33,21 +33,21 @@ import org.broadinstitute.sting.utils.variantcontext.*;
import java.io.PrintStream; import java.io.PrintStream;
import java.util.*; import java.util.*;
public abstract class DiploidExactAFCalculation extends ExactAFCalculation { public abstract class DiploidExactAFCalc extends ExactAFCalc {
public DiploidExactAFCalculation(final int nSamples, final int maxAltAlleles) { public DiploidExactAFCalc(final int nSamples, final int maxAltAlleles) {
super(nSamples, maxAltAlleles, maxAltAlleles, null, null, null); super(nSamples, maxAltAlleles, maxAltAlleles, null, null, null);
} }
public DiploidExactAFCalculation(UnifiedArgumentCollection UAC, int N, Logger logger, PrintStream verboseWriter) { public DiploidExactAFCalc(UnifiedArgumentCollection UAC, int N, Logger logger, PrintStream verboseWriter) {
super(UAC, N, logger, verboseWriter); super(UAC, N, logger, verboseWriter);
} }
protected abstract StateTracker makeMaxLikelihood(final VariantContext vc, final AlleleFrequencyCalculationResult result); protected abstract StateTracker makeMaxLikelihood(final VariantContext vc, final AFCalcResult result);
@Override @Override
public void computeLog10PNonRef(final VariantContext vc, public void computeLog10PNonRef(final VariantContext vc,
final double[] log10AlleleFrequencyPriors, final double[] log10AlleleFrequencyPriors,
final AlleleFrequencyCalculationResult result) { final AFCalcResult result) {
final int numAlternateAlleles = vc.getNAlleles() - 1; final int numAlternateAlleles = vc.getNAlleles() - 1;
final ArrayList<double[]> genotypeLikelihoods = getGLs(vc.getGenotypes()); final ArrayList<double[]> genotypeLikelihoods = getGLs(vc.getGenotypes());
final int numSamples = genotypeLikelihoods.size()-1; final int numSamples = genotypeLikelihoods.size()-1;
@ -161,7 +161,7 @@ public abstract class DiploidExactAFCalculation extends ExactAFCalculation {
final LinkedList<ExactACset> ACqueue, final LinkedList<ExactACset> ACqueue,
final HashMap<ExactACcounts, ExactACset> indexesToACset, final HashMap<ExactACcounts, ExactACset> indexesToACset,
final double[] log10AlleleFrequencyPriors, final double[] log10AlleleFrequencyPriors,
final AlleleFrequencyCalculationResult result) { final AFCalcResult result) {
//if ( DEBUG ) //if ( DEBUG )
// System.out.printf(" *** computing LofK for set=%s%n", set.ACcounts); // System.out.printf(" *** computing LofK for set=%s%n", set.ACcounts);
@ -250,7 +250,7 @@ public abstract class DiploidExactAFCalculation extends ExactAFCalculation {
private void computeLofK(final ExactACset set, private void computeLofK(final ExactACset set,
final ArrayList<double[]> genotypeLikelihoods, final ArrayList<double[]> genotypeLikelihoods,
final double[] log10AlleleFrequencyPriors, final double[] log10AlleleFrequencyPriors,
final AlleleFrequencyCalculationResult result) { final AFCalcResult result) {
set.getLog10Likelihoods()[0] = 0.0; // the zero case set.getLog10Likelihoods()[0] = 0.0; // the zero case
final int totalK = set.getACsum(); final int totalK = set.getACsum();

View File

@ -1,5 +1,7 @@
package org.broadinstitute.sting.gatk.walkers.genotyper.afcalc; package org.broadinstitute.sting.gatk.walkers.genotyper.afcalc;
import org.broadinstitute.sting.utils.MathUtils;
import java.util.Arrays; import java.util.Arrays;
/** /**
@ -21,16 +23,15 @@ public final class ExactACset {
public ExactACset(final int size, final ExactACcounts ACcounts) { public ExactACset(final int size, final ExactACcounts ACcounts) {
this.ACcounts = ACcounts; this.ACcounts = ACcounts;
log10Likelihoods = new double[size]; log10Likelihoods = new double[size];
Arrays.fill(getLog10Likelihoods(), Double.NEGATIVE_INFINITY); Arrays.fill(log10Likelihoods, Double.NEGATIVE_INFINITY);
} }
// sum of all the non-reference alleles /**
* sum of all the non-reference alleles
*/
public int getACsum() { public int getACsum() {
if ( sum == -1 ) { if ( sum == -1 )
sum = 0; sum = (int)MathUtils.sum(getACcounts().getCounts());
for ( int count : getACcounts().getCounts() )
sum += count;
}
return sum; return sum;
} }

View File

@ -40,14 +40,14 @@ import java.util.ArrayList;
/** /**
* Uses the Exact calculation of Heng Li * Uses the Exact calculation of Heng Li
*/ */
abstract class ExactAFCalculation extends AlleleFrequencyCalculation { abstract class ExactAFCalc extends AFCalc {
protected static final int HOM_REF_INDEX = 0; // AA likelihoods are always first protected static final int HOM_REF_INDEX = 0; // AA likelihoods are always first
protected ExactAFCalculation(final UnifiedArgumentCollection UAC, final int nSamples, final Logger logger, final PrintStream verboseWriter) { protected ExactAFCalc(final UnifiedArgumentCollection UAC, final int nSamples, final Logger logger, final PrintStream verboseWriter) {
super(UAC, nSamples, logger, verboseWriter); super(UAC, nSamples, logger, verboseWriter);
} }
protected ExactAFCalculation(final int nSamples, int maxAltAlleles, int maxAltAllelesForIndels, File exactCallsLog, Logger logger, PrintStream verboseWriter) { protected ExactAFCalc(final int nSamples, int maxAltAlleles, int maxAltAllelesForIndels, File exactCallsLog, Logger logger, PrintStream verboseWriter) {
super(nSamples, maxAltAlleles, maxAltAllelesForIndels, exactCallsLog, logger, verboseWriter); super(nSamples, maxAltAlleles, maxAltAllelesForIndels, exactCallsLog, logger, verboseWriter);
} }

View File

@ -6,16 +6,16 @@ import org.broadinstitute.sting.utils.variantcontext.VariantContext;
import java.io.PrintStream; import java.io.PrintStream;
public class ReferenceDiploidExactAFCalculation extends DiploidExactAFCalculation { public class ReferenceDiploidExactAFCalc extends DiploidExactAFCalc {
public ReferenceDiploidExactAFCalculation(final int nSamples, final int maxAltAlleles) { public ReferenceDiploidExactAFCalc(final int nSamples, final int maxAltAlleles) {
super(nSamples, maxAltAlleles); super(nSamples, maxAltAlleles);
} }
public ReferenceDiploidExactAFCalculation(UnifiedArgumentCollection UAC, int N, Logger logger, PrintStream verboseWriter) { public ReferenceDiploidExactAFCalc(UnifiedArgumentCollection UAC, int N, Logger logger, PrintStream verboseWriter) {
super(UAC, N, logger, verboseWriter); super(UAC, N, logger, verboseWriter);
} }
protected StateTracker makeMaxLikelihood(final VariantContext vc, final AlleleFrequencyCalculationResult result) { protected StateTracker makeMaxLikelihood(final VariantContext vc, final AFCalcResult result) {
return new StateTracker(); return new StateTracker();
} }
} }

View File

@ -21,7 +21,7 @@ final class StateTracker {
} }
/** /**
* Update the maximum log10L seen, if log10LofKs is higher * Update the maximum log10L seen, if log10LofKs is higher, and the corresponding ACs of this state
* *
* @param log10LofKs the likelihood of our current configuration state * @param log10LofKs the likelihood of our current configuration state
*/ */

View File

@ -23,9 +23,9 @@
*/ */
package org.broadinstitute.sting.gatk.walkers.validation.validationsiteselector; package org.broadinstitute.sting.gatk.walkers.validation.validationsiteselector;
import org.broadinstitute.sting.gatk.walkers.genotyper.afcalc.AlleleFrequencyCalculationResult; import org.broadinstitute.sting.gatk.walkers.genotyper.afcalc.AFCalcResult;
import org.broadinstitute.sting.gatk.walkers.genotyper.afcalc.DiploidExactAFCalculation; import org.broadinstitute.sting.gatk.walkers.genotyper.afcalc.DiploidExactAFCalc;
import org.broadinstitute.sting.gatk.walkers.genotyper.afcalc.ReferenceDiploidExactAFCalculation; import org.broadinstitute.sting.gatk.walkers.genotyper.afcalc.ReferenceDiploidExactAFCalc;
import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.utils.variantcontext.VariantContext;
import java.util.TreeSet; import java.util.TreeSet;
@ -34,7 +34,7 @@ import java.util.TreeSet;
public class GLBasedSampleSelector extends SampleSelector { public class GLBasedSampleSelector extends SampleSelector {
double[] flatPriors = null; double[] flatPriors = null;
final double referenceLikelihood; final double referenceLikelihood;
DiploidExactAFCalculation AFCalculator; DiploidExactAFCalc AFCalculator;
public GLBasedSampleSelector(TreeSet<String> sm, double refLik) { public GLBasedSampleSelector(TreeSet<String> sm, double refLik) {
super(sm); super(sm);
@ -52,9 +52,9 @@ public class GLBasedSampleSelector extends SampleSelector {
// do we want to apply a prior? maybe user-spec? // do we want to apply a prior? maybe user-spec?
if ( flatPriors == null ) { if ( flatPriors == null ) {
flatPriors = new double[1+2*samples.size()]; flatPriors = new double[1+2*samples.size()];
AFCalculator = new ReferenceDiploidExactAFCalculation(samples.size(), 4); AFCalculator = new ReferenceDiploidExactAFCalc(samples.size(), 4);
} }
AlleleFrequencyCalculationResult result = new AlleleFrequencyCalculationResult(vc.getAlternateAlleles().size()); AFCalcResult result = new AFCalcResult(vc.getAlternateAlleles().size());
AFCalculator.computeLog10PNonRef(subContext, flatPriors, result); AFCalculator.computeLog10PNonRef(subContext, flatPriors, result);
// do we want to let this qual go up or down? // do we want to let this qual go up or down?
if ( result.getLog10PosteriorOfAFzero() < referenceLikelihood ) { if ( result.getLog10PosteriorOfAFzero() < referenceLikelihood ) {