]> git.donarmstrong.com Git - mothur.git/commitdiff
Merge remote-tracking branch 'mothur/master'
authorSarah Westcott <mothur.westcott@gmail.com>
Tue, 1 May 2012 15:18:19 +0000 (11:18 -0400)
committerSarah Westcott <mothur.westcott@gmail.com>
Tue, 1 May 2012 15:18:19 +0000 (11:18 -0400)
cooccurrencecommand.cpp
trialSwap2.cpp

index 8c763e275e5d9cebf885794fafdc3c9f44f0cb6a..75b87fae4303f161a1f75fb632e831672a80e29d 100644 (file)
@@ -494,6 +494,7 @@ int CooccurrenceCommand::getCooccurrence(vector<SharedRAbundVector*>& thisLookUp
             //swap_checkerboards takes the original matrix and swaps checkerboards
             else if(matrix == "sim9") {
                 trial.swap_checkerboards (co_matrix, ncols, nrows);
+                nullmatrix = co_matrix;
             }
             else {
                 m->mothurOut("[ERROR]: No null model selected!\n\n"); m->control_pressed = true;
index a0c3210c33dd49c97274b4ad555efe2a75f9fede..2d25e835cbd5608bc1c4f4c6cc67397155f2c834 100644 (file)
@@ -195,20 +195,22 @@ int TrialSwap2::calc_combo (int nrows, int ncols, vector<vector<int> > &nullmatr
 int TrialSwap2::swap_checkerboards (vector<vector<int> > &co_matrix, int ncols, int nrows)
 {
     try {
-        //int ncols = co_matrix[0].size(); int nrows = co_matrix.size();
-        int i, j, k, l;
-        i = m->getRandomIndex(nrows-1);
-        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; }}
-        
-        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];
-            
+        //do 100 runs to make sure enough swaps are happening. This does NOT mean that there will be 1000 swaps, but that is the theoretical max.
+        for(int a=0;a<1000;a++){
+            int i, j, k, l;
+            i = m->getRandomIndex(nrows-1);
+            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; }}
+
+            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];
+
+            }
         }
         
         return 0;