45 lines
1.6 KiB
Java
45 lines
1.6 KiB
Java
|
|
package org.broadinstitute.sting.playground.fourbasecaller;
|
||
|
|
|
||
|
|
import org.broadinstitute.sting.utils.Utils;
|
||
|
|
|
||
|
|
public class BasecallingReadModel {
|
||
|
|
private BasecallingBaseModel[] basemodels = null;
|
||
|
|
|
||
|
|
public BasecallingReadModel(int readLength) {
|
||
|
|
basemodels = new BasecallingBaseModel[readLength];
|
||
|
|
|
||
|
|
for (int i = 0; i < readLength; i++) {
|
||
|
|
basemodels[i] = new BasecallingBaseModel();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public void addTrainingPoint(int cycle, char basePrev, char baseCur, byte qualCur, double[] fourintensity) {
|
||
|
|
basemodels[cycle].addTrainingPoint(basePrev, baseCur, qualCur, fourintensity);
|
||
|
|
}
|
||
|
|
|
||
|
|
public double[][] computeLikelihoods(int cycle, char basePrev, byte qualPrev, double[] fourintensity) {
|
||
|
|
return basemodels[cycle].computeLikelihoods(cycle, basePrev, qualPrev, fourintensity);
|
||
|
|
}
|
||
|
|
|
||
|
|
public FourProb computeProbabilities(int cycle, char basePrev, byte qualPrev, double[] fourintensity) {
|
||
|
|
double[][] likes = computeLikelihoods(cycle, basePrev, qualPrev, fourintensity);
|
||
|
|
|
||
|
|
double[] probs = new double[4];
|
||
|
|
int[] baseindices = { 0, 1, 2, 3 };
|
||
|
|
double total = 0;
|
||
|
|
|
||
|
|
for (int baseCurIndex = 0; baseCurIndex < 4; baseCurIndex++) {
|
||
|
|
for (int basePrevIndex = 0; basePrevIndex < 4; basePrevIndex++) {
|
||
|
|
probs[baseCurIndex] += likes[basePrevIndex][baseCurIndex];
|
||
|
|
}
|
||
|
|
total += probs[baseCurIndex];
|
||
|
|
}
|
||
|
|
|
||
|
|
for (int baseCurIndex = 0; baseCurIndex < 4; baseCurIndex++) {
|
||
|
|
probs[baseCurIndex] /= total;
|
||
|
|
}
|
||
|
|
|
||
|
|
return new FourProb(baseindices, probs);
|
||
|
|
}
|
||
|
|
}
|