/* * BranchLikelihood.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.evomodel.branchmodel.lineagespecific; import java.util.*; import dr.evomodel.treelikelihood.BeagleTreeLikelihood; import dr.evomodel.branchratemodel.CountableBranchCategoryProvider; import dr.evomodel.tree.TreeModel; import dr.inference.loggers.LogColumn; import dr.inference.loggers.NumberColumn; import dr.inference.model.CompoundModel; import dr.inference.model.CompoundParameter; import dr.inference.model.Likelihood; import dr.inference.model.Model; import dr.inference.model.Parameter; @SuppressWarnings("serial") public class BranchLikelihood implements Likelihood { // Constructor fields // private PatternList patternList; private TreeModel treeModel; // private BranchModel branchModel; // private SiteRateModel siteRateModel; // private FrequencyModel freqModel; // private BranchRateModel branchRateModel; private BeagleTreeLikelihood likelihood; private CountableBranchCategoryProvider categoriesProvider; private Parameter categoriesParameter; private CompoundParameter uniqueParameters; private CountableRealizationsParameter allParameters; private final CompoundModel compoundModel = new CompoundModel( "compoundModel"); public BranchLikelihood( // PatternList patternList, // TreeModel treeModel, // // BranchModel branchModel, // // SiteRateModel siteRateModel, // // FrequencyModel freqModel, // // BranchRateModel branchRateModel, // BeagleTreeLikelihood likelihood, Parameter categoriesParameter, CompoundParameter uniqueParameters, CountableRealizationsParameter allParameters ) { // this.patternList = patternList; // this.treeModel = treeModel; // this.branchModel = branchModel; // this.siteRateModel = siteRateModel; // this.freqModel = freqModel; // this.branchRateModel = branchRateModel; this.treeModel = treeModel; this.categoriesParameter = categoriesParameter; this.uniqueParameters = uniqueParameters; this.allParameters = allParameters; this.categoriesProvider = new CountableBranchCategoryProvider.IndependentBranchCategoryModel( this.treeModel, categoriesParameter); }// END: Constructor @Override public double getLogLikelihood() { double loglike = 0; for (int i = 0; i < categoriesParameter.getDimension(); i++) { int category = (int) categoriesParameter.getParameterValue(i); double value = uniqueParameters.getParameterValue(category); allParameters.setParameterValue(i, value); }//END: i loop likelihood.makeDirty(); loglike = likelihood.getLogLikelihood(); return loglike; }// END: getLogLikelihood public double getLogLikelihood(int index) { // likelihood.getBranchModel().getSubstitutionModels().get(index).getVariable(0).setValue(index, value) double tmp1 = likelihood.getLogLikelihood(); int category = (int) categoriesParameter.getParameterValue(index); double value = uniqueParameters.getParameterValue(category); allParameters.setParameterValue(index, value); likelihood.makeDirty(); double tmp2 = likelihood.getLogLikelihood(); return tmp2-tmp1; } @Override public LogColumn[] getColumns() { return new dr.inference.loggers.LogColumn[] { new LikelihoodColumn( getId() == null ? "likelihood" : getId()) }; }// END: getColumns @Override public String getId() { return""; }// END: getId @Override public void setId(String id) { }// END: setId @Override public Model getModel() { return compoundModel; } @Override public void makeDirty() { }// END: makeDirty @Override public String prettyName() { return Abstract.getPrettyName(this); }// END: prettyName @Override public Set<Likelihood> getLikelihoodSet() { return new HashSet<Likelihood>(Arrays.asList(this)); } @Override public boolean isUsed() { return true; }// END: isUsed @Override public void setUsed() { }// END: setUsed @Override public boolean evaluateEarly() { return false; } private class LikelihoodColumn extends NumberColumn { public LikelihoodColumn(String label) { super(label); }// END: Constructor public double getDoubleValue() { return getLogLikelihood(); } }// END: LikelihoodColumn class // private LinkedList<Likelihood> getBranchLikelihoods() { // // // linked list preserves order // LinkedList<Likelihood> loglikes = new LinkedList<Likelihood>(); // // for (NodeRef branch : treeModel.getNodes()) { // // if (!treeModel.isRoot(branch)) { // // int branchCategory = categoriesProvider.getBranchCategory( // treeModel, branch); // int index = (int) categoriesParameter // .getParameterValue(branchCategory); // // Likelihood branchLikelihood = uniqueLikelihoods.get(index); // // loglikes.add(branchLikelihood); // compoundModel.addModel(branchLikelihood.getModel()); // // } // }// END: branch loop // // return loglikes; // }// END: getBranchLikelihoods }// END: class