]> git.donarmstrong.com Git - mothur.git/blobdiff - eachgapignore.h
changing command name classify.shared to classifyrf.shared
[mothur.git] / eachgapignore.h
index edc1cab3e4a1bbaf006df491ce1cd79da69db046..2e7fbd6bd228d3ed625cd1904ecd7d15075d9234 100644 (file)
 class eachGapIgnoreTermGapDist : public Dist {
        
 public:
+       eachGapIgnoreTermGapDist() {}
+       eachGapIgnoreTermGapDist(const eachGapIgnoreTermGapDist& ddb) {}
        
        void calcDist(Sequence A, Sequence B){          
                int diff = 0;
                int length = 0;
                int start = 0;
                int end = 0;
+               bool overlap = false;
                
-               for(int i=0;i<A.getLength();i++){
-                       if(A.getUnaligned()[i] == '.' || B.getUnaligned()[i] == '.' || A.getUnaligned()[i] == '-' || B.getUnaligned()[i] == '-'){
-                       }
-                       else{
+               string seqA = A.getAligned();
+               string seqB = B.getAligned();
+               int alignLength = seqA.length();
+               
+               for(int i=0;i<alignLength;i++){
+                       if(seqA[i] != '.' && seqB[i] != '.' && seqA[i] != '-' && seqB[i] != '-' ){
                                start = i;
+//                             cout << "start: " << start << endl;
+                               overlap = true;
                                break;
                        }
                }
-               for(int i=A.getLength()-1;i>=0;i--){
-                       if(A.getUnaligned()[i] == '.' || B.getUnaligned()[i] == '.' || A.getUnaligned()[i] == '-' || B.getUnaligned()[i] == '-'){
-                       }
-                       else{
+               for(int i=alignLength-1;i>=0;i--){
+                       if(seqA[i] != '.' && seqB[i] != '.' && seqA[i] != '-' && seqB[i] != '-' ){
                                end = i;
+//                             cout << "end: " << end << endl;
+                               overlap = true;
                                break;
                        }
                }
                
                for(int i=start;i<=end;i++){
-                       if(A.getUnaligned()[i] == '-' && B.getUnaligned()[i] == '-'){}
-                       else if(A.getUnaligned()[i] == '.' || B.getUnaligned()[i] == '.'){
+                       if(seqA[i] == '.' || seqB[i] == '.'){
                                break;  
                        }
-                       else if(A.getUnaligned()[i] != '-' && B.getUnaligned()[i] != '-'){
-                               if(A.getUnaligned()[i] != B.getUnaligned()[i]){
+                       else if(seqA[i] != '-' || seqB[i] != '-'){
+                               if(seqA[i] != seqB[i]){
                                        diff++;
                                }
                                length++;
                        }
-                       else if(A.getUnaligned()[i] != '-' || B.getUnaligned()[i] != '-'){
-                               diff++;
-                               length++;
-                       }
                }
                
+               //non-overlapping sequences
+               if (!overlap) { length = 0; }
+               
                if(length == 0) {       dist = 1.0000;                                                          }
                else                    {       dist = ((double)diff  / (double)length);        }