#include #include #include #include #include #include #include #include using std::vector; RealSliceSampler::RealSliceSampler(StochasticNode *node, Graph const &graph, double width, long maxwidth) : Slicer(vector(1,node), graph, width, maxwidth) { } bool RealSliceSampler::canSample(StochasticNode const *node, Graph const &graph) { return (!node->distribution()->isDiscreteValued() && node->data.length() == 1 && node->distribution()->df(node->parameters()) == 1); } double RealSliceSampler::value() { return *nodes().front()->data.value(); } void RealSliceSampler::setValue(double value) { nodes().front()->data.setValue(value, 0); vector const &dc = deterministicChildren(); for (vector::const_iterator i(dc.begin()); i != dc.end(); ++i) { (*i)->forwardSample(); } } double RealSliceSampler::lowerLimit() { StochasticNode const *node = nodes().front(); return node->distribution()->lowerSupport(0, node->parameters()); } double RealSliceSampler::upperLimit() { StochasticNode const *node = nodes().front(); return node->distribution()->upperSupport(0, node->parameters()); } void RealSliceSampler::update() { updateStep(); }