Ejemplo n.º 1
0
  // necessary to not overload equals for genotypes
  private void assertGenotypesAreMostlyEqual(GenotypesContext actual, GenotypesContext expected) {
    if (actual == expected) {
      return;
    }

    if (actual == null || expected == null) {
      Assert.fail("Maps not equal: expected: " + expected + " and actual: " + actual);
    }

    if (actual.size() != expected.size()) {
      Assert.fail("Maps do not have the same size:" + actual.size() + " != " + expected.size());
    }

    for (Genotype value : actual) {
      Genotype expectedValue = expected.get(value.getSampleName());

      Assert.assertEquals(
          value.getAlleles(), expectedValue.getAlleles(), "Alleles in Genotype aren't equal");
      Assert.assertEquals(value.getGQ(), expectedValue.getGQ(), "GQ values aren't equal");
      Assert.assertEquals(
          value.hasLikelihoods(),
          expectedValue.hasLikelihoods(),
          "Either both have likelihoods or both not");
      if (value.hasLikelihoods())
        Assert.assertEquals(
            value.getLikelihoods().getAsVector(),
            expectedValue.getLikelihoods().getAsVector(),
            "Genotype likelihoods aren't equal");
    }
  }
  public static GenotypesContext stripPLs(GenotypesContext genotypes) {
    GenotypesContext newGs = GenotypesContext.create(genotypes.size());

    for (final Genotype g : genotypes) {
      newGs.add(g.hasLikelihoods() ? removePLs(g) : g);
    }

    return newGs;
  }
  public static void assertEquals(final Genotype actual, final Genotype expected) {
    Assert.assertEquals(actual.getSampleName(), expected.getSampleName(), "Genotype names");
    Assert.assertEquals(actual.getAlleles(), expected.getAlleles(), "Genotype alleles");
    Assert.assertEquals(
        actual.getGenotypeString(), expected.getGenotypeString(), "Genotype string");
    Assert.assertEquals(actual.getType(), expected.getType(), "Genotype type");

    // filters are the same
    Assert.assertEquals(actual.getFilters(), expected.getFilters(), "Genotype fields");
    Assert.assertEquals(actual.isFiltered(), expected.isFiltered(), "Genotype isFiltered");

    // inline attributes
    Assert.assertEquals(actual.getDP(), expected.getDP(), "Genotype dp");
    Assert.assertTrue(Arrays.equals(actual.getAD(), expected.getAD()));
    Assert.assertEquals(actual.getGQ(), expected.getGQ(), "Genotype gq");
    Assert.assertEquals(actual.hasPL(), expected.hasPL(), "Genotype hasPL");
    Assert.assertEquals(actual.hasAD(), expected.hasAD(), "Genotype hasAD");
    Assert.assertEquals(actual.hasGQ(), expected.hasGQ(), "Genotype hasGQ");
    Assert.assertEquals(actual.hasDP(), expected.hasDP(), "Genotype hasDP");

    Assert.assertEquals(
        actual.hasLikelihoods(), expected.hasLikelihoods(), "Genotype haslikelihoods");
    Assert.assertEquals(
        actual.getLikelihoodsString(),
        expected.getLikelihoodsString(),
        "Genotype getlikelihoodsString");
    Assert.assertEquals(
        actual.getLikelihoods(), expected.getLikelihoods(), "Genotype getLikelihoods");
    Assert.assertTrue(Arrays.equals(actual.getPL(), expected.getPL()));

    Assert.assertEquals(
        actual.getPhredScaledQual(), expected.getPhredScaledQual(), "Genotype phredScaledQual");
    assertAttributesEquals(actual.getExtendedAttributes(), expected.getExtendedAttributes());
    Assert.assertEquals(actual.isPhased(), expected.isPhased(), "Genotype isPhased");
    Assert.assertEquals(actual.getPloidy(), expected.getPloidy(), "Genotype getPloidy");
  }
Ejemplo n.º 4
0
  public void writeBeagleOutput(
      VariantContext preferredVC, VariantContext otherVC, boolean isValidationSite, double prior) {
    GenomeLoc currentLoc =
        VariantContextUtils.getLocation(getToolkit().getGenomeLocParser(), preferredVC);
    StringBuffer beagleOut = new StringBuffer();

    String marker = String.format("%s:%d ", currentLoc.getContig(), currentLoc.getStart());
    beagleOut.append(marker);
    if (markers != null)
      markers.append(marker).append("\t").append(Integer.toString(markerCounter++)).append("\t");
    for (Allele allele : preferredVC.getAlleles()) {
      String bglPrintString;
      if (allele.isNoCall() || allele.isNull()) bglPrintString = "-";
      else bglPrintString = allele.getBaseString(); // get rid of * in case of reference allele

      beagleOut.append(String.format("%s ", bglPrintString));
      if (markers != null) markers.append(bglPrintString).append("\t");
    }
    if (markers != null) markers.append("\n");

    GenotypesContext preferredGenotypes = preferredVC.getGenotypes();
    GenotypesContext otherGenotypes = goodSite(otherVC) ? otherVC.getGenotypes() : null;
    for (String sample : samples) {
      boolean isMaleOnChrX = CHECK_IS_MALE_ON_CHR_X && getSample(sample).getGender() == Gender.MALE;

      Genotype genotype;
      boolean isValidation;
      // use sample as key into genotypes structure
      if (preferredGenotypes.containsSample(sample)) {
        genotype = preferredGenotypes.get(sample);
        isValidation = isValidationSite;
      } else if (otherGenotypes != null && otherGenotypes.containsSample(sample)) {
        genotype = otherGenotypes.get(sample);
        isValidation = !isValidationSite;
      } else {
        // there is magically no genotype for this sample.
        throw new StingException(
            "Sample "
                + sample
                + " arose with no genotype in variant or validation VCF. This should never happen.");
      }

      /*
       * Use likelihoods if: is validation, prior is negative; or: is not validation, has genotype key
       */
      double[] log10Likelihoods = null;
      if ((isValidation && prior < 0.0) || genotype.hasLikelihoods()) {
        log10Likelihoods = genotype.getLikelihoods().getAsVector();

        // see if we need to randomly mask out genotype in this position.
        if (GenomeAnalysisEngine.getRandomGenerator().nextDouble() <= insertedNoCallRate) {
          // we are masking out this genotype
          log10Likelihoods =
              isMaleOnChrX ? HAPLOID_FLAT_LOG10_LIKELIHOODS : DIPLOID_FLAT_LOG10_LIKELIHOODS;
        }

        if (isMaleOnChrX) {
          log10Likelihoods[1] = -255; // todo -- warning this is dangerous for multi-allele case
        }
      }
      /** otherwise, use the prior uniformly */
      else if (!isValidation && genotype.isCalled() && !genotype.hasLikelihoods()) {
        // hack to deal with input VCFs with no genotype likelihoods.  Just assume the called
        // genotype
        // is confident.  This is useful for Hapmap and 1KG release VCFs.
        double AA = (1.0 - prior) / 2.0;
        double AB = (1.0 - prior) / 2.0;
        double BB = (1.0 - prior) / 2.0;

        if (genotype.isHomRef()) {
          AA = prior;
        } else if (genotype.isHet()) {
          AB = prior;
        } else if (genotype.isHomVar()) {
          BB = prior;
        }

        log10Likelihoods = MathUtils.toLog10(new double[] {AA, isMaleOnChrX ? 0.0 : AB, BB});
      } else {
        log10Likelihoods =
            isMaleOnChrX ? HAPLOID_FLAT_LOG10_LIKELIHOODS : DIPLOID_FLAT_LOG10_LIKELIHOODS;
      }

      writeSampleLikelihoods(beagleOut, preferredVC, log10Likelihoods);
    }

    beagleWriter.println(beagleOut.toString());
  }