From c5433a31207dad9c9bd0051f7b7b273473c68f56 Mon Sep 17 00:00:00 2001 From: ebanks Date: Fri, 20 Mar 2009 17:01:18 +0000 Subject: [PATCH] dumps out base qualities per position for use in making boxplots git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@119 348d0f76-0448-11de-a6fe-93d51630548a --- .../gatk/walkers/BaseQualityDumpWalker.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100755 playground/java/src/org/broadinstitute/sting/gatk/walkers/BaseQualityDumpWalker.java diff --git a/playground/java/src/org/broadinstitute/sting/gatk/walkers/BaseQualityDumpWalker.java b/playground/java/src/org/broadinstitute/sting/gatk/walkers/BaseQualityDumpWalker.java new file mode 100755 index 000000000..edbaf47ab --- /dev/null +++ b/playground/java/src/org/broadinstitute/sting/gatk/walkers/BaseQualityDumpWalker.java @@ -0,0 +1,54 @@ +package org.broadinstitute.sting.gatk.walkers; + +import net.sf.samtools.SAMRecord; +import org.broadinstitute.sting.gatk.LocusContext; +import org.broadinstitute.sting.utils.Utils; +import edu.mit.broad.picard.reference.ReferenceSequence; + +import java.util.Iterator; +import java.util.List; +import static java.lang.reflect.Array.*; + +public class BaseQualityDumpWalker extends BasicReadWalker { + + protected final int MIN_TARGET_EDIT_DISTANCE = 0; //5; + protected final int MAX_TARGET_EDIT_DISTANCE = 4; //10; + + public String getName() { + return "Base_Quality_Dump"; + } + + // Do we actually want to operate on the context? + public boolean filter(LocusContext context, SAMRecord read) { + // we only want aligned reads + return !read.getReadUnmappedFlag(); + } + + public Integer map(LocusContext context, SAMRecord read) { + + int editDist = Integer.parseInt(read.getAttribute("NM").toString()); + + // ignore alignments with indels for now + if ( read.getAlignmentBlocks().size() == 1 && + editDist >= MIN_TARGET_EDIT_DISTANCE && + editDist <= MAX_TARGET_EDIT_DISTANCE ) { + + String qualStr = read.getBaseQualityString(); + int[] scores = new int[qualStr.length()]; + boolean reverseFlag = read.getReadNegativeStrandFlag(); + for ( int i = 0; i < qualStr.length(); i++) + scores[(reverseFlag ? (qualStr.length()-1-i) : i)] += (int)qualStr.charAt(i) - 33; + for ( int i = 0; i < scores.length; i++ ) + System.out.print(scores[i] + " "); + System.out.println(""); + } + + return 1; + } + + public Integer reduceInit() { return 0; } + + public Integer reduce(Integer value, Integer sum) { + return value + sum; + } +} \ No newline at end of file