X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=trialSwap2.cpp;h=812077d16c98c5a3c865f197d1ba6f50fbce07a6;hb=41a0537df3cb09cb8c725eab126fcf9bf28ebd8d;hp=9a5232b526851d704ac9e7d738cf18a4f6326945;hpb=c24be04180aacf08ce518d02a5402d23e53d0b73;p=mothur.git diff --git a/trialSwap2.cpp b/trialSwap2.cpp index 9a5232b..812077d 100644 --- a/trialSwap2.cpp +++ b/trialSwap2.cpp @@ -527,102 +527,8 @@ int TrialSwap2::sim7(vector initrowtotal, vector > &co_matrix) 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; @@ -630,7 +536,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 @@ -679,12 +585,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 @@ -721,11 +627,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 ); @@ -762,32 +668,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"); @@ -804,20 +725,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) { @@ -918,83 +835,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); - } -} -/**************************************************************************************************/ +