Enabling Rank Sum Tests for multi-allelics: use ref vs any alt allele.

This commit is contained in:
Eric Banks 2012-02-27 09:59:36 -05:00
parent dfdf4f989b
commit 850c5d0db2
4 changed files with 19 additions and 16 deletions

View File

@ -22,12 +22,12 @@ public class BaseQualityRankSumTest extends RankSumTest {
public List<VCFInfoHeaderLine> getDescriptions() { return Arrays.asList(new VCFInfoHeaderLine("BaseQRankSum", 1, VCFHeaderLineType.Float, "Z-score from Wilcoxon rank sum test of Alt Vs. Ref base qualities")); } public List<VCFInfoHeaderLine> getDescriptions() { return Arrays.asList(new VCFInfoHeaderLine("BaseQRankSum", 1, VCFHeaderLineType.Float, "Z-score from Wilcoxon rank sum test of Alt Vs. Ref base qualities")); }
protected void fillQualsFromPileup(byte ref, byte alt, ReadBackedPileup pileup, List<Double> refQuals, List<Double> altQuals) { protected void fillQualsFromPileup(byte ref, List<Byte> alts, ReadBackedPileup pileup, List<Double> refQuals, List<Double> altQuals) {
for ( final PileupElement p : pileup ) { for ( final PileupElement p : pileup ) {
if( isUsableBase(p) ) { if( isUsableBase(p) ) {
if ( p.getBase() == ref ) if ( p.getBase() == ref )
refQuals.add((double)p.getQual()); refQuals.add((double)p.getQual());
else if ( p.getBase() == alt ) else if ( alts.contains(p.getBase()) )
altQuals.add((double)p.getQual()); altQuals.add((double)p.getQual());
} }
} }

View File

@ -24,12 +24,12 @@ public class MappingQualityRankSumTest extends RankSumTest {
public List<VCFInfoHeaderLine> getDescriptions() { return Arrays.asList(new VCFInfoHeaderLine("MQRankSum", 1, VCFHeaderLineType.Float, "Z-score From Wilcoxon rank sum test of Alt vs. Ref read mapping qualities")); } public List<VCFInfoHeaderLine> getDescriptions() { return Arrays.asList(new VCFInfoHeaderLine("MQRankSum", 1, VCFHeaderLineType.Float, "Z-score From Wilcoxon rank sum test of Alt vs. Ref read mapping qualities")); }
protected void fillQualsFromPileup(byte ref, byte alt, ReadBackedPileup pileup, List<Double> refQuals, List<Double> altQuals) { protected void fillQualsFromPileup(byte ref, List<Byte> alts, ReadBackedPileup pileup, List<Double> refQuals, List<Double> altQuals) {
for ( final PileupElement p : pileup ) { for ( final PileupElement p : pileup ) {
if ( isUsableBase(p) ) { if ( isUsableBase(p) ) {
if ( p.getBase() == ref ) { if ( p.getBase() == ref ) {
refQuals.add((double)p.getMappingQual()); refQuals.add((double)p.getMappingQual());
} else if ( p.getBase() == alt ) { } else if ( alts.contains(p.getBase()) ) {
altQuals.add((double)p.getMappingQual()); altQuals.add((double)p.getMappingQual());
} }
} }

View File

@ -12,6 +12,7 @@ import org.broadinstitute.sting.utils.QualityUtils;
import org.broadinstitute.sting.utils.collections.Pair; import org.broadinstitute.sting.utils.collections.Pair;
import org.broadinstitute.sting.utils.pileup.PileupElement; import org.broadinstitute.sting.utils.pileup.PileupElement;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
import org.broadinstitute.sting.utils.variantcontext.Allele;
import org.broadinstitute.sting.utils.variantcontext.Genotype; import org.broadinstitute.sting.utils.variantcontext.Genotype;
import org.broadinstitute.sting.utils.variantcontext.GenotypesContext; import org.broadinstitute.sting.utils.variantcontext.GenotypesContext;
import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.utils.variantcontext.VariantContext;
@ -41,16 +42,19 @@ public abstract class RankSumTest extends InfoFieldAnnotation implements Standar
final ArrayList<Double> refQuals = new ArrayList<Double>(); final ArrayList<Double> refQuals = new ArrayList<Double>();
final ArrayList<Double> altQuals = new ArrayList<Double>(); final ArrayList<Double> altQuals = new ArrayList<Double>();
if (vc.isSNP() && vc.isBiallelic()) { if ( vc.isSNP() ) {
// todo - no current support for multiallelic snps for ( final Genotype genotype : genotypes.iterateInSampleNameOrder() ) {
for (final Genotype genotype : genotypes.iterateInSampleNameOrder()) {
final AlignmentContext context = stratifiedContexts.get(genotype.getSampleName()); final AlignmentContext context = stratifiedContexts.get(genotype.getSampleName());
if (context == null) { if ( context == null )
continue; continue;
}
fillQualsFromPileup(ref.getBase(), vc.getAlternateAllele(0).getBases()[0], context.getBasePileup(), refQuals, altQuals); final List<Byte> altAlleles = new ArrayList<Byte>();
for ( final Allele a : vc.getAlternateAlleles() )
altAlleles.add(a.getBases()[0]);
fillQualsFromPileup(ref.getBase(), altAlleles, context.getBasePileup(), refQuals, altQuals);
} }
} else if (vc.isIndel() || vc.isMixed()) { } else if ( vc.isIndel() || vc.isMixed() ) {
for (final Genotype genotype : genotypes.iterateInSampleNameOrder()) { for (final Genotype genotype : genotypes.iterateInSampleNameOrder()) {
final AlignmentContext context = stratifiedContexts.get(genotype.getSampleName()); final AlignmentContext context = stratifiedContexts.get(genotype.getSampleName());
@ -105,7 +109,7 @@ public abstract class RankSumTest extends InfoFieldAnnotation implements Standar
} }
protected abstract void fillQualsFromPileup(byte ref, byte alt, ReadBackedPileup pileup, List<Double> refQuals, List<Double> altQuals); protected abstract void fillQualsFromPileup(byte ref, List<Byte> alts, ReadBackedPileup pileup, List<Double> refQuals, List<Double> altQuals);
protected abstract void fillIndelQualsFromPileup(ReadBackedPileup pileup, List<Double> refQuals, List<Double> altQuals); protected abstract void fillIndelQualsFromPileup(ReadBackedPileup pileup, List<Double> refQuals, List<Double> altQuals);

View File

@ -32,7 +32,7 @@ public class ReadPosRankSumTest extends RankSumTest {
return Arrays.asList(new VCFInfoHeaderLine("ReadPosRankSum", 1, VCFHeaderLineType.Float, "Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias")); return Arrays.asList(new VCFInfoHeaderLine("ReadPosRankSum", 1, VCFHeaderLineType.Float, "Z-score from Wilcoxon rank sum test of Alt vs. Ref read position bias"));
} }
protected void fillQualsFromPileup(byte ref, byte alt, ReadBackedPileup pileup, List<Double> refQuals, List<Double> altQuals) { protected void fillQualsFromPileup(byte ref, List<Byte> alts, ReadBackedPileup pileup, List<Double> refQuals, List<Double> altQuals) {
for (final PileupElement p : pileup) { for (final PileupElement p : pileup) {
if (isUsableBase(p)) { if (isUsableBase(p)) {
int readPos = AlignmentUtils.calcAlignmentByteArrayOffset(p.getRead().getCigar(), p, 0, 0); int readPos = AlignmentUtils.calcAlignmentByteArrayOffset(p.getRead().getCigar(), p, 0, 0);
@ -41,11 +41,10 @@ public class ReadPosRankSumTest extends RankSumTest {
readPos = numAlignedBases - (readPos + 1); readPos = numAlignedBases - (readPos + 1);
if (p.getBase() == ref) if ( p.getBase() == ref )
refQuals.add((double) readPos); refQuals.add((double) readPos);
else if (p.getBase() == alt) else if ( alts.contains(p.getBase()) )
altQuals.add((double) readPos); altQuals.add((double) readPos);
} }
} }
} }