package dr.inference.distribution;
import dr.inference.model.*;
import dr.math.distributions.PoissonDistribution;
/**
* Created by maxryandolinskytolkoff on 7/20/16.
*/
public class RowDimensionPoissonPrior extends AbstractModelLikelihood implements MatrixSizePrior {
public RowDimensionPoissonPrior(double untruncatedMean, AdaptableSizeFastMatrixParameter parameter, boolean transpose){
super("");
this.poisson = new PoissonDistribution(untruncatedMean);
this.parameter = parameter;
addVariable(parameter);
this.transpose = transpose;
}
@Override
protected void handleModelChangedEvent(Model model, Object object, int index) {
}
@Override
protected void storeState() {
}
@Override
protected void restoreState() {
}
@Override
protected void acceptState() {
}
@Override
protected void handleVariableChangedEvent(Variable variable, int index, Parameter.ChangeType type) {
}
@Override
public Model getModel() {
return this;
}
@Override
public double getLogLikelihood() {
// System.out.println(poisson.logPdf(parameter.getRowDimension()) - Math.log(1 - Math.exp(-poisson.mean())));
if(!transpose)
return poisson.logPdf(parameter.getRowDimension()) - Math.log(1 - Math.exp(-poisson.mean()));
else
return poisson.logPdf(parameter.getColumnDimension()) - Math.log(1 - Math.exp(-poisson.mean()));
}
@Override
public void makeDirty() {
}
@Override
public double getSizeLogLikelihood() {
return getLogLikelihood();
}
PoissonDistribution poisson;
AdaptableSizeFastMatrixParameter parameter;
boolean transpose;
}