package checks; import java.io.FileReader; import java.io.IOException; import java.util.Set; import jebl.evolution.graphs.Node; import jebl.evolution.io.ImportException; import jebl.evolution.io.NexusImporter; import jebl.evolution.trees.RootedTree; import utils.Utils; public class ContinuousSanityCheck { private boolean notNull = false; private String HPDString = null; public boolean check(String treeFilename, String longitudeName, String latitudeName) throws IOException, ImportException { NexusImporter importer = new NexusImporter(new FileReader(treeFilename)); RootedTree tree = (RootedTree) importer.importNextTree(); Double longitude = null; Double latitude = null; double nodeCount = Utils.getNodeCount(tree); double unannotatedNodeCount = 0; for (Node node : tree.getNodes()) { if (!tree.isRoot(node)) { longitude = (Double) node.getAttribute(longitudeName); latitude = (Double) node.getAttribute(latitudeName); if (longitude == null || latitude == null) { unannotatedNodeCount++; }// unannotated nodes check if (HPDString == null) { // we could check if(!tree.isExternal(node)) Set<String> attSet = node.getAttributeNames(); for (String name : attSet) { if (name.contains("HPD") && name.contains("modality")) { HPDString = name.split("_")[1]; System.out.println("Found highest posterior " + "density attribute: " + HPDString); } } }// END: if HPDString not defined }// END: root check }// END: node loop // TODO throw HPD attribute missing exception if HPDString == null if (unannotatedNodeCount == nodeCount) { notNull = false; // throw new RuntimeException("Attribute, " + coordinatesName // + ", missing from node"); } else if (unannotatedNodeCount == 0) { notNull = true; } else if (unannotatedNodeCount < nodeCount) { notNull = true; System.out.println("Spread detected unannotated branches " + "and will continue by skipping them. Consider " + "annotating all branches of your tree."); } else { notNull = false; throw new RuntimeException("Bad juju"); } return notNull; }// END: check public boolean check(RootedTree tree, String coordinatesName) throws IOException, ImportException { String longitudeName = (coordinatesName + 2); String latitudeName = (coordinatesName + 1); Double longitude = null; Double latitude = null; double nodeCount = Utils.getNodeCount(tree); double unannotatedNodeCount = 0; for (Node node : tree.getNodes()) { if (!tree.isRoot(node)) { longitude = (Double) node.getAttribute(longitudeName); latitude = (Double) node.getAttribute(latitudeName); if (longitude == null || latitude == null) { unannotatedNodeCount++; }// unannotated nodes check if (HPDString == null) { // we could check if(!tree.isExternal(node)) Set<String> attSet = node.getAttributeNames(); for (String name : attSet) { if (name.contains("HPD") && name.contains("modality")) { HPDString = name.split("_")[1]; System.out.println("Found highest posterior " + "density attribute: " + HPDString); } } }// END: if HPDString not defined }// END: root check }// END: node loop // TODO throw HPD attribute missing exception if HPDString == null if (unannotatedNodeCount == nodeCount) { notNull = false; throw new RuntimeException("Attribute, " + coordinatesName + ", missing from node"); } else if (unannotatedNodeCount == 0) { notNull = true; } else if (unannotatedNodeCount < nodeCount) { notNull = true; System.out.println("Spread detected unannotated branches " + "and will continue by skipping them. Consider " + "annotating all branches of your tree."); } else { notNull = false; throw new RuntimeException("Bad juju"); } return notNull; }// END: check public String getHPDString() { return HPDString; } }// END: class