// Path: src/treecmp/metric/BaseMetric.java
// public abstract class BaseMetric implements Metric{
// 
//     protected String name;
//     protected String commandLineName;
//     protected String description;
//     protected String unifomFileName;
//     protected String yuleFileName;
//     protected String alnFileSuffix;
// 
//     protected IMetircDistrbHolder unifomRandData;
//     protected IMetircDistrbHolder yuleRandData;
// 
//     protected boolean rooted;
//     protected boolean weighted;
//     protected boolean diffLeafSets;
// 
//     public boolean isDiffLeafSets() {
//         return diffLeafSets;
//     }
// 
//     public void setDiffLeafSets(boolean diffLeafSets) {
//         this.diffLeafSets = diffLeafSets;
//     }
// 
//     public boolean isRooted() {
//         return rooted;
//     }
// 
//     public void setRooted(boolean rooted) {
//         this.rooted = rooted;
//     }
// 
//     public void setWeighted(boolean weighted) {
//         this.weighted = weighted;
//     }
// 
//     public boolean isWeighted() {
//         return weighted;
//     }
//     public String getAlnFileSuffix() {
//         return alnFileSuffix;
//     }
// 
//     public void setAlnFileSuffix(String alnFileSuffix) {
//         this.alnFileSuffix = alnFileSuffix;
//     }
//     
//     public String getUnifomFileName() {
//         return unifomFileName;
//     }
// 
//     public void setUnifomFileName(String unifomFileName) {
//         this.unifomFileName = unifomFileName;
//     }
// 
//     public String getYuleFileName() {
//         return yuleFileName;
//     }
// 
//     public void setYuleFileName(String yuleFileName) {
//         this.yuleFileName = yuleFileName;
//     }
// 
// 
//     public IMetircDistrbHolder getUnifomRandData() {
//         return unifomRandData;
//     }
// 
// 
//     public IMetircDistrbHolder getYuleRandData() {
//         return yuleRandData;
//     }
// 
// 
//     public String getDescription() {
//         return description;
//     }
// 
//     public void setDescription(String description) {
//         this.description = description;
//     }
//     
//     public BaseMetric() {
//         this.rooted = false;
//         this.diffLeafSets = false;
//     }
// 
//     public String getCommandLineName() {
//         return commandLineName;
//     }
// 
//     public void setCommandLineName(String commandLineName) {
//         this.commandLineName = commandLineName;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public abstract double getDistance(Tree t1, Tree t2, int... indexes) ;
//     public  AlignInfo getAlignment(){
//         return null;
//     }
//     
//     private IMetircDistrbHolder parseData(String dataDir, String dataFileName){
//         
//         MetircDistrbHolder mdh = new MetircDistrbHolder();
// 
//         String fullPath = dataDir + "/" + dataFileName;
// 
//         try {
//         FileReader fr = new FileReader(fullPath);
//         BufferedReader br = new BufferedReader(fr);
//         int cnt = 0;
//         String line;
//         while ((line = br.readLine()) != null){
//           cnt++;
//           if(cnt > 1){
//               MetricDistribution md = new MetricDistribution();
//               md.readData(line);
//               mdh.insertDistribution(md);
//           }
//         }
//         br.close();
//       }
//       catch (IOException e) {
//           Logger.getLogger(ConfigSettings.class.getName()).log(Level.SEVERE, "Error while reading data file:" + fullPath, e);
//           mdh = null;
//       }
//         return mdh;
//     }
// 
//     public void initData(){
//         ConfigSettings config = ConfigSettings.getConfig();
//         String dataDir = config.getDataDir();
//         if (unifomRandData == null){
//             if (unifomFileName != null){
//                 unifomRandData = parseData(dataDir, unifomFileName);
//             }         
//         }
//         
//         if (yuleRandData == null){
//             if (yuleFileName != null){
//                 yuleRandData = parseData(dataDir, yuleFileName);
//             }
//         }
//     }
//       
// }


import treecmp.metric.BaseMetric;
import treecmp.metric.Metric;
import pal.tree.Tree;
import pal.tree.TreeTool;
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package treecmp.metric.weighted;


/**
 *
 * @author Damian
 */
public class GeoUnrootedMetric extends BaseMetric implements Metric {

    private GeoMetricWrapper geoMetricWrapper = new GeoMetricWrapper();

// Path: src/treecmp/metric/BaseMetric.java
// public abstract class BaseMetric implements Metric{
// 
//     protected String name;
//     protected String commandLineName;
//     protected String description;
//     protected String unifomFileName;
//     protected String yuleFileName;
//     protected String alnFileSuffix;
// 
//     protected IMetircDistrbHolder unifomRandData;
//     protected IMetircDistrbHolder yuleRandData;
// 
//     protected boolean rooted;
//     protected boolean weighted;
//     protected boolean diffLeafSets;
// 
//     public boolean isDiffLeafSets() {
//         return diffLeafSets;
//     }
// 
//     public void setDiffLeafSets(boolean diffLeafSets) {
//         this.diffLeafSets = diffLeafSets;
//     }
// 
//     public boolean isRooted() {
//         return rooted;
//     }
// 
//     public void setRooted(boolean rooted) {
//         this.rooted = rooted;
//     }
// 
//     public void setWeighted(boolean weighted) {
//         this.weighted = weighted;
//     }
// 
//     public boolean isWeighted() {
//         return weighted;
//     }
//     public String getAlnFileSuffix() {
//         return alnFileSuffix;
//     }
// 
//     public void setAlnFileSuffix(String alnFileSuffix) {
//         this.alnFileSuffix = alnFileSuffix;
//     }
//     
//     public String getUnifomFileName() {
//         return unifomFileName;
//     }
// 
//     public void setUnifomFileName(String unifomFileName) {
//         this.unifomFileName = unifomFileName;
//     }
// 
//     public String getYuleFileName() {
//         return yuleFileName;
//     }
// 
//     public void setYuleFileName(String yuleFileName) {
//         this.yuleFileName = yuleFileName;
//     }
// 
// 
//     public IMetircDistrbHolder getUnifomRandData() {
//         return unifomRandData;
//     }
// 
// 
//     public IMetircDistrbHolder getYuleRandData() {
//         return yuleRandData;
//     }
// 
// 
//     public String getDescription() {
//         return description;
//     }
// 
//     public void setDescription(String description) {
//         this.description = description;
//     }
//     
//     public BaseMetric() {
//         this.rooted = false;
//         this.diffLeafSets = false;
//     }
// 
//     public String getCommandLineName() {
//         return commandLineName;
//     }
// 
//     public void setCommandLineName(String commandLineName) {
//         this.commandLineName = commandLineName;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public abstract double getDistance(Tree t1, Tree t2, int... indexes) ;
//     public  AlignInfo getAlignment(){
//         return null;
//     }
//     
//     private IMetircDistrbHolder parseData(String dataDir, String dataFileName){
//         
//         MetircDistrbHolder mdh = new MetircDistrbHolder();
// 
//         String fullPath = dataDir + "/" + dataFileName;
// 
//         try {
//         FileReader fr = new FileReader(fullPath);
//         BufferedReader br = new BufferedReader(fr);
//         int cnt = 0;
//         String line;
//         while ((line = br.readLine()) != null){
//           cnt++;
//           if(cnt > 1){
//               MetricDistribution md = new MetricDistribution();
//               md.readData(line);
//               mdh.insertDistribution(md);
//           }
//         }
//         br.close();
//       }
//       catch (IOException e) {
//           Logger.getLogger(ConfigSettings.class.getName()).log(Level.SEVERE, "Error while reading data file:" + fullPath, e);
//           mdh = null;
//       }
//         return mdh;
//     }
// 
//     public void initData(){
//         ConfigSettings config = ConfigSettings.getConfig();
//         String dataDir = config.getDataDir();
//         if (unifomRandData == null){
//             if (unifomFileName != null){
//                 unifomRandData = parseData(dataDir, unifomFileName);
//             }         
//         }
//         
//         if (yuleRandData == null){
//             if (yuleFileName != null){
//                 yuleRandData = parseData(dataDir, yuleFileName);
//             }
//         }
//     }
//       
// }


// Path: src/treecmp/metric/weighted/GeoUnrootedMetric.java
import treecmp.metric.BaseMetric;
import treecmp.metric.Metric;
import pal.tree.Tree;
import pal.tree.TreeTool;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package treecmp.metric.weighted;


/**
 *
 * @author Damian
 */
public class GeoUnrootedMetric extends BaseMetric implements Metric {

    private GeoMetricWrapper geoMetricWrapper = new GeoMetricWrapper();

    @Override