48 lines
1.6 KiB
Java
48 lines
1.6 KiB
Java
|
|
package org.broadinstitute.sting.playground.fourbasecaller;
|
||
|
|
|
||
|
|
import org.broadinstitute.sting.utils.Utils;
|
||
|
|
import org.broadinstitute.sting.utils.QualityUtils;
|
||
|
|
|
||
|
|
public class FourProb {
|
||
|
|
private double[] baseProbs;
|
||
|
|
private int[] baseIndices;
|
||
|
|
|
||
|
|
public FourProb(int[] baseIndices, double[] baseProbs) {
|
||
|
|
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];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public int indexAtRank(int rank) { return baseIndices[rank]; }
|
||
|
|
public char baseAtRank(int rank) { return baseIndexToBase(indexAtRank(rank)); }
|
||
|
|
public double probAtRank(int rank) { return baseProbs[rank]; }
|
||
|
|
public byte qualAtRank(int rank) { return QualityUtils.probToQual(probAtRank(rank)); }
|
||
|
|
|
||
|
|
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 '.';
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public String toString() {
|
||
|
|
return (
|
||
|
|
"[" + baseAtRank(0) + ":" + qualAtRank(0) + " "
|
||
|
|
+ baseAtRank(1) + ":" + qualAtRank(1) + " "
|
||
|
|
+ baseAtRank(2) + ":" + qualAtRank(2) + " "
|
||
|
|
+ baseAtRank(3) + ":" + qualAtRank(3) + "]"
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|