Example #1
0
  @Override
  protected Double modifyARG()
      throws InvalidParameterValueException, IllegalModificationException,
          ModificationImpossibleException {

    List<ARGNode> internalNodes = arg.getInternalNodes();

    int nodeNum = RandomSource.getNextIntFromTo(0, internalNodes.size() - 1);
    ARGNode node = internalNodes.get(nodeNum);

    if (internalNodes.size() == 1) // Must be two tips, no recomb nodes
    throw new ModificationImpossibleException("No internal nodes to modify");

    // Pick a node that is not the root
    while (node.getParent(0) == null) {
      node = internalNodes.get(RandomSource.getNextIntFromTo(0, internalNodes.size() - 1));
    }

    double hr;
    if (node instanceof CoalNode) {
      hr = swapCoalNode((CoalNode) node);
    } else {
      hr = swapRecombNode((RecombNode) node);
    }

    return hr;
  }