public double mergeValueInLogSpace(
     RealParameter removed, RealParameter merge, ParametricDistribution distr) throws Exception {
   double val1 = Math.log(removed.getValue());
   double val2 = Math.log(merge.getValue());
   double x = val1 - val2;
   return distr.calcLogP(new RealParameter(new Double[] {x})) - val1;
 }
  public double mergeDiscreteValue(
      RealParameter removed, RealParameter merge, ConditionalCategoricalDistribution distr) {
    int removedModel = (int) (double) removed.getValue();
    int mergeModel = (int) (double) merge.getValue();

    return distr.logConditionalDensity(mergeModel, removedModel);
  }
  public double mergeValue(RealParameter removed, RealParameter merge, ParametricDistribution distr)
      throws Exception {
    Double[] x = new Double[removed.getDimension()];
    for (int i = 0; i < x.length; i++) {
      x[i] = removed.getValue(i) - merge.getValue(i);
    }

    return distr.calcLogP(new RealParameter(x));
  }