bool DynamicsRegressorGenerator::getModelParameters(VectorDynSize& values)
{
    if( values.size() != this->getNrOfParameters() )
    {
        std::cerr << "[ERROR] error for getModelParameters" << std::endl;
        return false;
    }

    this->pimpl->m_pLegacyGenerator->getModelParameters(this->pimpl->m_parameters);

    Eigen::Map<Eigen::VectorXd>(values.data(),
                                values.size()) =
                                    this->pimpl->m_parameters;

    return true;
}
std::string DynamicsRegressorGenerator::getDescriptionOfParameters(const VectorDynSize& values)
{
    this->pimpl->m_parameters =
        Eigen::Map<const Eigen::VectorXd>(values.data(),
                                          values.size());
    return this->pimpl->m_pLegacyGenerator->getDescriptionOfParameters(this->pimpl->m_parameters);
}
 bool DynamicalSystem::setInitialState(const VectorDynSize &state)
 {
     if (state.size() != m_initialState.size()){
         reportError("DynamicalSystem", "setInitialState", "Wrong initial state dimension.");
         return false;
     }
     m_initialState = state;
     return true;
 }
 bool DynamicalSystem::setControlInput(const VectorDynSize &control)
 {
     if (control.size() != controlSpaceSize()) {
         reportError("DynamicalSystem", "setControlInput", "Wrong control dimension.");
         return false;
     }
     m_controlInput = control;
     return true;
 }
VectorDynSize::VectorDynSize(const VectorDynSize& vec): m_size(vec.size()), m_capacity(vec.capacity())
{
    if( this->m_size == 0 )
    {
        this->m_data = 0;
    }
    else
    {
        this->m_data = new double[this->m_capacity];
        std::memcpy(this->m_data,vec.data(),this->m_capacity*sizeof(double));
    }
}
bool JetsVisualization::setJetsIntensity(const VectorDynSize &jetsIntensity)
{
    if( jetsIntensity.size() != getNrOfJets() ) return false;

    // Inefficient implementation: create a new mesh whenever the intensity are updated
    for(size_t i=0; i < getNrOfJets(); i++)
    {
        drawJet(i,jetsIntensity(i));
    }

    return true;
}
bool DynamicsRegressorGenerator::computeRegressor(MatrixDynSize& regressor, VectorDynSize& known_terms)
{
    if( !this->isValid() )
    {
        return false;
    }

    int ret_value =
        this->pimpl->m_pLegacyGenerator->computeRegressor(this->pimpl->m_regressor,
                                                          this->pimpl->m_knownTerms);

    // \todo TODO write proper header for conversion from/to Eigen
    Eigen::Map<Eigen::Matrix<double, Eigen::Dynamic,Eigen::Dynamic,Eigen::RowMajor> >(regressor.data(),
                                regressor.rows(),
                                regressor.cols()) = this->pimpl->m_regressor;

    Eigen::Map<Eigen::VectorXd>(known_terms.data(),
                                known_terms.size()) = this->pimpl->m_knownTerms;

    return (ret_value == 0);
}