Prepare for writing a tree. If a taxa block exists and is suitable for tree, do nothing. If not, write a new taxa block. @param tree @param node @param builder
(RootedTree tree, Node node, StringBuilder builder, int indent)
| 207 | * @param builder |
| 208 | */ |
| 209 | private void appendTree(RootedTree tree, Node node, StringBuilder builder, int indent) { |
| 210 | builder.append("{\n"); |
| 211 | |
| 212 | if (tree.isExternal(node)) { |
| 213 | appendIndent(builder, indent + 1); |
| 214 | appendTaxonName(tree.getTaxon(node), builder); |
| 215 | } else { |
| 216 | appendIndent(builder, indent + 1); |
| 217 | builder.append("\"children\": [\n"); |
| 218 | java.util.List<Node> children = tree.getChildren(node); |
| 219 | final int last = children.size() - 1; |
| 220 | for (int i = 0; i < children.size(); i++) { |
| 221 | appendIndent(builder, indent + 2); |
| 222 | appendTree(tree, children.get(i), builder, indent + 2); |
| 223 | builder.append(i == last ? "\n" : ",\n"); |
| 224 | } |
| 225 | appendIndent(builder, indent + 1); |
| 226 | builder.append("]"); |
| 227 | } |
| 228 | |
| 229 | Node parent = tree.getParent(node); |
| 230 | if (parent != null) { |
| 231 | if (tree.hasLengths()) { |
| 232 | builder.append(",\n"); |
| 233 | appendIndent(builder, indent + 1); |
| 234 | builder.append("\"length\": ").append(tree.getLength(node)); |
| 235 | } |
| 236 | } |
| 237 | |
| 238 | builder.append(",\n"); |
| 239 | appendIndent(builder, indent + 1); |
| 240 | builder.append("\"height\": ").append(tree.getHeight(node)); |
| 241 | |
| 242 | appendAttributes(node, builder, indent + 1); |
| 243 | |
| 244 | builder.append("\n"); |
| 245 | |
| 246 | appendIndent(builder, indent); |
| 247 | builder.append("}"); |
| 248 | } |
| 249 | |
| 250 | public static double roundDouble(double value, int decimalPlace) { |
| 251 | double power_of_ten = 1; |
no test coverage detected