public int[] getAsPLs() { final double[] GLs = getAsVector(); return GLs == null ? null : GLsToPLs(GLs); }
public int[] getAsPLs() { final double[] GLs = getAsVector(); return GLs == null ? null : GLsToPLs(GLs); }
public int[] getAsPLs() { final double[] GLs = getAsVector(); return GLs == null ? null : GLsToPLs(GLs); }
private double getLog10GQ(List<Allele> genotypeAlleles,List<Allele> contextAlleles) { int allele1Index = contextAlleles.indexOf(genotypeAlleles.get(0)); int allele2Index = contextAlleles.indexOf(genotypeAlleles.get(1)); int plIndex = calculatePLindex(allele1Index,allele2Index); return getGQLog10FromLikelihoods(plIndex,getAsVector()); }
private double getLog10GQ(List<Allele> genotypeAlleles,List<Allele> contextAlleles) { int allele1Index = contextAlleles.indexOf(genotypeAlleles.get(0)); int allele2Index = contextAlleles.indexOf(genotypeAlleles.get(1)); int plIndex = calculatePLindex(allele1Index,allele2Index); return getGQLog10FromLikelihoods(plIndex,getAsVector()); }
public EnumMap<GenotypeType,Double> getAsMap(boolean normalizeFromLog10){ //Make sure that the log10likelihoods are set double[] likelihoods = normalizeFromLog10 ? GeneralUtils.normalizeFromLog10(getAsVector()) : getAsVector(); if(likelihoods == null) return null; EnumMap<GenotypeType,Double> likelihoodsMap = new EnumMap<GenotypeType, Double>(GenotypeType.class); likelihoodsMap.put(GenotypeType.HOM_REF,likelihoods[GenotypeType.HOM_REF.ordinal()-1]); likelihoodsMap.put(GenotypeType.HET,likelihoods[GenotypeType.HET.ordinal()-1]); likelihoodsMap.put(GenotypeType.HOM_VAR, likelihoods[GenotypeType.HOM_VAR.ordinal() - 1]); return likelihoodsMap; }
public EnumMap<GenotypeType,Double> getAsMap(boolean normalizeFromLog10){ //Make sure that the log10likelihoods are set double[] likelihoods = normalizeFromLog10 ? GeneralUtils.normalizeFromLog10(getAsVector()) : getAsVector(); if(likelihoods == null) return null; EnumMap<GenotypeType,Double> likelihoodsMap = new EnumMap<GenotypeType, Double>(GenotypeType.class); likelihoodsMap.put(GenotypeType.HOM_REF,likelihoods[GenotypeType.HOM_REF.ordinal()-1]); likelihoodsMap.put(GenotypeType.HET,likelihoods[GenotypeType.HET.ordinal()-1]); likelihoodsMap.put(GenotypeType.HOM_VAR, likelihoods[GenotypeType.HOM_VAR.ordinal() - 1]); return likelihoodsMap; }
public EnumMap<GenotypeType,Double> getAsMap(boolean normalizeFromLog10){ //Make sure that the log10likelihoods are set double[] likelihoods = normalizeFromLog10 ? GeneralUtils.normalizeFromLog10(getAsVector()) : getAsVector(); if(likelihoods == null) return null; EnumMap<GenotypeType,Double> likelihoodsMap = new EnumMap<GenotypeType, Double>(GenotypeType.class); likelihoodsMap.put(GenotypeType.HOM_REF,likelihoods[GenotypeType.HOM_REF.ordinal()-1]); likelihoodsMap.put(GenotypeType.HET,likelihoods[GenotypeType.HET.ordinal()-1]); likelihoodsMap.put(GenotypeType.HOM_VAR, likelihoods[GenotypeType.HOM_VAR.ordinal() - 1]); return likelihoodsMap; }
/** * This is really dangerous and returns completely wrong results for genotypes from a multi-allelic context. * Use getLog10GQ(Genotype,VariantContext) or getLog10GQ(Genotype,List<Allele>) in place of it. * * If you **know** you're biallelic, use getGQLog10FromLikelihoods directly. * @param genotype - actually a genotype type (no call, hom ref, het, hom var) * @return an unsafe quantity that could be negative. In the bi-allelic case, the GQ resulting from best minus next best (if the type is the best). */ @Deprecated public double getLog10GQ(GenotypeType genotype){ return getGQLog10FromLikelihoods(genotype.ordinal() - 1 /* NO_CALL IS FIRST */, getAsVector()); }
@Requires({"genotypeAlleles != null","genotypeAlleles.size()==2","contextAlleles != null","contextAlleles.size() >= 1"}) private double getLog10GQ(List<Allele> genotypeAlleles,List<Allele> contextAlleles) { int allele1Index = contextAlleles.indexOf(genotypeAlleles.get(0)); int allele2Index = contextAlleles.indexOf(genotypeAlleles.get(1)); int plIndex = calculatePLindex(allele1Index,allele2Index); return getGQLog10FromLikelihoods(plIndex,getAsVector()); }
/** * This is really dangerous and returns completely wrong results for genotypes from a multi-allelic context. * Use <code>getLog10GQ(Genotype,VariantContext)</code> * or <code>getLog10GQ(Genotype,List<Allele>)</code> in place of it. * * If you <strong>know</strong> you're biallelic, use <code>getGQLog10FromLikelihoods</code> directly. * @param genotype - actually a genotype type (no call, hom ref, het, hom var) * @return an unsafe quantity that could be negative. In the bi-allelic case, the GQ resulting from best minus next best (if the type is the best). * * @deprecated since 2/5/13 use * {@link GenotypeLikelihoods#getLog10GQ(Genotype, VariantContext)} or * {@link GenotypeLikelihoods#getLog10GQ(Genotype, List)} */ @Deprecated public double getLog10GQ(GenotypeType genotype){ return getGQLog10FromLikelihoods(genotype.ordinal() - 1 /* NO_CALL IS FIRST */, getAsVector()); }
private double log10PLFromSamples(final VariantContext vc, final String sample, boolean calcRefP) { Genotype g = vc.getGenotype(sample); double log10pSample = -1000; if ( ! g.isNoCall() ) { final double[] gLikelihoods = MathUtils.normalizeFromLog10(g.getLikelihoods().getAsVector()); log10pSample = Math.log10(calcRefP ? gLikelihoods[0] : 1 - gLikelihoods[0]); log10pSample = Double.isInfinite(log10pSample) ? -10000 : log10pSample; } return log10pSample; }
@Test (expectedExceptions = TribbleException.class) public void testErrorBadFormat() { GenotypeLikelihoods gl = GenotypeLikelihoods.fromPLField("adf,b,c"); gl.getAsVector(); }
private double calculateNChildren( final VariantContext vc, final Set<Sample> triosToTest, final int childIdx, final int momIdx, final int dadIdx ) { final double likelihoodVector[] = new double[triosToTest.size()]; int iii = 0; for( final Sample child : triosToTest ) { final double[] momGL = vc.getGenotype(child.getMaternalID()).getLikelihoods().getAsVector(); final double[] dadGL = vc.getGenotype(child.getPaternalID()).getLikelihoods().getAsVector(); final double[] childGL = vc.getGenotype(child.getID()).getLikelihoods().getAsVector(); likelihoodVector[iii++] = momGL[momIdx] + dadGL[dadIdx] + childGL[childIdx]; } return MathUtils.sumLog10(likelihoodVector); }
@Test public void testFromString2() { GenotypeLikelihoods gl = GenotypeLikelihoods.fromGLField(vGLString); assertDoubleArraysAreEqual(gl.getAsVector(), v); Assert.assertEquals(gl.getAsString(), vPLString); }
@Test public void testFromVector2() { GenotypeLikelihoods gl = GenotypeLikelihoods.fromLog10Likelihoods(v); assertDoubleArraysAreEqual(gl.getAsVector(), v); Assert.assertEquals(gl.getAsString(), vPLString); }
@Test public void testFromString1() { GenotypeLikelihoods gl = GenotypeLikelihoods.fromPLField(vPLString); assertDoubleArraysAreEqual(gl.getAsVector(), new double[]{-9.3, 0, -3.9}); Assert.assertEquals(gl.getAsString(), vPLString); }
@Test public void testGetLog10GQ(){ GenotypeLikelihoods gl = GenotypeLikelihoods.fromPLField(vPLString); //GQ for the best guess genotype Assert.assertEquals(gl.getLog10GQ(GenotypeType.HET),-3.9); double[] test = GeneralUtils.normalizeFromLog10(gl.getAsVector()); //GQ for the other genotypes Assert.assertEquals(gl.getLog10GQ(GenotypeType.HOM_REF), Math.log10(1.0 - test[GenotypeType.HOM_REF.ordinal()-1])); Assert.assertEquals(gl.getLog10GQ(GenotypeType.HOM_VAR), Math.log10(1.0 - test[GenotypeType.HOM_VAR.ordinal()-1])); //Test missing likelihoods gl = GenotypeLikelihoods.fromPLField("."); Assert.assertEquals(gl.getLog10GQ(GenotypeType.HOM_REF),Double.NEGATIVE_INFINITY); Assert.assertEquals(gl.getLog10GQ(GenotypeType.HET),Double.NEGATIVE_INFINITY); Assert.assertEquals(gl.getLog10GQ(GenotypeType.HOM_VAR),Double.NEGATIVE_INFINITY); }
private boolean checkGQIsGood(Genotype genotype) { if ( genotype.hasGQ() ) { return genotype.getGQ() >= minGenotypeQuality; } else if ( genotype.hasLikelihoods() ) { double log10gq = GenotypeLikelihoods.getGQLog10FromLikelihoods(genotype.getType().ordinal()-1,genotype.getLikelihoods().getAsVector()); return QualityUtils.phredScaleLog10ErrorRate(log10gq) >= minGenotypeQuality; } return minGenotypeQuality <= 0; }
private static double[] log10NormalizedGenotypePosteriors(final Genotype g, final GenotypeLikelihoodCalculator glCalc, final double[] log10AlleleFrequencies) { final double[] log10Likelihoods = g.getLikelihoods().getAsVector(); final double[] log10Posteriors = new IndexRange(0, glCalc.genotypeCount()).mapToDouble(genotypeIndex -> { final GenotypeAlleleCounts gac = glCalc.genotypeAlleleCountsAt(genotypeIndex); return gac.log10CombinationCount() + log10Likelihoods[genotypeIndex] + gac.sumOverAlleleIndicesAndCounts((index, count) -> count * log10AlleleFrequencies[index]); }); return MathUtils.normalizeFromLog10(log10Posteriors, true); }