#include <graph/DevianceNode.h>
#include <distributions/Distribution.h>

using std::vector;
using std::set;

DevianceNode::DevianceNode(set<StochasticNode*> const &parameters)
  : DeterministicNode(Index(1))
{
  for (set<StochasticNode*>::const_iterator p = parameters.begin(); 
       p != parameters.end(); ++p) 
    {
      addParent(*p);
      _parameters.push_back(*p);
    }
}

void DevianceNode::forwardSample()
{
  double deviance = 0;
  for (vector<StochasticNode const*>::const_iterator p = _parameters.begin();
       p != _parameters.end(); ++p)
    {
      StochasticNode const *snode = *p;
      deviance -= snode->distribution()->logLikelihood(snode->data, 
						       snode->parameters());
    }
  deviance *= 2;
  this->data.setValue(&deviance, 1);
}


syntax highlighted by Code2HTML, v. 0.9.1