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