package dr.inferencexml.distribution; import dr.inference.distribution.DistributionLikelihood; import dr.inference.model.Parameter; import dr.inference.model.TruncatedDistributionLikelihood; import dr.xml.*; /** * @author Max Tolkoff */ public class TruncatedDistributionLikelihoodParser extends AbstractXMLObjectParser { public static final String TRUNCATED_DISTRIBUTION_LIKELIHOOD = "truncatedDistributionLikelihood"; public static final String LOW = "low"; public static final String HIGH = "high"; @Override public String getParserName() { return TRUNCATED_DISTRIBUTION_LIKELIHOOD; } @Override public Object parseXMLObject(XMLObject xo) throws XMLParseException { DistributionLikelihood likelihood = (DistributionLikelihood) xo.getChild(DistributionLikelihood.class); Parameter low; Parameter high; if(xo.getChild(LOW) != null){ low = (Parameter) xo.getChild(LOW).getChild(Parameter.class); } else{ low = new Parameter.Default("low", Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); } if(xo.getChild(HIGH) != null){ high = (Parameter) xo.getChild(HIGH).getChild(Parameter.class); } else{ high = new Parameter.Default("high", Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); } return new TruncatedDistributionLikelihood(likelihood, low, high); } @Override public XMLSyntaxRule[] getSyntaxRules() { return rules; } @Override public String getParserDescription() { return "Produces a truncated distribution likelihood"; } @Override public Class getReturnType() { return TruncatedDistributionLikelihood.class; } private final XMLSyntaxRule[] rules = { new ElementRule(DistributionLikelihood.class), new ElementRule(LOW, new XMLSyntaxRule[]{ new ElementRule(Parameter.class) }, true), new ElementRule(HIGH, new XMLSyntaxRule[]{ new ElementRule(Parameter.class) }, true), }; }