]> git.donarmstrong.com Git - mothur.git/blobdiff - chimeraslayer.cpp
working on chimeraslayer and found bug in shared command.
[mothur.git] / chimeraslayer.cpp
index 293ee807d5b875728716fddde17cd6c032f318e1..bd1908dd035f6a123ee1f749dfb47579ef5b831d 100644 (file)
@@ -26,9 +26,119 @@ ChimeraSlayer::~ChimeraSlayer() {
 //***************************************************************************************************************
 void ChimeraSlayer::print(ostream& out) {
        try {
-               
                mothurOutEndLine();
                
+               for (int i = 0; i < querySeqs.size(); i++) {
+               
+                       if (chimeraFlags[i] == "yes") { 
+                               mothurOut(querySeqs[i]->getName() + "\tyes"); mothurOutEndLine();
+                       
+                       }else{
+                               out << querySeqs[i]->getName() << "\tno" << endl;
+                               mothurOut("no");
+                       }
+               }
+/*             
+       
+       my $div_ratio_QLA_QRB = $data_struct->{div_ratio_QLA_QRB};
+       my $div_ratio_QRA_QLB = $data_struct->{div_ratio_QLB_QRA};
+       
+       my $per_id_QLA = $data_struct->{per_id_QLA};
+       my $per_id_QRB = $data_struct->{per_id_QRB};
+       my $per_id_AB = $data_struct->{per_id_AB};
+       my $per_id_QA = $data_struct->{per_id_QA};
+       my $per_id_QB = $data_struct->{per_id_QB}; 
+       my $per_id_LAB = $data_struct->{per_id_LAB};
+       my $per_id_RAB = $data_struct->{per_id_RAB};
+       my $per_id_QRA = $data_struct->{per_id_QRA};
+       my $per_id_QLB = $data_struct->{per_id_QLB};
+       my $per_id_QLB_QRA = $data_struct->{per_id_QLB_QRA};
+       my $per_id_QLA_QRB = $data_struct->{per_id_QLA_QRB};
+       
+       my $win_left_end5 = $data_struct->{win_left_end5};
+       my $win_left_end3 = $data_struct->{win_left_end3};
+       my $win_right_end5 = $data_struct->{win_right_end5};
+       my $win_right_end3 = $data_struct->{win_right_end3};
+       my $Q = $data_struct->{query_alignment};
+       my $A = $data_struct->{parent_A_alignment};
+       my $B = $data_struct->{parent_B_alignment}; 
+       my $BS_A = $data_struct->{BS_A};
+       my $BS_B = $data_struct->{BS_B};
+       
+       my @Q_chars = @{$Q->{align}};
+       my @A_chars = @{$A->{align}};
+       my @B_chars = @{$B->{align}};
+       
+       my $query_acc = $Q->{acc};
+       my $A_acc = $A->{acc};
+       my $B_acc = $B->{acc};
+       
+       my $break_left = $Q->{seqPos}->[$win_left_end3];
+       my $break_right = $Q->{seqPos}->[$win_right_end5];
+       
+       
+       cout << "//\n## CHIMERA\t" << querySeqs[i]->getName() << "\t" << $break_left-$break_right" << endl  
+               << "\tDIV_QLARB: ". sprintf("%.3f", $div_ratio_QLA_QRB)
+               << "\tBS_QLARB: " . sprintf("%.2f", $BS_A)
+               << "\tDIV_QRALB: " . sprintf("%.3f", $div_ratio_QRA_QLB)
+               << "\tBS_QRALB: " . sprintf("%.2f", $BS_B)
+               << "\t$A_acc\t$B_acc" 
+               << "\tbreakpoint: $break_left-$break_right\n\n";
+       
+       ## draw illustration:
+
+       print "            Per_id parents: " . sprintf("%.2f", $per_id_AB) . "\n\n";
+       print "           Per_id(Q,A): " . sprintf("%.2f", $per_id_QA) . "\n";
+       print "--------------------------------------------------- A: $A_acc\n"
+               . " " . sprintf("%.2f", $per_id_QLA) . "                                " . sprintf("%.2f", $per_id_QRA) . "\n"
+               . "~~~~~~~~~~~~~~~~~~~~~~~~\\ /~~~~~~~~~~~~~~~~~~~~~~~~ Q: $query_acc\n"
+               . "DivR: " . sprintf("%.3f", $div_ratio_QLA_QRB) . " BS: " . sprintf("%.2f", $BS_A) . "     |\n"
+               . "Per_id(QLA,QRB): " . sprintf("%.2f", $per_id_QLA_QRB) . "   |\n"
+               . "                         |\n"
+               . "   (L-AB: " . sprintf("%.2f", $per_id_LAB) . ")         |      (R-AB: " . sprintf("%.2f", $per_id_RAB) . ")\n"
+               . "   WinL:$win_left_end5-$win_left_end3            |      WinR:$win_right_end5-$win_right_end3\n"
+               . "                         |\n"
+               . "Per_id(QLB,QRA): " . sprintf("%.2f", $per_id_QLB_QRA) . "   |\n"
+               . "DivR: " . sprintf("%.3f", $div_ratio_QRA_QLB) . " BS: " . sprintf("%.2f", $BS_B) . "    |\n"
+               . "~~~~~~~~~~~~~~~~~~~~~~~~/ \\~~~~~~~~~~~~~~~~~~~~~~~~~ Q: $query_acc\n"
+               . " " . sprintf("%.2f", $per_id_QLB) . "                                " . sprintf("%.2f", $per_id_QRB) . "\n"
+               . "---------------------------------------------------- B: $B_acc\n";
+       print "            Per_id(Q,B): ". sprintf("%.2f", $per_id_QB) . "\n\n";
+       
+       my $deltaL = $per_id_QLA - $per_id_QLB;
+       my $deltaR = $per_id_QRA - $per_id_QRB;
+
+       print "DeltaL: " . sprintf("%.2f", $deltaL) . "                   DeltaR: " . sprintf("%.2f", $deltaR) . "\n\n";
+       
+       unless ($printAlignmentsFlag) { return; }
+       
+       
+       ## build the left windows:
+       my @Q_left_win = @Q_chars[$win_left_end5..$win_left_end3];
+       my @A_left_win = @A_chars[$win_left_end5..$win_left_end3];
+       my @B_left_win = @B_chars[$win_left_end5..$win_left_end3];
+       
+       &print_alignment($A_acc, \@A_left_win, 
+                                        $query_acc, \@Q_left_win, 
+                                        $B_acc, \@B_left_win);
+       
+       print "\t\t** Breakpoint **\n\n";
+       
+       my @Q_right_win = @Q_chars[$win_right_end5..$win_right_end3];
+       my @A_right_win = @A_chars[$win_right_end5..$win_right_end3];
+       my @B_right_win = @B_chars[$win_right_end5..$win_right_end3];
+       
+       &print_alignment($A_acc, \@A_right_win, 
+                                        $query_acc, \@Q_right_win, 
+                                        $B_acc, \@B_right_win);
+       
+       return;
+}
+
+
+####
+               
+       */      
                                
        }
        catch(exception& e) {
@@ -49,6 +159,9 @@ void ChimeraSlayer::getChimeras() {
                
                int numSeqs = querySeqs.size();
                
+               chimeraResults.resize(numSeqs);
+               chimeraFlags.resize(numSeqs, "no");
+               
                //break up file if needed
                int linesPerProcess = numSeqs / processors ;
                
@@ -80,11 +193,10 @@ void ChimeraSlayer::getChimeras() {
                        float percentIdentical = maligner->getPercentID();
                        vector<results> Results = maligner->getOutput();
                        
-                       cout << querySeqs[4]->getName() << '\t' << chimeraFlag << '\t' << percentIdentical << endl;
+                       //cout << querySeqs[i]->getName() << '\t' << chimeraFlag << '\t' << percentIdentical << endl;
                        
                        for (int j = 0; j < Results.size(); j++) {
-                               cout << "regionStart = " << Results[j].regionStart << "\tRegionEnd = " << Results[j].regionEnd << "\tName = " << Results[j].parent << "\tPerQP = " << Results[j].queryToParent << "\tLocalPerQP = " << Results[j].queryToParentLocal << "\tdivR = " << Results[j].divR << endl;
-                               
+                               //cout << "regionStart = " << Results[j].regionStart << "\tRegionEnd = " << Results[j].regionEnd << "\tName = " << Results[j].parent << "\tPerQP = " << Results[j].queryToParent << "\tLocalPerQP = " << Results[j].queryToParentLocal << "\tdivR = " << Results[j].divR << endl;
                        }
                        
                        if (chimeraFlag == "yes") {
@@ -116,7 +228,7 @@ void ChimeraSlayer::getChimeras() {
                                                seqs.pop_back();        
                                        }
                                }
-                               
+               
                                //put seqs into vector to send to slayer
                                vector<Sequence*> seqsForSlayer;
                                for (int k = 0; k < seqs.size(); k++) {  seqsForSlayer.push_back(seqs[k].seq);  }
@@ -136,8 +248,9 @@ void ChimeraSlayer::getChimeras() {
                                }
                                
                                //send to slayer
-                               slayer->getResults(querySeqs[i], seqsForSlayer);
-                               
+                               chimeraFlags[i] = slayer->getResults(querySeqs[i], seqsForSlayer);
+                               chimeraResults[i] = slayer->getOutput();
+                       
                                //free memory
                                for (int k = 0; k < seqs.size(); k++) {  delete seqs[k].seq;   }
                        }