/**
   * + test whether a clade is contained in this clade system (assuming the same leaf order)
   *
   * @param clade clade
   */
  public boolean hasClade(boolean[] clade) {
    for (int i = 0; i < clades.length; i++) {
      if (SplitUtils.isSame(clade, clades[i])) return true;
    }

    return false;
  }
  /**
   * get clade for internal node
   *
   * @param idGroup order of labels
   * @param internalNode Node
   * @param boolean[] clade
   */
  public static void getClade(IdGroup idGroup, Node internalNode, boolean[] clade) {
    if (internalNode.isLeaf() || internalNode.isRoot()) {
      throw new IllegalArgumentException("Only internal nodes (and no root) nodes allowed");
    }

    // make sure clade is reset
    for (int i = 0; i < clade.length; i++) {
      clade[i] = false;
    }

    // mark all leafs downstream of the node
    // AJD removed loop, as doesn't appear to be necessary
    SplitUtils.markNode(idGroup, internalNode, clade);
  }