private static void computeLofK(
      final ExactACset set,
      final List<double[]> genotypeLikelihoods,
      final double[] log10AlleleFrequencyPriors,
      final StateTracker stateTracker) {

    set.getLog10Likelihoods()[0] = 0.0; // the zero case
    final int totalK = set.getACsum();

    // special case for k = 0 over all k
    if (totalK == 0) {
      for (int j = 1; j < set.getLog10Likelihoods().length; j++) {
        set.getLog10Likelihoods()[j] =
            set.getLog10Likelihoods()[j - 1] + genotypeLikelihoods.get(j)[HOM_REF_INDEX];
      }

      final double log10Lof0 = set.getLog10Likelihoods()[set.getLog10Likelihoods().length - 1];
      stateTracker.setLog10LikelihoodOfAFzero(log10Lof0);
      stateTracker.setLog10PosteriorOfAFzero(log10Lof0 + log10AlleleFrequencyPriors[0]);
      return;
    }

    // if we got here, then k > 0 for at least one k.
    // the non-AA possible conformations were already dealt with by pushes from dependent sets;
    // now deal with the AA case (which depends on previous cells in this column) and then update
    // the L(j,k) value
    for (int j = 1; j < set.getLog10Likelihoods().length; j++) {
      if (totalK < 2 * j - 1) {
        final double[] gl = genotypeLikelihoods.get(j);
        final double conformationValue =
            MathUtils.log10(2 * j - totalK)
                + MathUtils.log10(2 * j - totalK - 1)
                + set.getLog10Likelihoods()[j - 1]
                + gl[HOM_REF_INDEX];
        set.getLog10Likelihoods()[j] =
            MathUtils.approximateLog10SumLog10(set.getLog10Likelihoods()[j], conformationValue);
      }

      final double logDenominator = MathUtils.log10(2 * j) + MathUtils.log10(2 * j - 1);
      set.getLog10Likelihoods()[j] = set.getLog10Likelihoods()[j] - logDenominator;
    }

    double log10LofK = set.getLog10Likelihoods()[set.getLog10Likelihoods().length - 1];

    // update the MLE if necessary
    stateTracker.updateMLEifNeeded(log10LofK, set.getACcounts().getCounts());

    // apply the priors over each alternate allele
    for (final int ACcount : set.getACcounts().getCounts()) {
      if (ACcount > 0) {
        log10LofK += log10AlleleFrequencyPriors[ACcount];
      }
    }

    stateTracker.updateMAPifNeeded(log10LofK, set.getACcounts().getCounts());
  }