/*
* GPSkytrackAnalysisParser.java
*
* Copyright (c) 2002-2015 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.evomodelxml.coalescent;
import dr.evolution.io.Importer;
import dr.evomodel.coalescent.GPSkytrackAnalysis;
import dr.inference.model.Parameter;
//import dr.evomodel.coalescent.GaussianProcessSkytrackLikelihood;
import dr.inference.trace.TraceException;
import dr.util.FileHelpers;
import dr.xml.*;
import java.io.File;
//import java.io.FileWriter;
//import java.io.PrintWriter;
/**
*/
public class GPSkytrackAnalysisParser extends AbstractXMLObjectParser {
public static final String GP_ANALYSIS = "GPAnalysis";
public static final String FILE_NAME = "fileName";
public static final String BURN_IN = "burnIn";
// public static final String HPD_LEVELS = "Confidencelevels";
// public static final String QUANTILES = "useQuantiles";
// public static final String LOG_SPACE = VariableDemographicModelParser.LOG_SPACE;
public static final String N_GRID = "numGridPoints";
// public static final String N_CHANGES = "nChanges";
// public static final String TREE_LOG = "treeOfLoci";
public static final String LOG_FILE_NAME = "logFileName";
private String getElementText(XMLObject xo, String childName) throws XMLParseException {
return xo.getChild(childName).getStringChild(0);
}
public String getParserName() {
return GP_ANALYSIS;
}
public Object parseXMLObject(XMLObject xo) throws XMLParseException {
System.err.println("The Summary Statistics are being created...");
try {
// 10% is brun-in default
final double burnin = xo.getAttribute(BURN_IN, 0.1);
if (burnin < 0) {
throw new XMLParseException("burnIn should be either between 0 and 1 or a positive number");
}
Parameter numGridPoints = new Parameter.Default(0,1);
if (xo.getChild(N_GRID) != null) {
XMLObject cxo = xo.getChild(N_GRID);
numGridPoints = (Parameter) cxo.getChild(Parameter.class);
}
final File log = FileHelpers.getFile(getElementText(xo, LOG_FILE_NAME));
return new dr.evomodel.coalescent.GPSkytrackAnalysis(log,burnin,numGridPoints);
} catch (java.io.IOException ioe) {
throw new XMLParseException(ioe.getMessage());
} catch (Importer.ImportException e) {
throw new XMLParseException(e.toString());
} catch (TraceException e) {
throw new XMLParseException(e.toString());
}
}
//************************************************************************
// AbstractXMLObjectParser implementation
//************************************************************************
public String getParserDescription() {
return "reconstruct population graph from GPSkytrack run.";
}
public Class getReturnType() {
return GPSkytrackAnalysis.class;
}
public XMLSyntaxRule[] getSyntaxRules() {
return rules;
}
private final XMLSyntaxRule[] rules = {
AttributeRule.newDoubleRule(BURN_IN, true, "The number of states (not sampled states, but" +
" actual states) that are discarded from the beginning of the trace and are excluded from " +
"the analysis"),
new ElementRule(LOG_FILE_NAME, String.class, "The name of a BEAST log file"),
new ElementRule(N_GRID, new XMLSyntaxRule[]{
new ElementRule(Parameter.class)
})
};
}