/* * AlloppMisc.java * * Copyright (c) 2002-2017 Alexei Drummond, Andrew Rambaut and Marc Suchard * * This file is part of BEAST. * See the NOTICE file distributed with this work for additional * information regarding copyright ownership and licensing. * * BEAST is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * BEAST 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with BEAST; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301 USA */ package dr.evomodel.alloppnet.util; import java.util.Formatter; import java.util.Iterator; /** * * @author Graham Jones * Date: 01/07/2011 */ import java.util.Locale; import dr.evolution.tree.NodeRef; import dr.evolution.tree.SimpleTree; import dr.evolution.util.Taxon; import dr.math.MathUtils; import jebl.util.FixedBitSet; public class AlloppMisc { public static String FixedBitSetasText(FixedBitSet x) { if (x == null) { return "{?}"; } StringBuilder rep = new StringBuilder(); rep.append("{"); for (int b = 0; b < x.cardinality() + FixedBitSet.complement(x).cardinality(); ++b) { String comma = (b==0) ? "" : ","; if (x.contains(b)) { rep.append(comma + b); } else { rep.append(comma + " "); } } rep.append("}"); return rep.toString(); } public static String nonnegIn8Chars(double x) { StringBuilder s = new StringBuilder(); Formatter formatter = new Formatter(s, Locale.US); if (x < 0) { formatter.format("%8s", "NA"); } else if (x == 0.0) { formatter.format("%8s", "zero"); } else if (x < 1e-3) { formatter.format("%8.2e", x); } else if (x < 9.999) { formatter.format("%8.5f", x); } else if (x < 99.99) { formatter.format("%8.4f", x); } else if (x < 999.9) { formatter.format("%8.3f", x); } else if (x < 9999) { formatter.format("%8.2f", x); } else { formatter.format("%8.0f", x); } return s.toString(); } public static String nonnegIntIn2Chars(int x) { StringBuilder s = new StringBuilder(); Formatter formatter = new Formatter(s, Locale.US); if (x < 0) { formatter.format("%2s", "NA"); } else { formatter.format("%2d", x); } return s.toString(); } public static String SimpleNodeAsText(SimpleTree stree, NodeRef node) { String s = "" + node.getNumber() + " "; while (s.length() < 3) { s += " "; } int nch = stree.getChildCount(node); if (nch> 0) { assert(nch==2); s += stree.getChild(node, 0).getNumber(); while (s.length() < 6) { s += " "; } s += stree.getChild(node, 1).getNumber(); } while (s.length() < 9) { s += " "; } Taxon tx = stree.getNodeTaxon(node); String taxonid = "*"; if (tx != null) { taxonid = tx.getId(); if (taxonid == null || taxonid.length() == 0) { taxonid = "*"; } } s += taxonid; while (s.length() < 20) { s += " "; } stree.getNodeHeight(node); s += " height="; s += stree.getNodeHeight(node); Iterator iter = stree.getNodeAttributeNames(node); if (iter != null) { while (iter.hasNext()) { String name = (String) iter.next(); s += " "; s += name; s += "="; s += stree.getNodeAttribute(node, name); } } return s; } public static double uniformInRange(double oldx, double min, double max, double halfwidth) { assert halfwidth > 0.0; assert halfwidth < 0.5; assert min < max; double change = MathUtils.uniform(-1.0, 1.0) * (max - min) * halfwidth; double newx = oldx + change; if (newx < min) { newx = 2*min - newx; } if (newx > max) { newx = 2*max - newx; } assert newx > min; assert newx < max; return newx; } }