Example #1
0
void RddtClust::doHeatmap(){
    using namespace Rcpp;
    XmdvToolMainWnd* m_mwd = this->m_rddtOp->m_pm->getMainWnd();
    RInside r = m_mwd->getRinstance();
    int dims = this->m_selected.size();
    if(dims==0)
        return;
    //m_colSelected.clear();
    NumericVector nvSelected(dims);
    for(int i = 0; i<dims; i++){
        nvSelected[i] = m_selected[i];
        //this->m_colSelected.push_back(false);
    }
    r["selected"] = nvSelected;

    // for heatmap view; this applies to any similarity metrics
    std::string clustOrdcmd =
            "selected<-as.integer(selected)+1;\n" //R index starts from 1;
            "seldist <- distances[selected,selected];\n"
            //"sdist<-apply(seldist,1,sort);\n"
            "seldist";
    SEXP evals = r.parseEval(clustOrdcmd);
    //NumericVector rClustOrd(evals);

    //evals = r.parseEval(paramValCmd);
    NumericMatrix rParamVal(evals);
    m_paraMtx.clear();
    for(int i = 0; i<dims; i++){
        for(int j = 0; j<dims; j++){
            double v = rParamVal(i,j);
            this->m_paraMtx.push_back(v);
        }
    }


    std::string ordcmd =
            "ordidx <- apply(seldist,1,order);\n"
            "ordidx-1";
    evals = r.parseEval(ordcmd);
    NumericMatrix rOrd(evals);
    this->m_paraOrdMtx.clear();
    for(int i = 0; i<dims; i++){
        for(int j = 0; j<dims; j++){
            int v = rOrd(i,j);
            this->m_paraOrdMtx.push_back(v);
        }
    }

    /*this->m_dimOrd.clear();
    for(int i=0; i<dims; i++){
        int ord = (int)(rClustOrd[i]);
        m_dimOrd.push_back(ord);
    }*/
}
Example #2
0
void td_r_invoke1(td_val_t *out, char *fname, td_val_t *arg)
{
  SEXP ans;
  string arg_name = 
    r_env.parseEval("paste(sample(letters, 10, replace=TRUE), collapse='')");
  r_env[arg_name] = from_td_val(arg);
  r_env.parseEval( (string(fname) + "(" + arg_name + ")").c_str(), ans);
  r_env.parseEvalQ(string("rm(") + arg_name + ")");
  R_PreserveObject(ans);
  to_td_val(out, ans);
}
Example #3
0
void td_r_invokeGraph2(graph_t *out, char *fname, graph_t *arg, int k)
{
  char str[255];
  derived_graph_and_annotation_t ret;
  SEXP ans;
  r_env["m"] = graph_to_dgRMatrix(*arg);
  r_env["k"] = k;
  sprintf(str, "%s(m, k)", fname);
  r_env.parseEval(str, ans);
  r_env.parseEvalQ("rm(\"m\", \"k\")");
  List l(ans);
  ret.graph = SEXP_to_graph2(l["graph"], *out);
  ret.cluster_assignments = copy_to_c_type<IntegerVector>(l["clusters"]);
}
Example #4
0
void td_r_eval(td_val_t *out, char *str)
{
  SEXP ans;
  r_env.parseEval(str, ans);
  // WS: I decree by general hack, for now this will be void
  //to_td_val(out, ans);
}
Example #5
0
// Propose, evaluate and accept based on temperature
// Returns 1 if accepted, 0 if rejected
int MLST::update(double temperature)
{
   int accepted = 0;

   // Proposal
   int replace_idx = mlst_index(generator);
   int replaced_gene = _mlst[replace_idx];

   int new_gene = rand_gene(generator);
   while (new_gene == replaced_gene)
   {
      new_gene = rand_gene(generator);
   }

   _mlst[replace_idx] = new_gene;
   std::sort(_mlst.begin(), _mlst.end());

   // Calculate distance
   string mlst_genes
   double new_dist = _R.parseEval("tree_metric()");

   // Decide whether to accept
   if (new_dist < _distance)
   {
      _distance = new_dist;
      accepted = 1;
   }

   return accepted;
}
Example #6
0
void RddtClust::getDimData(DoubleVector& dimData, int idx){
    using namespace Rcpp;
    XmdvToolMainWnd* m_mwd = this->m_rddtOp->m_pm->getMainWnd();
    RInside r = m_mwd->getRinstance();
    //qDebug()<<"idx qt "<<idx;
    r["currentDim"] = idx;

    std::string cmd = "currentDim <- as.integer(currentDim)+1;\n"
            //"print(currentDim);\n"
            "dimData <- M[,currentDim];\n"
            "dimData";
    SEXP evals = r.parseEval(cmd);
    NumericVector rDimData(evals);

    dimData.clear();
    for(int i = 0; i< rDimData.length(); i++){
        dimData.push_back(rDimData[i]);
    }
}
Example #7
0
void RddtClust::doOutliers(){
    using namespace Rcpp;
    XmdvToolMainWnd* m_mwd = this->m_rddtOp->m_pm->getMainWnd();
    RInside r = m_mwd->getRinstance();
    int dims = this->m_selected.size();
    if(dims<2)
        return;
    //int numSelected = this->m_selected.size();
    NumericVector nvSelected(dims);
    for(int i = 0; i<dims; i++){
        nvSelected[i] = m_selected[i];
    }
    r["selected"] = nvSelected;

    std::string rankcmd = "vars<-apply(M[,selected],2,sd);\n"
            "vars<-as.matrix(vars);\n"
            "rownames(vars)<-1:nrow(vars);\n"
            "vars<-as.matrix(vars[order(vars[,1],decreasing=TRUE),]);\n"
            "as.numeric(rownames(vars))-1"; //order in r starts from 0;

    SEXP evals =  r.parseEval(rankcmd);
    NumericVector rDimRank(evals);

    //ranking scores;
    std::string scorecmd="as.numeric(vars[,1])";
    evals = r.parseEval(scorecmd);
    NumericVector rScoreMtx(evals);

    //save dimension statistics: rank order, rank score and heatmap order;
    this->m_order.clear();
   // this->m_scores.clear();
    for(int i=0; i<dims; i++){
        int tmp = ((int)(rDimRank[i]));
        //this->m_dimRank;
        m_order.push_back(tmp);
       // double score = rScoreMtx[i];
        //m_scores.push_back(score);
    }
}
Example #8
0
void RddtClust::doCenter(){
    using namespace Rcpp;
    XmdvToolMainWnd* m_mwd = this->m_rddtOp->m_pm->getMainWnd();
    RInside r = m_mwd->getRinstance();
    int dims = this->m_selected.size();

    int numSelected = this->m_selected.size();

    //no need for single element reordering;
    if(numSelected<2)
        return;
    NumericVector nvSelected(numSelected);
    for(int i = 0; i<numSelected; i++){
        nvSelected[i] = m_selected[i];
    }
    r["selected"] = nvSelected;
     //cmd = ;
    //r.parseEval(cmd);
    if(m_selected.size()<=1){
        assert(m_selected.size()>1);
    }
    std::string rcmd = "selected<-as.integer(selected)+1;\n"  //R index starts from 1;
            "seldist <- distances[selected,selected];\n"
            //"print(distances);\n"
            "centroid <- colSums(seldist);\n"
            "ord<-as.vector(order(centroid));\n"
            "ord-1";
    SEXP evals = r.parseEval(rcmd);
    NumericVector rCntrdOrder(evals);

    this->m_order.clear();
    //this->m_scores.clear();
    for(int i=0; i<dims; i++){
        int tmp = ((int)(rCntrdOrder[i]));
        m_order.push_back(tmp);
    }
    rcmd = "max(as.dist(seldist));\n";
    evals = r.parseEval(rcmd);
    m_worstFit = Rcpp::as<double>(evals);

    rcmd = "min(as.dist(seldist));\n";
    evals = r.parseEval(rcmd);
    m_bestFit = Rcpp::as<double>(evals);

    rcmd = "mean(as.dist(seldist));\n";
    evals = r.parseEval(rcmd);
    m_fitConsistency =  Rcpp::as<double>(evals);

    rcmd = //"print(seldist);\n"
            "max(seldist[,ord[1]]);\n";
    evals = r.parseEval(rcmd);
    m_fitRadius = Rcpp::as<double>(evals);
}
Example #9
0
void td_r_invoke0(td_val_t *out, char *fname)
{
  SEXP ans;
  r_env.parseEval((string(fname) + "()").c_str(), ans);
  to_td_val(out, ans);
}
Example #10
0
BpdeMainWindow::BpdeMainWindow(RInside& R, const QString& sourceFile, QObject *parent)
    : R(R),
    sourceFile(sourceFile), x(), y(), H(), solver(NULL)
{
    tempfile = QString::fromStdString(Rcpp::as<std::string>(R.parseEval("tfile <- tempfile()")));
    svgfile = QString::fromStdString(Rcpp::as<std::string>(R.parseEval("sfile <- tempfile()")));

    QWidget *window = new QWidget;
    window->setWindowTitle("BpdeGUI");
    setCentralWidget(window);

    QGroupBox *runParameters = new QGroupBox("Параметры запуска");
    openMPEnabled = new QRadioButton("&OpenMP");
    openClEnabled = new QRadioButton("&OpenCL");

    openMPEnabled->setChecked(true);

    connect(openMPEnabled, SIGNAL(clicked()), this, SLOT(loadSource()));
    connect(openClEnabled, SIGNAL(clicked()), this, SLOT(loadSource()));

    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(openMPEnabled);
    vbox->addWidget(openClEnabled);


    QLabel *threadsLabel = new QLabel("Количество потоков");
    threadsLineEdit = new QLineEdit("4");
    QHBoxLayout *threadNumber = new QHBoxLayout;
    threadNumber->addWidget(threadsLabel);
    threadNumber->addWidget(threadsLineEdit);

    QHBoxLayout *deviceLayout = new QHBoxLayout;
    QLabel *deviceLabel = new QLabel("Устройство");
    deviceComboBox = new QComboBox();

    scanDevices();
    for (std::vector<cl::Device>::iterator it = devices.begin(); it != devices.end(); it++)
        deviceComboBox->addItem((*it).getInfo<CL_DEVICE_NAME>().c_str());

    connect(deviceComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(loadSource()));

    deviceLayout->addWidget(deviceLabel);
    deviceLayout->addWidget(deviceComboBox);

    QHBoxLayout* runLayout = new QHBoxLayout;
    runButton = new QPushButton("Начать вычисления", this);
    qDebug() << "Connect : " <<
    connect(runButton, SIGNAL(clicked()), this, SLOT(solve()));
    runLayout->addWidget(runButton);

    QVBoxLayout* ulLayout = new QVBoxLayout;
    ulLayout->addLayout(vbox);
    ulLayout->addLayout(threadNumber);
    ulLayout->addLayout(deviceLayout);
    ulLayout->addLayout(runLayout);

    runParameters->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
    runParameters->setLayout(ulLayout);

    QButtonGroup *kernelGroup = new QButtonGroup;
    kernelGroup->addButton(openMPEnabled, 0);
    kernelGroup->addButton(openClEnabled, 1);

    QGroupBox *solveParamBox = new QGroupBox("Настройки вычислительного метода");

    QHBoxLayout *iterationsLayout = new QHBoxLayout;
    QHBoxLayout *stepLayout = new QHBoxLayout;
    QLabel *sourceFileLabel = new QLabel("SourceFile");
    sourceFileEdit = new QLineEdit(sourceFile);
    iterationsEdit = new QLineEdit("10000");
    stepEdit = new QLineEdit("3600");
    QLabel *iterationsLabel = new QLabel("Итерации");
    QLabel *stepLabel = new QLabel("Шаг            ");
    QHBoxLayout *exportLayout = new QHBoxLayout;
    exportImage = new QPushButton("Экспорт изотерм");
    export3D = new QPushButton("Экспорт 3D модели");
    connect(exportImage, SIGNAL(clicked()), this, SLOT(exportIsoterms()));
    connect(export3D, SIGNAL(clicked()), this, SLOT(export3DModel()));

    iterationsLayout->addWidget(iterationsLabel);
    iterationsLayout->addWidget(iterationsEdit);
    stepLayout->addWidget(stepLabel);
    stepLayout->addWidget(stepEdit);

    exportLayout->addWidget(exportImage);
    exportLayout->addWidget(export3D);

    svg = new QSvgWidget();
    loadSource();

    QVBoxLayout *solveParamLayout = new QVBoxLayout;
    solveParamLayout->addWidget(sourceFileLabel);
    solveParamLayout->addWidget(sourceFileEdit);
    solveParamLayout->addLayout(iterationsLayout);
    solveParamLayout->addLayout(stepLayout);
    solveParamLayout->addLayout(exportLayout);

    solveParamBox->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
    solveParamBox->setLayout(solveParamLayout);

    QHBoxLayout *upperlayout = new QHBoxLayout;
    upperlayout->addWidget(runParameters);
    upperlayout->addWidget(solveParamBox);

    QHBoxLayout *lowerlayout = new QHBoxLayout;
    lowerlayout->addWidget(svg);

    QVBoxLayout *outer = new QVBoxLayout;
    outer->addLayout(upperlayout);
    outer->addLayout(lowerlayout);
    window->setLayout(outer);
}