Next iteration of new VA interface: extend changes to per-genotype annotations as well. Will allow to have AD correctly implemented at last (that change not done yet)
This commit is contained in:
parent
c384677917
commit
5b5fee56cf
|
|
@ -6,6 +6,7 @@ import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||||
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.AnnotatorCompatible;
|
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.AnnotatorCompatible;
|
||||||
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.ExperimentalAnnotation;
|
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.ExperimentalAnnotation;
|
||||||
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.GenotypeAnnotation;
|
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.GenotypeAnnotation;
|
||||||
|
import org.broadinstitute.sting.gatk.walkers.genotyper.PerReadAlleleLikelihoodMap;
|
||||||
import org.broadinstitute.sting.utils.MathUtils;
|
import org.broadinstitute.sting.utils.MathUtils;
|
||||||
import org.broadinstitute.sting.utils.codecs.vcf.VCFFormatHeaderLine;
|
import org.broadinstitute.sting.utils.codecs.vcf.VCFFormatHeaderLine;
|
||||||
import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType;
|
import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType;
|
||||||
|
|
@ -24,7 +25,14 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
public class AlleleBalanceBySample extends GenotypeAnnotation implements ExperimentalAnnotation {
|
public class AlleleBalanceBySample extends GenotypeAnnotation implements ExperimentalAnnotation {
|
||||||
|
|
||||||
public void annotate(RefMetaDataTracker tracker, AnnotatorCompatible walker, ReferenceContext ref, AlignmentContext stratifiedContext, VariantContext vc, Genotype g, final GenotypeBuilder gb) {
|
public void annotate(final RefMetaDataTracker tracker,
|
||||||
|
final AnnotatorCompatible walker,
|
||||||
|
final ReferenceContext ref,
|
||||||
|
final AlignmentContext stratifiedContext,
|
||||||
|
final VariantContext vc,
|
||||||
|
final Genotype g,
|
||||||
|
final GenotypeBuilder gb,
|
||||||
|
final PerReadAlleleLikelihoodMap alleleLikelihoodMap){
|
||||||
Double ratio = annotateSNP(stratifiedContext, vc, g);
|
Double ratio = annotateSNP(stratifiedContext, vc, g);
|
||||||
if (ratio == null)
|
if (ratio == null)
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||||
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.AnnotatorCompatible;
|
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.AnnotatorCompatible;
|
||||||
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.GenotypeAnnotation;
|
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.GenotypeAnnotation;
|
||||||
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.StandardAnnotation;
|
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.StandardAnnotation;
|
||||||
|
import org.broadinstitute.sting.gatk.walkers.genotyper.PerReadAlleleLikelihoodMap;
|
||||||
import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants;
|
import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants;
|
||||||
import org.broadinstitute.sting.utils.codecs.vcf.VCFFormatHeaderLine;
|
import org.broadinstitute.sting.utils.codecs.vcf.VCFFormatHeaderLine;
|
||||||
import org.broadinstitute.sting.utils.codecs.vcf.VCFStandardHeaderLines;
|
import org.broadinstitute.sting.utils.codecs.vcf.VCFStandardHeaderLines;
|
||||||
|
|
@ -48,7 +49,8 @@ public class DepthPerAlleleBySample extends GenotypeAnnotation implements Standa
|
||||||
final AlignmentContext stratifiedContext,
|
final AlignmentContext stratifiedContext,
|
||||||
final VariantContext vc,
|
final VariantContext vc,
|
||||||
final Genotype g,
|
final Genotype g,
|
||||||
final GenotypeBuilder gb) {
|
final GenotypeBuilder gb,
|
||||||
|
final PerReadAlleleLikelihoodMap alleleLikelihoodMap) {
|
||||||
if ( g == null || !g.isCalled() )
|
if ( g == null || !g.isCalled() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ 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.interfaces.AnnotatorCompatible;
|
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.AnnotatorCompatible;
|
||||||
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.GenotypeAnnotation;
|
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.GenotypeAnnotation;
|
||||||
|
import org.broadinstitute.sting.gatk.walkers.genotyper.PerReadAlleleLikelihoodMap;
|
||||||
import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants;
|
import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants;
|
||||||
import org.broadinstitute.sting.utils.codecs.vcf.VCFFormatHeaderLine;
|
import org.broadinstitute.sting.utils.codecs.vcf.VCFFormatHeaderLine;
|
||||||
import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType;
|
import org.broadinstitute.sting.utils.codecs.vcf.VCFHeaderLineType;
|
||||||
|
|
@ -46,14 +47,19 @@ import java.util.List;
|
||||||
* Count for each sample of mapping quality zero reads
|
* Count for each sample of mapping quality zero reads
|
||||||
*/
|
*/
|
||||||
public class MappingQualityZeroBySample extends GenotypeAnnotation {
|
public class MappingQualityZeroBySample extends GenotypeAnnotation {
|
||||||
public void annotate(RefMetaDataTracker tracker,
|
public void annotate(final RefMetaDataTracker tracker,
|
||||||
AnnotatorCompatible walker, ReferenceContext ref, AlignmentContext context,
|
final AnnotatorCompatible walker,
|
||||||
VariantContext vc, Genotype g, GenotypeBuilder gb) {
|
final ReferenceContext ref,
|
||||||
|
final AlignmentContext stratifiedContext,
|
||||||
|
final VariantContext vc,
|
||||||
|
final Genotype g,
|
||||||
|
final GenotypeBuilder gb,
|
||||||
|
final PerReadAlleleLikelihoodMap alleleLikelihoodMap){
|
||||||
if ( g == null || !g.isCalled() )
|
if ( g == null || !g.isCalled() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int mq0 = 0;
|
int mq0 = 0;
|
||||||
final ReadBackedPileup pileup = context.getBasePileup();
|
final ReadBackedPileup pileup = stratifiedContext.getBasePileup();
|
||||||
for (PileupElement p : pileup ) {
|
for (PileupElement p : pileup ) {
|
||||||
if ( p.getMappingQual() == 0 )
|
if ( p.getMappingQual() == 0 )
|
||||||
mq0++;
|
mq0++;
|
||||||
|
|
|
||||||
|
|
@ -210,7 +210,7 @@ public class VariantAnnotatorEngine {
|
||||||
VariantContextBuilder builder = new VariantContextBuilder(vc).attributes(infoAnnotations);
|
VariantContextBuilder builder = new VariantContextBuilder(vc).attributes(infoAnnotations);
|
||||||
|
|
||||||
// annotate genotypes, creating another new VC in the process
|
// annotate genotypes, creating another new VC in the process
|
||||||
return builder.genotypes(annotateGenotypes(tracker, ref, stratifiedContexts, vc)).make();
|
return builder.genotypes(annotateGenotypes(tracker, ref, stratifiedContexts, vc, perReadAlleleLikelihoodMap)).make();
|
||||||
}
|
}
|
||||||
|
|
||||||
public VariantContext annotateContext(final Map<String, PerReadAlleleLikelihoodMap> stratifiedContexts, VariantContext vc) {
|
public VariantContext annotateContext(final Map<String, PerReadAlleleLikelihoodMap> stratifiedContexts, VariantContext vc) {
|
||||||
|
|
@ -278,20 +278,25 @@ public class VariantAnnotatorEngine {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private GenotypesContext annotateGenotypes(RefMetaDataTracker tracker, ReferenceContext ref, Map<String, AlignmentContext> stratifiedContexts, VariantContext vc) {
|
private GenotypesContext annotateGenotypes(final RefMetaDataTracker tracker,
|
||||||
|
final ReferenceContext ref, final Map<String, AlignmentContext> stratifiedContexts,
|
||||||
|
final VariantContext vc,
|
||||||
|
final Map<String,PerReadAlleleLikelihoodMap> stratifiedPerReadAlleleLikelihoodMap) {
|
||||||
if ( requestedGenotypeAnnotations.isEmpty() )
|
if ( requestedGenotypeAnnotations.isEmpty() )
|
||||||
return vc.getGenotypes();
|
return vc.getGenotypes();
|
||||||
|
|
||||||
final GenotypesContext genotypes = GenotypesContext.create(vc.getNSamples());
|
final GenotypesContext genotypes = GenotypesContext.create(vc.getNSamples());
|
||||||
for ( final Genotype genotype : vc.getGenotypes() ) {
|
for ( final Genotype genotype : vc.getGenotypes() ) {
|
||||||
AlignmentContext context = stratifiedContexts.get(genotype.getSampleName());
|
final AlignmentContext context = stratifiedContexts.get(genotype.getSampleName());
|
||||||
|
final PerReadAlleleLikelihoodMap perReadAlleleLikelihoodMap = stratifiedPerReadAlleleLikelihoodMap.get(genotype.getSampleName());
|
||||||
|
|
||||||
if ( context == null ) {
|
if ( context == null && perReadAlleleLikelihoodMap == null) {
|
||||||
|
// no likelihoods nor pileup available: just move on to next sample
|
||||||
genotypes.add(genotype);
|
genotypes.add(genotype);
|
||||||
} else {
|
} else {
|
||||||
final GenotypeBuilder gb = new GenotypeBuilder(genotype);
|
final GenotypeBuilder gb = new GenotypeBuilder(genotype);
|
||||||
for ( final GenotypeAnnotation annotation : requestedGenotypeAnnotations ) {
|
for ( final GenotypeAnnotation annotation : requestedGenotypeAnnotations ) {
|
||||||
annotation.annotate(tracker, walker, ref, context, vc, genotype, gb);
|
annotation.annotate(tracker, walker, ref, context, vc, genotype, gb, perReadAlleleLikelihoodMap);
|
||||||
}
|
}
|
||||||
genotypes.add(gb.make());
|
genotypes.add(gb.make());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package org.broadinstitute.sting.gatk.walkers.annotator.interfaces;
|
||||||
import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
||||||
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.genotyper.PerReadAlleleLikelihoodMap;
|
||||||
import org.broadinstitute.sting.utils.codecs.vcf.VCFFormatHeaderLine;
|
import org.broadinstitute.sting.utils.codecs.vcf.VCFFormatHeaderLine;
|
||||||
import org.broadinstitute.sting.utils.variantcontext.Genotype;
|
import org.broadinstitute.sting.utils.variantcontext.Genotype;
|
||||||
import org.broadinstitute.sting.utils.variantcontext.GenotypeBuilder;
|
import org.broadinstitute.sting.utils.variantcontext.GenotypeBuilder;
|
||||||
|
|
@ -13,9 +14,14 @@ import java.util.List;
|
||||||
public abstract class GenotypeAnnotation extends VariantAnnotatorAnnotation {
|
public abstract class GenotypeAnnotation extends VariantAnnotatorAnnotation {
|
||||||
|
|
||||||
// return annotations for the given contexts/genotype split by sample
|
// return annotations for the given contexts/genotype split by sample
|
||||||
public abstract void annotate(RefMetaDataTracker tracker, AnnotatorCompatible walker,
|
public abstract void annotate(final RefMetaDataTracker tracker,
|
||||||
ReferenceContext ref, AlignmentContext stratifiedContext,
|
final AnnotatorCompatible walker,
|
||||||
VariantContext vc, Genotype g, GenotypeBuilder gb );
|
final ReferenceContext ref,
|
||||||
|
final AlignmentContext stratifiedContext,
|
||||||
|
final VariantContext vc,
|
||||||
|
final Genotype g,
|
||||||
|
final GenotypeBuilder gb,
|
||||||
|
final PerReadAlleleLikelihoodMap alleleLikelihoodMap);
|
||||||
|
|
||||||
// return the descriptions used for the VCF FORMAT meta field
|
// return the descriptions used for the VCF FORMAT meta field
|
||||||
public abstract List<VCFFormatHeaderLine> getDescriptions();
|
public abstract List<VCFFormatHeaderLine> getDescriptions();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue