Search in sources :

Example 36 with Units

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);
}
Also used : RandomLocalYuleModel(dr.evomodel.speciation.RandomLocalYuleModel) Parameter(dr.inference.model.Parameter) Units(dr.evolution.util.Units) XMLUnits(dr.evoxml.util.XMLUnits)

Example 37 with Units

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);
}
Also used : BirthDeathSerialSamplingModel(dr.evomodel.speciation.BirthDeathSerialSamplingModel) Parameter(dr.inference.model.Parameter) Units(dr.evolution.util.Units) XMLUnits(dr.evoxml.util.XMLUnits)

Example 38 with 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);
}
Also used : BirthDeathSerialSamplingModel(dr.evomodel.speciation.BirthDeathSerialSamplingModel) Parameter(dr.inference.model.Parameter) Units(dr.evolution.util.Units) XMLUnits(dr.evoxml.util.XMLUnits)

Example 39 with 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;
}
Also used : NewickImporter(dr.evolution.io.NewickImporter) Importer(dr.evolution.io.Importer) NewickImporter(dr.evolution.io.NewickImporter) Taxon(dr.evolution.util.Taxon) IOException(java.io.IOException) Units(dr.evolution.util.Units) XMLUnits(dr.evoxml.util.XMLUnits)

Example 40 with Units

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;
}
Also used : SimpleTree(dr.evolution.tree.SimpleTree) TimeScale(dr.evolution.util.TimeScale) Units(dr.evolution.util.Units) XMLUnits(dr.evoxml.util.XMLUnits) SimpleNode(dr.evolution.tree.SimpleNode)

Aggregations

Units (dr.evolution.util.Units)70 XMLUnits (dr.evoxml.util.XMLUnits)65 Parameter (dr.inference.model.Parameter)62 TreeModel (dr.evomodel.tree.TreeModel)4 Date (dr.evolution.util.Date)3 MultiEpochExponential (dr.evolution.coalescent.MultiEpochExponential)2 ConstantPopulationSizeModel (dr.evomodel.coalescent.ConstantPopulationSizeModel)2 ExponentialPopulationSizeModel (dr.evomodel.coalescent.ExponentialPopulationSizeModel)2 BirthDeathGernhard08Model (dr.evomodel.speciation.BirthDeathGernhard08Model)2 BirthDeathSerialSamplingModel (dr.evomodel.speciation.BirthDeathSerialSamplingModel)2 TreePriorParameterizationType (dr.app.beauti.types.TreePriorParameterizationType)1 TreePriorType (dr.app.beauti.types.TreePriorType)1 ExponentialExponential (dr.evolution.coalescent.ExponentialExponential)1 ExponentialGrowth (dr.evolution.coalescent.ExponentialGrowth)1 Importer (dr.evolution.io.Importer)1 NewickImporter (dr.evolution.io.NewickImporter)1 SimpleNode (dr.evolution.tree.SimpleNode)1 SimpleTree (dr.evolution.tree.SimpleTree)1 Tree (dr.evolution.tree.Tree)1 Taxon (dr.evolution.util.Taxon)1