Simpler naming convention for AlleleFrequencyCalculation => AFCalc
This commit is contained in:
parent
cf3f9d6ee8
commit
ee2f12e2ac
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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));
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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,16 +74,16 @@ 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,
|
||||||
final Logger logger,
|
final Logger logger,
|
||||||
final PrintStream verboseWriter) {
|
final PrintStream verboseWriter) {
|
||||||
if ( nSamples < 0 ) throw new IllegalArgumentException("nSamples must be greater than zero " + nSamples);
|
if ( nSamples < 0 ) throw new IllegalArgumentException("nSamples must be greater than zero " + nSamples);
|
||||||
if ( maxAltAlleles < 1 ) throw new IllegalArgumentException("maxAltAlleles must be greater than zero " + maxAltAlleles);
|
if ( maxAltAlleles < 1 ) throw new IllegalArgumentException("maxAltAlleles must be greater than zero " + maxAltAlleles);
|
||||||
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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;
|
||||||
|
|
@ -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);
|
||||||
|
|
@ -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();
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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 ) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue