Exemplo n.º 1
0
//ROTATE data in ORArray AROUND OUTER PLANES
void Arrows::outerRotate(uint8_t type){
	loop(type);

	//wrap the ORArray arrpound the outside of the cube
	for(int8_t r = 0; r < 28; r++){
		if(r >= 0 && r < SIZE){
			copyColumn(type, SIZE-1-r, 7, ORArray[27-r][type]);
        }else if(r >= SIZE && r < SIZE*2-1){
			copyColumn(type, 0, SIZE - (r-SIZE) - 2, ORArray[27-r][type]);
        }else if(r >= SIZE*2-1 && r < SIZE*3-2){
			copyColumn(type, r-(2*SIZE-2), 0, ORArray[27-r][type]);
        }else if(r >= SIZE*3-2 && r < SIZE*4-3){
			copyColumn(type, 7, r-(3*SIZE-3), ORArray[27-r][type]);
        }
	}
}
// Function definitions.
// -----------------------------------------------------------------
// MEX-file gateway routine.
void mexFunction (int nlhs, mxArray* plhs[], 
		  int nrhs, const mxArray* prhs[]) {

  // Get the input matrix X.
  const SingleMatrix X = getSingleMatrix(prhs[0]);

  // Get the number of samples (n) and the number of variables (p).
  const Size n = X.nr;
  const Size p = X.nc;

  // Initialize the output.
  DoubleVector y = createMatlabVector(p,&plhs[0]);

  // This is storage for a column of matrix X.
  double* x = malloc(sizeof(double)*n);

  // Repeat for each column of X.
  for (Index k = 0; k < p; k++) {

    // Get the kth column of X.
    copyColumn(X.elems,x,k,n);

    // Compute the sample variance.
    y.elems[k] = computeVariance(x,n);
  }

  // Free the dynamically allocated memory.
  free(x);
}
TableOfReal TableOfReal_extractColumnRanges (TableOfReal me, const wchar_t *ranges) {
	try {
		long numberOfElements;
		autoNUMvector <long> elements (getElementsOfRanges (ranges, my numberOfColumns, & numberOfElements, L"column"), 1);
		autoTableOfReal thee = TableOfReal_create (my numberOfRows, numberOfElements);
		copyRowLabels (me, thee.peek());
		for (long ielement = 1; ielement <= numberOfElements; ielement ++)
			copyColumn (me, elements [ielement], thee.peek(), ielement);
		return thee.transfer();
	} catch (MelderError) {
		Melder_throw (me, ": column ranges not extracted.");
	}
}
Exemplo n.º 4
0
// MEX-file gateway routine. Note that varbvsbinupdate.m checks the
// inputs, so we do not have to do it here.
void mexFunction (int nlhs, mxArray* plhs[], 
		  int nrhs, const mxArray* prhs[]) {

  // GET INPUTS.
  const SingleMatrix X       = getSingleMatrix(prhs[0]);
  const double       sa      = *mxGetPr(prhs[1]);
  const DoubleVector logodds = getDoubleVector(prhs[2]);
  const DoubleVector d       = getDoubleVector(mxGetField(prhs[3],0,"d"));
  const DoubleVector xdx     = getDoubleVector(mxGetField(prhs[3],0,"xdx"));
  const DoubleVector xy      = getDoubleVector(mxGetField(prhs[3],0,"xy"));
  const DoubleVector xd      = getDoubleVector(mxGetField(prhs[3],0,"xd"));
  const DoubleVector alpha0  = getDoubleVector(prhs[4]);
  const DoubleVector mu0     = getDoubleVector(prhs[5]);
  const DoubleVector Xr0     = getDoubleVector(prhs[6]);
  const DoubleVector I       = getDoubleVector(prhs[7]);

  // Get the number of samples (n), the number of variables (p), and
  // the number of coordinate ascent updates (numiter).
  const Size n       = X.nr;
  const Size p       = X.nc;
  const Size numiter = I.n;

  // INITIALIZE OUTPUTS.
  DoubleVector alpha = createMatlabVector(p,&plhs[0]);
  DoubleVector mu    = createMatlabVector(p,&plhs[1]);
  DoubleVector Xr    = createMatlabVector(n,&plhs[2]);

  copyDoubleVector(alpha0,alpha);
  copyDoubleVector(mu0,mu);
  copyDoubleVector(Xr0,Xr);

  // This is storage for a column of matrix X.
  double* x = malloc(sizeof(double)*n);

  // RUN COORDINATE ASCENT UPDATES.
  // Repeat for each coordinate ascent update.
  for (Index iter = 0; iter < numiter; iter++) {
    Index k = (Index) I.elems[iter];

    // Copy the kth column of matrix X.
    copyColumn(X.elems,x,k,n);

    // Perform the update.
    varbvsbinupdate(x,xy.elems[k],xd.elems[k],xdx.elems[k],d.elems,sa,
		    logodds.elems[k],alpha.elems+k,mu.elems+k,Xr.elems,n);
  }

  // Free the dynamically allocated memory.
  free(x);
}
TableOfReal TableOfReal_extractColumnsWhere (TableOfReal me, const wchar_t *condition, Interpreter interpreter) {
	try {
		Formula_compile (interpreter, me, condition, kFormula_EXPRESSION_TYPE_NUMERIC, TRUE);
		/*
		 * Count the new number of columns.
		 */
		long numberOfElements = 0;
		for (long icol = 1; icol <= my numberOfColumns; icol ++) {
			for (long irow = 1; irow <= my numberOfRows; irow ++) {
				struct Formula_Result result;
				Formula_run (irow, icol, & result);
				if (result. result.numericResult != 0.0) {
					numberOfElements ++;
					break;
				}
			}
		}
		if (numberOfElements < 1) Melder_throw ("No columns match this condition.");

		/*
		 * Create room for the result.
		 */	
		autoTableOfReal thee = TableOfReal_create (my numberOfRows, numberOfElements);
		copyRowLabels (me, thee.peek());
		/*
		 * Store the result.
		 */
		numberOfElements = 0;
		for (long icol = 1; icol <= my numberOfColumns; icol ++) {
			for (long irow = 1; irow <= my numberOfRows; irow ++) {
				struct Formula_Result result;
				Formula_run (irow, icol, & result);
				if (result. result.numericResult != 0.0) {
					copyColumn (me, icol, thee.peek(), ++ numberOfElements);
					break;
				}
			}
		}
		return thee.transfer();
	} catch (MelderError) {
		Melder_throw (me, ": columns not extracted.");
	}
}
TableOfReal TableOfReal_extractColumnsWhereLabel (TableOfReal me, int which_Melder_STRING, const wchar_t *criterion) {
	try {
		long n = 0;
		for (long icol = 1; icol <= my numberOfColumns; icol ++) {
			if (Melder_stringMatchesCriterion (my columnLabels [icol], which_Melder_STRING, criterion)) {
				n ++;
			}
		}
		if (n == 0) Melder_throw ("No column matches this criterion.");

		autoTableOfReal thee = TableOfReal_create (my numberOfRows, n);
		copyRowLabels (me, thee.peek());
		n = 0;
		for (long icol = 1; icol <= my numberOfColumns; icol ++) {
			if (Melder_stringMatchesCriterion (my columnLabels [icol], which_Melder_STRING, criterion)) {
				copyColumn (me, icol, thee.peek(), ++ n);
			}
		}
		return thee.transfer();
	} catch (MelderError) {
		Melder_throw (me, ": columns not extracted.");
	}
}
TableOfReal TableOfReal_extractColumnsWhereRow (TableOfReal me, long row, int which_Melder_NUMBER, double criterion) {
	try {
		if (row < 1 || row > my numberOfRows)
			Melder_throw ("No such row: ", row, ".");
		long n = 0;
		for (long icol = 1; icol <= my numberOfColumns; icol ++) {
			if (Melder_numberMatchesCriterion (my data [row] [icol], which_Melder_NUMBER, criterion)) {
				n ++;
			}
		}
		if (n == 0) Melder_throw ("No column matches this criterion.");

		autoTableOfReal thee = TableOfReal_create (my numberOfRows, n);
		copyRowLabels (me, thee.peek());
		n = 0;
		for (long icol = 1; icol <= my numberOfColumns; icol ++)
			if (Melder_numberMatchesCriterion (my data [row] [icol], which_Melder_NUMBER, criterion))
				copyColumn (me, icol, thee.peek(), ++ n);
		return thee.transfer();
	} catch (MelderError) {
		Melder_throw (me, ": columns not extracted.");
	}
}
Exemplo n.º 8
0
void PlotDataSelectWidget::tableContextMenu(const QPoint& pos) {
    PlotDataSelect* plotDataSelect = dynamic_cast<PlotDataSelect*>(processor_);
    QModelIndex index = table_->indexAt(pos);
    std::vector<int> selectedColumns = table_->selectedColumns();
    std::vector<int> selectedRows = table_->selectedRows();
    std::pair<QPoint,QPoint> selectedArea = table_->selectedArea();
    contextMenuTable_->clear();
    PlotData* data = const_cast<PlotData*>(plotDataSelect->getPlotData());
    QAction* newAct;
    QList<QVariant>* qlist = new QList<QVariant>();
    std::stringstream str;
    std::string menuString;
    // create popupmenu
    if (function_ == FunctionLibrary::NONE) {
        str.str("");
        str.clear();
        str << "Select";
        newAct = new QAction(QString::fromStdString(str.str()),this);
        newAct->setData(QVariant(static_cast<int>(FunctionLibrary::SELECT)));
        contextMenuTable_->addAction(newAct);
        QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(functionSelect()));

        menuString = "Column Order";
        newAct = new QAction(QString::fromStdString(menuString),this);
        newAct->setData(QVariant(static_cast<int>(FunctionLibrary::COLUMNORDER)));
        contextMenuTable_->addAction(newAct);
        QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(functionSelect()));

        menuString = "Filter";
        newAct = new QAction(QString::fromStdString(menuString),this);
        newAct->setData(QVariant(static_cast<int>(FunctionLibrary::FILTER)));
        contextMenuTable_->addAction(newAct);
        QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(functionSelect()));

        contextMenuTable_->popup(table_->mapToGlobal(pos));
    }
    else if (function_ != FunctionLibrary::NONE) {

        menuString = "Deactivate Function";
        newAct = new QAction(QString::fromStdString(menuString),this);
        newAct->setData(QVariant(0));
        contextMenuTable_->addAction(newAct);
        QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(functionSelect()));

        if (function_ == FunctionLibrary::SELECT || function_ == FunctionLibrary::COLUMNORDER) {
            contextMenuTable_->addSeparator();

            str.str("");
            str.clear();
            if (plotDataSelect->getResetListSize() > 0) {
                str << plotDataSelect->getResetListSize();
                menuString = "Reset All (" + str.str() + " Actions)";
            }
            else
                menuString = "Reset All";
            newAct = new QAction(QString::fromStdString(menuString),this);
            if (plotDataSelect->getResetListSize() == 0)
                newAct->setEnabled(false);
            contextMenuTable_->addAction(newAct);
            QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(selectResetAll()));

            menuString = "Reset Last";
            newAct = new QAction(QString::fromStdString(menuString),this);
            if (plotDataSelect->getResetListSize() == 0)
                newAct->setEnabled(false);
            contextMenuTable_->addAction(newAct);
            QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(selectResetLast()));

            contextMenuTable_->addSeparator();

            if (function_ == FunctionLibrary::SELECT) {
                if (index.column() >= 0) {
                    menuString = "Disable \""+data->getColumnLabel(index.column())+"\" Column";
                }
                else {
                    menuString = "Selecting not Well-Defined";
                }
                newAct = new QAction(QString::fromStdString(menuString),this);
                if (index.column() >= 0) {
                    newAct->setData(QVariant(index.column()));
                }
                else {
                    newAct->setEnabled(false);
                }
                contextMenuTable_->addAction(newAct);
                QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(selectChange()));

                // only show this part of the Menu, if something is selected
                if (selectedColumns.size() > 0 || selectedRows.size() > 0) {
                    if (selectedColumns.size() > 1) {
                        qlist->clear();
                        str.str("");
                        str.clear();
                        str << selectedColumns.size();
                        menuString = "Disable Selected Columns ("+str.str()+")";
                        newAct = new QAction(QString::fromStdString(menuString),this);
                        for (size_t j = 0; j < selectedColumns.size(); ++j) {
                            qlist->push_back(QVariant(selectedColumns.at(j)));
                        }
                        newAct->setData(QVariant(*qlist));
                        contextMenuTable_->addAction(newAct);
                        QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(selectChange()));
                    }
                    qlist->clear();
                    str.str("");
                    str.clear();
                    str << selectedColumns.size();
                    menuString = "Select Columns ("+str.str()+")";
                    newAct = new QAction(QString::fromStdString(menuString),this);
                    for (size_t j = 0; j < selectedColumns.size(); ++j) {
                        qlist->push_back(QVariant(selectedColumns.at(j)));
                    }
                    newAct->setData(QVariant(*qlist));
                    contextMenuTable_->addAction(newAct);
                    QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(selectColumnChange()));

                    qlist->clear();
                    str.str("");
                    str.clear();
                    str << selectedRows.size();
                    menuString = "Select Rows ("+str.str()+")";
                    newAct = new QAction(QString::fromStdString(menuString),this);
                    for (size_t j = 0; j < selectedRows.size(); ++j) {
                        qlist->push_back(QVariant(selectedRows.at(j)-proxyModel_->getAddLines()));
                    }
                    newAct->setData(QVariant(*qlist));
                    contextMenuTable_->addAction(newAct);
                    QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(selectRowChange()));

                    qlist->clear();
                    str.str("");
                    str.clear();
                    str << selectedRows.size();
                    menuString = "Select Columns && Rows ("+str.str()+")";
                    newAct = new QAction(QString::fromStdString(menuString),this);
                    QList<QVariant>* qlist1 = new QList<QVariant>();
                    QList<QVariant>* qlist2 = new QList<QVariant>();
                    for (size_t j = 0; j < selectedColumns.size(); ++j) {
                        qlist1->push_back(QVariant(selectedColumns.at(j)));
                    }
                    for (size_t j = 0; j < selectedRows.size(); ++j) {
                        qlist2->push_back(QVariant(selectedRows.at(j)-proxyModel_->getAddLines()));
                    }
                    qlist->push_back(QVariant(*qlist1));
                    qlist->push_back(QVariant(*qlist2));
                    newAct->setData(QVariant(*qlist));
                    contextMenuTable_->addAction(newAct);
                    QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(selectColumnRowChange()));

                    qlist->clear();
                    str.str("");
                    str.clear();
                    str << selectedArea.second.x()- selectedArea.first.x() + 1  << "x" << selectedArea.second.y() - selectedArea.first.y() + 1;
                    menuString = "Select Area ("+str.str()+")";
                    newAct = new QAction(QString::fromStdString(menuString),this);
                    qlist->push_back(QVariant(QPoint(selectedArea.first.x(),selectedArea.first.y()-proxyModel_->getAddLines())));
                    qlist->push_back(QVariant(QPoint(selectedArea.second.x(),selectedArea.second.y()-proxyModel_->getAddLines())));
                    newAct->setData(QVariant(*qlist));
                    contextMenuTable_->addAction(newAct);
                    QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(selectAreaChange()));

                }

                contextMenuTable_->addSeparator();

                if (index.column() >= 0) {
                    menuString = "Rename \""+data->getColumnLabel(index.column())+"\"";
                    newAct = new QAction(QString::fromStdString(menuString),this);
                    newAct->setData(QVariant(index.column()));
                    contextMenuTable_->addAction(newAct);
                    QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(renameColumn()));
                }

                const std::vector<Property*>& properties = plotDataSelect->getProperties();
                PlotPredicateProperty* pPVProperty = NULL;
                for (size_t i = 0; i < properties.size(); ++i) {
                    if (dynamic_cast<PlotPredicateProperty*>(properties[i])) {
                        pPVProperty = dynamic_cast<PlotPredicateProperty*>(properties[i]);
                        break;
                    }
                }
                menuString = "Set ";
                if (index.column() >= 0) {
                    for (size_t i = 0; i < pPVProperty->get().size(); ++i) {
                        if (index.column() == pPVProperty->get().at(i).first) {
                            menuString = "Change ";
                        }
                    }
                }
                menuString += "Predicate";
                newAct = new QAction(QString::fromStdString(menuString),this);
                if (index.column() >= 0) {
                    newAct->setData(QVariant(index.column()));
                }
                else {
                    newAct->setEnabled(false);
                }
                contextMenuTable_->addAction(newAct);
                QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(predicateChange()));
            }
            beforeMenu_->clear();
            for (int i = 0; i < data->getColumnCount(); ++i) {
                if (i != index.column()) {
                    qlist->clear();
                    menuString = "\""+data->getColumnLabel(i)+"\" Column";
                    newAct = new QAction(QString::fromStdString(menuString),this);
                    qlist->push_back(QVariant(index.column()));
                    qlist->push_back(QVariant(i));
                    newAct->setData(QVariant(*qlist));
                    beforeMenu_->addAction(newAct);
                    QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(sortChangeBefore()));
                }
            }
            if (index.column() >= 0) {
                beforeMenu_->setEnabled(true);
            }
            else {
                beforeMenu_->setEnabled(false);
            }
            contextMenuTable_->addMenu(beforeMenu_);
            afterMenu_->clear();
            for (int i = 0; i < data->getColumnCount(); ++i) {
                if (i != index.column()) {
                    qlist->clear();
                    menuString = "\""+data->getColumnLabel(i)+"\" Column";
                    newAct = new QAction(QString::fromStdString(menuString),this);
                    qlist->push_back(QVariant(index.column()));
                    qlist->push_back(QVariant(i));
                    newAct->setData(QVariant(*qlist));
                    afterMenu_->addAction(newAct);
                    QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(sortChangeAfter()));
                }
            }
            if (index.column() >= 0) {
                afterMenu_->setEnabled(true);
            }
            else {
                afterMenu_->setEnabled(false);
            }
            contextMenuTable_->addMenu(afterMenu_);
            switchMenu_->clear();
            for (int i = 0; i < data->getColumnCount(); ++i) {
                if (i != index.column()) {
                    qlist->clear();
                    menuString = "\""+data->getColumnLabel(i)+"\" Column";
                    newAct = new QAction(QString::fromStdString(menuString),this);
                    qlist->push_back(QVariant(index.column()));
                    qlist->push_back(QVariant(i));
                    newAct->setData(QVariant(*qlist));
                    switchMenu_->addAction(newAct);
                    QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(sortChangeSwitch()));
                }
            }
            if (index.column() >= 0) {
                switchMenu_->setEnabled(true);
            }
            else {
                switchMenu_->setEnabled(false);
            }
            contextMenuTable_->addMenu(switchMenu_);

            if (function_ == FunctionLibrary::SELECT) {
                copyColumnMenu_->clear();
                for (int i = 0; i < data->getColumnCount(); ++i) {
                    qlist->clear();
                    menuString = "\""+data->getColumnLabel(i)+"\" Column";
                    newAct = new QAction(QString::fromStdString(menuString),this);
                    qlist->push_back(QVariant(index.column()));
                    qlist->push_back(QVariant(i));
                    newAct->setData(QVariant(*qlist));
                    copyColumnMenu_->addAction(newAct);
                    QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(copyColumn()));
                }

                contextMenuTable_->addMenu(copyColumnMenu_);
            }
        }
        else if (function_ == FunctionLibrary::FILTER) {

            contextMenuTable_->addSeparator();

            str.str("");
            str.clear();
            if (plotDataSelect->getResetListSize() > 0) {
                str << plotDataSelect->getResetListSize();
                menuString = "Reset All (" + str.str() + " Actions)";
            }
            else
                menuString = "Reset All";
            newAct = new QAction(QString::fromStdString(menuString),this);
            if (plotDataSelect->getResetListSize() == 0)
                newAct->setEnabled(false);
            contextMenuTable_->addAction(newAct);
            QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(selectResetAll()));

            menuString = "Reset Last";
            newAct = new QAction(QString::fromStdString(menuString),this);
            if (plotDataSelect->getResetListSize() == 0)
                newAct->setEnabled(false);
            contextMenuTable_->addAction(newAct);
            QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(selectResetLast()));


            contextMenuTable_->addSeparator();

            menuString = "Delete All Rows With EMPTY Cells";
            newAct = new QAction(QString::fromStdString(menuString),this);
            contextMenuTable_->addAction(newAct);
            QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(filterEmptyCells()));

            menuString = "Delete All Rows With Non Alpha-Numeric Cells";
            newAct = new QAction(QString::fromStdString(menuString),this);
            contextMenuTable_->addAction(newAct);
            QObject::connect(newAct,SIGNAL(triggered()),this,SLOT(filterAlphaNumeric()));
        }
        contextMenuTable_->popup(table_->mapToGlobal(pos));
    }
    delete qlist;
}