-
- //run
- for(int i=0;i<runs;i++) {
- if (m->control_pressed) { return 0; }
- //calc metric of nullmatrix
- if (matrix == "sim1") {
- trial.sim1(co_matrix);
- }else if (matrix == "sim2") {
- trial.sim2(co_matrix);
- }else if (matrix == "sim3") {
- trial.sim3(initmatrix);
- co_matrix = initmatrix;
- }else if (matrix == "sim4") {
- trial.sim4(columntotal, rowtotal, co_matrix);
- }else if (matrix == "sim5") {
- trial.sim5(initcolumntotal, initrowtotal, initmatrix);
- trial.transpose_matrix(initmatrix,co_matrix);
- }else if (matrix == "sim6") {
- trial.sim6(columntotal, co_matrix);
- }else if (matrix == "sim7") {
- trial.sim7(initcolumntotal, initmatrix);
- co_matrix = initmatrix;
- }else if (matrix == "sim8") {
- trial.sim8(columntotal, rowtotal, co_matrix);
- }else if (matrix == "sim9") {
- trial.swap_checkerboards (co_matrix);
- }else{
- m->mothurOut("[ERROR]: No model selected! \n");
- m->control_pressed = true;
+ //don't need a prob matrix because we just shuffle the rows, may use this in the future
+ else if (matrix == "sim2") { }
+// for(int i=0;i<nrows;i++) {
+// start = 0.0;
+// for(int j=0;j<ncols;j++) {
+// probabilityMatrix[ncols * i + j] = start + 1/double(ncols);
+// start = start + 1/double(ncols);
+// }
+// }
+// }
+
+ else if (matrix == "sim3") {
+ for(int j=0;j<ncols;j++) {
+ start = 0.0;
+ for(int i=0;i<nrows;i++) {
+ probabilityMatrix[ncols * i + j] = start + 1/double(nrows);
+ start = start + 1/double(nrows);
+ }
+ }
+ }
+
+ else if (matrix == "sim4") {
+ for(int i=0;i<nrows;i++) {
+ start = 0.0;
+ for(int j=0;j<ncols;j++) {
+ probabilityMatrix[ncols * i + j] = start + columntotal[j]/double(n);
+ start = start + columntotal[j]/double(n);
+ }
+ }
+ }
+
+ else if (matrix == "sim5") {
+ for(int j=0;j<ncols;j++) {
+ start = 0.0;
+ for(int i=0;i<nrows;i++) {
+ probabilityMatrix[ncols * i + j] = start + rowtotal[i]/double(n);
+ start = start + rowtotal[i]/double(n);
+ }
+ }
+ }
+
+ else if (matrix == "sim6") {
+ for(int i=0;i<nrows;i++) {
+ for(int j=0;j<ncols;j++) {
+ probabilityMatrix[ncols * i + j] = start + columntotal[j]/double(n*nrows);
+ start = start + columntotal[j]/double(n*nrows);
+ }
+ }
+ }
+
+
+ else if (matrix == "sim7") {
+ for(int i=0;i<nrows;i++) {
+ for(int j=0;j<ncols;j++) {
+ probabilityMatrix[ncols * i + j] = start + rowtotal[i]/double(n*ncols);
+ start = start + rowtotal[i]/double(n*ncols);
+ }
+ }
+ }
+
+ else if (matrix == "sim8") {
+ for(int i=0;i<nrows;i++) {
+ for(int j=0;j<ncols;j++) {
+ probabilityMatrix[ncols * i + j] = start + (rowtotal[i]*columntotal[j])/double(n*n);
+ start = start + (rowtotal[i]*columntotal[j])/double(n*n);
+ }
+ }
+ }
+ else if (matrix == "sim9" || matrix == "sim2") { }
+ else {
+ m->mothurOut("[ERROR]: No model selected! \n");
+ m->control_pressed = true;
+ }
+
+
+ //co_matrix is the transposed shared file, initmatrix is the original shared file
+ if (metric == "cscore") { initscore = trial.calc_c_score(co_matrix, rowtotal, ncols, nrows); }
+ else if (metric == "checker") { initscore = trial.calc_checker(co_matrix, rowtotal, ncols, nrows); }
+ else if (metric == "vratio") { initscore = trial.calc_vratio(nrows, ncols, rowtotal, columntotal); }
+ else if (metric == "combo") { initscore = trial.calc_combo(nrows, ncols, co_matrix); }
+ else { m->mothurOut("[ERROR]: No metric selected!\n"); m->control_pressed = true; return 1; }
+
+ m->mothurOut("Initial c score: " + toString(initscore)); m->mothurOutEndLine();
+
+ double previous;
+ double current;
+ double randnum;
+ int count;
+
+ //burn-in for sim9
+ if(matrix == "sim9") {
+ for(int i=0;i<10000;i++) trial.swap_checkerboards (co_matrix, ncols, nrows);
+ }
+
+ //populate null matrix from probability matrix, do this a lot.
+ for(int k=0;k<runs;k++){
+ nullmatrix.clear();
+ //zero-fill the null matrix
+ nullmatrix.assign(nrows, vector<int>(ncols, 0));
+
+ if(matrix == "sim1" || matrix == "sim6" || matrix == "sim8" || matrix == "sim7") {
+ count = 0;
+ while(count < n) {
+ if (m->control_pressed) { return 0; }
+ nextnum2:
+ previous = 0.0;
+ randnum = rand() / double(RAND_MAX);
+ for(int i=0;i<nrows;i++) {
+ for(int j=0;j<ncols;j++) {
+ current = probabilityMatrix[ncols * i + j];
+ if(randnum <= current && randnum > previous) {
+ nullmatrix[i][j] = 1;
+ count++;
+ if (count > n) break;
+ else
+ goto nextnum2;
+ }
+ previous = current;
+ }
+ }
+ }