void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { /* Initialize the seeder */ srand(time(NULL)); /* Fetch inputs */ const int T = (int) (mxGetScalar(prhs[0])); /* Duration of simulation in s */ const int Time = (T+onset)*res; /* Total number of iteration steps */ double* Param_Cortex = mxGetPr (prhs[1]); /* Parameters of cortical module */ double* Param_Thalamus = mxGetPr (prhs[2]); /* Parameters of thalamic module */ double* Connections = mxGetPr (prhs[3]); /* Connectivity values C <-> T */ double* var_stim = mxGetPr (prhs[4]); /* Parameters of stimulation protocol */ /* Initialize the populations */ Cortical_Column Cortex = Cortical_Column(Param_Cortex, Connections); Thalamic_Column Thalamus = Thalamic_Column(Param_Thalamus, Connections); /* Link both modules */ Cortex.get_Thalamus(Thalamus); Thalamus.get_Cortex(Cortex); /* Initialize the stimulation protocol */ Stim Stimulation(Cortex, Thalamus, var_stim); /* Create data containers */ std::vector<mxArray*> dataArray; dataArray.reserve(4); dataArray.push_back(GetMexArray(1, T*res/red)); // Vt dataArray.push_back(GetMexArray(1, T*res/red)); // Vr dataArray.push_back(GetMexArray(1, T*res/red)); // Ca dataArray.push_back(GetMexArray(1, T*res/red)); // act_h /* Pointer to the data blocks */ std::vector<double*> dataPointer; dataPointer.reserve(dataArray.size()); for (mxArray* dataptr : dataArray) { dataPointer.push_back(mxGetPr(dataptr)); } /* Simulation */ int count = 0; for (unsigned t=0; t < Time; ++t) { ODE (Cortex, Thalamus); Stimulation.check_stim(t); if(t >= onset*res && t%red == 0){ get_data(count, Cortex, Thalamus, dataPointer); ++count; } } /* Return the data containers */ size_t numOutputs = 0; for (mxArray* dataptr : dataArray) { plhs[numOutputs++] = dataptr; } plhs[numOutputs++] = get_marker(Stimulation); return; }
// Print the markers found by the tracker void print_markers(Tracker *tracker, int num) { printf("found %d markers\n", num); for(int i=0; i<num; i++) { ARToolKitPlus::ARMarkerInfo *m = get_marker(tracker, i); printf("%d:\n", i); printf("\tcf %f\n", m->cf); // if (m->cf > 0) { printf("\tarea %d\n", m->area); printf("\tid %d\n", m->id); printf("\tdir %d\n", m->dir); printf("\tpos %f, %f\n", m->pos[0], m->pos[1]); for (int j = 0; j < 4; j++) printf("\tline %d %f, %f, %f\n", j, m->line[j][0], m->line[j][1], m->line[j][2]); for (int j = 0; j < 4; j++) printf("\tver %d %f, %f\n", j, m->vertex[j][0], m->vertex[j][1]); // } } }
int build_update_sql(str* sql_cmd, db_cmd_t* cmd) { struct string_buffer sql_buf = {.s = NULL, .len = 0, .size = 0, .increment = 128}; db_fld_t* fld; int i, rv = 0; str tmpstr; rv = sb_add(&sql_buf, &strings[STR_UPDATE]); /* "UPDATE " */ rv |= sb_add(&sql_buf, set_str(&tmpstr, "\"")); rv |= sb_add(&sql_buf, &cmd->table); /* table name */ rv |= sb_add(&sql_buf, set_str(&tmpstr, "\"")); rv |= sb_add(&sql_buf, &strings[STR_SET]); /* " SET " */ /* column name-value pairs */ for(i = 0, fld = cmd->vals; !DB_FLD_EMPTY(fld) && !DB_FLD_LAST(fld[i]); i++) { rv |= sb_add(&sql_buf, set_str(&tmpstr, fld[i].name)); rv |= sb_add(&sql_buf, set_str(&tmpstr, "=")); rv |= sb_add(&sql_buf, &strings[STR_ESC]); if (!DB_FLD_LAST(fld[i + 1])) rv |= sb_add(&sql_buf, set_str(&tmpstr, ",")); } if (rv) goto error; if (!DB_FLD_EMPTY(cmd->match)) { rv |= sb_add(&sql_buf, &strings[STR_WHERE]); for(i = 0, fld = cmd->match; !DB_FLD_LAST(fld[i]); i++) { rv |= sb_add(&sql_buf, set_str(&tmpstr, fld[i].name)); switch(fld[i].op) { case DB_EQ: rv |= sb_add(&sql_buf, &strings[STR_OP_EQ]); break; case DB_NE: rv |= sb_add(&sql_buf, &strings[STR_OP_NE]); break; case DB_LT: rv |= sb_add(&sql_buf, &strings[STR_OP_LT]); break; case DB_GT: rv |= sb_add(&sql_buf, &strings[STR_OP_GT]); break; case DB_LEQ: rv |= sb_add(&sql_buf, &strings[STR_OP_LEQ]); break; case DB_GEQ: rv |= sb_add(&sql_buf, &strings[STR_OP_GEQ]); break; } rv |= sb_add(&sql_buf, get_marker(i + 1)); if (!DB_FLD_LAST(fld[i + 1])) rv |= sb_add(&sql_buf, &strings[STR_AND]); } } rv |= sb_add(&sql_buf, &strings[STR_ZT]); if (rv) goto error; sql_cmd->s = sql_buf.s; sql_cmd->len = sql_buf.len; return 0; error: if (sql_buf.s) pkg_free(sql_buf.s); return -1; } int build_insert_sql(str* sql_cmd, db_cmd_t* cmd) { struct string_buffer sql_buf = {.s = NULL, .len = 0, .size = 0, .increment = 128}; db_fld_t* fld; int i, rv = 0; str tmpstr; rv = sb_add(&sql_buf, &strings[STR_INSERT]); /* "INSERT INTO " */ rv |= sb_add(&sql_buf, set_str(&tmpstr, "\"")); rv |= sb_add(&sql_buf, &cmd->table); /* table name */ rv |= sb_add(&sql_buf, set_str(&tmpstr, "\" (")); /* column names */ for(i = 0, fld = cmd->vals; !DB_FLD_EMPTY(fld) && !DB_FLD_LAST(fld[i]); i++) { rv |= sb_add(&sql_buf, set_str(&tmpstr, fld[i].name)); if (!DB_FLD_LAST(fld[i + 1])) rv |= sb_add(&sql_buf, set_str(&tmpstr, ",")); } if (rv) goto error; rv |= sb_add(&sql_buf, &strings[STR_VALUES]); for(i = 0, fld = cmd->vals; !DB_FLD_EMPTY(fld) && !DB_FLD_LAST(fld[i]); i++) { rv |= sb_add(&sql_buf, get_marker(i + 1)); if (!DB_FLD_LAST(fld[i + 1])) rv |= sb_add(&sql_buf, set_str(&tmpstr, ",")); } rv |= sb_add(&sql_buf, set_str(&tmpstr, ")")); rv |= sb_add(&sql_buf, &strings[STR_ZT]); if (rv) goto error; sql_cmd->s = sql_buf.s; sql_cmd->len = sql_buf.len; return 0; error: if (sql_buf.s) pkg_free(sql_buf.s); return -1; } int build_delete_sql(str* sql_cmd, db_cmd_t* cmd) { struct string_buffer sql_buf = {.s = NULL, .len = 0, .size = 0, .increment = 128}; db_fld_t* fld; int i, rv = 0; str tmpstr; rv = sb_add(&sql_buf, &strings[STR_DELETE]); /* "DELETE FROM " */ rv |= sb_add(&sql_buf, set_str(&tmpstr, "\"")); rv |= sb_add(&sql_buf, &cmd->table); /* table name */ rv |= sb_add(&sql_buf, set_str(&tmpstr, "\"")); if (!DB_FLD_EMPTY(cmd->match)) { rv |= sb_add(&sql_buf, &strings[STR_WHERE]); for(i = 0, fld = cmd->match; !DB_FLD_LAST(fld[i]); i++) { rv |= sb_add(&sql_buf, set_str(&tmpstr, fld[i].name)); switch(fld[i].op) { case DB_EQ: rv |= sb_add(&sql_buf, &strings[STR_OP_EQ]); break; case DB_NE: rv |= sb_add(&sql_buf, &strings[STR_OP_NE]); break; case DB_LT: rv |= sb_add(&sql_buf, &strings[STR_OP_LT]); break; case DB_GT: rv |= sb_add(&sql_buf, &strings[STR_OP_GT]); break; case DB_LEQ: rv |= sb_add(&sql_buf, &strings[STR_OP_LEQ]); break; case DB_GEQ: rv |= sb_add(&sql_buf, &strings[STR_OP_GEQ]); break; } rv |= sb_add(&sql_buf, get_marker(i + 1)); if (!DB_FLD_LAST(fld[i + 1])) rv |= sb_add(&sql_buf, &strings[STR_AND]); } } rv |= sb_add(&sql_buf, &strings[STR_ZT]); if (rv) goto error; sql_cmd->s = sql_buf.s; sql_cmd->len = sql_buf.len; return 0; error: if (sql_buf.s) pkg_free(sql_buf.s); return -1; } int build_select_sql(str* sql_cmd, db_cmd_t* cmd) { struct string_buffer sql_buf = {.s = NULL, .len = 0, .size = 0, .increment = 128}; db_fld_t* fld; int i, rv = 0; str tmpstr; rv = sb_add(&sql_buf, &strings[STR_SELECT]); /* "SELECT " */ if (DB_FLD_EMPTY(cmd->result)) { rv |= sb_add(&sql_buf, set_str(&tmpstr, "*")); } else { for(i = 0, fld = cmd->result; !DB_FLD_LAST(fld[i]); i++) { rv |= sb_add(&sql_buf, set_str(&tmpstr, fld[i].name)); if (!DB_FLD_LAST(fld[i + 1])) rv |= sb_add(&sql_buf, set_str(&tmpstr, ",")); } } rv |= sb_add(&sql_buf, &strings[STR_FROM]); /* " FROM " */ rv |= sb_add(&sql_buf, set_str(&tmpstr, "\"")); rv |= sb_add(&sql_buf, &cmd->table); /* table name */ rv |= sb_add(&sql_buf, set_str(&tmpstr, "\"")); if (!DB_FLD_EMPTY(cmd->match)) { rv |= sb_add(&sql_buf, &strings[STR_WHERE]); for(i = 0, fld = cmd->match; !DB_FLD_LAST(fld[i]); i++) { rv |= sb_add(&sql_buf, set_str(&tmpstr, fld[i].name)); switch(fld[i].op) { case DB_EQ: rv |= sb_add(&sql_buf, &strings[STR_OP_EQ]); break; case DB_NE: rv |= sb_add(&sql_buf, &strings[STR_OP_NE]); break; case DB_LT: rv |= sb_add(&sql_buf, &strings[STR_OP_LT]); break; case DB_GT: rv |= sb_add(&sql_buf, &strings[STR_OP_GT]); break; case DB_LEQ: rv |= sb_add(&sql_buf, &strings[STR_OP_LEQ]); break; case DB_GEQ: rv |= sb_add(&sql_buf, &strings[STR_OP_GEQ]); break; } rv |= sb_add(&sql_buf, get_marker(i + 1)); if (!DB_FLD_LAST(fld[i + 1])) rv |= sb_add(&sql_buf, &strings[STR_AND]); } } rv |= sb_add(&sql_buf, &strings[STR_ZT]); if (rv) goto error; sql_cmd->s = sql_buf.s; sql_cmd->len = sql_buf.len; return 0; error: if (sql_buf.s) pkg_free(sql_buf.s); return -1; } int build_select_oid_sql(str* sql_cmd) { struct string_buffer sql_buf = {.s = NULL, .len = 0, .size = 0, .increment = 128}; int rv = 0; rv = sb_add(&sql_buf, &strings[STR_OID]); rv |= sb_add(&sql_buf, &strings[STR_ZT]); if (rv) goto error; sql_cmd->s = sql_buf.s; sql_cmd->len = sql_buf.len; return 0; error: if (sql_buf.s) pkg_free(sql_buf.s); return -1; } int build_timestamp_format_sql(str* sql_cmd) { struct string_buffer sql_buf = {.s = NULL, .len = 0, .size = 0, .increment = 128}; int rv = 0; rv = sb_add(&sql_buf, &strings[STR_TIMESTAMP]); rv |= sb_add(&sql_buf, &strings[STR_ZT]); if (rv) goto error; sql_cmd->s = sql_buf.s; sql_cmd->len = sql_buf.len; return 0; error: if (sql_buf.s) pkg_free(sql_buf.s); return -1; }