package beast.math.distributions;
import org.apache.commons.math.distribution.ChiSquaredDistributionImpl;
import org.apache.commons.math.distribution.ContinuousDistribution;
import beast.core.Description;
import beast.core.Input;
import beast.core.parameter.IntegerParameter;
@Description("Chi square distribution, f(x; k) = \\frac{1}{2^{k/2}Gamma(k/2)} x^{k/2-1} e^{-x/2} " +
"If the input x is a multidimensional parameter, each of the dimensions is considered as a " +
"separate independent component.")
public class ChiSquare extends ParametricDistribution {
final public Input<IntegerParameter> dfInput = new Input<>("df", "degrees if freedin, defaults to 1");
static org.apache.commons.math.distribution.ChiSquaredDistribution m_dist = new ChiSquaredDistributionImpl(1);
@Override
public void initAndValidate() {
refresh();
}
/**
* make sure internal state is up to date *
*/
@SuppressWarnings("deprecation")
void refresh() {
int dF;
if (dfInput.get() == null) {
dF = 1;
} else {
dF = dfInput.get().getValue();
if (dF <= 0) {
dF = 1;
}
}
m_dist.setDegreesOfFreedom(dF);
}
@Override
public ContinuousDistribution getDistribution() {
refresh();
return m_dist;
}
} // class ChiSquare