package dr.evomodelxml.substmodel;
import dr.evomodel.substmodel.FrequencyModel;
import dr.evomodel.substmodel.HKY;
import dr.evomodel.substmodel.NucModelType;
import dr.inference.model.Variable;
import dr.xml.*;
import java.util.logging.Logger;
/**
* @author Alexei Drummond
* @author Andrew Rambaut
*/
public class HKYParser extends AbstractXMLObjectParser {
public static final String KAPPA = "kappa";
public static final String FREQUENCIES = "frequencies";
public String getParserName() {
return NucModelType.HKY.getXMLName();
}
public Object parseXMLObject(XMLObject xo) throws XMLParseException {
Variable kappaParam = (Variable) xo.getElementFirstChild(KAPPA);
FrequencyModel freqModel = (FrequencyModel) xo.getElementFirstChild(FrequencyModelParser.FREQUENCIES);
Logger.getLogger("dr.evomodel").info("Creating HKY substitution model. Initial kappa = " +
kappaParam.getValue(0));
return new HKY(kappaParam, freqModel);
}
//************************************************************************
// AbstractXMLObjectParser implementation
//************************************************************************
public String getParserDescription() {
return "This element represents an instance of the HKY85 " +
"(Hasegawa, Kishino & Yano, 1985) model of nucleotide evolution.";
}
public Class getReturnType() {
return HKY.class;
}
public XMLSyntaxRule[] getSyntaxRules() {
return rules;
}
private final XMLSyntaxRule[] rules = {
new ElementRule(FrequencyModelParser.FREQUENCIES,
new XMLSyntaxRule[]{new ElementRule(FrequencyModel.class)}),
new ElementRule(KAPPA,
new XMLSyntaxRule[]{new ElementRule(Variable.class)})
};
}