Initial implementation of annotator to compute allele balance for each sample
git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@4005 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
parent
1dc373b9d0
commit
18fc5c8c3e
|
|
@ -0,0 +1,68 @@
|
|||
package org.broadinstitute.sting.gatk.walkers.annotator;
|
||||
|
||||
import org.broad.tribble.vcf.VCFFormatHeaderLine;
|
||||
import org.broad.tribble.vcf.VCFHeaderLineType;
|
||||
import org.broadinstitute.sting.gatk.contexts.*;
|
||||
import org.broad.tribble.util.variantcontext.*;
|
||||
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||
import org.broadinstitute.sting.gatk.walkers.annotator.interfaces.*;
|
||||
import org.broadinstitute.sting.utils.pileup.*;
|
||||
import org.broadinstitute.sting.utils.*;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
public class AlleleBalanceBySample implements GenotypeAnnotation, ExperimentalAnnotation {
|
||||
|
||||
public Map<String, Object> annotate(RefMetaDataTracker tracker, ReferenceContext ref, StratifiedAlignmentContext stratifiedContext, VariantContext vc, Genotype g) {
|
||||
Double ratio = annotateSNP(stratifiedContext, vc, g);
|
||||
if (ratio == null)
|
||||
return null;
|
||||
|
||||
Map<String, Object> map = new HashMap<String, Object>();
|
||||
map.put(getKeyNames().get(0), String.format("%.2f", ratio.doubleValue()));
|
||||
return map;
|
||||
|
||||
}
|
||||
|
||||
private Double annotateSNP(StratifiedAlignmentContext stratifiedContext, VariantContext vc, Genotype g) {
|
||||
|
||||
double ratio = -1;
|
||||
|
||||
if ( !vc.isSNP() )
|
||||
return null;
|
||||
|
||||
if ( !vc.isBiallelic() )
|
||||
return null;
|
||||
|
||||
if ( g == null || !g.isCalled() )
|
||||
return null;
|
||||
|
||||
if (!g.isHet())
|
||||
return null;
|
||||
|
||||
Set<Allele> altAlleles = vc.getAlternateAlleles();
|
||||
if ( altAlleles.size() == 0 )
|
||||
return null;
|
||||
|
||||
final String bases = new String(stratifiedContext.getContext(StratifiedAlignmentContext.StratifiedContextType.COMPLETE).getBasePileup().getBases());
|
||||
if ( bases.length() == 0 )
|
||||
return null;
|
||||
char refChr = vc.getReference().toString().charAt(0);
|
||||
char altChr = vc.getAlternateAllele(0).toString().charAt(0);
|
||||
|
||||
int refCount = MathUtils.countOccurrences(refChr, bases);
|
||||
int altCount = MathUtils.countOccurrences(altChr, bases);
|
||||
|
||||
// sanity check
|
||||
if ( refCount + altCount == 0 )
|
||||
return null;
|
||||
|
||||
ratio = ((double)refCount / (double)(refCount + altCount));
|
||||
return ratio;
|
||||
}
|
||||
|
||||
public List<String> getKeyNames() { return Arrays.asList("AB"); }
|
||||
|
||||
public List<VCFFormatHeaderLine> getDescriptions() { return Arrays.asList(new VCFFormatHeaderLine(getKeyNames().get(0), -1, VCFHeaderLineType.Float, "Allele balance for each het genotype")); }
|
||||
}
|
||||
Loading…
Reference in New Issue