/* * AlloppNetworkPriorModelParser.java * * Copyright (c) 2002-2017 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.evomodel.alloppnet.parsers; import dr.evolution.util.Units; import dr.evomodel.alloppnet.speciation.AlloppNetworkPriorModel; import dr.evoxml.util.XMLUnits; import dr.inference.model.Parameter; import dr.inference.distribution.ParametricDistributionModel; import dr.xml.AbstractXMLObjectParser; import dr.xml.ElementRule; import dr.xml.XMLObject; import dr.xml.XMLParseException; import dr.xml.XMLSyntaxRule; /** * * @author Graham Jones * Date: 01/07/2011 */ /* <alloppNetworkPriorModel id="network.prior.model" units="substitutions" > <eventRate> <parameter id="apspnetwork.prior.eventRate" value="100" lower="0" upper="Infinity" /> </eventRate> <populationScalingFactor> <parameter id="population.scaling.factor" value="0.2" lower="0" upper="Infinity" /> </populationScalingFactor> <tipPopulationDistribution> <gammaDistributionModel> <shape> 4 </shape> <scale> <parameter idref="population.scaling.factor" /> </scale> </gammaDistributionModel> </tipPopulationDistribution> <rootPopulationDistribution> <gammaDistributionModel> <shape> 2 </shape> <scale> <parameter idref="population.scaling.factor" /> </scale> </gammaDistributionModel> </rootPopulationDistribution> <hybridPopulationDistribution> <gammaDistributionModel> <shape> 1 </shape> <scale> <parameter idref="population.scaling.factor" /> </scale> </gammaDistributionModel> </hybridPopulationDistribution> </alloppNetworkPriorModel> */ public class AlloppNetworkPriorModelParser extends AbstractXMLObjectParser { public static final String ALLOPPNETWORKPRIORMODEL = "alloppNetworkPriorModel"; public static final String EVENTRATE = "eventRate"; public static final String POPULATION_SCALING_FACTOR = "populationScalingFactor"; public static final String TIP_POPULATION_DISTRIBUTION = "tipPopulationDistribution"; public static final String ROOT_POPULATION_DISTRIBUTION = "rootPopulationDistribution"; public static final String HYBRID_POPULATION_DISTRIBUTION = "hybridPopulationDistribution"; public String getParserName() { return ALLOPPNETWORKPRIORMODEL; } @Override public Object parseXMLObject(XMLObject xo) throws XMLParseException { final Units.Type units = XMLUnits.Utils.getUnitsAttr(xo); final XMLObject erXo = xo.getChild(EVENTRATE); final Parameter eventrate = (Parameter) erXo.getChild(Parameter.class); final XMLObject psfXo = xo.getChild(POPULATION_SCALING_FACTOR); final Parameter popscalingfactor = (Parameter) psfXo.getChild(Parameter.class); final XMLObject tpdXo = xo.getChild(TIP_POPULATION_DISTRIBUTION); ParametricDistributionModel tippopmodel = (ParametricDistributionModel) tpdXo.getChild(ParametricDistributionModel.class); final XMLObject rpdXo = xo.getChild(ROOT_POPULATION_DISTRIBUTION); ParametricDistributionModel rootpopmodel = (ParametricDistributionModel) rpdXo.getChild(ParametricDistributionModel.class); final XMLObject hpdXo = xo.getChild(HYBRID_POPULATION_DISTRIBUTION); ParametricDistributionModel hybpopmodel = (ParametricDistributionModel) hpdXo.getChild(ParametricDistributionModel.class); return new AlloppNetworkPriorModel(eventrate, popscalingfactor, tippopmodel, rootpopmodel, hybpopmodel, units); } private XMLSyntaxRule[] eventrateRules() { return new XMLSyntaxRule[]{ new ElementRule(Parameter.class) }; } private XMLSyntaxRule[] popscalingfactorRules() { return new XMLSyntaxRule[]{ new ElementRule(Parameter.class) }; } private XMLSyntaxRule[] tippopmodelRules() { return new XMLSyntaxRule[]{ new ElementRule(ParametricDistributionModel.class) }; } private XMLSyntaxRule[] rootpopmodelRules() { return new XMLSyntaxRule[]{ new ElementRule(ParametricDistributionModel.class) }; } private XMLSyntaxRule[] hybpopmodelRules() { return new XMLSyntaxRule[]{ new ElementRule(ParametricDistributionModel.class) }; } @Override public XMLSyntaxRule[] getSyntaxRules() { return new XMLSyntaxRule[]{ XMLUnits.SYNTAX_RULES[0], new ElementRule(EVENTRATE, eventrateRules()), new ElementRule(POPULATION_SCALING_FACTOR, popscalingfactorRules()), new ElementRule(TIP_POPULATION_DISTRIBUTION, tippopmodelRules()), new ElementRule(ROOT_POPULATION_DISTRIBUTION, rootpopmodelRules()), new ElementRule(HYBRID_POPULATION_DISTRIBUTION, hybpopmodelRules()) }; } @Override public String getParserDescription() { return "Model for speciation, extinction, hybridization in allopolyploid network."; } @Override public Class getReturnType() { return AlloppNetworkPriorModel.class; } }