From: Kathryn Iverson Date: Mon, 30 Apr 2012 14:37:00 +0000 (-0400) Subject: re-wrote co-occurrence command X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=commitdiff_plain;h=c669e63b8cb1193d683a1016562d35b455f76575 re-wrote co-occurrence command --- diff --git a/.gitignore b/.gitignore index e43b0f9..1a3b8bd 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .DS_Store +/nbproject/private/ \ No newline at end of file diff --git a/cooccurrencecommand.cpp b/cooccurrencecommand.cpp index 85379d1..17ec199 100644 --- a/cooccurrencecommand.cpp +++ b/cooccurrencecommand.cpp @@ -299,102 +299,287 @@ int CooccurrenceCommand::getCooccurrence(vector& thisLookUp int ncols = thisLookUp.size();//groups double initscore = 0.0; - vector initcolumntotal; initcolumntotal.resize(ncols, 0); - vector initrowtotal; initrowtotal.resize(nrows, 0); + vector columntotal; columntotal.resize(ncols, 0); + vector rowtotal; rowtotal.resize(nrows, 0); vector stats; + double probabilityMatrix[ncols * nrows]; + vector > nullmatrix(nrows, vector(ncols, 0)); TrialSwap2 trial; - initcolumntotal = rowtotal; - initrowtotal = columntotal; - trial.update_row_col_totals(co_matrix, rowtotal, columntotal); + n = accumulate( columntotal.begin(), columntotal.end(), 0 ); - if (metric == "cscore") { initscore = trial.calc_c_score(co_matrix, rowtotal); } - else if (metric == "checker") { initscore = trial.calc_checker(co_matrix, rowtotal); } - else if (metric == "vratio") { initscore = trial.calc_vratio(rowtotal, columntotal); } - else if (metric == "combo") { initscore = trial.calc_combo(co_matrix); } + //============================================================ + + //generate a probability matrix. Only do this once. + float start = 0.0; + + if (matrix == "sim1") { + for(int i=0;imothurOut("[ERROR]: No model selected! \n"); + m->control_pressed = true; + } + } + + + + if (metric == "cscore") { initscore = trial.calc_c_score(initmatrix, rowtotal, ncols, nrows); } + else if (metric == "checker") { initscore = trial.calc_checker(initmatrix, 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, initmatrix); } else { m->mothurOut("[ERROR]: No metric selected!\n"); m->control_pressed = true; return 1; } m->mothurOut("Initial c score: " + toString(initscore)); m->mothurOutEndLine(); - //nullmatrix burn in - for(int i=0;i<10000;i++) { - if (m->control_pressed) { return 0; } - 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; + double previous; + double current; + double randnum; + int count; + + //burn-in + for(int i=0;i<10000;i++){ + nullmatrix.clear(); + //zero-fill the null matrix + nullmatrix.assign(nrows, vector(ncols, 0)); + + if(matrix == "sim1" || matrix == "sim6" || matrix == "sim8" || matrix == "sim7") { + count = 0; + while(count < n) { + nextnum: + previous = 0.0; + randnum = rand() / double(RAND_MAX); + for(int i=0;i previous) { + nullmatrix[i][j] = 1; + count++; + if (count > n) break; + else + goto nextnum; + } + previous = current; + } + } + } + } + + else if(matrix == "sim2" || matrix == "sim4") { + for(int i=0;i previous && nullmatrix[i][j] != 1) { + nullmatrix[i][j] = 1; + count++; + previous = 0.0; + break; + } + previous = current; + } + } + } } + + else if(matrix == "sim3" || matrix == "sim5") { + //columns + for(int j=0;j previous && nullmatrix[i][j] != 1) { + nullmatrix[i][j] = 1; + count++; + previous = 0.0; + break; + } + previous = current; + } + } + } + } + } - - //run - for(int i=0;icontrol_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; + + //populate null matrix from probability matrix, do this a lot. + for(int i=0;i(ncols, 0)); + + if(matrix == "sim1" || matrix == "sim6" || matrix == "sim8" || matrix == "sim7") { + count = 0; + while(count < n) { + nextnum: + previous = 0.0; + randnum = rand() / double(RAND_MAX); + for(int i=0;i previous) { + nullmatrix[i][j] = 1; + count++; + if (count > n) break; + else + goto nextnum; + } + previous = current; + } + } + } + } + + else if(matrix == "sim2" || matrix == "sim4") { + for(int i=0;i previous && nullmatrix[i][j] != 1) { + nullmatrix[i][j] = 1; + count++; + previous = 0.0; + break; + } + previous = current; + } + } + } + } + + else if(matrix == "sim3" || matrix == "sim5") { + //columns + for(int j=0;j previous && nullmatrix[i][j] != 1) { + nullmatrix[i][j] = 1; + count++; + previous = 0.0; + break; + } + previous = current; + } + } + } } - // - // - //trial.update_row_col_totals(co_matrix, rowtotal, columntotal); - if (metric == "cscore") { - stats.push_back(trial.calc_c_score(co_matrix, rowtotal)); - }else if (metric == "checker") { - stats.push_back(trial.calc_checker(co_matrix, rowtotal)); - }else if (metric == "vratio") { - stats.push_back(trial.calc_vratio(rowtotal, columntotal)); - }else if (metric == "combo") { - stats.push_back(trial.calc_combo(co_matrix)); - }else { - m->mothurOut("[ERROR]: No metric selected!\n"); - m->control_pressed = true; + //swap_checkerboards takes the original matrix and swaps checkerboards + else if(matrix == "sim9") { + trial.swap_checkerboards (initmatrix, rowtotal, columntotal, ncols, nrows); + } + else { + cout << "[ERROR]: No null model selected!\n" << endl; return 1; } - + + //run metric on null matrix and add score to the stats vector + if (metric == "cscore"){ + stats.push_back(trial.calc_c_score(nullmatrix, rowtotal, ncols, nrows)); + } + else if (metric == "checker") { + stats.push_back(trial.calc_checker(nullmatrix, rowtotal, ncols, nrows)); + } + else if (metric == "vratio") { + stats.push_back(trial.calc_vratio(nrows, ncols, rowtotal, columntotal)); + } + else if (metric == "combo") { + stats.push_back(trial.calc_combo(nrows, ncols, nullmatrix)); + } + else { + cout << "[ERROR]: No metric selected!\n" << endl; + return 1; + } + } + + double total = 0.0; for (int i=0; i > &co_matrix){ - try { - vector randRow; - vector > tmpmatrix; - int nrows = co_matrix.size(); - int ncols = co_matrix[0].size(); - - //clear co_matrix - // for(i=0;icontrol_pressed) { break; } - - for(int j=0;j 0.5) { - randRow.push_back(1); - }else{ - randRow.push_back(0); - } - } - tmpmatrix.push_back(randRow); - randRow.clear(); - //cout << endl; - } - co_matrix = tmpmatrix; - - return 0; - } - catch(exception& e) { - m->errorOut(e, "TrialSwap2", "sim1"); - exit(1); - } -} -/**************************************************************************************************/ -/* - *row sums fixed, columns equiprobable - */ -void TrialSwap2::sim2(vector > &co_matrix) -{ - try { - - for(int i=0;icontrol_pressed) { break; } - random_shuffle( co_matrix[i].begin(), co_matrix[i].end() ); - } - } - catch(exception& e) { - m->errorOut(e, "TrialSwap2", "sim2"); - exit(1); - } -} -/**************************************************************************************************/ -int TrialSwap2::sim2plus(vector rowtotal, vector > &co_matrix) -{ - try { - int nrows = co_matrix.size(); - int ncols = co_matrix[0].size(); - double cellprob = 1.0/ncols; - vector cellprobvec; - vector tmprow; - vector > tmpmatrix; - //double randNum; - - double start = 0.0; - - for(int i=0; icontrol_pressed) { return 0; } - cellprobvec.push_back(start + cellprob); - start = cellprobvec[i]; - } - - for(int i=0; icontrol_pressed) { return 0; } - double randNum = rand() / double(RAND_MAX); - //cout << randNum << endl; - if(randNum <= cellprobvec[0]) - { - tmprow[0] = 1; - continue; - } - for(int j=1;j cellprobvec[j-1] && tmprow[j] != 1) - { - tmprow[j] = 1; - } - } - } - tmpmatrix.push_back(tmprow); - tmprow.clear(); - } - co_matrix = tmpmatrix; - tmpmatrix.clear(); - cellprobvec.clear(); - - return 0; - } - catch(exception& e) { - m->errorOut(e, "TrialSwap2", "sim2plus"); - exit(1); - } -} -/**************************************************************************************************/ -/* - * same as sim2 but using initmatrix which is the initial co-occurrence matrix before transposition - * may have to be changed depending on what matrix 'seed' is used. One way to use is to transpose - * every null matrix before using an index and use the random matrix as a seed for the next null. - */ -/**************************************************************************************************/ -void TrialSwap2::sim3(vector > &initmatrix) -{ - try { - for(int i=0;icontrol_pressed) { break; } - random_shuffle( initmatrix[i].begin(), initmatrix[i].end() ); - } - - } - catch(exception& e) { - m->errorOut(e, "TrialSwap2", "sim3"); - exit(1); - } -} -/**************************************************************************************************/ -/* - * - * - * - */ -/**************************************************************************************************/ -int TrialSwap2::sim4(vector columntotal, vector rowtotal, vector > &co_matrix) -{ - try { - vector colProb; - vector tmprow;//(ncols, 7); - vector > tmpmatrix; - vector range; - vector randNums; - int ncols = columntotal.size(); - int nrows = rowtotal.size(); - tmprow.clear(); - - double colSum = accumulate( columntotal.begin(), columntotal.end(), 0 ); - //cout << "col sum: " << colSum << endl; - for(int i=0;icontrol_pressed) { return 0; } - colProb.push_back(columntotal[i]/colSum); - } - - double start = 0.0; - - for(int i=0;icontrol_pressed) { return 0; } - range.push_back(start + colProb[i]); - start = range[i]; - } - - for(int i=0;icontrol_pressed) { return 0; } - - while ( accumulate( tmprow.begin(), tmprow.end(), 0 ) < rowtotal[i]) - { - if (m->control_pressed) { return 0; } - - double randNum = rand() / double(RAND_MAX); - if(randNum <= range[0]) - { - tmprow[0] = 1; - continue; - } - for(int j=1;j range[j-1] && tmprow[j] != 1) - { - tmprow[j] = 1; - } - - } - } - tmpmatrix.push_back(tmprow); - tmprow.clear(); - } - - co_matrix = tmpmatrix; - - return 0; - } - catch(exception& e) { - m->errorOut(e, "TrialSwap2", "sim4"); - exit(1); - } -} -/**************************************************************************************************/ -/* - * inverse of sim4, MUST BE TRANSPOSED BEFORE CO-OCCURRENCE ANALYSIS - * - * - */ -/**************************************************************************************************/ -int TrialSwap2::sim5(vector initcolumntotal,vector initrowtotal, vector > &initmatrix) -{ - try { - vector colProb; - vector tmprow;//(ncols, 7); - vector > tmpmatrix; - vector range; - vector randNums; - int ncols = initcolumntotal.size(); - int nrows = initrowtotal.size(); - - tmprow.clear(); - - double colSum = accumulate( initcolumntotal.begin(), initcolumntotal.end(), 0 ); - //cout << "col sum: " << colSum << endl; - for(int i=0;icontrol_pressed) { return 0; } - colProb.push_back(initcolumntotal[i]/colSum); - } - - double start = 0.0; - - for(int i=0;icontrol_pressed) { return 0; } - range.push_back(start + colProb[i]); - start = range[i]; - } - - for(int i=0;icontrol_pressed) { return 0; } - - while ( accumulate( tmprow.begin(), tmprow.end(), 0 ) < initrowtotal[i]) - { - if (m->control_pressed) { return 0; } - - double randNum = rand() / double(RAND_MAX); - if(randNum <= range[0]) - { - tmprow[0] = 1; - continue; - } - for(int j=1;j range[j-1] && tmprow[j] != 1) - { - tmprow[j] = 1; - } - - } - } - tmpmatrix.push_back(tmprow); - tmprow.clear(); - } - - initmatrix = tmpmatrix; - return 0; - } - catch(exception& e) { - m->errorOut(e, "TrialSwap2", "sim5"); - exit(1); - } -} -/**************************************************************************************************/ -/* - * - * - * - */ -/**************************************************************************************************/ -int TrialSwap2::sim6(vector columntotal, vector > &co_matrix) -{ - try { - vector > tmpmatrix; - vector colProb; - vector tmprow; - vector range; - int ncols = columntotal.size(); - int nrows = co_matrix.size(); - - int colSum = accumulate( columntotal.begin(), columntotal.end(), 0 ); - - for(int i=0;icontrol_pressed) { return 0; } - colProb.push_back(columntotal[i]/double (colSum)); - } - - double start = 0.0; - - for(int i=0;icontrol_pressed) { return 0; } - range.push_back(start + colProb[i]); - start = range[i]; - } - - for(int i=0;icontrol_pressed) { return 0; } - tmprow.assign(ncols, 0); - int tmprowtotal; - tmprowtotal = (rand() / double (RAND_MAX)) * 10; - while ( tmprowtotal > ncols) { - if (m->control_pressed) { return 0; } - tmprowtotal = (rand() / double (RAND_MAX)) * 10; - } - //cout << tmprowtotal << endl; - //cout << accumulate( tmprow.begin(), tmprow.end(), 0 ) << endl; - - while ( accumulate( tmprow.begin(), tmprow.end(), 0 ) < tmprowtotal) - { - if (m->control_pressed) { return 0; } - double randNum = rand() / double(RAND_MAX); - //cout << randNum << endl; - if(randNum <= range[0]) - { - tmprow[0] = 1; - continue; - } - for(int j=1;j range[j-1] && tmprow[j] != 1) - { - tmprow[j] = 1; - } - - } - - - } - - tmpmatrix.push_back(tmprow); - tmprow.clear(); - } - - co_matrix = tmpmatrix; - tmpmatrix.clear(); - - return 0; - } - catch(exception& e) { - m->errorOut(e, "TrialSwap2", "sim6"); - exit(1); - } -} -/**************************************************************************************************/ -/* - * MUST BE TRANSPOSED BEFORE CO-OCCURRENCE ANALYSIS - * - * - */ -/**************************************************************************************************/ -int TrialSwap2::sim7(vector initrowtotal, vector > &co_matrix) -{ - try { - vector > probmatrix; - vector > tmpmatrix; - vector colProb; - vector probrow; - vector tmprow; - vector range; - double nc; - int ncols = co_matrix[0].size(); int nrows = co_matrix.size(); - - tmpmatrix.assign(nrows, vector(ncols, 0.)); - - int rowsum = accumulate( initrowtotal.begin(), initrowtotal.end(), 0 ); - - nc = rowsum * ncols; - //cout << nc << endl; - - //assign null matrix based on probabilities - - double start = 0.0; // don't reset start -- probs should be from 0-1 thoughout the entire matrix - - for(int i=0;icontrol_pressed) { return 0; } - //cout << initrowtotal[i]/double(nc) << endl; - double cellprob = initrowtotal[i]/double(nc); - //cout << cellprob << endl; - for(int j=0;jcontrol_pressed) { return 0; } - done: - //cout << k << endl; - //tmprowsum = accumulate( tmprowtotal.begin(), tmprowtotal.end(), 0 ); - double randNum = rand() / double(RAND_MAX); - //cout << randNum << "+" << endl; - //special case for the first entry - if(randNum <= probmatrix[0][0] && tmpmatrix[0][0] != 1) - { - tmpmatrix[0][0] = 1; - k++; - //cout << k << endl; - continue; - } - - - for(int i=0;icontrol_pressed) { return 0; } - for(int j=0;j probmatrix[i][j-1] && tmpmatrix[i][j] != 1) - { - tmpmatrix[i][j] = 1; - k++; - //cout << k << endl; - goto done; - } - //else - //k = k-1; - } - - } - - } - - co_matrix = tmpmatrix; - return 0; - //build probibility matrix - /* for(int i=0;i ncols) - tmprowtotal = (rand() / double (RAND_MAX)) * 10; - //cout << tmprowtotal << endl; - //cout << accumulate( tmprow.begin(), tmprow.end(), 0 ) << endl; - - while ( accumulate( tmprow.begin(), tmprow.end(), 0 ) < tmprowtotal) - { - double randNum = rand() / double(RAND_MAX); - //cout << randNum << endl; - if(randNum <= range[0]) - { - tmprow[0] = 1; - continue; - } - for(int j=1;j range[j-1] && tmprow[j] != 1) - { - tmprow[j] = 1; - } - } - } - - tmpmatrix.push_back(tmprow); - tmprow.clear(); - } - initmatrix = tmpmatrix; - */ - } - catch(exception& e) { - m->errorOut(e, "TrialSwap2", "sim7"); - exit(1); - } -} -/**************************************************************************************************/ -/* - * - * - * - */ /**************************************************************************************************/ -int TrialSwap2::sim8(vector columntotal, vector rowtotal, vector > &co_matrix) -{ - try { - double prob; - double start = 0.0; - int ncols = columntotal.size(); int nrows = rowtotal.size(); - double probarray[nrows * ncols]; - double randnum; - int grandtotal; - int total = 0; - - //double colSum = accumulate( columntotal.begin(), columntotal.end(), 0 ); - double rowSum = accumulate( rowtotal.begin(), rowtotal.end(), 0 ); - - if (m->control_pressed) { return 0; } - - //cout << "rowsum: " << rowSum << endl; - - grandtotal = rowSum; - - //create probability matrix with each site being between 0 and 1 - for (int i=0;icontrol_pressed) { return 0; } - for (int j=0;jcontrol_pressed) { return 0; } - randnum = rand() / double(RAND_MAX); - //cout << "rand num: " << randnum << endl; - if((randnum <= probarray[0]) && (probarray[0] != 2) ) { - probarray[0] = 2; - total++; - continue; - } - for(int i=1;i<(nrows*ncols);i++) { - if (m->control_pressed) { return 0; } - if((randnum <= probarray[i]) && (randnum > probarray[i-1]) && (probarray[i] != 2) ) { - probarray[i] = 2; - total++; - break; - } - else - continue; - } - } - //cout << "prbarray" << endl; - //for(int i=0;i<(nrows*ncols);i++) - //cout << probarray[i] << " "; - //cout << endl; - for(int i=0;icontrol_pressed) { return 0; } - for(int j=0;jerrorOut(e, "TrialSwap2", "sim8"); - exit(1); - } -} -/**************************************************************************************************/ -double TrialSwap2::calc_c_score (vector > &co_matrix,vector rowtotal) +double TrialSwap2::calc_c_score (vector > &co_matrix, vector rowtotal, int ncols, int nrows) { try { double cscore = 0.0; @@ -652,7 +32,7 @@ double TrialSwap2::calc_c_score (vector > &co_matrix,vector ro double D; double normcscore = 0.0; int nonzeros = 0; - int ncols = co_matrix[0].size(); int nrows = rowtotal.size(); + //int ncols = co_matrix[0].size(); int nrows = rowtotal.size(); vector > s; s.resize(nrows); for (int i = 0; i < nrows; i++) { s[i].resize(nrows,0.0); }//only fill half the matrix @@ -701,12 +81,12 @@ double TrialSwap2::calc_c_score (vector > &co_matrix,vector ro } } /**************************************************************************************************/ -int TrialSwap2::calc_checker (vector > &co_matrix, vector rowtotal) +int TrialSwap2::calc_checker (vector > &co_matrix, vector rowtotal, int ncols, int nrows) { try { int cunits=0; //int s[nrows][ncols]; - int ncols = co_matrix[0].size(); int nrows = rowtotal.size(); + //int ncols = co_matrix[0].size(); int nrows = rowtotal.size(); vector > s; s.resize(nrows); for (int i = 0; i < nrows; i++) { s[i].resize(nrows,0); }//only fill half the matrix @@ -743,11 +123,11 @@ int TrialSwap2::calc_checker (vector > &co_matrix, vector rowt } } /**************************************************************************************************/ -double TrialSwap2::calc_vratio (vector rowtotal, vector columntotal) +double TrialSwap2::calc_vratio (int nrows, int ncols, vector rowtotal, vector columntotal) { try { - int nrows = rowtotal.size(); - int ncols = columntotal.size(); + //int nrows = rowtotal.size(); + //int ncols = columntotal.size(); int sumCol = accumulate(columntotal.begin(), columntotal.end(), 0 ); // int sumRow = accumulate(rowtotal.begin(), rowtotal.end(), 0 ); @@ -784,32 +164,47 @@ double TrialSwap2::calc_vratio (vector rowtotal, vector columntotal) } /**************************************************************************************************/ -int TrialSwap2::calc_combo (vector > &initmatrix) +int TrialSwap2::calc_combo (int nrows, int ncols, vector > &nullmatrix) { try { - int initrows = initmatrix.size(); + //need to transpose so we can compare rows (row-major order) + int tmpnrows = nrows; + vector > tmpmatrix; + + vector tmprow; + if(!tmpmatrix.empty()) + tmpmatrix.clear(); + for (int i=0;icontrol_pressed) { return 0; } - if( (initmatrix[i] == initmatrix[j])) + //comparing matrix rows + if( (tmpmatrix[j] == tmpmatrix[i])) { match++; - matches++; break; } } - + //on the last iteration of a previously matched row it will add itself because it doesn't match any following rows, so that combination is counted if (match == 0) unique++; - } - return unique; + } + return unique; } catch(exception& e) { m->errorOut(e, "TrialSwap2", "calc_combo"); @@ -826,20 +221,16 @@ int TrialSwap2::swap_checkerboards (vector > &co_matrix) while((j = m->getRandomIndex(nrows-1) ) == i ) {;if (m->control_pressed) { return 0; }} k = m->getRandomIndex(ncols-1); while((l = m->getRandomIndex(ncols-1)) == k ) {;if (m->control_pressed) { return 0; }} - - //cout << co_matrix[i][k] << " " << co_matrix[j][l] << endl; - //cout << co_matrix[i][l] << " " << co_matrix[j][k] << endl; - //cout << co_matrix[i][l] << " " << co_matrix[j][k] << endl; - //cout << co_matrix[i][l] << " " << co_matrix[j][k] << endl; + if((co_matrix[i][k]*co_matrix[j][l]==1 && co_matrix[i][l]+co_matrix[j][k]==0)||(co_matrix[i][k]+co_matrix[j][l]==0 && co_matrix[i][l]*co_matrix[j][k]==1)) //checking for checkerboard value and swap { co_matrix[i][k]=1-co_matrix[i][k]; co_matrix[i][l]=1-co_matrix[i][l]; co_matrix[j][k]=1-co_matrix[j][k]; co_matrix[j][l]=1-co_matrix[j][l]; - //cout << "swapped!" << endl; + } - //cout << "i: " << i << " j: " << j << " k: " << " l: " << l << endl; + return 0; } catch(exception& e) { @@ -940,83 +331,7 @@ int TrialSwap2::print_matrix(vector > &matrix, int nrows, int ncols) } } /**************************************************************************************************/ -int TrialSwap2::transpose_matrix (vector > &initmatrix, vector > &co_matrix)//, int nrows, int nocols) -{ - try { - int ncols = initmatrix.size(); int nrows = initmatrix[0].size(); - int tmpnrows = nrows; - //vector > tmpvec; - vector tmprow; - if(!co_matrix.empty()) - co_matrix.clear(); - for (int i=0;icontrol_pressed) { return 0; } - for (int j=0;jerrorOut(e, "TrialSwap2", "transpose_matrix"); - exit(1); - } -} -/**************************************************************************************************/ -int TrialSwap2::update_row_col_totals(vector > &co_matrix, vector &rowtotal, vector &columntotal) -{ - try { - //rowtotal.clear(); - //columntotal.clear(); - //generate (rowtotal.begin(), rowtotal.end(), 0); - //generate (columntotal.begin(), columntotal.end(), 0); - int nrows = co_matrix.size(); - int ncols = co_matrix[0].size(); - vector tmpcolumntotal; tmpcolumntotal.resize(ncols, 0); - vector tmprowtotal; tmprowtotal.resize(nrows, 0); - - int rowcount = 0; - - for (int i = 0; i < nrows; i++) - { - if (m->control_pressed) { return 0; } - for (int j = 0; j < ncols; j++) - { - if (co_matrix[i][j] == 1) - { - rowcount++; - tmpcolumntotal[j]++; - } - } - tmprowtotal[i] = rowcount; - rowcount = 0; - } - columntotal = tmpcolumntotal; - rowtotal = tmprowtotal; - /*cout << "rowtotal: "; - for(int i = 0; ierrorOut(e, "TrialSwap2", "update_row_col_totals"); - exit(1); - } -} -/**************************************************************************************************/ + diff --git a/trialswap2.h b/trialswap2.h index 6e68e95..027c946 100644 --- a/trialswap2.h +++ b/trialswap2.h @@ -23,21 +23,9 @@ public: double calc_pvalue_greaterthan (vector, double); int swap_checkerboards (vector > &); int calc_combo (vector > &); - double calc_vratio (vector, vector); - int calc_checker (vector > &,vector); - double calc_c_score (vector > &,vector); - - int sim1 (vector > &); - void sim2(vector >&); - int sim2plus(vector, vector > &); - void sim3(vector > &); - int sim4(vector, vector, vector > &); - int sim5(vector, vector, vector > &); - int sim6(vector, vector > &); - int sim7(vector, vector > &); - int sim8(vector, vector, vector > &); - int transpose_matrix (vector > &, vector > &); - int update_row_col_totals(vector > &, vector&, vector&); + double calc_vratio (int, int, vector, vector); + int calc_checker (vector > &, vector, int, int); + double calc_c_score (vector > &, vector, int, int); private: