omxGlobal::omxGlobal() { mpi = 0; silent = true; ComputePersist = false; startTime = time(0); maxSeconds = 0; timedOut = false; lastProgressReport = startTime; previousReportLength = 0; previousReportFit = 0; previousComputeCount = 0; mxLogSetCurrentRow(-1); numThreads = 1; analyticGradients = 0; llScale = -2.0; debugProtectStack = OMX_DEBUG; anonAlgebra = 0; rowLikelihoodsWarning = false; unpackedConfidenceIntervals = false; topFc = NULL; intervals = true; gradientTolerance = 1e-6; boundsUpdated = false; dataTypeWarningCount = 0; RAMInverseOpt = true; RAMMaxDepth = 30; FreeVarGroup *fvg = new FreeVarGroup; fvg->id.push_back(FREEVARGROUP_ALL); // all variables freeGroup.push_back(fvg); fvg = new FreeVarGroup; fvg->id.push_back(FREEVARGROUP_NONE); // no variables freeGroup.push_back(fvg); }
static void omxRowFitFunctionSingleIteration(omxFitFunction *localobj, omxFitFunction *sharedobj, int rowbegin, int rowcount, FitContext *fc) { omxRowFitFunction* oro = ((omxRowFitFunction*) localobj->argStruct); omxRowFitFunction* shared_oro = ((omxRowFitFunction*) sharedobj->argStruct); omxMatrix *rowAlgebra, *rowResults; omxMatrix *filteredDataRow, *dataRow, *existenceVector; omxMatrix *dataColumns; omxData *data; int isContiguous, contiguousStart, contiguousLength; rowAlgebra = oro->rowAlgebra; rowResults = shared_oro->rowResults; data = oro->data; dataColumns = oro->dataColumns; dataRow = oro->dataRow; filteredDataRow = oro->filteredDataRow; existenceVector = oro->existenceVector; isContiguous = oro->contiguous.isContiguous; contiguousStart = oro->contiguous.start; contiguousLength = oro->contiguous.length; int *toRemove = (int*) malloc(sizeof(int) * dataColumns->cols); int *zeros = (int*) calloc(dataColumns->cols, sizeof(int)); for(int row = rowbegin; row < data->rows && (row - rowbegin) < rowcount; row++) { mxLogSetCurrentRow(row); data->loadDefVars(localobj->matrix->currentState, row); // Populate data row if (isContiguous) { omxContiguousDataRow(data, row, contiguousStart, contiguousLength, dataRow); } else { omxDataRow(data, row, dataColumns, dataRow); // Populate data row } markDataRowDependencies(localobj->matrix->currentState, oro); for(int j = 0; j < dataColumns->cols; j++) { if(omxDataElementMissing(data, row, j)) { toRemove[j] = 1; omxSetVectorElement(existenceVector, j, 0); } else { toRemove[j] = 0; omxSetVectorElement(existenceVector, j, 1); } } omxCopyMatrix(filteredDataRow, dataRow); omxRemoveRowsAndColumns(filteredDataRow, zeros, toRemove); omxRecompute(rowAlgebra, fc); omxCopyMatrixToRow(rowAlgebra, row, rowResults); } free(toRemove); free(zeros); }