From e4770885fdf00504c7bfffc1116e989b1288a2d4 Mon Sep 17 00:00:00 2001 From: kiran Date: Thu, 14 May 2009 16:55:49 +0000 Subject: [PATCH] The four-probs for all bases in a single read. Some utility functions for generating the primary and secondary base strings, as well as generating the SQ tag byte array in a manner that's consistent with the Bustard base calls (meaning the primary Bustard call and the secondary Four-Prob call are not permitted to be the same). git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@704 348d0f76-0448-11de-a6fe-93d51630548a --- .../sting/secondarybase/FourProbRead.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100755 java/src/org/broadinstitute/sting/secondarybase/FourProbRead.java diff --git a/java/src/org/broadinstitute/sting/secondarybase/FourProbRead.java b/java/src/org/broadinstitute/sting/secondarybase/FourProbRead.java new file mode 100755 index 000000000..6b9fb09f0 --- /dev/null +++ b/java/src/org/broadinstitute/sting/secondarybase/FourProbRead.java @@ -0,0 +1,53 @@ +package org.broadinstitute.sting.secondarybase; + +import org.broadinstitute.sting.utils.BaseUtils; +import org.broadinstitute.sting.utils.QualityUtils; + +import java.util.ArrayList; + +public class FourProbRead extends ArrayList { + public FourProbRead(int initialCapacity) { + super(initialCapacity); + } + + public String getBaseSequenceAtGivenRank(int rank) { + String pseq = ""; + + for (int cycle = 0; cycle < this.size(); cycle++) { + FourProb fp = this.get(cycle); + + pseq += fp.baseAtRank(rank); + } + + return pseq; + } + + public String getPrimaryBaseSequence() { + return getBaseSequenceAtGivenRank(0); + } + + public String getSecondaryBaseSequence() { + return getBaseSequenceAtGivenRank(1); + } + + public byte[] getSQTag(RawRead rr) { + byte[] sqtag = new byte[this.size()]; + + for (int cycle = 0; cycle < this.size(); cycle++) { + FourProb fp = this.get(cycle); + + int fpPrimaryBaseIndex = fp.indexAtRank(0); + int rawPrimaryBaseIndex = BaseUtils.simpleBaseToBaseIndex(rr.getSequenceAsString().charAt(cycle)); + + int fpSecondaryBaseIndex = (fpPrimaryBaseIndex == rawPrimaryBaseIndex) ? fp.indexAtRank(1) : fpPrimaryBaseIndex; + + double qualdiff = -10.0*Math.log10(fp.probAtRank(2)/fp.probAtRank(1)); + + sqtag[cycle] = QualityUtils.baseAndProbDiffToCompressedQuality(fpSecondaryBaseIndex, qualdiff); + + //System.out.println("SQTAG: " + qualdiff + " " + sqtag[cycle] + " " + QualityUtils.compressedQualityToProbDiff(sqtag[cycle])); + } + + return sqtag; + } +}