ParameterList SubstitutionProcessCollectionMember::getNonDerivableParameters() const
{
  ParameterList pl = getSubstitutionModelParameters(true);
  pl.includeParameters(getRootFrequenciesParameters(true));
  pl.includeParameters(getRateDistributionParameters(true));

  // patch, to be fixed properly later
  pl.includeParameters(getBranchLengthParameters(true));

  return pl;
}
ParameterList SetOfAbstractPhyloLikelihood::getRootFrequenciesParameters() const
{
  ParameterList pl;
  for (size_t i=0; i<nPhylo_.size(); i++)
    pl.includeParameters(getAbstractPhyloLikelihood(nPhylo_[i])->getRootFrequenciesParameters());

  return pl;
}
ParameterList SetOfAbstractPhyloLikelihood::getSubstitutionModelParameters() const
{
  ParameterList pl;
  for (size_t i=0; i<nPhylo_.size(); i++)
    pl.includeParameters(getAbstractPhyloLikelihood(nPhylo_[i])->getSubstitutionModelParameters());

  return pl;
}
ParameterList SubstitutionProcessCollectionMember::getSubstitutionModelParameters(bool independent) const
{
  ParameterList pl;

  // Then we update all models in the set:
  std::map<size_t, std::vector<int> >::const_iterator it;
  for (it = modelToNodes_.begin(); it != modelToNodes_.end(); it++)
  {
    pl.includeParameters(pSubProColl_->getSubstitutionModelParameters(it->first, independent));
  }

  return pl;
}