2009-06-18 05:32:21 +08:00
|
|
|
package org.broadinstitute.sting.gatk.refdata;
|
|
|
|
|
|
|
|
|
|
import org.broadinstitute.sting.utils.GenomeLoc;
|
|
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
|
|
|
|
public class rodVariants extends BasicReferenceOrderedDatum {
|
2009-06-18 15:26:37 +08:00
|
|
|
private enum Genotype { AA, AC, AG, AT, CC, CG, CT, GG, GT, TT }
|
|
|
|
|
|
2009-06-18 05:32:21 +08:00
|
|
|
private GenomeLoc loc;
|
|
|
|
|
private char refBase = 'N';
|
|
|
|
|
private int depth;
|
|
|
|
|
private int maxMappingQuality;
|
|
|
|
|
private String bestGenotype = "NN";
|
|
|
|
|
private float lodBtr;
|
|
|
|
|
private float lodBtnb;
|
|
|
|
|
private float[] genotypeLikelihoods = new float[10];
|
|
|
|
|
|
|
|
|
|
public rodVariants(final String name) { super(name); }
|
|
|
|
|
|
|
|
|
|
public String delimiterRegex() { return "\\s+"; }
|
|
|
|
|
|
|
|
|
|
public boolean parseLine(Object header, String[] parts) throws IOException {
|
|
|
|
|
if (!parts[0].startsWith("#")) {
|
|
|
|
|
loc = new GenomeLoc(parts[0], Long.valueOf(parts[1]));
|
|
|
|
|
refBase = parts[2].charAt(0);
|
|
|
|
|
depth = Integer.valueOf(parts[3]);
|
|
|
|
|
maxMappingQuality = Integer.valueOf(parts[4]);
|
|
|
|
|
bestGenotype = parts[5];
|
|
|
|
|
lodBtr = Float.valueOf(parts[6]);
|
|
|
|
|
lodBtnb = Float.valueOf(parts[7]);
|
|
|
|
|
|
|
|
|
|
for (int pieceIndex = 8, offset = 0; pieceIndex < 18; pieceIndex++, offset++) {
|
|
|
|
|
genotypeLikelihoods[offset] = Float.valueOf(parts[pieceIndex]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public String toString() {
|
|
|
|
|
return String.format("%s %c %d %d %s %4.4f %4.4f %f %f %f %f %f %f %f %f %f %f",
|
|
|
|
|
loc,
|
|
|
|
|
refBase,
|
|
|
|
|
depth,
|
|
|
|
|
maxMappingQuality,
|
|
|
|
|
bestGenotype,
|
|
|
|
|
lodBtr,
|
|
|
|
|
lodBtnb,
|
|
|
|
|
genotypeLikelihoods[0],
|
|
|
|
|
genotypeLikelihoods[1],
|
|
|
|
|
genotypeLikelihoods[2],
|
|
|
|
|
genotypeLikelihoods[3],
|
|
|
|
|
genotypeLikelihoods[4],
|
|
|
|
|
genotypeLikelihoods[5],
|
|
|
|
|
genotypeLikelihoods[6],
|
|
|
|
|
genotypeLikelihoods[7],
|
|
|
|
|
genotypeLikelihoods[8],
|
|
|
|
|
genotypeLikelihoods[9]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public GenomeLoc getLocation() { return loc; }
|
|
|
|
|
|
|
|
|
|
public char getReferenceBase() { return refBase; }
|
|
|
|
|
|
|
|
|
|
public int getPileupDepth() { return depth; }
|
|
|
|
|
|
|
|
|
|
public int getMaxMappingQuality() { return maxMappingQuality; }
|
|
|
|
|
|
|
|
|
|
public String getBestGenotype() { return bestGenotype; }
|
|
|
|
|
|
|
|
|
|
public float getLodBtr() { return lodBtr; }
|
|
|
|
|
|
|
|
|
|
public float getLodBtnb() { return lodBtnb; }
|
|
|
|
|
|
|
|
|
|
public float[] getGenotypeLikelihoods() { return genotypeLikelihoods; }
|
2009-06-18 15:26:37 +08:00
|
|
|
|
|
|
|
|
public void adjustLikelihoods(double[] likelihoods) {
|
|
|
|
|
for (int likelihoodIndex = 0; likelihoodIndex < likelihoods.length; likelihoodIndex++) {
|
|
|
|
|
genotypeLikelihoods[likelihoodIndex] += likelihoods[likelihoodIndex];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
String bestGenotype = "NN";
|
|
|
|
|
double bestLikelihood = Double.NEGATIVE_INFINITY;
|
|
|
|
|
double nextBestLikelihood = Double.NEGATIVE_INFINITY;
|
|
|
|
|
double refLikelihood = Double.NEGATIVE_INFINITY;
|
|
|
|
|
|
|
|
|
|
for (int likelihoodIndex = 0; likelihoodIndex < likelihoods.length; likelihoodIndex++) {
|
|
|
|
|
if (genotypeLikelihoods[likelihoodIndex] > bestLikelihood) {
|
|
|
|
|
bestLikelihood = genotypeLikelihoods[likelihoodIndex];
|
|
|
|
|
|
|
|
|
|
bestGenotype = Genotype.values()[likelihoodIndex].toString();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int likelihoodIndex = 0; likelihoodIndex < likelihoods.length; likelihoodIndex++) {
|
|
|
|
|
if (genotypeLikelihoods[likelihoodIndex] > nextBestLikelihood && genotypeLikelihoods[likelihoodIndex] < bestLikelihood) {
|
|
|
|
|
nextBestLikelihood = genotypeLikelihoods[likelihoodIndex];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int likelihoodIndex = 0; likelihoodIndex < likelihoods.length; likelihoodIndex++) {
|
|
|
|
|
if (refBase == Genotype.values()[likelihoodIndex].toString().charAt(0) &&
|
|
|
|
|
refBase == Genotype.values()[likelihoodIndex].toString().charAt(1)) {
|
|
|
|
|
refLikelihood = genotypeLikelihoods[likelihoodIndex];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.bestGenotype = bestGenotype;
|
|
|
|
|
this.lodBtr = (float) (bestLikelihood - refLikelihood);
|
|
|
|
|
this.lodBtnb = (float) (bestLikelihood - nextBestLikelihood);
|
|
|
|
|
}
|
2009-06-18 05:32:21 +08:00
|
|
|
}
|