use of dr.evolution.util.Taxon in project beast-mcmc by beast-dev.
the class MigrateTreeImporter method readExternalNode.
/**
* Reads an external node in.
*/
FlexibleNode readExternalNode(HashMap<String, Taxon> translationList) throws ImportException, IOException {
FlexibleNode node = new FlexibleNode();
String label = readToken(":(),;");
Taxon taxon;
if (translationList.size() > 0) {
taxon = translationList.get(label);
if (taxon == null) {
// taxon not found in taxon list...
throw new UnknownTaxonException("Taxon in tree, '" + label + "' is unknown");
}
} else {
taxon = new Taxon(label);
}
if (getLastMetaComment() != null) {
parseMigrationString(getLastMetaComment(), node);
clearLastMetaComment();
}
node.setTaxon(taxon);
int pop = Integer.parseInt(label.split("\\.")[0]);
node.setAttribute(POP, (pop - 1));
return node;
}
use of dr.evolution.util.Taxon in project beast-mcmc by beast-dev.
the class Consensus method getConsensusSequence.
public final Sequence getConsensusSequence() {
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < consensus.length; i++) {
buffer.append(dataType.getChar(getState(i)));
}
Sequence sequence = new Sequence(new Taxon(name), buffer.toString());
sequence.setDataType(dataType);
return sequence;
}
use of dr.evolution.util.Taxon in project beast-mcmc by beast-dev.
the class PartitionedTreeModelParser method parseXMLObject.
/**
* @return a tree object based on the XML element it was passed.
*/
public Object parseXMLObject(XMLObject xo) throws XMLParseException {
Tree tree = (Tree) xo.getChild(Tree.class);
AbstractOutbreak outbreak = (AbstractOutbreak) xo.getElementFirstChild(OUTBREAK);
PartitionedTreeModel treeModel;
if (xo.hasAttribute(STARTING_TT_FILE)) {
treeModel = new PartitionedTreeModel(xo.getId(), tree, outbreak, xo.getStringAttribute(STARTING_TT_FILE));
} else {
treeModel = new PartitionedTreeModel(xo.getId(), tree, outbreak);
}
Logger.getLogger("dr.evomodel").info("Creating the partitioned tree model, '" + xo.getId() + "'");
for (int i = 0; i < xo.getChildCount(); i++) {
if (xo.getChild(i) instanceof XMLObject) {
XMLObject cxo = (XMLObject) xo.getChild(i);
if (cxo.getName().equals(ROOT_HEIGHT)) {
ParameterParser.replaceParameter(cxo, treeModel.getRootHeightParameter());
} else if (cxo.getName().equals(LEAF_HEIGHT)) {
String taxonName;
if (cxo.hasAttribute(TAXON)) {
taxonName = cxo.getStringAttribute(TAXON);
} else {
throw new XMLParseException("taxa element missing from leafHeight element in treeModel element");
}
int index = treeModel.getTaxonIndex(taxonName);
if (index == -1) {
throw new XMLParseException("taxon " + taxonName + " not found for leafHeight element in treeModel element");
}
NodeRef node = treeModel.getExternalNode(index);
Parameter newParameter = treeModel.getLeafHeightParameter(node);
ParameterParser.replaceParameter(cxo, newParameter);
Taxon taxon = treeModel.getTaxon(index);
setPrecisionBounds(newParameter, taxon);
} else if (cxo.getName().equals(LEAF_HEIGHTS)) {
// get a set of leaf height parameters out as a compound parameter...
TaxonList taxa = (TaxonList) cxo.getChild(TaxonList.class);
Parameter offsetParameter = (Parameter) cxo.getChild(Parameter.class);
CompoundParameter leafHeights = new CompoundParameter("leafHeights");
for (Taxon taxon : taxa) {
int index = treeModel.getTaxonIndex(taxon);
if (index == -1) {
throw new XMLParseException("taxon " + taxon.getId() + " not found for leafHeight element in treeModel element");
}
NodeRef node = treeModel.getExternalNode(index);
Parameter newParameter = treeModel.getLeafHeightParameter(node);
leafHeights.addParameter(newParameter);
setPrecisionBounds(newParameter, taxon);
}
ParameterParser.replaceParameter(cxo, leafHeights);
} else if (cxo.getName().equals(NODE_HEIGHTS)) {
boolean rootNode = cxo.getAttribute(ROOT_NODE, false);
boolean internalNodes = cxo.getAttribute(INTERNAL_NODES, false);
boolean leafNodes = cxo.getAttribute(LEAF_NODES, false);
if (!rootNode && !internalNodes && !leafNodes) {
throw new XMLParseException("one or more of root, internal or leaf nodes must be selected for the nodeHeights element");
}
ParameterParser.replaceParameter(cxo, treeModel.createNodeHeightsParameter(rootNode, internalNodes, leafNodes));
} else if (cxo.getName().equals(NODE_RATES)) {
boolean rootNode = cxo.getAttribute(ROOT_NODE, false);
boolean internalNodes = cxo.getAttribute(INTERNAL_NODES, false);
boolean leafNodes = cxo.getAttribute(LEAF_NODES, false);
double[] initialValues = null;
if (cxo.hasAttribute(INITIAL_VALUE)) {
initialValues = cxo.getDoubleArrayAttribute(INITIAL_VALUE);
}
if (!rootNode && !internalNodes && !leafNodes) {
throw new XMLParseException("one or more of root, internal or leaf nodes must be selected for the nodeRates element");
}
ParameterParser.replaceParameter(cxo, treeModel.createNodeRatesParameter(initialValues, rootNode, internalNodes, leafNodes));
} else if (cxo.getName().equals(NODE_TRAITS)) {
boolean rootNode = cxo.getAttribute(ROOT_NODE, false);
boolean internalNodes = cxo.getAttribute(INTERNAL_NODES, false);
boolean leafNodes = cxo.getAttribute(LEAF_NODES, false);
boolean fireTreeEvents = cxo.getAttribute(FIRE_TREE_EVENTS, false);
String name = cxo.getAttribute(NAME, "trait");
int dim = cxo.getAttribute(MULTIVARIATE_TRAIT, 1);
double[] initialValues = null;
if (cxo.hasAttribute(INITIAL_VALUE)) {
initialValues = cxo.getDoubleArrayAttribute(INITIAL_VALUE);
}
if (!rootNode && !internalNodes && !leafNodes) {
throw new XMLParseException("one or more of root, internal or leaf nodes must be selected for the nodeTraits element");
}
ParameterParser.replaceParameter(cxo, treeModel.createNodeTraitsParameter(name, dim, initialValues, rootNode, internalNodes, leafNodes, fireTreeEvents));
} else if (cxo.getName().equals(LEAF_TRAIT)) {
String name = cxo.getAttribute(NAME, "trait");
String taxonName;
if (cxo.hasAttribute(TAXON)) {
taxonName = cxo.getStringAttribute(TAXON);
} else {
throw new XMLParseException("taxa element missing from leafTrait element in treeModel element");
}
int index = treeModel.getTaxonIndex(taxonName);
if (index == -1) {
throw new XMLParseException("taxon '" + taxonName + "' not found for leafTrait element in treeModel element");
}
NodeRef node = treeModel.getExternalNode(index);
Parameter parameter = treeModel.getNodeTraitParameter(node, name);
if (parameter == null)
throw new XMLParseException("trait '" + name + "' not found for leafTrait (taxon, " + taxonName + ") element in treeModel element");
ParameterParser.replaceParameter(cxo, parameter);
} else {
if (!cxo.getName().equals(OUTBREAK)) {
throw new XMLParseException("illegal child element in " + getParserName() + ": " + cxo.getName());
}
}
} else if (xo.getChild(i) instanceof Tree) {
// do nothing - already handled
} else {
throw new XMLParseException("illegal child element in " + getParserName() + ": " + xo.getChildName(i) + " " + xo.getChild(i));
}
}
// AR this is doubling up the number of bounds on each node.
// treeModel.setupHeightBounds();
//System.err.println("done constructing treeModel");
Logger.getLogger("dr.evomodel").info(" initial tree topology = " + TreeUtils.uniqueNewick(treeModel, treeModel.getRoot()));
Logger.getLogger("dr.evomodel").info(" tree height = " + treeModel.getNodeHeight(treeModel.getRoot()));
return treeModel;
}
use of dr.evolution.util.Taxon in project beast-mcmc by beast-dev.
the class SpeciationLikelihoodParser method parseXMLObject.
public Object parseXMLObject(XMLObject xo) throws XMLParseException {
XMLObject cxo = xo.getChild(MODEL);
final SpeciationModel specModel = (SpeciationModel) cxo.getChild(SpeciationModel.class);
cxo = xo.getChild(TREE);
final Tree tree = (Tree) cxo.getChild(Tree.class);
Set<Taxon> excludeTaxa = null;
if (xo.hasChildNamed(INCLUDE)) {
excludeTaxa = new HashSet<Taxon>();
for (int i = 0; i < tree.getTaxonCount(); i++) {
excludeTaxa.add(tree.getTaxon(i));
}
cxo = xo.getChild(INCLUDE);
for (int i = 0; i < cxo.getChildCount(); i++) {
TaxonList taxonList = (TaxonList) cxo.getChild(i);
for (int j = 0; j < taxonList.getTaxonCount(); j++) {
excludeTaxa.remove(taxonList.getTaxon(j));
}
}
}
if (xo.hasChildNamed(EXCLUDE)) {
excludeTaxa = new HashSet<Taxon>();
cxo = xo.getChild(EXCLUDE);
for (int i = 0; i < cxo.getChildCount(); i++) {
TaxonList taxonList = (TaxonList) cxo.getChild(i);
for (int j = 0; j < taxonList.getTaxonCount(); j++) {
excludeTaxa.add(taxonList.getTaxon(j));
}
}
}
if (excludeTaxa != null) {
Logger.getLogger("dr.evomodel").info("Speciation model excluding " + excludeTaxa.size() + " taxa from prior - " + (tree.getTaxonCount() - excludeTaxa.size()) + " taxa remaining.");
}
final XMLObject cal = xo.getChild(CALIBRATION);
if (cal != null) {
if (excludeTaxa != null) {
throw new XMLParseException("Sorry, not implemented: internal calibration prior + excluded taxa");
}
List<Distribution> dists = new ArrayList<Distribution>();
List<Taxa> taxa = new ArrayList<Taxa>();
List<Boolean> forParent = new ArrayList<Boolean>();
// (Statistic) cal.getChild(Statistic.class);
Statistic userPDF = null;
for (int k = 0; k < cal.getChildCount(); ++k) {
final Object ck = cal.getChild(k);
if (DistributionLikelihood.class.isInstance(ck)) {
dists.add(((DistributionLikelihood) ck).getDistribution());
} else if (Distribution.class.isInstance(ck)) {
dists.add((Distribution) ck);
} else if (Taxa.class.isInstance(ck)) {
final Taxa tx = (Taxa) ck;
taxa.add(tx);
forParent.add(tx.getTaxonCount() == 1);
} else if (Statistic.class.isInstance(ck)) {
if (userPDF != null) {
throw new XMLParseException("more than one userPDF correction???");
}
userPDF = (Statistic) cal.getChild(Statistic.class);
} else {
XMLObject cko = (XMLObject) ck;
assert cko.getChildCount() == 2;
for (int i = 0; i < 2; ++i) {
final Object chi = cko.getChild(i);
if (DistributionLikelihood.class.isInstance(chi)) {
dists.add(((DistributionLikelihood) chi).getDistribution());
} else if (Distribution.class.isInstance(chi)) {
dists.add((Distribution) chi);
} else if (Taxa.class.isInstance(chi)) {
taxa.add((Taxa) chi);
boolean fp = ((Taxa) chi).getTaxonCount() == 1;
if (cko.hasAttribute(PARENT)) {
boolean ufp = cko.getBooleanAttribute(PARENT);
if (fp && !ufp) {
throw new XMLParseException("forParent==false for a single taxon?? (must be true)");
}
fp = ufp;
}
forParent.add(fp);
} else {
assert false;
}
}
}
}
if (dists.size() != taxa.size()) {
throw new XMLParseException("Mismatch in number of distributions and taxa specs");
}
try {
final String correction = cal.getAttribute(CORRECTION, EXACT);
final CalibrationPoints.CorrectionType type = correction.equals(EXACT) ? CalibrationPoints.CorrectionType.EXACT : (correction.equals(APPROX) ? CalibrationPoints.CorrectionType.APPROXIMATED : (correction.equals(NONE) ? CalibrationPoints.CorrectionType.NONE : (correction.equals(PEXACT) ? CalibrationPoints.CorrectionType.PEXACT : null)));
if (cal.hasAttribute(CORRECTION) && type == null) {
throw new XMLParseException("correction type == " + correction + "???");
}
final CalibrationPoints calib = new CalibrationPoints(tree, specModel.isYule(), dists, taxa, forParent, userPDF, type);
final SpeciationLikelihood speciationLikelihood = new SpeciationLikelihood(tree, specModel, null, calib);
return speciationLikelihood;
} catch (IllegalArgumentException e) {
throw new XMLParseException(e.getMessage());
}
}
return new SpeciationLikelihood(tree, specModel, excludeTaxa, null);
}
use of dr.evolution.util.Taxon in project beast-mcmc by beast-dev.
the class MsatFullLikelihoodTest method setUp.
public void setUp() throws Exception {
super.setUp();
//taxa
ArrayList<Taxon> taxonList1 = new ArrayList<Taxon>();
Collections.addAll(taxonList1, new Taxon("taxon1"), new Taxon("taxon2"), new Taxon("taxon3"));
Taxa taxa1 = new Taxa(taxonList1);
//msat datatype
Microsatellite msat = new Microsatellite(1, 3);
Patterns msatPatterns = new Patterns(msat, taxa1);
//pattern in the correct code form.
msatPatterns.addPattern(new int[] { 0, 1, 2 });
//create tree
NewickImporter importer = new NewickImporter("(taxon1:7.5,(taxon2:5.3,taxon3:5.3):2.2);");
Tree tree = importer.importTree(null);
//treeModel
TreeModel treeModel = new TreeModel(tree);
//msatsubstModel
AsymmetricQuadraticModel aqm1 = new AsymmetricQuadraticModel(msat, null);
//siteModel
GammaSiteModel siteModel = new GammaSiteModel(aqm1);
//treeLikelihood
treeLikelihood1 = new TreeLikelihood(msatPatterns, treeModel, siteModel, null, null, false, false, true, false, false);
setUpExample2();
setUpExample3();
}
Aggregations