void MainWindow::initConnections() { connect(m_trace, SIGNAL(startedLoadingTrace()), this, SLOT(startedLoadingTrace())); connect(m_trace, SIGNAL(loaded(int)), this, SLOT(loadProgess(int))); connect(m_trace, SIGNAL(finishedLoadingTrace()), this, SLOT(finishedLoadingTrace())); connect(m_trace, SIGNAL(startedSaving()), this, SLOT(slotStartedSaving())); connect(m_trace, SIGNAL(saved()), this, SLOT(slotSaved())); connect(m_trace, SIGNAL(changed(ApiTraceEvent*)), this, SLOT(slotTraceChanged(ApiTraceEvent*))); connect(m_trace, SIGNAL(findResult(ApiTrace::SearchRequest,ApiTrace::SearchResult,ApiTraceCall*)), this, SLOT(slotSearchResult(ApiTrace::SearchRequest,ApiTrace::SearchResult,ApiTraceCall*))); connect(m_trace, SIGNAL(foundFrameStart(ApiTraceFrame*)), this, SLOT(slotFoundFrameStart(ApiTraceFrame*))); connect(m_trace, SIGNAL(foundFrameEnd(ApiTraceFrame*)), this, SLOT(slotFoundFrameEnd(ApiTraceFrame*))); connect(m_trace, SIGNAL(foundCallIndex(ApiTraceCall*)), this, SLOT(slotJumpToResult(ApiTraceCall*))); connect(m_retracer, SIGNAL(finished(const QString&)), this, SLOT(replayFinished(const QString&))); connect(m_retracer, SIGNAL(error(const QString&)), this, SLOT(replayError(const QString&))); connect(m_retracer, SIGNAL(foundState(ApiTraceState*)), this, SLOT(replayStateFound(ApiTraceState*))); connect(m_retracer, SIGNAL(foundProfile(trace::Profile*)), this, SLOT(replayProfileFound(trace::Profile*))); connect(m_retracer, SIGNAL(foundThumbnails(const QList<QImage>&)), this, SLOT(replayThumbnailsFound(const QList<QImage>&))); connect(m_retracer, SIGNAL(retraceErrors(const QList<ApiTraceError>&)), this, SLOT(slotRetraceErrors(const QList<ApiTraceError>&))); connect(m_ui.vertexInterpretButton, SIGNAL(clicked()), m_vdataInterpreter, SLOT(interpretData())); connect(m_ui.vertexTypeCB, SIGNAL(currentIndexChanged(const QString&)), m_vdataInterpreter, SLOT(setTypeFromString(const QString&))); connect(m_ui.vertexStrideSB, SIGNAL(valueChanged(int)), m_vdataInterpreter, SLOT(setStride(int))); connect(m_ui.vertexComponentsSB, SIGNAL(valueChanged(int)), m_vdataInterpreter, SLOT(setComponents(int))); connect(m_ui.startingOffsetSB, SIGNAL(valueChanged(int)), m_vdataInterpreter, SLOT(setStartingOffset(int))); connect(m_ui.actionNew, SIGNAL(triggered()), this, SLOT(createTrace())); connect(m_ui.actionOpen, SIGNAL(triggered()), this, SLOT(openTrace())); connect(m_ui.actionQuit, SIGNAL(triggered()), this, SLOT(close())); connect(m_ui.actionFind, SIGNAL(triggered()), this, SLOT(slotSearch())); connect(m_ui.actionGo, SIGNAL(triggered()), this, SLOT(slotGoTo())); connect(m_ui.actionGoFrameStart, SIGNAL(triggered()), this, SLOT(slotGoFrameStart())); connect(m_ui.actionGoFrameEnd, SIGNAL(triggered()), this, SLOT(slotGoFrameEnd())); connect(m_ui.actionReplay, SIGNAL(triggered()), this, SLOT(replayStart())); connect(m_ui.actionProfile, SIGNAL(triggered()), this, SLOT(replayProfile())); connect(m_ui.actionStop, SIGNAL(triggered()), this, SLOT(replayStop())); connect(m_ui.actionLookupState, SIGNAL(triggered()), this, SLOT(lookupState())); connect(m_ui.actionTrim, SIGNAL(triggered()), this, SLOT(trim())); connect(m_ui.actionShowThumbnails, SIGNAL(triggered()), this, SLOT(showThumbnails())); connect(m_ui.actionOptions, SIGNAL(triggered()), this, SLOT(showSettings())); connect(m_ui.callView->selectionModel(), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(callItemSelected(const QModelIndex &))); connect(m_ui.callView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(callItemActivated(const QModelIndex &))); connect(m_ui.callView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(customContextMenuRequested(QPoint))); connect(m_ui.surfacesTreeWidget, SIGNAL(customContextMenuRequested(const QPoint &)), SLOT(showSurfacesMenu(const QPoint &))); connect(m_ui.surfacesTreeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), SLOT(showSelectedSurface())); connect(m_ui.detailsWebView, SIGNAL(linkClicked(const QUrl&)), this, SLOT(openHelp(const QUrl&))); connect(m_ui.nonDefaultsCB, SIGNAL(toggled(bool)), this, SLOT(fillState(bool))); connect(m_jumpWidget, SIGNAL(jumpTo(int)), SLOT(slotJumpTo(int))); connect(m_searchWidget, SIGNAL(searchNext(const QString&, Qt::CaseSensitivity)), SLOT(slotSearchNext(const QString&, Qt::CaseSensitivity))); connect(m_searchWidget, SIGNAL(searchPrev(const QString&, Qt::CaseSensitivity)), SLOT(slotSearchPrev(const QString&, Qt::CaseSensitivity))); connect(m_traceProcess, SIGNAL(tracedFile(const QString&)), SLOT(createdTrace(const QString&))); connect(m_traceProcess, SIGNAL(error(const QString&)), SLOT(traceError(const QString&))); connect(m_trimProcess, SIGNAL(trimmedFile(const QString&)), SLOT(createdTrim(const QString&))); connect(m_trimProcess, SIGNAL(error(const QString&)), SLOT(trimError(const QString&))); connect(m_ui.errorsDock, SIGNAL(visibilityChanged(bool)), m_ui.actionShowErrorsDock, SLOT(setChecked(bool))); connect(m_ui.actionShowErrorsDock, SIGNAL(triggered(bool)), m_ui.errorsDock, SLOT(setVisible(bool))); connect(m_ui.errorsTreeWidget, SIGNAL(itemActivated(QTreeWidgetItem*, int)), this, SLOT(slotErrorSelected(QTreeWidgetItem*))); connect(m_ui.actionShowProfileDialog, SIGNAL(triggered(bool)), m_profileDialog, SLOT(show())); connect(m_profileDialog, SIGNAL(jumpToCall(int)), this, SLOT(slotJumpTo(int))); }
SEXP runModel(SEXP m_, SEXP iterations, SEXP burn_in, SEXP adapt, SEXP thin) { const int eval_limit = 10; SEXP env_ = Rf_getAttrib(m_,Rf_install("env")); if(env_ == R_NilValue || TYPEOF(env_) != ENVSXP) { throw std::logic_error("ERROR: bad environment passed to deterministic."); } vpArmaMapT armaMap; vpMCMCMapT mcmcMap; std::vector<cppbugs::MCMCObject*> mcmcObjects; arglistT arglist; std::vector<const char*> argnames; initArgList(m_, arglist, 1); for(size_t i = 0; i < arglist.size(); i++) { // capture arg name // FIXME: check class of args to make sure it's mcmc if(TYPEOF(arglist[i])==SYMSXP) { argnames.push_back(CHAR(PRINTNAME(arglist[i]))); } // force eval of late bindings arglist[i] = forceEval(arglist[i],env_,eval_limit); try { ArmaContext* ap = mapOrFetch(arglist[i], armaMap); cppbugs::MCMCObject* node = createMCMC(arglist[i],armaMap); mcmcMap[rawAddress(arglist[i])] = node; mcmcObjects.push_back(node); } catch (std::logic_error &e) { releaseMap(armaMap); releaseMap(mcmcMap); UNPROTECT(armaMap.size()); REprintf("%s\n",e.what()); return R_NilValue; } } int iterations_ = Rcpp::as<int>(iterations); int burn_in_ = Rcpp::as<int>(burn_in); int adapt_ = Rcpp::as<int>(adapt); int thin_ = Rcpp::as<int>(thin); SEXP ar; PROTECT(ar = Rf_allocVector(REALSXP,1)); try { cppbugs::RMCModel m(mcmcObjects); m.sample(iterations_, burn_in_, adapt_, thin_); //std::cout << "acceptance_ratio: " << m.acceptance_ratio() << std::endl; REAL(ar)[0] = m.acceptance_ratio(); } catch (std::logic_error &e) { releaseMap(armaMap); releaseMap(mcmcMap); UNPROTECT(armaMap.size()); UNPROTECT(1); // ar REprintf("%s\n",e.what()); return R_NilValue; } SEXP ans; PROTECT(ans = createTrace(arglist,armaMap,mcmcMap)); releaseMap(armaMap); releaseMap(mcmcMap); UNPROTECT(armaMap.size()); Rf_setAttrib(ans, R_NamesSymbol, makeNames(argnames)); Rf_setAttrib(ans, Rf_install("acceptance.ratio"), ar); UNPROTECT(2); // ans + ar return ans; }