/* * LinkedParameterComponentOptions.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.app.beauti.components.linkedparameters; import dr.app.beauti.options.*; import dr.app.beauti.priorsPanel.PriorsPanel; import dr.app.beauti.types.PriorScaleType; import dr.app.beauti.types.PriorType; import java.util.*; /** * @author Andrew Rambaut * @author Marc A. Suchard * @version $Id$ */ public class LinkedParameterComponentOptions implements ComponentOptions { private static final long serialVersionUID = 1L; public LinkedParameterComponentOptions(final BeautiOptions options) { this.options = options; linkedParameterMap = new HashMap<Parameter, LinkedParameter>(); argumentParameterMap = new HashMap<Parameter, LinkedParameter>(); } public void createParameters(final ModelOptions modelOptions) { // Do nothing; this is only called at launch } public void selectParameters(final ModelOptions modelOptions, final List<Parameter> params) { for (LinkedParameter linkedParameter : getLinkedParameterList()) { params.add(linkedParameter.getArgumentParameter()); } } public void selectStatistics(final ModelOptions modelOptions, final List<Parameter> stats) { // No statistics } public void selectOperators(final ModelOptions modelOptions, final List<Operator> ops) { for (LinkedParameter linkedParameter : getLinkedParameterList()) { ops.add(linkedParameter.getArgumentOperator()); } } public boolean nameExits(String name) { boolean found = false; if (options.parameterExists(name)) { return true; } for (LinkedParameter linkedParameter : getLinkedParameterList()) { if (linkedParameter.getName().equalsIgnoreCase(name)) { found = true; break; } } return found; } public LinkedParameter createLinkedParameter(String name, List<Parameter> parameterList) { Parameter sourceParameter = parameterList.get(0); Parameter newParameter = options.createDuplicate(name, "Linked parameter", sourceParameter); Operator sourceOperator = options.getOperator(sourceParameter); Operator newOperator = options.createDuplicate(name, "Linked parameter", newParameter, sourceOperator); LinkedParameter linkedParameter = new LinkedParameter(name, newParameter, newOperator, this); return linkedParameter; } public void setDependentParameters(LinkedParameter linkedParameter, List<Parameter> parameterList) { // remove any old links to this linked parameter. removeDependentParameters(linkedParameter); // add new links back for (Parameter parameter : parameterList) { linkedParameterMap.put(parameter, linkedParameter); parameter.isLinked = true; parameter.linkedName = linkedParameter.getName(); } argumentParameterMap.put(linkedParameter.getArgumentParameter(), linkedParameter); } public void removeDependentParameters(LinkedParameter linkedParameter) { List<Parameter> toRemove = new ArrayList<Parameter>(); for (Parameter key : linkedParameterMap.keySet()) { if (linkedParameterMap.get(key) == linkedParameter) { toRemove.add(key); } } for (Parameter parameter : toRemove) { removeDependentParameter(parameter); } } public void removeDependentParameter(Parameter parameter) { linkedParameterMap.remove(parameter); parameter.isLinked = false; parameter.linkedName = null; } public Collection<LinkedParameter> getLinkedParameterList() { return new LinkedHashSet<LinkedParameter>(linkedParameterMap.values()); } public LinkedParameter getLinkedParameter(Parameter parameter) { return linkedParameterMap.get(parameter); } public LinkedParameter getLinkedParameterForArgument(Parameter parameter) { return argumentParameterMap.get(parameter); } public List<Parameter> getDependentParameters(LinkedParameter linkedParameter) { List<Parameter> parameters = new ArrayList<Parameter>(); for (Parameter parameter : linkedParameterMap.keySet()) { if (linkedParameterMap.get(parameter) == linkedParameter) { parameters.add(parameter); } } return parameters; } public boolean isEmpty() { return linkedParameterMap.isEmpty(); } public boolean isArgumentParameter(Parameter parameter) { return argumentParameterMap.containsKey(parameter); } public boolean isDependentParameter(Parameter parameter) { return linkedParameterMap.containsKey(parameter); } final private BeautiOptions options; final private Map<Parameter, LinkedParameter> linkedParameterMap; final private Map<Parameter, LinkedParameter> argumentParameterMap; }