]> git.donarmstrong.com Git - mothur.git/commitdiff
fixed id match
authorwestcott <westcott>
Tue, 3 May 2011 16:29:07 +0000 (16:29 +0000)
committerwestcott <westcott>
Tue, 3 May 2011 16:29:07 +0000 (16:29 +0000)
chimerarealigner.h
chimeraslayer.cpp
maligner.cpp
subsamplecommand.cpp

index 7ad741800e3b571f4c3b63dd8349bcf2e9e21e47..cf7115804122d202c62903b31664cb7db1b059e3 100644 (file)
@@ -25,8 +25,6 @@ class ChimeraReAligner  {
                                
        private:
                Sequence* querySeq;
-               
-               //Sequence* getSequence(string);  //find sequence from name
                MothurOut* m;
 };
 /***********************************************************/
index e62c2f047417f29658673493595a5ee1f01e8d29..1f7160aa0d91e8f049fbca4c8b5a85c0bed349d9 100644 (file)
@@ -765,10 +765,20 @@ int ChimeraSlayer::getChimeras(Sequence* query) {
                if (chimeraFlag == "yes") {
                
                        if (realign) {
+                               vector<Sequence*> parents;
+                               for (int i = 0; i < Results.size(); i++) {
+cout << Results[i].parent  << '\t' << Results[i].nastRegionStart << '\t' << Results[i].nastRegionEnd  << endl;
+                                       Sequence* parent = new Sequence(Results[i].parent, Results[i].parentAligned);
+                                       
+                                       parents.push_back(parent);
+                               }
+                               
                                ChimeraReAligner realigner;
-                               realigner.reAlign(query, Results);
+                               //realigner.reAlign(query, parents);
+                               
+                               for (int i = 0; i < parents.size(); i++) { delete parents[i]; }
                        }
-               
+       //query->printSequence(cout);
                        //get sequence that were given from maligner results
                        vector<SeqDist> seqs;
                        map<string, float> removeDups;
@@ -1037,7 +1047,7 @@ vector<Sequence*> ChimeraSlayer::getBlastSeqs(Sequence* q, vector<Sequence*>& db
                vector<int> mergedResults;
                for (int i = 0; i < smaller.size(); i++) {
                        if (m->control_pressed) { delete queryRight; delete queryLeft; return refResults; }
-                       
+       
                        //add left if you havent already
                        it = seen.find(smaller[i]);
                        if (it == seen.end()) {  
@@ -1065,7 +1075,7 @@ vector<Sequence*> ChimeraSlayer::getBlastSeqs(Sequence* q, vector<Sequence*>& db
                }
 
                for (int i = 0; i < mergedResults.size(); i++) {
-                       
+                       //cout << mergedResults[i]  << '\t' << db[mergedResults[i]]->getName() << endl; 
                        if (db[mergedResults[i]]->getName() != q->getName()) { 
                                Sequence* temp = new Sequence(db[mergedResults[i]]->getName(), db[mergedResults[i]]->getAligned());
                                refResults.push_back(temp);
index 2c2cb4bb30decaed945ba21e7bbdb171c86f817f..009f1e923c9fd7449a70409867e4cffe8bc7763b 100644 (file)
@@ -98,7 +98,7 @@ string Maligner::chimeraMaligner(int chimeraPenalty, DeCalculator* decalc) {
                int traceStart = trace[0].col;
                int traceEnd = trace[trace.size()-1].oldCol;    
                string queryInRange = query->getAligned();
-               queryInRange = queryInRange.substr(traceStart, (traceEnd-traceStart+1));
+               queryInRange = queryInRange.substr(traceStart, (traceEnd-traceStart));
                
                if (m->control_pressed) { return chimera;  }
                
@@ -118,20 +118,20 @@ string Maligner::chimeraMaligner(int chimeraPenalty, DeCalculator* decalc) {
                        temp.regionEnd = regionEnd;
                        
                        string parentInRange = refSeqs[seqIndex]->getAligned();
-                       parentInRange = parentInRange.substr(traceStart, (traceEnd-traceStart+1));
+                       parentInRange = parentInRange.substr(traceStart, (traceEnd-traceStart));
                        
                        temp.queryToParent = computePercentID(queryInRange, parentInRange);
                        temp.divR = (percentIdenticalQueryChimera / temp.queryToParent);
 
                        string queryInRegion = query->getAligned();
-                       queryInRegion = queryInRegion.substr(regionStart, (regionEnd-regionStart+1));
+                       queryInRegion = queryInRegion.substr(regionStart, (regionEnd-regionStart));
                        
                        string parentInRegion = refSeqs[seqIndex]->getAligned();
-                       parentInRegion = parentInRegion.substr(regionStart, (regionEnd-regionStart+1));
+                       parentInRegion = parentInRegion.substr(regionStart, (regionEnd-regionStart));
                        
                        temp.queryToParentLocal = computePercentID(queryInRegion, parentInRegion);
                        
-                       //cout << temp.parent << '\t' << "NAST:" << temp.nastRegionStart << '-' << temp.nastRegionEnd << " G:" << temp.queryToParent << " L:" << temp.queryToParentLocal << endl;
+                       cout << temp.parent << '\t' << "NAST:" << temp.nastRegionStart << '-' << temp.nastRegionEnd << " G:" << temp.queryToParent << " L:" << temp.queryToParentLocal << endl;
                        outputResults.push_back(temp);
                }
                
@@ -585,19 +585,32 @@ float Maligner::computePercentID(string queryAlign, string chimera) {
                        return -1.0;
                }
 
-       
-               int numBases = 0;
                int numIdentical = 0;
-       
+               int countA = 0;
+               int countB = 0;
                for (int i = 0; i < queryAlign.length(); i++) {
-                       if ((isalpha(queryAlign[i])) || (isalpha(chimera[i])))  {
-                               numBases++;             
-                               if (queryAlign[i] == chimera[i]) {
-                                       numIdentical++;
+                       if (((queryAlign[i] != 'G') && (queryAlign[i] != 'T') && (queryAlign[i] != 'A') && (queryAlign[i] != 'C')&& (queryAlign[i] != '.') && (queryAlign[i] != '-')) ||
+                               ((chimera[i] != 'G') && (chimera[i] != 'T') && (chimera[i] != 'A') && (chimera[i] != 'C')&& (chimera[i] != '.') && (chimera[i] != '-'))) {}
+                       else {
+
+                               bool charA = false; bool charB = false;
+                               if ((queryAlign[i] == 'G') || (queryAlign[i] == 'T') || (queryAlign[i] == 'A') || (queryAlign[i] == 'C')) { charA = true; }
+                               if ((chimera[i] == 'G') || (chimera[i] == 'T') || (chimera[i] == 'A') || (chimera[i] == 'C')) { charB = true; }
+                                       
+                               if (charA || charB) {
+                                               
+                                       if (charA) { countA++; }
+                                       if (charB) { countB++; }
+                                               
+                                       if (queryAlign[i] == chimera[i]) {
+                                               numIdentical++;
+                                       }
                                }
                        }
                }
-       
+               
+               float numBases = (countA + countB) /(float) 2;
+               
                if (numBases == 0) { return 0; }
        
                float percentIdentical = (numIdentical/(float)numBases) * 100;
index a055e81a1a1f6228ee069ad38760868c7cbaf082..73c1e5c76c48db67f0676ebb4a409aa0660b241d 100644 (file)
@@ -1146,7 +1146,7 @@ int SubSampleCommand::processList(ListVector*& list, ofstream& out, set<string>&
                                        individual += binnames[j];
                                }
                        }
-                       if (subset.count(individual) != 0) {  newNames += individual;  }
+                       if (subset.count(individual) != 0) {  newNames += individual + ",";  }
                        
                        
                        //if there are names in this bin add to new list