From 857459e4206478ccf9fcbdb191b4876137900330 Mon Sep 17 00:00:00 2001 From: Valentin Ruano Rubio Date: Fri, 17 Jun 2016 11:46:25 -0400 Subject: [PATCH] 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. --- .../HaplotypeCallerGenotypingEngine.java | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/protected/gatk-tools-protected/src/main/java/org/broadinstitute/gatk/tools/walkers/haplotypecaller/HaplotypeCallerGenotypingEngine.java b/protected/gatk-tools-protected/src/main/java/org/broadinstitute/gatk/tools/walkers/haplotypecaller/HaplotypeCallerGenotypingEngine.java index cad0697da..30e7efe22 100644 --- a/protected/gatk-tools-protected/src/main/java/org/broadinstitute/gatk/tools/walkers/haplotypecaller/HaplotypeCallerGenotypingEngine.java +++ b/protected/gatk-tools-protected/src/main/java/org/broadinstitute/gatk/tools/walkers/haplotypecaller/HaplotypeCallerGenotypingEngine.java @@ -82,7 +82,7 @@ public class HaplotypeCallerGenotypingEngine extends GenotypingEngine readAlleleLikelihoods, final GenomeLoc location) { final GenotypingLikelihoods genotypeLikelihoods = genotypingModel.calculateLikelihoods(readAlleleLikelihoods, new GenotypingData<>(ploidyModel,readAlleleLikelihoods)); final Set allelesToDrop = excessAlternativeAlleles(genotypeLikelihoods, configuration.genotypeArgs.MAX_ALTERNATE_ALLELES); - final String allelesToDropString; - if (allelesToDrop.size() < MAX_DROPPED_ALTERNATIVE_ALLELES_TO_LOG) { - allelesToDropString = StringUtil.join(", ", allelesToDrop); - } else { - final Iterator it = allelesToDrop.iterator(); - final StringBuilder builder = new StringBuilder(); - for (int i = 0; i < MAX_DROPPED_ALTERNATIVE_ALLELES_TO_LOG; i++) { - builder.append(it.next().toString()).append(", "); + + if (allelesToDrop.isEmpty()) return; + + int allelesInMessage = 0; + final StringBuilder droppedAlleleStringBuilder = new StringBuilder(MAX_DROPPED_ALTERNATIVE_ALLELES_LOG_STRING_LENGTH << 1); + for (final Allele allele : allelesToDrop) { + allelesInMessage++; + 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, readAlleleLikelihoods.alleleCount() - 1, GenotypeCalculationArgumentCollection.MAX_ALTERNATE_ALLELES_SHORT_NAME, configuration.genotypeArgs.MAX_ALTERNATE_ALLELES, - allelesToDropString)); + droppedAlleleStringBuilder.toString())); readAlleleLikelihoods.dropAlleles(allelesToDrop); }