package beast.evolution.likelihood;
import java.util.List;
import java.util.Random;
import beast.core.Description;
import beast.core.Distribution;
import beast.core.Input;
import beast.core.Input.Validate;
import beast.core.State;
import beast.evolution.alignment.Alignment;
import beast.evolution.branchratemodel.BranchRateModel;
import beast.evolution.sitemodel.SiteModelInterface;
import beast.evolution.tree.TreeInterface;
@Description("Generic tree likelihood for an alignment given a generic SiteModel, " +
"a beast tree and a branch rate model")
// Use this as base class to define any non-standard TreeLikelihood.
// Override Distribution.calculatLogP() to make this class functional.
//
// TODO: This could contain a generic traverse() method that takes dirty trees in account.
//
public class GenericTreeLikelihood extends Distribution {
final public Input<Alignment> dataInput = new Input<>("data", "sequence data for the beast.tree", Validate.REQUIRED);
final public Input<TreeInterface> treeInput = new Input<>("tree", "phylogenetic beast.tree with sequence data in the leafs", Validate.REQUIRED);
final public Input<SiteModelInterface> siteModelInput = new Input<>("siteModel", "site model for leafs in the beast.tree", Validate.REQUIRED);
final public Input<BranchRateModel.Base> branchRateModelInput = new Input<>("branchRateModel",
"A model describing the rates on the branches of the beast.tree.");
@Override
public List<String> getArguments() {return null;}
@Override
public List<String> getConditions() {return null;}
@Override
public void sample(State state, Random random) {}
}