Remove no longer in use Eval modules from VariantEval
-- No more IndelLengthHistogram (superceded by IndelSummary in subsequent commit) -- No more SamplePreviousGenotypes or PhaseStats -- No more MultiallelicAFs
This commit is contained in:
parent
6c2290fb6e
commit
bd5b6d1aba
|
|
@ -1,111 +0,0 @@
|
||||||
package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators;
|
|
||||||
|
|
||||||
import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
|
||||||
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
|
||||||
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
|
||||||
import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis;
|
|
||||||
import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint;
|
|
||||||
import org.broadinstitute.sting.gatk.walkers.varianteval.util.TableType;
|
|
||||||
import org.broadinstitute.sting.utils.exceptions.ReviewedStingException;
|
|
||||||
import org.broadinstitute.sting.utils.variantcontext.VariantContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* IF THERE IS NO JAVADOC RIGHT HERE, YELL AT chartl
|
|
||||||
*
|
|
||||||
* @Author chartl
|
|
||||||
* @Date May 26, 2010
|
|
||||||
*/
|
|
||||||
@Analysis(name = "Indel length histograms", description = "Shows the distribution of insertion/deletion event lengths (negative for deletion, positive for insertion)")
|
|
||||||
public class IndelLengthHistogram extends VariantEvaluator {
|
|
||||||
private static final int SIZE_LIMIT = 100;
|
|
||||||
@DataPoint(description="Histogram of indel lengths")
|
|
||||||
IndelHistogram indelHistogram = new IndelHistogram(SIZE_LIMIT);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Indel length histogram table object
|
|
||||||
*/
|
|
||||||
|
|
||||||
static class IndelHistogram implements TableType {
|
|
||||||
private Integer[] colKeys;
|
|
||||||
private int limit;
|
|
||||||
private String[] rowKeys = {"EventLength"};
|
|
||||||
private Integer[] indelHistogram;
|
|
||||||
|
|
||||||
public IndelHistogram(int limit) {
|
|
||||||
colKeys = initColKeys(limit);
|
|
||||||
indelHistogram = initHistogram(limit);
|
|
||||||
this.limit = limit;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object[] getColumnKeys() {
|
|
||||||
return colKeys;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object[] getRowKeys() {
|
|
||||||
return rowKeys;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object getCell(int row, int col) {
|
|
||||||
return indelHistogram[col];
|
|
||||||
}
|
|
||||||
|
|
||||||
private Integer[] initColKeys(int size) {
|
|
||||||
Integer[] cK = new Integer[size*2+1];
|
|
||||||
int index = 0;
|
|
||||||
for ( int i = -size; i <= size; i ++ ) {
|
|
||||||
cK[index] = i;
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return cK;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Integer[] initHistogram(int size) {
|
|
||||||
Integer[] hist = new Integer[size*2+1];
|
|
||||||
for ( int i = 0; i < 2*size+1; i ++ ) {
|
|
||||||
hist[i] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return hist;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() { return "indelHistTable"; }
|
|
||||||
|
|
||||||
public void update(int eLength) {
|
|
||||||
indelHistogram[len2index(eLength)]++;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int len2index(int len) {
|
|
||||||
if ( len > limit || len < -limit ) {
|
|
||||||
throw new ReviewedStingException("Indel length exceeds limit of "+limit+" please increase indel limit size");
|
|
||||||
}
|
|
||||||
return len + limit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean enabled() { return true; }
|
|
||||||
|
|
||||||
public String getName() { return "IndelLengthHistogram"; }
|
|
||||||
|
|
||||||
public int getComparisonOrder() { return 1; } // need only the evals
|
|
||||||
|
|
||||||
public String update1(VariantContext vc1, RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) {
|
|
||||||
|
|
||||||
if ( vc1.isIndel() && vc1.isPolymorphicInSamples() ) {
|
|
||||||
|
|
||||||
if ( ! vc1.isBiallelic() ) {
|
|
||||||
//veWalker.getLogger().warn("[IndelLengthHistogram] Non-biallelic indel at "+ref.getLocus()+" ignored.");
|
|
||||||
return vc1.toString(); // biallelic sites are output
|
|
||||||
}
|
|
||||||
|
|
||||||
// only count simple insertions/deletions, not complex indels
|
|
||||||
if ( vc1.isSimpleInsertion() ) {
|
|
||||||
indelHistogram.update(vc1.getAlternateAllele(0).length());
|
|
||||||
} else if ( vc1.isSimpleDeletion() ) {
|
|
||||||
indelHistogram.update(-vc1.getReference().length());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,154 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2011, The Broad Institute
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person
|
|
||||||
* obtaining a copy of this software and associated documentation
|
|
||||||
* files (the "Software"), to deal in the Software without
|
|
||||||
* restriction, including without limitation the rights to use,
|
|
||||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following
|
|
||||||
* conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be
|
|
||||||
* included in all copies or substantial portions of the Software.
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
||||||
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
||||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
||||||
* OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators;
|
|
||||||
|
|
||||||
import org.apache.log4j.Logger;
|
|
||||||
import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
|
||||||
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
|
||||||
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
|
||||||
import org.broadinstitute.sting.gatk.walkers.varianteval.VariantEvalWalker;
|
|
||||||
import org.broadinstitute.sting.gatk.walkers.varianteval.util.Analysis;
|
|
||||||
import org.broadinstitute.sting.gatk.walkers.varianteval.util.DataPoint;
|
|
||||||
import org.broadinstitute.sting.gatk.walkers.varianteval.util.TableType;
|
|
||||||
import org.broadinstitute.sting.utils.MathUtils;
|
|
||||||
import org.broadinstitute.sting.utils.codecs.vcf.VCFConstants;
|
|
||||||
import org.broadinstitute.sting.utils.exceptions.UserException;
|
|
||||||
import org.broadinstitute.sting.utils.variantcontext.*;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
@Analysis(description = "Evaluation summary for multi-allelic variants")
|
|
||||||
public class MultiallelicAFs extends VariantEvaluator {
|
|
||||||
final protected static Logger logger = Logger.getLogger(MultiallelicAFs.class);
|
|
||||||
|
|
||||||
public enum Type {
|
|
||||||
SNP, INDEL
|
|
||||||
}
|
|
||||||
|
|
||||||
@DataPoint(description="Histogram of allele frequencies for most common SNP alternate allele")
|
|
||||||
AFHistogram AFhistogramMaxSnp = new AFHistogram();
|
|
||||||
|
|
||||||
@DataPoint(description="Histogram of allele frequencies for less common SNP alternate alleles")
|
|
||||||
AFHistogram AFhistogramMinSnp = new AFHistogram();
|
|
||||||
|
|
||||||
@DataPoint(description="Histogram of allele frequencies for most common Indel alternate allele")
|
|
||||||
AFHistogram AFhistogramMaxIndel = new AFHistogram();
|
|
||||||
|
|
||||||
@DataPoint(description="Histogram of allele frequencies for less common Indel alternate alleles")
|
|
||||||
AFHistogram AFhistogramMinIndel = new AFHistogram();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* AF histogram table object
|
|
||||||
*/
|
|
||||||
static class AFHistogram implements TableType {
|
|
||||||
private Object[] rowKeys, colKeys = {"count"};
|
|
||||||
private int[] AFhistogram;
|
|
||||||
|
|
||||||
private static final double AFincrement = 0.01;
|
|
||||||
private static final int numBins = (int)(1.00 / AFincrement);
|
|
||||||
|
|
||||||
public AFHistogram() {
|
|
||||||
rowKeys = initRowKeys();
|
|
||||||
AFhistogram = new int[rowKeys.length];
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object[] getColumnKeys() {
|
|
||||||
return colKeys;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object[] getRowKeys() {
|
|
||||||
return rowKeys;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object getCell(int row, int col) {
|
|
||||||
return AFhistogram[row];
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Object[] initRowKeys() {
|
|
||||||
ArrayList<String> keyList = new ArrayList<String>(numBins + 1);
|
|
||||||
for ( double a = 0.00; a <= 1.01; a += AFincrement ) {
|
|
||||||
keyList.add(String.format("%.2f", a));
|
|
||||||
}
|
|
||||||
return keyList.toArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() { return "AFHistTable"; }
|
|
||||||
|
|
||||||
public void update(final double AF) {
|
|
||||||
final int bin = (int)(numBins * MathUtils.round(AF, 2));
|
|
||||||
AFhistogram[bin]++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void initialize(VariantEvalWalker walker) {}
|
|
||||||
|
|
||||||
@Override public boolean enabled() { return true; }
|
|
||||||
|
|
||||||
public int getComparisonOrder() {
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void update0(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) {}
|
|
||||||
|
|
||||||
public String update2(VariantContext eval, VariantContext comp, RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) {
|
|
||||||
if ( eval == null || eval.isMonomorphicInSamples() )
|
|
||||||
return null;
|
|
||||||
|
|
||||||
if ( !eval.isBiallelic() )
|
|
||||||
return null;
|
|
||||||
|
|
||||||
// update counts
|
|
||||||
switch ( eval.getType() ) {
|
|
||||||
case SNP:
|
|
||||||
updateAFhistogram(eval, AFhistogramMaxSnp, AFhistogramMinSnp);
|
|
||||||
break;
|
|
||||||
case INDEL:
|
|
||||||
updateAFhistogram(eval, AFhistogramMaxIndel, AFhistogramMinIndel);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new UserException.BadInput("Unexpected variant context type: " + eval);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null; // we don't capture any interesting sites
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateAFhistogram(VariantContext vc, AFHistogram max, AFHistogram min) {
|
|
||||||
|
|
||||||
final Object obj = vc.getAttribute(VCFConstants.ALLELE_FREQUENCY_KEY, null);
|
|
||||||
if ( obj == null || !(obj instanceof List) )
|
|
||||||
return;
|
|
||||||
|
|
||||||
List<String> list = (List<String>)obj;
|
|
||||||
ArrayList<Double> AFs = new ArrayList<Double>(list.size());
|
|
||||||
for ( String str : list ) {
|
|
||||||
AFs.add(Double.valueOf(str));
|
|
||||||
}
|
|
||||||
|
|
||||||
Collections.sort(AFs);
|
|
||||||
max.update(AFs.get(AFs.size()-1));
|
|
||||||
for ( int i = 0; i < AFs.size() - 1; i++ )
|
|
||||||
min.update(AFs.get(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,54 +0,0 @@
|
||||||
package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by IntelliJ IDEA. User: kiran Date: Nov 29, 2010 Time: 3:25:59 PM To change this template use File | Settings
|
|
||||||
* | File Templates.
|
|
||||||
*/
|
|
||||||
class NewPhaseStats {
|
|
||||||
public int neitherPhased;
|
|
||||||
public int onlyCompPhased;
|
|
||||||
public int onlyEvalPhased;
|
|
||||||
public int phasesAgree;
|
|
||||||
public int phasesDisagree;
|
|
||||||
|
|
||||||
public NewPhaseStats() {
|
|
||||||
this.neitherPhased = 0;
|
|
||||||
this.onlyCompPhased = 0;
|
|
||||||
this.onlyEvalPhased = 0;
|
|
||||||
this.phasesAgree = 0;
|
|
||||||
this.phasesDisagree = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String toString() {
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
sb.append("Neither phased: " + neitherPhased + "\tOnly Comp: " + onlyCompPhased + "\tOnly Eval: " + onlyEvalPhased + "\tSame phase: " + phasesAgree + "\tOpposite phase: " + phasesDisagree);
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String[] getFieldNamesArray() {
|
|
||||||
return new String[]{"total", "neither", "only_comp", "only_eval", "both", "match", "switch", "switch_rate"};
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object getField(int index) {
|
|
||||||
switch (index) {
|
|
||||||
case (0):
|
|
||||||
return (neitherPhased + onlyCompPhased + onlyEvalPhased + phasesAgree + phasesDisagree);
|
|
||||||
case (1):
|
|
||||||
return neitherPhased;
|
|
||||||
case (2):
|
|
||||||
return onlyCompPhased;
|
|
||||||
case (3):
|
|
||||||
return onlyEvalPhased;
|
|
||||||
case (4):
|
|
||||||
return (phasesAgree + phasesDisagree);
|
|
||||||
case (5):
|
|
||||||
return phasesAgree;
|
|
||||||
case (6):
|
|
||||||
return phasesDisagree;
|
|
||||||
case (7):
|
|
||||||
return ((phasesDisagree == 0) ? 0 : ((double) phasesDisagree) / (phasesAgree + phasesDisagree));
|
|
||||||
default:
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
package org.broadinstitute.sting.gatk.walkers.varianteval.evaluators;
|
|
||||||
|
|
||||||
import org.broadinstitute.sting.utils.GenomeLoc;
|
|
||||||
import org.broadinstitute.sting.utils.variantcontext.Genotype;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by IntelliJ IDEA. User: kiran Date: Nov 29, 2010 Time: 3:25:59 PM To change this template use File | Settings
|
|
||||||
* | File Templates.
|
|
||||||
*/
|
|
||||||
class NewSamplePreviousGenotypes {
|
|
||||||
private HashMap<String, CompEvalGenotypes> sampleGenotypes = null;
|
|
||||||
|
|
||||||
public NewSamplePreviousGenotypes() {
|
|
||||||
this.sampleGenotypes = new HashMap<String, CompEvalGenotypes>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public CompEvalGenotypes get(String sample) {
|
|
||||||
return sampleGenotypes.get(sample);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void put(String sample, CompEvalGenotypes compEvalGts) {
|
|
||||||
sampleGenotypes.put(sample, compEvalGts);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void put(String sample, GenomeLoc locus, Genotype compGt, Genotype evalGt) {
|
|
||||||
sampleGenotypes.put(sample, new CompEvalGenotypes(locus, compGt, evalGt));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue