/* Copyright (C) 2009 Diego Darriba This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package es.uvigo.darwin.prottest.facade; import java.io.PrintWriter; import java.util.List; import pal.tree.Tree; import es.uvigo.darwin.prottest.consensus.Consensus; import es.uvigo.darwin.prottest.selection.InformationCriterion; import es.uvigo.darwin.prottest.tree.TreeUtils; import es.uvigo.darwin.prottest.tree.WeightedTree; import es.uvigo.darwin.prottest.util.exception.ProtTestInternalException; import java.io.StringWriter; /** * Generic implementation of the Tree Facade services * * @author Diego Darriba * * @since 3.0 */ public class TreeFacadeImpl implements TreeFacade { public String toASCII(Tree tree) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); TreeUtils.printASCII(tree, pw); pw.flush(); return sw.toString(); } public String branchInfo(Tree tree) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); TreeUtils.printBranchInfo(tree, pw); pw.flush(); return sw.toString(); } public String heightInfo(Tree tree) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); TreeUtils.heightInfo(tree, pw); pw.flush(); return sw.toString(); } public String toNewick(Tree tree, boolean printLengths, boolean printInternalLabels, boolean printCladeSupport) { return TreeUtils.toNewick(tree, printLengths, printInternalLabels, printCladeSupport); } public Tree createConsensusTree(List<WeightedTree> treeColection, double threshold) { if (threshold < 0.5 || threshold > 1.0) { throw new ProtTestInternalException("Invalid threshold value: " + threshold); } Consensus consensus = new Consensus(treeColection, threshold, Consensus.BRANCH_LENGTHS_MEDIAN); Tree cons = consensus.getConsensusTree(); return cons; } public Tree createConsensusTree(InformationCriterion ic, double threshold) { Consensus consensus = createConsensus(ic, threshold); Tree cons = consensus.getConsensusTree(); return cons; } public Consensus createConsensus(InformationCriterion ic, double threshold) { if (threshold < 0.5 || threshold > 1.0) { throw new ProtTestInternalException("Invalid threshold value: " + threshold); } Consensus consensus = new Consensus(ic, threshold); return consensus; } }