/* * InputFile.java * * Copyright (c) 2002-2015 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.app.treespace; import dr.util.NumberFormatter; import dr.app.gui.table.MultiLineTableCellContent; import javax.swing.*; import java.io.File; import jam.util.IconUtils; import jebl.evolution.trees.RootedTree; public class InputFile implements MultiLineTableCellContent { private final Icon treeIcon = IconUtils.getIcon(this.getClass(), "images/tree.png"); private final Icon treesIcon = IconUtils.getIcon(this.getClass(), "images/small_trees.png"); public enum Type { POSTERIOR_TREES("Posterior distribution of trees"), MODAL_TREE("Single tree"), LOG_FILE("Posterior distribution of parameters"); Type(final String name) { this.name = name; } @Override public String toString() { return name; } private final String name; } InputFile(File file) { if (file == null) { throw new IllegalArgumentException("File argument to InputFile cannot be null"); } this.file = file; this.tree = null; this.treeCount = 0; this.type = Type.LOG_FILE; } InputFile(File file, RootedTree tree) { if (file == null) { throw new IllegalArgumentException("File argument to InputFile cannot be null"); } this.file = file; this.tree = tree; this.treeCount = 0; this.type = Type.MODAL_TREE; } InputFile(File file, RootedTree tree, int treeCount) { if (file == null) { throw new IllegalArgumentException("File argument to InputFile cannot be null"); } this.file = file; this.tree = tree; this.treeCount = treeCount; this.type = Type.POSTERIOR_TREES; } public File getFile() { return file; } public Type getType() { return type; } public RootedTree getTree() { return tree; } public int getTreeCount() { return treeCount; } public void setTreeCount(final int treeCount) { this.treeCount = treeCount; } public int getBurnin() { return burnin; } public void setBurnin(final int burnin) { this.burnin = burnin; } public double getMostRecentSampleDate() { return mostRecentSampleDate; } public void setMostRecentSampleDate(double mostRecentSampleDate) { this.mostRecentSampleDate = mostRecentSampleDate; } public Icon getTableCellIcon() { switch (type) { case LOG_FILE: return null; case MODAL_TREE: return treeIcon; case POSTERIOR_TREES: return treesIcon; } return null; } private static final NumberFormatter nf = new NumberFormatter(6); public String getTableCellContent() { StringBuilder sb = new StringBuilder(); sb.append("<html>"); sb.append("<b>").append(file.getName()).append(": </b>").append(type.toString()).append("<br>"); if (type != Type.LOG_FILE) { sb.append("<small>Tip count: ").append(tree.getExternalNodes().size()); if (mostRecentSampleDate != 0.0) { if (type == Type.POSTERIOR_TREES) { sb.append(" | Tree count: ").append(treeCount < 0 ? " counting..." : treeCount); } else { sb.append(" | Root TMRCA: ").append(nf.format(mostRecentSampleDate - tree.getHeight(tree.getRootNode()))); } sb.append(" | Most recent tip: ").append(mostRecentSampleDate); } else { if (type == Type.POSTERIOR_TREES) { sb.append(" | Tree count: ").append(treeCount < 0 ? " counting..." : treeCount); } else { sb.append(" | Root height: ").append(nf.format(tree.getHeight(tree.getRootNode()))); } } if (type == Type.POSTERIOR_TREES) { sb.append(" | Burn-in: ").append(burnin); } sb.append("</small><br>"); } sb.append("</html>"); return sb.toString(); } public String getToolTipContent() { return getTableCellContent(); } @Override public String toString() { return file.getName(); } private final Type type; private final File file; private int treeCount; private int burnin = 0; private RootedTree tree = null; private double mostRecentSampleDate = 0.0; }