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; + } +}