package beast.evolution.tree;
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.tree.coalescent.TreeIntervals;
@Description("Distribution on a tree, typically a prior such as Coalescent or Yule")
public class TreeDistribution extends Distribution {
final public Input<TreeInterface> treeInput = new Input<>("tree", "tree over which to calculate a prior or likelihood");
final public Input<TreeIntervals> treeIntervalsInput = new Input<>("treeIntervals", "Intervals for a phylogenetic beast tree", Validate.XOR, treeInput);
@Override
public List<String> getArguments() {
return null;
}
@Override
public List<String> getConditions() {
return null;
}
@Override
public void sample(State state, Random random) {
}
@Override
protected boolean requiresRecalculation() {
final TreeIntervals ti = treeIntervalsInput.get();
if (ti != null) {
//boolean d = ti.isDirtyCalculation();
//assert d;
assert ti.isDirtyCalculation();
return true;
}
return treeInput.get().somethingIsDirty();
}
/** Indicate that the tree distribution can deal with dated tips in the tree
* Some tree distributions like the Yule prior cannot handle this.
* @return true by default
*/
public boolean canHandleTipDates() {
return true;
}
}