From e3ac0cb500504f62136681db0bde456c148a5be4 Mon Sep 17 00:00:00 2001 From: andrewk Date: Fri, 3 Apr 2009 02:09:10 +0000 Subject: [PATCH] - A lot of code cleaned up; separated metrics code from AlleleFrequencyMetricsWalker into AlleleMetrics and eliminated the former class. AFMW (aside from being a name so long that it warrants an acronym) can now be implemented by passing an option to AlleleFreqeuncyWalker that logs metrics to a file. - AlleleMetrics and AlleleMetricrsWalker are now ready to take a list of clasess that implement the AllelicVariant interface - Switched a genome location in AlleleFrequencyEstimate from String to GenomeLoc which makes way more sense. git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@280 348d0f76-0448-11de-a6fe-93d51630548a --- .../gatk/walkers/AlleleFrequencyWalker.java | 73 +++++++++---------- .../gatk/walkers/AlleleMetricsWalker.java | 27 +++++++ .../utils/AlleleFrequencyEstimate.java | 15 ++-- .../AlleleMetrics.java} | 67 ++++++++--------- 4 files changed, 101 insertions(+), 81 deletions(-) create mode 100755 java/src/org/broadinstitute/sting/playground/gatk/walkers/AlleleMetricsWalker.java rename java/src/org/broadinstitute/sting/playground/{gatk/walkers/AlleleFrequencyMetricsWalker.java => utils/AlleleMetrics.java} (81%) diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/AlleleFrequencyWalker.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/AlleleFrequencyWalker.java index a02c3adff..0f70e04db 100755 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/AlleleFrequencyWalker.java +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/AlleleFrequencyWalker.java @@ -5,6 +5,7 @@ import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedDatum; import org.broadinstitute.sting.gatk.refdata.rodDbSNP; import org.broadinstitute.sting.gatk.walkers.LocusWalker; import org.broadinstitute.sting.playground.utils.AlleleFrequencyEstimate; +import org.broadinstitute.sting.playground.utils.AlleleMetrics; import org.broadinstitute.sting.utils.cmdLine.Argument; import org.broadinstitute.sting.utils.*; import org.apache.log4j.Logger; @@ -15,11 +16,13 @@ import java.util.Arrays; import java.util.Random; import java.io.PrintStream; -public class AlleleFrequencyWalker extends LocusWalker +public class AlleleFrequencyWalker extends LocusWalker// implements AllelicVariant { @Argument public int N; @Argument(required=false,defaultValue="0") public int DOWNSAMPLE; @Argument public String GFF_OUTPUT_FILE; + @Argument(shortName="met", doc="Turns on logging of metrics on the fly with AlleleFrequency calculation") public boolean LOG_METRICS; + @Argument(required=false, defaultValue="", doc="Name of file where metrics will output") public String METRICS_OUTPUT_FILE; protected static Logger logger = Logger.getLogger(AlleleFrequencyWalker.class); @@ -30,7 +33,7 @@ public class AlleleFrequencyWalker extends LocusWalker result is %s", alleleFreq)); + if (LOG_METRICS) metrics.nextPosition(alleleFreq, rodData); + return alleleFreq; } @@ -128,7 +133,7 @@ public class AlleleFrequencyWalker extends LocusWalker> 2) / 100.0; - System.out.printf("2ND %x %d %f\n", hex_qual, called2num, qual2); + //System.out.printf("2ND %x %d %f\n", hex_qual, called2num, qual2); quals[i][called2num] = qual2; // @@ -191,7 +196,7 @@ public class AlleleFrequencyWalker extends LocusWalker -5.0) || (current_offset != last_position_considered + 1)) ) { // No longer hom-ref, so output a ref line. - tokens = confident_ref_interval_start.split(":"); - - String contig = tokens[0]; - int start = Integer.parseInt(tokens[1]); - - tokens = alleleFreq.location.split(":"); - int end = last_position_considered; - double lod = confident_ref_interval_LOD_sum / confident_ref_interval_length; output.format("%s\tCALLER\tREFERENCE\t%d\t%d\t%f\t.\t.\tLENGTH %d\n", - contig, - start, - end, + confident_ref_interval_contig, + confident_ref_interval_start, + last_position_considered, lod, (int)(confident_ref_interval_length)); @@ -435,7 +434,8 @@ public class AlleleFrequencyWalker extends LocusWalker= 5) { this.output.print(alleleFreq.asGFFString()); } + if (LOG_METRICS) metrics.printMetricsAtLocusIntervals(1000); return ""; } @@ -492,17 +493,13 @@ public class AlleleFrequencyWalker extends LocusWalker avdata) { + + } + + +} diff --git a/java/src/org/broadinstitute/sting/playground/utils/AlleleFrequencyEstimate.java b/java/src/org/broadinstitute/sting/playground/utils/AlleleFrequencyEstimate.java index 255c1c93a..6973cb233 100755 --- a/java/src/org/broadinstitute/sting/playground/utils/AlleleFrequencyEstimate.java +++ b/java/src/org/broadinstitute/sting/playground/utils/AlleleFrequencyEstimate.java @@ -1,10 +1,11 @@ package org.broadinstitute.sting.playground.utils; import org.broadinstitute.sting.playground.gatk.walkers.AlleleFrequencyWalker; +import org.broadinstitute.sting.utils.GenomeLoc; public class AlleleFrequencyEstimate { //AlleleFrequencyEstimate(); - public String location; + public GenomeLoc location; public char ref; public char alt; public int N; @@ -15,7 +16,9 @@ public class AlleleFrequencyEstimate { public int depth; public String notes; - public AlleleFrequencyEstimate(String location, char ref, char alt, int N, double qhat, double qstar, double lodVsRef, double lodVsNextBest, int depth) + GenomeLoc l; + + public AlleleFrequencyEstimate(GenomeLoc location, char ref, char alt, int N, double qhat, double qstar, double lodVsRef, double lodVsNextBest, int depth) { this.location = location; this.ref = ref; @@ -31,12 +34,10 @@ public class AlleleFrequencyEstimate { public String asGFFString() { - String[] tokens; - tokens = location.split(":"); return String.format("%s\tCALLER\tVARIANT\t%s\t%s\t%f\t.\t.\tREF %c\t;\tALT %c\t;\tFREQ %f\n", - tokens[0], - tokens[1], - tokens[1], + location.getContig(), + location.getStart(), + location.getStart(), lodVsRef, ref, alt, diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/AlleleFrequencyMetricsWalker.java b/java/src/org/broadinstitute/sting/playground/utils/AlleleMetrics.java similarity index 81% rename from java/src/org/broadinstitute/sting/playground/gatk/walkers/AlleleFrequencyMetricsWalker.java rename to java/src/org/broadinstitute/sting/playground/utils/AlleleMetrics.java index 057d19fa3..66751c280 100755 --- a/java/src/org/broadinstitute/sting/playground/gatk/walkers/AlleleFrequencyMetricsWalker.java +++ b/java/src/org/broadinstitute/sting/playground/utils/AlleleMetrics.java @@ -1,25 +1,21 @@ -package org.broadinstitute.sting.playground.gatk.walkers; +package org.broadinstitute.sting.playground.utils; +import org.broadinstitute.sting.gatk.refdata.rodGFF; import org.broadinstitute.sting.gatk.refdata.ReferenceOrderedDatum; import org.broadinstitute.sting.gatk.refdata.rodDbSNP; -import org.broadinstitute.sting.gatk.refdata.rodGFF; -import org.broadinstitute.sting.gatk.walkers.LocusWalker; -import org.broadinstitute.sting.gatk.LocusContext; import org.broadinstitute.sting.playground.gatk.walkers.AlleleFrequencyWalker; -import org.broadinstitute.sting.playground.utils.AlleleFrequencyEstimate; import java.util.List; +import java.io.PrintStream; /** * Created by IntelliJ IDEA. * User: andrewk - * Date: Mar 18, 2009 - * Time: 5:28:58 PM + * Date: Apr 1, 2009 + * Time: 5:53:21 PM * To change this template use File | Settings | File Templates. */ - -public class AlleleFrequencyMetricsWalker extends LocusWalker -{ +public class AlleleMetrics { long dbsnp_hits=0; long num_variants=0; @@ -31,12 +27,24 @@ public class AlleleFrequencyMetricsWalker extends LocusWalker rodData, char ref, LocusContext context) - { - AlleleFrequencyEstimate alleleFreq = caller.map(rodData, ref, context); + public AlleleMetrics(String MetricsOutputFile) { + try + { + /*if ( MetricsOutputFile.equals("-") ) + this.out = out; + else*/ + this.out = new PrintStream(MetricsOutputFile); + } + catch (Exception e) + { + e.printStackTrace(); + System.exit(-1); + } + } + public void nextPosition(AlleleFrequencyEstimate alleleFreq, List rodData) { num_loci_total += 1; boolean is_dbSNP_SNP = false; @@ -47,7 +55,7 @@ public class AlleleFrequencyMetricsWalker extends LocusWalker= LOD_cutoff) { num_loci_confident += 1; } if (alleleFreq.qstar > 0.0 && alleleFreq.lodVsRef >= LOD_cutoff) - { + { // Confident variant. - + num_variants += 1; if (is_dbSNP_SNP) @@ -105,7 +113,8 @@ public class AlleleFrequencyMetricsWalker extends LocusWalker= 5) || (alleleFreq.lodVsRef <= -5)) { System.out.print(alleleFreq.asGFFString()); } - if (this.num_loci_total % 1000 == 0) { printMetrics(); } - return "null"; - } - - }