It was possible that we'd clean up a matrix column too early when a dependent column aborted early (with not enough probability mass) because we weren't being smart about the order in which we created dependencies. Fixed.
This commit is contained in:
parent
2799a1b686
commit
05816955aa
|
|
@ -27,7 +27,6 @@ package org.broadinstitute.sting.gatk.walkers.genotyper;
|
||||||
|
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
import org.broadinstitute.sting.utils.MathUtils;
|
import org.broadinstitute.sting.utils.MathUtils;
|
||||||
import org.broadinstitute.sting.utils.exceptions.ReviewedStingException;
|
|
||||||
import org.broadinstitute.sting.utils.variantcontext.*;
|
import org.broadinstitute.sting.utils.variantcontext.*;
|
||||||
|
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
|
|
@ -256,14 +255,24 @@ public class ExactAFCalculationModel extends AlleleFrequencyCalculationModel {
|
||||||
|
|
||||||
// add conformations for the k+2 case if it makes sense; note that the 2 new alleles may be the same or different
|
// add conformations for the k+2 case if it makes sense; note that the 2 new alleles may be the same or different
|
||||||
if ( ACwiggle > 1 ) {
|
if ( ACwiggle > 1 ) {
|
||||||
for ( int allele_i = 0; allele_i < numAltAlleles; allele_i++ ) {
|
// IMPORTANT: we must first add the cases where the 2 new alleles are different so that the queue maintains its ordering
|
||||||
for ( int allele_j = allele_i; allele_j < numAltAlleles; allele_j++ ) {
|
for ( int allele_i = 0; allele_i < numAltAlleles - 1; allele_i++ ) {
|
||||||
|
for ( int allele_j = allele_i + 1; allele_j < numAltAlleles; allele_j++ ) {
|
||||||
|
if ( allele_i == allele_j )
|
||||||
|
continue;
|
||||||
final int[] ACcountsClone = set.ACcounts.getCounts().clone();
|
final int[] ACcountsClone = set.ACcounts.getCounts().clone();
|
||||||
ACcountsClone[allele_i]++;
|
ACcountsClone[allele_i]++;
|
||||||
ACcountsClone[allele_j]++;
|
ACcountsClone[allele_j]++;
|
||||||
lastSet = updateACset(ACcountsClone, numChr, set, ++PLindex , ACqueue, indexesToACset);
|
lastSet = updateACset(ACcountsClone, numChr, set, ++PLindex , ACqueue, indexesToACset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// now we can deal with the case where the 2 new alleles are the same
|
||||||
|
for ( int allele_i = 0; allele_i < numAltAlleles; allele_i++ ) {
|
||||||
|
final int[] ACcountsClone = set.ACcounts.getCounts().clone();
|
||||||
|
ACcountsClone[allele_i] += 2;
|
||||||
|
lastSet = updateACset(ACcountsClone, numChr, set, ++PLindex , ACqueue, indexesToACset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if the last dependent set was not at the back of the queue (i.e. not just added), then we need to iterate
|
// if the last dependent set was not at the back of the queue (i.e. not just added), then we need to iterate
|
||||||
|
|
@ -298,6 +307,8 @@ public class ExactAFCalculationModel extends AlleleFrequencyCalculationModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
// add the given dependency to the set
|
// add the given dependency to the set
|
||||||
|
//if ( DEBUG )
|
||||||
|
// System.out.println(" *** adding dependency from " + index + " to " + callingSet.ACcounts);
|
||||||
final ExactACset set = indexesToACset.get(index);
|
final ExactACset set = indexesToACset.get(index);
|
||||||
set.ACsetIndexToPLIndex.put(callingSet.ACcounts, PLsetIndex);
|
set.ACsetIndexToPLIndex.put(callingSet.ACcounts, PLsetIndex);
|
||||||
return wasInQueue ? null : set;
|
return wasInQueue ? null : set;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue