/* * File BooleanParameter.java * * Copyright (C) 2010 Joseph Heled jheled@gmail.com * * This file is part of BEAST2. * 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 beast.core.parameter; import java.io.PrintStream; import beast.core.Description; import beast.core.util.Log; /** * @author Joseph Heled */ @Description("A Boolean-valued parameter represents a value (or array of values if the dimension is larger than one) " + "in the state space that can be changed by operators.") public class BooleanParameter extends Parameter.Base<java.lang.Boolean> { public BooleanParameter() { m_fUpper = true; } public BooleanParameter(Boolean[] values) { super(values); m_fUpper = true; } /** * Constructor used by Input.setValue(String) * */ public BooleanParameter(String value) { init(value, 1); m_fUpper = true; } @Override Boolean getMax() { return true; } @Override Boolean getMin() { return false; } /** Valuable implementation follows **/ /** * we need this here, because the base implementation (public T getValue()) fails * for some reason */ @Override public Boolean getValue() { return values[0]; } @Override public double getArrayValue() { return (values[0] ? 1 : 0); } @Override public double getArrayValue(int value) { return (values[value] ? 1 : 0); } /** * Loggable implementation follows * */ @Override public void log(int sampleNr, PrintStream out) { BooleanParameter var = (BooleanParameter) getCurrent(); int valueCount = var.getDimension(); for (int i = 0; i < valueCount; i++) { // Output 0/1 for tracer out.print((var.getValue(i) ? '1' : '0') + "\t"); } } /** * StateNode methods * */ @Override public int scale(double scale) { // nothing to do Log.warning.println("Attempt to scale Boolean parameter " + getID() + " has no effect"); return 0; } @Override void fromXML(int dimension, String lower, String upper, String[] valueStrings) { values = new Boolean[dimension]; for (int i = 0; i < valueStrings.length; i++) { values[i] = Boolean.parseBoolean(valueStrings[i]); } } }