/*
* LikelihoodCore.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.oldevomodel.treelikelihood;
import dr.evomodel.treelikelihood.LikelihoodPartialsProvider;
/**
* LikelihoodCore - An interface describing the core likelihood functions.
*
* @author Andrew Rambaut
* @version $Id: LikelihoodCore.java,v 1.15 2006/08/29 18:07:23 rambaut Exp $
*/
@Deprecated // Switching to BEAGLE
public interface LikelihoodCore extends LikelihoodPartialsProvider {
/**
* initializes partial likelihood arrays.
*/
void initialize(int nodeCount, int patternCount, int matrixCount, boolean integrateCategories);
/**
* cleans up and deallocates arrays.
*/
void finalize() throws java.lang.Throwable;
/**
* Allocates partials for a node
*/
void createNodePartials(int nodeIndex);
/**
* Sets partials for a node
*/
void setNodePartials(int nodeIndex, double[] partials);
/**
* Sets states for a node
*/
void setNodeStates(int nodeIndex, int[] states);
/**
* Sets states for a node and a pattern
* Allocates states for a node
*/
void createNodeStates(int nodeIndex);
/**
* Specify that the matrices for the given node are about to be updated
*
* @param nodeIndex
*/
void setNodeMatrixForUpdate(int nodeIndex);
/**
* Sets probability matrix for a node
*/
void setNodeMatrix(int nodeIndex, int matrixIndex, double[] matrix);
/**
* Specify that the partials for the given node are about to be updated
*
* @param nodeIndex
*/
void setNodePartialsForUpdate(int nodeIndex);
/**
* Set the currently updating node partials from the array...
*
* @param nodeIndex
*/
void setCurrentNodePartials(int nodeIndex, double[] partials);
/**
* Calculates partial likelihoods at a node using a matrixMap.
*
* @param nodeIndex1 the 'child 1' node
* @param nodeIndex2 the 'child 2' node
* @param nodeIndex3 the 'parent' node
*/
void calculatePartials(int nodeIndex1, int nodeIndex2, int nodeIndex3);
/**
* Calculates partial likelihoods at a node using a matrixMap.
*
* @param nodeIndex1 the 'child 1' node
* @param nodeIndex2 the 'child 2' node
* @param nodeIndex3 the 'parent' node
* @param matrixMap a map of which matrix to use for each pattern
*/
void calculatePartials(int nodeIndex1, int nodeIndex2, int nodeIndex3, int[] matrixMap);
/**
* Gets the partials for a particular node.
*
* @param nodeIndex the node
* @param outPartials an array into which the partials will go
*/
public void getPartials(int nodeIndex, double[] outPartials);
/**
* Integrates partials across categories.
*
* @param nodeIndex the node at which to calculate the likelihoods
* @param proportions the proportions of sites in each category
* @param outPartials an array into which the partials will go
*/
void integratePartials(int nodeIndex, double[] proportions, double[] outPartials);
/**
* Calculates pattern log likelihoods at a node.
*
* @param partials the partials used to calculate the likelihoods
* @param frequencies an array of state frequencies
* @param outLogLikelihoods an array into which the log likelihoods will go
*/
void calculateLogLikelihoods(double[] partials, double[] frequencies, double[] outLogLikelihoods);
void setUseScaling(boolean useScaling);
double getLogScalingFactor(int pattern);
boolean arePartialsRescaled();
void getLogScalingFactors(int nodeIndex, double[] buffer);
/**
* Store current state
*/
void storeState();
/**
* Restore the stored state
*/
void restoreState();
}