void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { if(nrhs!=1) mexErrMsgTxt("One input required."); if (nlhs > 2) mexErrMsgTxt("Too many output arguments."); btk::Acquisition::Pointer acq = btk_MOH_get_object<btk::Acquisition>(prhs[0]); btkMXCreateAnalysisStructure(acq, nlhs, plhs); };
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { if(nrhs < 2) mexErrMsgTxt("No enough inputs."); if (nlhs > 2) mexErrMsgTxt("Too many output arguments."); if (!mxIsChar(prhs[1]) && mxIsEmpty(prhs[1]) && ((mxGetClassID(prhs[1]) != mxDOUBLE_CLASS) || mxIsComplex(prhs[1]) || (mxGetNumberOfElements(prhs[1]) != 1))) mexErrMsgTxt("Parameter's context must be a non-empty string or a double value representing an integer."); if (mxIsChar(prhs[1]) && (nrhs < 3)) mexErrMsgTxt("No enough inputs to remove parameter from its context and name."); if (mxIsChar(prhs[1]) && (!mxIsChar(prhs[2]) && mxIsEmpty(prhs[2]) && ((mxGetClassID(prhs[2]) != mxDOUBLE_CLASS) || mxIsComplex(prhs[2]) || (mxGetNumberOfElements(prhs[2]) != 1)))) mexErrMsgTxt("Parameter's context must be a non-empty string."); btk::Acquisition::Pointer acq = btk_MOH_get_object<btk::Acquisition>(prhs[0]); btk::MetaData::Iterator itAnalysis = acq->GetMetaData()->FindChild("ANALYSIS"); if (itAnalysis != acq->GetMetaData()->End()) { std::vector<btk::MetaData::Iterator> its = std::vector<btk::MetaData::Iterator>(5); btk::MetaData::Iterator itUsed = (*itAnalysis)->FindChild("USED"); its[0] = (*itAnalysis)->FindChild("NAMES"); its[1] = (*itAnalysis)->FindChild("DESCRIPTIONS"); its[2] = (*itAnalysis)->FindChild("SUBJECTS"); its[3] = (*itAnalysis)->FindChild("CONTEXTS"); its[4] = (*itAnalysis)->FindChild("UNITS"); btk::MetaData::Iterator itValues = (*itAnalysis)->FindChild("VALUES"); if ((itUsed == (*itAnalysis)->End()) || (its[0] == (*itAnalysis)->End()) || (its[1] == (*itAnalysis)->End()) || (its[2] == (*itAnalysis)->End()) || (its[3] == (*itAnalysis)->End()) || (its[4] == (*itAnalysis)->End()) || (itValues == (*itAnalysis)->End())) mexErrMsgTxt("Corrupted analysis. Some metadata are missing."); if (!(*itUsed)->HasInfo() || !(*its[0])->HasInfo() || !(*its[1])->HasInfo() || !(*its[2])->HasInfo() || !(*its[3])->HasInfo() || !(*its[4])->HasInfo() || !(*itValues)->HasInfo()) mexErrMsgTxt("Corrupted analysis. Some metadata informations are missing."); std::vector<int16_t> valUsed = (*itUsed)->GetInfo()->ToInt16(); if (!valUsed.empty()) { int16_t used = valUsed[0]; if (used != 0) { int idx = -1; if (mxIsChar(prhs[1])) { std::vector<std::string> valNames; (*its[0])->GetInfo()->ToString(valNames); std::vector<std::string> valContexts; (*its[3])->GetInfo()->ToString(valContexts); // paremeter's context size_t strlen_ = (mxGetM(prhs[1]) * mxGetN(prhs[1]) * sizeof(mxChar)) + 1; char* context = (char*)mxMalloc(strlen_); mxGetString(prhs[1], context, strlen_); std::string strContext = std::string(context); mxFree(context); // parameter's name strlen_ = (mxGetM(prhs[2]) * mxGetN(prhs[2]) * sizeof(mxChar)) + 1; char* name = (char*)mxMalloc(strlen_); mxGetString(prhs[2], name, strlen_); std::string strName = std::string(name); mxFree(name); for (size_t i = 0 ; i < valNames.size() ; ++i) { btkTrimString(&(valNames[i])); btkTrimString(&(valContexts[i])); if ((valNames[i].compare(strName) == 0) && (valContexts[i].compare(strContext) == 0)) { idx = (int)i; break; } } } else idx = static_cast<int>(mxGetScalar(prhs[1])) - 1; if ((idx >= 0) && (idx < used)) { (*itUsed)->GetInfo()->SetValues(static_cast<int16_t>(used - 1)); // Char std::vector<std::string> dataStr; for (int i = 0 ; i < 5 ; ++i) { (*its[i])->GetInfo()->ToString(dataStr); std::vector<std::string>::iterator it = dataStr.begin(); std::advance(it, idx); if (it != dataStr.end()) { dataStr.erase(it); (*its[i])->GetInfo()->SetValues(dataStr); } } // Real std::vector<float> dataFlt; (*itValues)->GetInfo()->ToFloat(dataFlt); std::vector<float>::iterator it = dataFlt.begin(); std::advance(it, idx); if (it != dataFlt.end()) { dataFlt.erase(it); (*itValues)->GetInfo()->SetValues(dataFlt); } } } } } // Return updated analysis btkMXCreateAnalysisStructure(acq, nlhs, plhs); };