// Path: src/treecmp/common/NodeUtilsExt.java
// public class NodeUtilsExt extends NodeUtils {
// 
//     public static int printNH(PrintWriter out, Node node,
//                               boolean printLengths, boolean printInternalLabels, int column, int fractionDigits) {
// 
//         if (!node.isLeaf()) {
//             out.print("(");
//             column++;
// 
//             for (int i = 0; i < node.getChildCount(); i++) {
//                 if (i != 0) {
//                     out.print(",");
//                     column++;
//                 }
// 
//                 column = printNH(out, node.getChild(i), printLengths, printInternalLabels, column, fractionDigits);
//             }
// 
//             out.print(")");
//             column++;
//         }
// 
//         if (!node.isRoot()) {
//             if (node.isLeaf() || printInternalLabels) {
// 
//                 String id = node.getIdentifier().toString();
//                 out.print(id);
//                 column += id.length();
//             }
// 
//             if (printLengths) {
//                 out.print(":");
//                 column++;
// 
//                 column += FormattedOutput.getInstance().displayDecimal(out, node.getBranchLength(), fractionDigits);
//             }
//         }
//         return column;
//     }
// 
// 
//     public static String treeToSimpleString(Tree tree, boolean printLengths) {
//         return treeToSimpleString(tree.getRoot(), printLengths);
//     }
// 
//     public static String treeToSimpleString(Node node, boolean printLengths) {
//         OutputTarget out = OutputTarget.openString();
//         NodeUtilsExt.printNH(out, node, printLengths, false, 0, 6);
//         String treeNewick = out.getString();
//         out.close();
//         return treeNewick;
//     }
// 
// 
//     public static void getSplitExternal(IdGroup idGroup, Node externalNode, boolean[] split) {
//         // make sure split is reset
//         for (int i = 0; i < split.length; i++) {
//             split[i] = false;
//         }
// 
//         if (externalNode.isLeaf()) {
//             String name1 = externalNode.getIdentifier().getName();
//             int index = idGroup.whichIdNumber(name1);
// 
//             if (index < 0) {
//                 throw new IllegalArgumentException("INCOMPATIBLE IDENTIFIER (" + name1 + ")");
//             }
//             split[index] = true;
//         } else{
//             throw new IllegalArgumentException("NOT EXTERNAL NODE CHOSEN: " + externalNode);
//         }
// 
//         // standardize split (i.e. first index is alway true)
//         if (split[0] == false) {
//             for (int i = 0; i < split.length; i++) {
//                 if (split[i] == false) {
//                     split[i] = true;
//                 } else {
//                     split[i] = false;
//                 }
//             }
//         }
//     }
// }


import distanceAlg1.Geodesic;
import distanceAlg1.PhyloTree;
import pal.tree.*;
import polyAlg.PolyMain;
import treecmp.common.NodeUtilsExt;
import java.io.IOException;
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package treecmp.metric.weighted;

/**
 *
 * @author Damian
 */



/**
 *
 * @author Damian
 */
public class GeoMetricWrapper {

    /**
     *
     * @param t1
     * @param t2
     * @param rooted
     * @param logFileName - can be null
     * @return
     */
    public double getDistance(Tree t1, Tree t2, boolean rooted, String logFileName) {
// Path: src/treecmp/common/NodeUtilsExt.java
// public class NodeUtilsExt extends NodeUtils {
// 
//     public static int printNH(PrintWriter out, Node node,
//                               boolean printLengths, boolean printInternalLabels, int column, int fractionDigits) {
// 
//         if (!node.isLeaf()) {
//             out.print("(");
//             column++;
// 
//             for (int i = 0; i < node.getChildCount(); i++) {
//                 if (i != 0) {
//                     out.print(",");
//                     column++;
//                 }
// 
//                 column = printNH(out, node.getChild(i), printLengths, printInternalLabels, column, fractionDigits);
//             }
// 
//             out.print(")");
//             column++;
//         }
// 
//         if (!node.isRoot()) {
//             if (node.isLeaf() || printInternalLabels) {
// 
//                 String id = node.getIdentifier().toString();
//                 out.print(id);
//                 column += id.length();
//             }
// 
//             if (printLengths) {
//                 out.print(":");
//                 column++;
// 
//                 column += FormattedOutput.getInstance().displayDecimal(out, node.getBranchLength(), fractionDigits);
//             }
//         }
//         return column;
//     }
// 
// 
//     public static String treeToSimpleString(Tree tree, boolean printLengths) {
//         return treeToSimpleString(tree.getRoot(), printLengths);
//     }
// 
//     public static String treeToSimpleString(Node node, boolean printLengths) {
//         OutputTarget out = OutputTarget.openString();
//         NodeUtilsExt.printNH(out, node, printLengths, false, 0, 6);
//         String treeNewick = out.getString();
//         out.close();
//         return treeNewick;
//     }
// 
// 
//     public static void getSplitExternal(IdGroup idGroup, Node externalNode, boolean[] split) {
//         // make sure split is reset
//         for (int i = 0; i < split.length; i++) {
//             split[i] = false;
//         }
// 
//         if (externalNode.isLeaf()) {
//             String name1 = externalNode.getIdentifier().getName();
//             int index = idGroup.whichIdNumber(name1);
// 
//             if (index < 0) {
//                 throw new IllegalArgumentException("INCOMPATIBLE IDENTIFIER (" + name1 + ")");
//             }
//             split[index] = true;
//         } else{
//             throw new IllegalArgumentException("NOT EXTERNAL NODE CHOSEN: " + externalNode);
//         }
// 
//         // standardize split (i.e. first index is alway true)
//         if (split[0] == false) {
//             for (int i = 0; i < split.length; i++) {
//                 if (split[i] == false) {
//                     split[i] = true;
//                 } else {
//                     split[i] = false;
//                 }
//             }
//         }
//     }
// }


// Path: src/treecmp/metric/weighted/GeoMetricWrapper.java
import distanceAlg1.Geodesic;
import distanceAlg1.PhyloTree;
import pal.tree.*;
import polyAlg.PolyMain;
import treecmp.common.NodeUtilsExt;
import java.io.IOException;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package treecmp.metric.weighted;

/**
 *
 * @author Damian
 */



/**
 *
 * @author Damian
 */
public class GeoMetricWrapper {

    /**
     *
     * @param t1
     * @param t2
     * @param rooted
     * @param logFileName - can be null
     * @return
     */
    public double getDistance(Tree t1, Tree t2, boolean rooted, String logFileName) {
        String tree1Newick = NodeUtilsExt.treeToSimpleString(t1, true);