From 21744e024b3281d76176a27bf3427a671d3bf07e Mon Sep 17 00:00:00 2001 From: chartl Date: Sun, 29 Nov 2009 06:51:19 +0000 Subject: [PATCH] Quick walker that determines % of bases covered at (user - defined depth)x . I've been maintaining it in my directories alone, but now that i've accidentally deleted it twice, into playground it goes git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@2174 348d0f76-0448-11de-a6fe-93d51630548a --- .../walkers/PercentOfBasesCoveredWalker.java | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 java/src/org/broadinstitute/sting/playground/gatk/walkers/PercentOfBasesCoveredWalker.java diff --git a/java/src/org/broadinstitute/sting/playground/gatk/walkers/PercentOfBasesCoveredWalker.java b/java/src/org/broadinstitute/sting/playground/gatk/walkers/PercentOfBasesCoveredWalker.java new file mode 100644 index 000000000..9e77b5f04 --- /dev/null +++ b/java/src/org/broadinstitute/sting/playground/gatk/walkers/PercentOfBasesCoveredWalker.java @@ -0,0 +1,64 @@ +package org.broadinstitute.sting.playground.gatk.walkers; + +import org.broadinstitute.sting.gatk.walkers.LocusWalker; +import org.broadinstitute.sting.gatk.walkers.TreeReducible; +import org.broadinstitute.sting.gatk.walkers.DataSource; +import org.broadinstitute.sting.gatk.walkers.By; +import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; +import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.contexts.AlignmentContext; +import org.broadinstitute.sting.utils.Pair; +import org.broadinstitute.sting.utils.cmdLine.Argument; + +/** + * Created by IntelliJ IDEA. + * User: Ghost + * Date: Nov 25, 2009 + * Time: 7:54:42 PM + * To change this template use File | Settings | File Templates. + */ +@By(DataSource.REFERENCE) +public class PercentOfBasesCoveredWalker extends LocusWalker> implements TreeReducible> { + @Argument(fullName="minimumDepth", shortName="minDepth", doc="Minimum depth beyond which to discount the base as uncovered", required=false) + int minDepth = 0; + @Argument(fullName="includeName",doc="include this name in the output of this walker (e.g. NAME: percent of bases covered . . .) ", required=false) + String name = null; + public void initialize() { + // do nothing + } + + public Pair reduceInit() { + return new Pair(0,1); // robust initialization -- seen one base with zero coverage + } + + public Boolean map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) { + return context.numReads() > minDepth; + } + + public Pair reduce(Boolean map, Pair prevReduce) { + if ( map.booleanValue() ) { + return new Pair(prevReduce.first+1,prevReduce.second+1); + } else { + return new Pair(prevReduce.first,prevReduce.second+1); + } + } + + public Pair treeReduce( Pair left, Pair right) { + right.set(right.first+left.first,right.second+left.second); + return right; + } + + public void onTraversalDone(Pair reduceFinal) { + String msg; + if (name == null) + msg = "Percent of bases covered at "+minDepth+"x="; + else + msg = name+": Percent of bases covered at "+minDepth+"x="; + + out.printf("%s%s",msg,pair2percent(reduceFinal)); + } + + private String pair2percent(Pair p ) { + return String.format("%d%s", (int) Math.floor( ( ( double) p.first*100.0) / p.second ), "%" ); + } +}