/**
   * Normalizes branch sizes so they contain frequencies (stored in "props") instead of counts
   * (stored in "dist").
   *
   * <p>Overwrites the supplied "props"!
   *
   * <p>props.length must be == dist.length.
   */
  protected static void countsToFreqs(double[][] dist, double[] props) {

    for (int k = 0; k < props.length; k++) {
      props[k] = Utils.sum(dist[k]);
    }
    if (Utils.eq(Utils.sum(props), 0)) {
      for (int k = 0; k < props.length; k++) {
        props[k] = 1.0 / (double) props.length;
      }
    } else {
      FastRfUtils.normalize(props);
    }
  }
  /**
   * Normalizes branch sizes so they contain frequencies (stored in "props") instead of counts
   * (stored in "dist"). Creates a new double[] which it returns.
   */
  protected static double[] countsToFreqs(double[][] dist) {

    double[] props = new double[dist.length];

    for (int k = 0; k < props.length; k++) {
      props[k] = Utils.sum(dist[k]);
    }
    if (Utils.eq(Utils.sum(props), 0)) {
      for (int k = 0; k < props.length; k++) {
        props[k] = 1.0 / (double) props.length;
      }
    } else {
      FastRfUtils.normalize(props);
    }
    return props;
  }