fixing kiran's busted build
git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@686 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
parent
4f2c8bf0a3
commit
5b47c5ab6c
|
|
@ -0,0 +1,100 @@
|
|||
package org.broadinstitute.sting.secondarybase;
|
||||
|
||||
import org.broadinstitute.sting.utils.Utils;
|
||||
import org.broadinstitute.sting.utils.QualityUtils;
|
||||
|
||||
/**
|
||||
* FourProb represents four base hypotheses, their probabilities, and the ranking among one another.
|
||||
*
|
||||
* @author Kiran Garimella
|
||||
*/
|
||||
public class FourProb {
|
||||
private double[] baseProbs;
|
||||
private int[] baseIndices;
|
||||
|
||||
/**
|
||||
* Constructor for FourProb.
|
||||
*
|
||||
* @param baseLikes the unsorted base hypothesis probabilities (in ACGT order).
|
||||
*/
|
||||
public FourProb(double[][] baseLikes) {
|
||||
double[] baseProbs = new double[4];
|
||||
for (int baseCurIndex = 0; baseCurIndex < 4; baseCurIndex++) {
|
||||
for (int basePrevIndex = 0; basePrevIndex < baseLikes.length; basePrevIndex++) {
|
||||
baseProbs[baseCurIndex] += baseLikes[basePrevIndex][baseCurIndex];
|
||||
}
|
||||
}
|
||||
|
||||
int[] baseIndices = {0, 1, 2, 3};
|
||||
|
||||
Integer[] perm = Utils.SortPermutation(baseProbs);
|
||||
double[] ascendingBaseProbs = Utils.PermuteArray(baseProbs, perm);
|
||||
int[] ascendingBaseIndices = Utils.PermuteArray(baseIndices, perm);
|
||||
|
||||
this.baseProbs = new double[4];
|
||||
this.baseIndices = new int[4];
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
this.baseProbs[i] = ascendingBaseProbs[3 - i];
|
||||
this.baseIndices[i] = ascendingBaseIndices[3 - i];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index of the base at the specified rank.
|
||||
*
|
||||
* @param rank (0 = best, 3 = worst) the rank of the base whose index should be returned
|
||||
* @return the index (0, 1, 2, 3).
|
||||
*/
|
||||
public int indexAtRank(int rank) { return baseIndices[rank]; }
|
||||
|
||||
/**
|
||||
* Returns the base label of the base at the specified rank.
|
||||
* @param rank (0 = best, 3 = worst) the rank of the base whose index should be returned
|
||||
* @return the base label (A, C, G, T).
|
||||
*/
|
||||
public char baseAtRank(int rank) { return baseIndexToBase(indexAtRank(rank)); }
|
||||
|
||||
/**
|
||||
* Returns the probability of the base at the specified rank.
|
||||
* @param rank (0 = best, 3 = worst) the rank of the base whose index should be returned
|
||||
* @return the probability of the base (0.0-1.0)
|
||||
*/
|
||||
public double probAtRank(int rank) { return baseProbs[rank]; }
|
||||
|
||||
/**
|
||||
* Returns the quality score of the base at the specified rank.
|
||||
* @param rank (0 = best, 3 = worst) the rank of the base whose index should be returned
|
||||
* @return the quality score of the base (0-40)
|
||||
*/
|
||||
public byte qualAtRank(int rank) { return QualityUtils.probToQual(probAtRank(rank)); }
|
||||
|
||||
/**
|
||||
* A utility method to convert a base index into a base label.
|
||||
* @param baseIndex the index of the base (0, 1, 2, 3).
|
||||
* @return A, C, G, T, or '.' if the base index can't be understood.
|
||||
*/
|
||||
private char baseIndexToBase(int baseIndex) {
|
||||
switch (baseIndex) {
|
||||
case 0: return 'A';
|
||||
case 1: return 'C';
|
||||
case 2: return 'G';
|
||||
case 3: return 'T';
|
||||
default: return '.';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prettily formats the FourProb info.
|
||||
*
|
||||
* @return a prettily formatted Sting containing the base and quality score in rank order.
|
||||
*/
|
||||
public String toString() {
|
||||
return (
|
||||
"[" + baseAtRank(0) + ":" + qualAtRank(0) + " "
|
||||
+ baseAtRank(1) + ":" + qualAtRank(1) + " "
|
||||
+ baseAtRank(2) + ":" + qualAtRank(2) + " "
|
||||
+ baseAtRank(3) + ":" + qualAtRank(3) + "]"
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue