From 9ac13b8f5d7728dfada030e33b3d1dcd30d82382 Mon Sep 17 00:00:00 2001 From: chartl Date: Tue, 29 Jun 2010 21:45:26 +0000 Subject: [PATCH] Name and body change for this module to reflect local code. git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@3675 348d0f76-0448-11de-a6fe-93d51630548a --- .../varianteval/AminoAcidTransition.java | 192 ++++++++++++++++++ .../walkers/varianteval/BLOSUMMatrix.java | 178 ---------------- 2 files changed, 192 insertions(+), 178 deletions(-) create mode 100755 java/src/org/broadinstitute/sting/oneoffprojects/walkers/varianteval/AminoAcidTransition.java delete mode 100755 java/src/org/broadinstitute/sting/oneoffprojects/walkers/varianteval/BLOSUMMatrix.java diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/varianteval/AminoAcidTransition.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/varianteval/AminoAcidTransition.java new file mode 100755 index 000000000..45406f758 --- /dev/null +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/varianteval/AminoAcidTransition.java @@ -0,0 +1,192 @@ +package org.broadinstitute.sting.oneoffprojects.walkers.varianteval; + +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.contexts.variantcontext.VariantContext; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.walkers.varianteval.VariantEvalWalker; +import org.broadinstitute.sting.gatk.walkers.varianteval.VariantEvaluator; +import org.broadinstitute.sting.playground.utils.report.tags.Analysis; +import org.broadinstitute.sting.playground.utils.report.tags.DataPoint; +import org.broadinstitute.sting.playground.utils.report.utils.TableType; +import org.broadinstitute.sting.utils.StingException; +import org.broadinstitute.sting.utils.analysis.AminoAcid; +import org.broadinstitute.sting.utils.analysis.AminoAcidTable; +import org.broadinstitute.sting.utils.analysis.AminoAcidUtils; + +import java.util.ArrayList; + +/* + * Copyright (c) 2010 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. + */ + +/** + * @author chartl + * @since June 28, 2010 + */ + +@Analysis(name = "Amino Acid Transition", description = "Calculates the Transition Matrix for coding variants; entries are Total, Num. Ti, Num. Tv, Ratio") +public class AminoAcidTransition extends VariantEvaluator { + + //////////////////////////////////////////////////////////// + //// INTERNAL DATA POINT CLASSES + //////////////////////////////////////////////////////////// + + // a mapping from amino acid transition score histogram bin to Ti/Tv ratio + @DataPoint(name="Amino Acid Table", description = "TiTv counts by amino acid change") + AminoAcidTiTvTable acidTable = null; + + class TiTvCount { + public int ti; + public int tv; + + public TiTvCount() { + ti = 0; + tv = 0; + } + + public int getTotal() { + return ti + tv; + } + + public double getRatio() { + return ( (double) ti )/tv; + } + + public String toString() { + return String.format("%d:%d:%d:%f",getTotal(),ti,tv,getRatio()); + } + } + + class AminoAcidTiTvTable implements TableType { + + private TiTvCount[][] countsByAAChange; + + public AminoAcidTiTvTable() { + countsByAAChange = new TiTvCount[AminoAcid.values().length][AminoAcid.values().length]; + for ( int i = 0; i < AminoAcid.values().length; i ++ ) { + for ( int j = 0; j < AminoAcid.values().length; j++ ) { + countsByAAChange[i][j] = new TiTvCount(); + } + } + } + + public Object[] getRowKeys() { + return AminoAcidUtils.getAminoAcidCodes(); + + } + + public Object[] getColumnKeys() { + return AminoAcidUtils.getAminoAcidCodes(); + } + + public TiTvCount getCell(int x, int y) { + return countsByAAChange[x][y]; + } + + public String getName() { + return "AminoAcidTransitionTable"; + } + + public void update(AminoAcid reference, AminoAcid alternate, boolean isTransition) { + TiTvCount counter = countsByAAChange[reference.ordinal()][alternate.ordinal()]; + if ( isTransition ) { + counter.ti++; + } else { + counter.tv++; + } + } + } + + //////////////////////////////////////////////////////////// + //// CORE VARIANT EVALUATOR DATA AND METHODS + //////////////////////////////////////////////////////////// + + private String infoKey; + private String infoValueSplit; + private boolean useCodons; + private AminoAcidTable lookup; + + public AminoAcidTransition(VariantEvalWalker parent) { + super(parent); + getParsingInformation(parent); + lookup = new AminoAcidTable(); + } + + private void getParsingInformation(VariantEvalWalker parent) { + // todo -- allow me to be flexible + infoKey = "something"; + infoValueSplit = "somethingElse"; + useCodons = false; + } + + public String getName() { + return "AminoAcidTransitionTable"; + } + + public int getComparisonOrder() { + return 1; // we only need to see each eval track + } + + public boolean enabled() { + return true; + } + + public String toString() { + return getName(); + } + + public String update1(VariantContext eval, RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) { + String interesting = null; + if ( eval != null && eval.hasAttribute(infoKey) ) { + String[] parsedNames = ( (String) eval.getAttribute(infoKey)).split(infoValueSplit); + String first = parsedNames [0]; + String second = parsedNames [1]; + AminoAcid reference; + AminoAcid alternate; + if ( useCodons ) { + reference = lookup.getEukaryoticAA(first); + alternate = lookup.getEukaryoticAA(second); + } else { + reference = lookup.getAminoAcidByCode(first); + alternate = lookup.getAminoAcidByCode(second); + } + + if ( reference == null ) { + interesting = "Unknown Reference Codon"; + } else if ( alternate == null ) { + interesting = "Unknown Alternate Codon"; + } else { + acidTable.update(reference,alternate,eval.isTransition()); + } + + } + + return interesting; // This module doesn't capture any interesting sites, so return null + } + + //public void finalizeEvaluation() { + // + //} +} \ No newline at end of file diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/varianteval/BLOSUMMatrix.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/varianteval/BLOSUMMatrix.java deleted file mode 100755 index 83d2e4929..000000000 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/varianteval/BLOSUMMatrix.java +++ /dev/null @@ -1,178 +0,0 @@ -package org.broadinstitute.sting.oneoffprojects.walkers.varianteval; -/* -import org.broadinstitute.sting.gatk.contexts.AlignmentContext; -import org.broadinstitute.sting.gatk.contexts.ReferenceContext; -import org.broadinstitute.sting.gatk.contexts.variantcontext.VariantContext; -import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; -import org.broadinstitute.sting.gatk.walkers.varianteval.VariantEvalWalker; -import org.broadinstitute.sting.gatk.walkers.varianteval.VariantEvaluator; -import org.broadinstitute.sting.playground.utils.report.tags.Analysis; -import org.broadinstitute.sting.playground.utils.report.tags.DataPoint; -import org.broadinstitute.sting.playground.utils.report.utils.TableType; -import org.broadinstitute.sting.utils.StingException; - -import java.util.ArrayList; - -/* - * Copyright (c) 2010 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. - */ - -/** - * @author depristo - * @since Apr 11, 2010 - */ -/* -@Analysis(name = "BLOSUM Matrix", description = "Calculates the BLOSUM Matrix for coding variants") -public class BLOSUMMatrix extends VariantEvaluator { - - - // a mapping from quality score histogram bin to Ti/Tv ratio - @DataPoint(name="TiTv by AC", description = "TiTv by allele count") - MetricsByAc metrics = null; - - //@DataPoint(name="Quality by Allele Count", description = "average variant quality for each allele count") - //AlleleCountStats alleleCountStats = null; - - private final static Object[] METRIC_COLUMNS = {"AC", "nTi", "nTv", "n", "Ti/Tv"}; - - class MetricsAtAC { - public int ac = -1, nTi = 0, nTv = 0; - - public MetricsAtAC(int ac) { this.ac = ac; } - - public void update(VariantContext eval) { - if ( eval.isTransition() ) - nTi++; - else - nTv++; - } - - // corresponding to METRIC_COLUMNS - public String getColumn(int i) { - switch (i) { - case 0: return String.valueOf(ac); - case 1: return String.valueOf(nTi); - case 2: return String.valueOf(nTv); - case 3: return String.valueOf(nTi + nTv); - case 4: return String.valueOf(ratio(nTi, nTv)); - default: - throw new StingException("Unexpected column " + i); - } - } - } - - class MetricsByAc implements TableType { - ArrayList metrics = new ArrayList(); - Object[] rows = null; - - public MetricsByAc( int nchromosomes ) { - rows = new Object[nchromosomes+1]; - metrics = new ArrayList(nchromosomes+1); - for ( int i = 0; i < nchromosomes + 1; i++ ) { - metrics.add(new MetricsAtAC(i)); - rows[i] = "ac" + i; - } - } - - public Object[] getRowKeys() { - return rows; - } - - public Object[] getColumnKeys() { - return METRIC_COLUMNS; - } - - public String getName() { - return "MetricsByAc"; - } - - // - public String getCell(int ac, int y) { - return metrics.get(ac).getColumn(y); - } - - public String toString() { - String returnString = ""; - return returnString; - } - - public void incrValue( VariantContext eval ) { - int ac = -1; - - if ( eval.hasGenotypes() ) - ac = eval.getChromosomeCount(eval.getAlternateAllele(0)); - else if ( eval.hasAttribute("AC") ) { - ac = Integer.valueOf(eval.getAttributeAsString("AC")); - } - - if ( ac != -1 ) - metrics.get(ac).update(eval); - } - } - - public BLOSUMMatrix(VariantEvalWalker parent) { - super(parent); - // don't do anything - } - - public String getName() { - return "SimpleMetricsByAC"; - } - - public int getComparisonOrder() { - return 1; // we only need to see each eval track - } - - public boolean enabled() { - return false; - } - - public String toString() { - return getName(); - } - - public String update1(VariantContext eval, RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) { - final String interesting = null; - - if (eval != null ) { - if ( metrics == null ) { - int nSamples = this.getVEWalker().getNSamplesForEval(eval); - if ( nSamples != -1 ) - metrics = new MetricsByAc(2 * nSamples); - } - - if ( eval.isSNP() && - eval.isBiallelic() && - metrics != null ) { - metrics.incrValue(eval); - } - } - - return interesting; // This module doesn't capture any interesting sites, so return null - } - - //public void finalizeEvaluation() { - // - //} - }*/