Silly mistake '<' for a '<='. It was causing the exception when the exact number of alleles to drop was matching MAX_DROPPED_ALTERNATIVE_ALLELES_TO_LOG exactly (fixed to 20).

I change the code to impose a maximum allele list message length instead and in the process I fixed the bug.
This commit is contained in:
Valentin Ruano Rubio 2016-06-17 11:46:25 -04:00
parent 6b04f6ae14
commit 857459e420
1 changed files with 20 additions and 11 deletions

View File

@ -82,7 +82,7 @@ public class HaplotypeCallerGenotypingEngine extends GenotypingEngine<AssemblyBa
protected static final int ALLELE_EXTENSION = 2; protected static final int ALLELE_EXTENSION = 2;
private static final String phase01 = "0|1"; private static final String phase01 = "0|1";
private static final String phase10 = "1|0"; private static final String phase10 = "1|0";
private static final int MAX_DROPPED_ALTERNATIVE_ALLELES_TO_LOG = 20; private static final int MAX_DROPPED_ALTERNATIVE_ALLELES_LOG_STRING_LENGTH = 500;
private MergeVariantsAcrossHaplotypes crossHaplotypeEventMerger; private MergeVariantsAcrossHaplotypes crossHaplotypeEventMerger;
@ -324,20 +324,29 @@ public class HaplotypeCallerGenotypingEngine extends GenotypingEngine<AssemblyBa
private void reduceNumberOfAlternativeAllelesBasedOnLikelihoods(final ReadLikelihoods<Allele> readAlleleLikelihoods, final GenomeLoc location) { private void reduceNumberOfAlternativeAllelesBasedOnLikelihoods(final ReadLikelihoods<Allele> readAlleleLikelihoods, final GenomeLoc location) {
final GenotypingLikelihoods<Allele> genotypeLikelihoods = genotypingModel.calculateLikelihoods(readAlleleLikelihoods, new GenotypingData<>(ploidyModel,readAlleleLikelihoods)); final GenotypingLikelihoods<Allele> genotypeLikelihoods = genotypingModel.calculateLikelihoods(readAlleleLikelihoods, new GenotypingData<>(ploidyModel,readAlleleLikelihoods));
final Set<Allele> allelesToDrop = excessAlternativeAlleles(genotypeLikelihoods, configuration.genotypeArgs.MAX_ALTERNATE_ALLELES); final Set<Allele> allelesToDrop = excessAlternativeAlleles(genotypeLikelihoods, configuration.genotypeArgs.MAX_ALTERNATE_ALLELES);
final String allelesToDropString;
if (allelesToDrop.size() < MAX_DROPPED_ALTERNATIVE_ALLELES_TO_LOG) { if (allelesToDrop.isEmpty()) return;
allelesToDropString = StringUtil.join(", ", allelesToDrop);
} else { int allelesInMessage = 0;
final Iterator<Allele> it = allelesToDrop.iterator(); final StringBuilder droppedAlleleStringBuilder = new StringBuilder(MAX_DROPPED_ALTERNATIVE_ALLELES_LOG_STRING_LENGTH << 1);
final StringBuilder builder = new StringBuilder(); for (final Allele allele : allelesToDrop) {
for (int i = 0; i < MAX_DROPPED_ALTERNATIVE_ALLELES_TO_LOG; i++) { allelesInMessage++;
builder.append(it.next().toString()).append(", "); droppedAlleleStringBuilder.append(allele.toString()).append(", ");
if (droppedAlleleStringBuilder.length() > MAX_DROPPED_ALTERNATIVE_ALLELES_LOG_STRING_LENGTH - 2) {
break;
} }
allelesToDropString = builder.append(it.next().toString()).append(" and ").append(allelesToDrop.size() - 20).append(" more").toString(); }
droppedAlleleStringBuilder.setLength(droppedAlleleStringBuilder.length() - 2); // remove the last ", "
if (droppedAlleleStringBuilder.length() > MAX_DROPPED_ALTERNATIVE_ALLELES_LOG_STRING_LENGTH) {
droppedAlleleStringBuilder.setLength(MAX_DROPPED_ALTERNATIVE_ALLELES_LOG_STRING_LENGTH);
droppedAlleleStringBuilder.append("...");
}
if (allelesInMessage < allelesToDrop.size()) {
droppedAlleleStringBuilder.append(" and ").append(allelesToDrop.size() - allelesInMessage).append(" more");
} }
logger.warn(String.format("location %s: too many alternative alleles found (%d) larger than the maximum requested with -%s (%d), the following will be dropped: %s.", location, logger.warn(String.format("location %s: too many alternative alleles found (%d) larger than the maximum requested with -%s (%d), the following will be dropped: %s.", location,
readAlleleLikelihoods.alleleCount() - 1, GenotypeCalculationArgumentCollection.MAX_ALTERNATE_ALLELES_SHORT_NAME, configuration.genotypeArgs.MAX_ALTERNATE_ALLELES, readAlleleLikelihoods.alleleCount() - 1, GenotypeCalculationArgumentCollection.MAX_ALTERNATE_ALLELES_SHORT_NAME, configuration.genotypeArgs.MAX_ALTERNATE_ALLELES,
allelesToDropString)); droppedAlleleStringBuilder.toString()));
readAlleleLikelihoods.dropAlleles(allelesToDrop); readAlleleLikelihoods.dropAlleles(allelesToDrop);
} }