/** id = astra_mex_matrix('create', data); * * Create a new matrix object in the astra-library. * data: a sparse MATLAB matrix containing the data. * id: identifier of the matrix object as it is now stored in the astra-library. */ void astra_mex_matrix_create(int& nlhs, mxArray* plhs[], int& nrhs, const mxArray* prhs[]) { // step1: get datatype if (nrhs < 2) { mexErrMsgTxt("Not enough arguments. See the help document for a detailed argument list. \n"); return; } if (!mxIsSparse (prhs[1])) { mexErrMsgTxt("Argument is not a valid MATLAB sparse matrix.\n"); return; } unsigned int iHeight = mxGetM(prhs[1]); unsigned int iWidth = mxGetN(prhs[1]); unsigned long lSize = mxGetNzmax(prhs[1]); CSparseMatrix* pMatrix = new CSparseMatrix(iHeight, iWidth, lSize); // Check initialization if (!pMatrix->isInitialized()) { mexErrMsgTxt("Couldn't initialize data object.\n"); delete pMatrix; return; } bool bResult = matlab_to_astra(prhs[1], pMatrix); if (!bResult) { mexErrMsgTxt("Failed to create data object.\n"); delete pMatrix; return; } // store data object int iIndex = CMatrixManager::getSingleton().store(pMatrix); // return data id if (1 <= nlhs) { plhs[0] = mxCreateDoubleScalar(iIndex); } }
/** geom = astra_mex_matrix('get_size', id); * * Fetch the dimensions and size of a matrix stored in the astra-library. * id: identifier of the 2d data object as stored in the astra-library. * geom: a 1x2 matrix containing [rows, columns] */ void astra_mex_matrix_get_size(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]) { // step1: input if (nrhs < 2) { mexErrMsgTxt("Not enough arguments. See the help document for a detailed argument list. \n"); return; } if (!mxIsDouble(prhs[1])) { mexErrMsgTxt("Identifier should be a scalar value. \n"); return; } int iDataID = (int)(mxGetScalar(prhs[1])); // step2: get data object CSparseMatrix* pMatrix = astra::CMatrixManager::getSingleton().get(iDataID); if (!pMatrix || !pMatrix->isInitialized()) { mexErrMsgTxt("Data object not found or not initialized properly.\n"); return; } // create output // TODO }