use of dr.evolution.util.Units in project beast-mcmc by beast-dev.
the class RandomLocalYuleModelParser method parseXMLObject.
public Object parseXMLObject(XMLObject xo) throws XMLParseException {
Units.Type units = XMLUnits.Utils.getUnitsAttr(xo);
XMLObject cxo = xo.getChild(BIRTH_RATE);
Parameter brParameter = (Parameter) cxo.getChild(Parameter.class);
cxo = xo.getChild(BIRTH_RATE_INDICATORS);
Parameter indicatorsParameter = (Parameter) cxo.getChild(Parameter.class);
Parameter meanRate = (Parameter) xo.getElementFirstChild(MEAN_RATE);
boolean ratesAsMultipliers = xo.getBooleanAttribute(RATES_AS_MULTIPLIERS);
int dp = xo.getAttribute("dp", 4);
return new RandomLocalYuleModel(brParameter, indicatorsParameter, meanRate, ratesAsMultipliers, units, dp);
}
use of dr.evolution.util.Units in project beast-mcmc by beast-dev.
the class BirthDeathEpidemiologyModelParser method parseXMLObject.
public Object parseXMLObject(XMLObject xo) throws XMLParseException {
final String modelName = xo.getId();
final Units.Type units = XMLUnits.Utils.getUnitsAttr(xo);
final Parameter R0Parameter = (Parameter) xo.getElementFirstChild(R0);
final Parameter recoveryRateParameter = (Parameter) xo.getElementFirstChild(RECOVERY_RATE);
final Parameter samplingProbabiltyParameter = (Parameter) xo.getElementFirstChild(SAMPLING_PROBABILITY);
Parameter origin = null;
if (xo.hasChildNamed(ORIGIN)) {
origin = (Parameter) xo.getElementFirstChild(ORIGIN);
}
Logger.getLogger("dr.evomodel").info("Using epidemiological parameterization of " + getCitationRT());
return new BirthDeathSerialSamplingModel(modelName, R0Parameter, recoveryRateParameter, samplingProbabiltyParameter, origin, units);
}
use of dr.evolution.util.Units in project beast-mcmc by beast-dev.
the class BirthDeathSerialSamplingModelParser method parseXMLObject.
public Object parseXMLObject(XMLObject xo) throws XMLParseException {
final String modelName = xo.getId();
final Units.Type units = XMLUnits.Utils.getUnitsAttr(xo);
boolean hasFinalSample = xo.getAttribute(HAS_FINAL_SAMPLE, false);
final Parameter lambda = (Parameter) xo.getElementFirstChild(LAMBDA);
boolean relativeDeath = xo.hasChildNamed(RELATIVE_MU);
Parameter mu;
if (relativeDeath) {
mu = (Parameter) xo.getElementFirstChild(RELATIVE_MU);
} else {
mu = (Parameter) xo.getElementFirstChild(MU);
}
final Parameter psi = (Parameter) xo.getElementFirstChild(PSI);
// Issue 656: fix p=0
final Parameter p = xo.hasChildNamed(SAMPLE_PROBABILITY) ? (Parameter) xo.getElementFirstChild(SAMPLE_PROBABILITY) : new Parameter.Default(0.0);
Parameter origin = null;
if (xo.hasChildNamed(ORIGIN)) {
origin = (Parameter) xo.getElementFirstChild(ORIGIN);
}
final Parameter r = xo.hasChildNamed(SAMPLE_BECOMES_NON_INFECTIOUS) ? (Parameter) xo.getElementFirstChild(SAMPLE_BECOMES_NON_INFECTIOUS) : new Parameter.Default(0.0);
// r.setParameterValueQuietly(0, 1 - r.getParameterValue(0)); // donot use it, otherwise log is changed improperly
// final Parameter finalTimeInterval = xo.hasChildNamed(FINAL_TIME_INTERVAL) ?
// (Parameter) xo.getElementFirstChild(FINAL_TIME_INTERVAL) : new Parameter.Default(0.0);
Logger.getLogger("dr.evomodel").info(xo.hasChildNamed(SAMPLE_BECOMES_NON_INFECTIOUS) ? getCitationRT() : getCitationPsiOrg());
return new BirthDeathSerialSamplingModel(modelName, lambda, mu, psi, p, relativeDeath, r, hasFinalSample, origin, units);
}
use of dr.evolution.util.Units in project beast-mcmc by beast-dev.
the class NewickParser method parseXMLObject.
public Object parseXMLObject(XMLObject xo) throws XMLParseException {
final Units.Type units = XMLUnits.Utils.getUnitsAttr(xo);
// boolean usingDates = xo.getAttribute(USING_DATES, true);
boolean usingDates = true;
if (xo.hasAttribute(USING_DATES)) {
usingDates = xo.getAttribute(USING_DATES, true);
}
boolean usingHeights = false;
if (xo.hasAttribute(USING_HEIGHTS)) {
usingHeights = xo.getAttribute(USING_HEIGHTS, true);
}
if (usingDates && usingHeights) {
throw new XMLParseException("Unable to use both dates and node heights. Specify value of usingDates attribute.");
}
// else if (!usingDates && !usingHeights) {
// System.out.println("Tree is assumed to be ultrametric");
// }
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < xo.getChildCount(); i++) {
if (xo.getChild(i) instanceof String) {
buffer.append((String) xo.getChild(i));
} else {
throw new XMLParseException("illegal element in newick element");
}
}
java.io.Reader reader = new java.io.StringReader(buffer.toString());
NewickImporter importer = new NewickImporter(reader);
FlexibleTree tree;
try {
tree = (FlexibleTree) importer.importTree(null);
} catch (IOException ioe) {
throw new XMLParseException("error parsing tree in newick element");
} catch (NewickImporter.BranchMissingException bme) {
throw new XMLParseException("branch missing in tree in newick element");
} catch (Importer.ImportException ime) {
throw new XMLParseException("error parsing tree in newick element - " + ime.getMessage());
}
if (tree == null) {
throw new XMLParseException("Failed to read tree");
}
tree.setUnits(units);
for (int i = 0; i < tree.getTaxonCount(); i++) {
FlexibleNode node = (FlexibleNode) tree.getExternalNode(i);
String id = node.getTaxon().getId();
Taxon taxon = null;
XMLObject obj = getStore().get(id);
if (obj != null && obj.getNativeObject() instanceof Taxon) {
taxon = (Taxon) obj.getNativeObject();
}
if (taxon != null) {
node.setTaxon(taxon);
} else {
throw new XMLParseException("unknown taxon, " + id + ", in newick tree");
}
}
if (usingDates) {
// are all the tips just being translated by a fixed amount?
// in which case we can just translate the internal nodes.
double fixedDiff = 0.0;
boolean translateNodes = true;
for (int i = 0; i < tree.getTaxonCount(); i++) {
NodeRef node = tree.getExternalNode(i);
dr.evolution.util.Date date = (dr.evolution.util.Date) tree.getTaxonAttribute(i, dr.evolution.util.Date.DATE);
if (date == null) {
date = (dr.evolution.util.Date) tree.getNodeAttribute(tree.getExternalNode(i), dr.evolution.util.Date.DATE);
}
double height = 0.0;
double nodeHeight = tree.getNodeHeight(node);
if (date != null) {
height = Taxon.getHeightFromDate(date);
}
double diff = height - nodeHeight;
if (i == 0) {
fixedDiff = diff;
} else if (Math.abs(diff - fixedDiff) > 1e-5) {
translateNodes = false;
}
// if (Math.abs(diff) > 1e-8 && (i == 0 || !translateNodes) ) {
//
// System.out.println(" Changing height of node " + tree.getTaxon(node.getNumber()) + " from " + nodeHeight + " to " + height);
tree.setNodeHeight(node, height);
// }
}
if (translateNodes) {
System.out.println(" Changing height of all nodes by " + fixedDiff);
for (int i = 0; i < tree.getInternalNodeCount(); i++) {
NodeRef node = tree.getInternalNode(i);
dr.evolution.util.Date date = (dr.evolution.util.Date) tree.getNodeAttribute(node, dr.evolution.util.Date.DATE);
if (date != null) {
double height = Taxon.getHeightFromDate(date);
tree.setNodeHeight(node, height);
} else if (translateNodes) {
tree.setNodeHeight(node, tree.getNodeHeight(node) + fixedDiff);
}
}
// END: i loop
}
MutableTree.Utils.correctHeightsForTips(tree);
} else if (!usingHeights) {
System.out.println("Tree is assumed to be ultrametric");
// not using dates or heights
for (int i = 0; i < tree.getTaxonCount(); i++) {
final NodeRef leaf = tree.getExternalNode(i);
final double h = tree.getNodeHeight(leaf);
if (h != 0.0) {
double zero = 0.0;
System.out.println(" Changing height of leaf node " + tree.getTaxon(leaf.getNumber()) + " from " + h + " to " + zero);
tree.setNodeHeight(leaf, zero);
}
}
// END: i loop
} else {
System.out.println("Using node heights.");
}
if (xo.hasAttribute(RESCALE_HEIGHT)) {
double rescaleHeight = xo.getDoubleAttribute(RESCALE_HEIGHT);
double scale = rescaleHeight / tree.getNodeHeight(tree.getRoot());
for (int i = 0; i < tree.getInternalNodeCount(); i++) {
NodeRef n = tree.getInternalNode(i);
tree.setNodeHeight(n, tree.getNodeHeight(n) * scale);
}
}
if (xo.hasAttribute(RESCALE_LENGTH)) {
double rescaleLength = xo.getDoubleAttribute(RESCALE_LENGTH);
double scale = rescaleLength / TreeUtils.getTreeLength(tree, tree.getRoot());
for (int i = 0; i < tree.getInternalNodeCount(); i++) {
NodeRef n = tree.getInternalNode(i);
tree.setNodeHeight(n, tree.getNodeHeight(n) * scale);
}
}
if (xo.hasAttribute(SCALE)) {
double scale = xo.getDoubleAttribute(SCALE);
if (scale <= 0) {
throw new IllegalArgumentException("Scale must be greater than 0.");
}
for (int i = 0; i < tree.getInternalNodeCount(); i++) {
NodeRef n = tree.getInternalNode(i);
tree.setNodeHeight(n, tree.getNodeHeight(n) * scale);
}
}
// System.out.println("Constructed newick tree = " + Tree.Utils.uniqueNewick(tree, tree.getRoot()));
return tree;
}
use of dr.evolution.util.Units in project beast-mcmc by beast-dev.
the class SimpleTreeParser method parseXMLObject.
public Object parseXMLObject(XMLObject xo) throws XMLParseException {
Units.Type units = XMLUnits.Utils.getUnitsAttr(xo);
boolean usingDates = xo.getAttribute(USING_DATES, false);
SimpleNode root = (SimpleNode) xo.getChild(SimpleNode.class);
if (root == null) {
throw new XMLParseException("node element missing from tree");
}
SimpleTree tree = new SimpleTree(root);
if (usingDates) {
dr.evolution.util.Date mostRecent = null;
for (int i = 0; i < tree.getTaxonCount(); i++) {
dr.evolution.util.Date date = (dr.evolution.util.Date) tree.getTaxonAttribute(i, DATE);
if (date == null) {
date = (dr.evolution.util.Date) tree.getNodeAttribute(tree.getExternalNode(i), DATE);
}
if (date != null && ((mostRecent == null) || date.after(mostRecent))) {
mostRecent = date;
}
}
for (int i = 0; i < tree.getInternalNodeCount(); i++) {
dr.evolution.util.Date date = (dr.evolution.util.Date) tree.getNodeAttribute(tree.getInternalNode(i), DATE);
if (date != null && ((mostRecent == null) || date.after(mostRecent))) {
mostRecent = date;
}
}
if (mostRecent == null) {
throw new XMLParseException("no date elements in tree (and usingDates attribute set)");
}
TimeScale timeScale = new TimeScale(mostRecent.getUnits(), true, mostRecent.getAbsoluteTimeValue());
for (int i = 0; i < tree.getTaxonCount(); i++) {
dr.evolution.util.Date date = (dr.evolution.util.Date) tree.getTaxonAttribute(i, DATE);
if (date == null) {
date = (dr.evolution.util.Date) tree.getNodeAttribute(tree.getExternalNode(i), DATE);
}
if (date != null) {
double height = timeScale.convertTime(date.getTimeValue(), date);
tree.setNodeHeight(tree.getExternalNode(i), height);
}
}
for (int i = 0; i < tree.getInternalNodeCount(); i++) {
dr.evolution.util.Date date = (dr.evolution.util.Date) tree.getNodeAttribute(tree.getInternalNode(i), DATE);
if (date != null) {
double height = timeScale.convertTime(date.getTimeValue(), date);
tree.setNodeHeight(tree.getInternalNode(i), height);
}
}
MutableTree.Utils.correctHeightsForTips(tree);
}
tree.setUnits(units);
return tree;
}
Aggregations