9
9
import org .broadinstitute .hellbender .engine .ReferenceContext ;
10
10
import org .broadinstitute .hellbender .engine .ReferenceDataSource ;
11
11
import org .broadinstitute .hellbender .engine .ReferenceMemorySource ;
12
+ import org .broadinstitute .hellbender .tools .walkers .annotator .VariantAnnotatorEngine ;
12
13
import org .broadinstitute .hellbender .tools .walkers .genotyper .*;
13
14
import org .broadinstitute .hellbender .tools .walkers .genotyper .afcalc .AFCalculatorProvider ;
14
15
import org .broadinstitute .hellbender .utils .SimpleInterval ;
@@ -172,6 +173,8 @@ public CalledHaplotypes assignGenotypeLikelihoods(final List<Haplotype> haplotyp
172
173
continue ;
173
174
}
174
175
176
+ int mergedAllelesListSizeBeforePossibleTrimming = mergedVC .getAlleles ().size ();
177
+
175
178
final Map <Allele , List <Haplotype >> alleleMapper = AssemblyBasedCallerUtils .createAlleleMapper (mergedVC , loc , haplotypes , activeAllelesToGenotype );
176
179
177
180
if ( hcArgs .assemblerArgs .debugAssembly && logger != null ) {
@@ -188,6 +191,7 @@ public CalledHaplotypes assignGenotypeLikelihoods(final List<Haplotype> haplotyp
188
191
if (emitReferenceConfidence ) {
189
192
mergedVC = ReferenceConfidenceUtils .addNonRefSymbolicAllele (mergedVC );
190
193
readAlleleLikelihoods .addNonReferenceAllele (Allele .NON_REF_ALLELE );
194
+ mergedAllelesListSizeBeforePossibleTrimming ++;
191
195
}
192
196
193
197
final GenotypesContext genotypes = calculateGLsForThisEvent (readAlleleLikelihoods , mergedVC , noCallAlleles );
@@ -197,7 +201,7 @@ public CalledHaplotypes assignGenotypeLikelihoods(final List<Haplotype> haplotyp
197
201
readAlleleLikelihoods = prepareReadAlleleLikelihoodsForAnnotation (readLikelihoods , perSampleFilteredReadList ,
198
202
emitReferenceConfidence , alleleMapper , readAlleleLikelihoods , call );
199
203
200
- final VariantContext annotatedCall = makeAnnotatedCall (ref , refLoc , tracker , header , mergedVC , readAlleleLikelihoods , call );
204
+ final VariantContext annotatedCall = makeAnnotatedCall (ref , refLoc , tracker , header , mergedVC , mergedAllelesListSizeBeforePossibleTrimming , readAlleleLikelihoods , call , annotationEngine );
201
205
returnCalls .add ( annotatedCall );
202
206
203
207
if (withBamOut ) {
@@ -365,14 +369,18 @@ static VariantContext removeExcessAltAllelesFromVC(final VariantContext inputVC,
365
369
return vcb .make ();
366
370
}
367
371
368
- protected VariantContext makeAnnotatedCall (byte [] ref , SimpleInterval refLoc , FeatureContext tracker , SAMFileHeader header , VariantContext mergedVC , ReadLikelihoods <Allele > readAlleleLikelihoods , VariantContext call ) {
369
- final SimpleInterval locus = new SimpleInterval (mergedVC .getContig (), mergedVC .getStart (), mergedVC .getEnd ());
372
+ @ VisibleForTesting
373
+ static protected VariantContext makeAnnotatedCall (byte [] ref , SimpleInterval refLoc , FeatureContext tracker , SAMFileHeader header , VariantContext mergedVC , int mergedAllelesListSizeBeforePossibleTrimming , ReadLikelihoods <Allele > readAlleleLikelihoods , VariantContext call , VariantAnnotatorEngine annotationEngine ) {
374
+ final SimpleInterval locus = new SimpleInterval (mergedVC );
370
375
final SimpleInterval refLocInterval = new SimpleInterval (refLoc );
371
376
final ReferenceDataSource refData = new ReferenceMemorySource (new ReferenceBases (ref , refLocInterval ), header .getSequenceDictionary ());
372
377
final ReferenceContext referenceContext = new ReferenceContext (refData , locus , refLocInterval );
373
378
374
379
final VariantContext untrimmedResult = annotationEngine .annotateContext (call , tracker , referenceContext , readAlleleLikelihoods , a -> true );
375
- return call .getAlleles ().size () == mergedVC .getAlleles ().size () ? untrimmedResult
380
+
381
+ // NOTE: We choose to reverseTrimAlleles() here as opposed to when we actually do the trimming because otherwise we would have to resolve
382
+ // the mismatching readAlleleLikelihoods object which is keyed to the old, possibly incorrectly trimmed alleles.
383
+ return untrimmedResult .getAlleles ().size () == mergedAllelesListSizeBeforePossibleTrimming ? untrimmedResult
376
384
: GATKVariantContextUtils .reverseTrimAlleles (untrimmedResult );
377
385
}
378
386
@@ -426,10 +434,10 @@ protected static GenotypeLikelihoodsCalculationModel getGLModel(final VariantCon
426
434
* @return never {@code null} but perhaps an empty list if there is no variants to report.
427
435
*/
428
436
private TreeSet <Integer > decomposeHaplotypesIntoVariantContexts (final List <Haplotype > haplotypes ,
429
- final byte [] ref ,
430
- final SimpleInterval refLoc ,
431
- final List <VariantContext > activeAllelesToGenotype ,
432
- final int maxMnpDistance ) {
437
+ final byte [] ref ,
438
+ final SimpleInterval refLoc ,
439
+ final List <VariantContext > activeAllelesToGenotype ,
440
+ final int maxMnpDistance ) {
433
441
final boolean inGGAMode = ! activeAllelesToGenotype .isEmpty ();
434
442
435
443
// Using the cigar from each called haplotype figure out what events need to be written out in a VCF file
0 commit comments