]> git.donarmstrong.com Git - mothur.git/blobdiff - pcacommand.cpp
moved utilities out of mothur.h and into mothurOut class.
[mothur.git] / pcacommand.cpp
index c17053e29cb31812f681333078199c9abaea02fa..c982d7563c8f26066924eeab070f5fd16a5b30e5 100644 (file)
@@ -12,7 +12,7 @@
 
 //**********************************************************************************************************************
 
-PCACommand::PCACommand(string option){
+PCACommand::PCACommand(string option)  {
        try {
                abort = false;
                
@@ -42,7 +42,7 @@ PCACommand::PCACommand(string option){
                                it = parameters.find("phylip");
                                //user has given a template file
                                if(it != parameters.end()){ 
-                                       path = hasPath(it->second);
+                                       path = m->hasPath(it->second);
                                        //if the user has not given a path then, add inputdir. else leave path alone.
                                        if (path == "") {       parameters["phylip"] = inputDir + it->second;           }
                                }
@@ -57,16 +57,16 @@ PCACommand::PCACommand(string option){
                        //if the user changes the output directory command factory will send this info to us in the output parameter 
                        outputDir = validParameter.validFile(parameters, "outputdir", false);           if (outputDir == "not found"){  
                                outputDir = ""; 
-                               outputDir += hasPath(phylipfile); //if user entered a file with a path then preserve it 
+                               outputDir += m->hasPath(phylipfile); //if user entered a file with a path then preserve it      
                        }
                        
                        //error checking on files       
-                       if (phylipfile == "")   { mothurOut("You must provide a distance file before running the pca command."); mothurOutEndLine(); abort = true; }            
+                       if (phylipfile == "")   { m->mothurOut("You must provide a distance file before running the pca command."); m->mothurOutEndLine(); abort = true; }              
                }
 
        }
        catch(exception& e) {
-               errorOut(e, "PCACommand", "PCACommand");
+               m->errorOut(e, "PCACommand", "PCACommand");
                exit(1);
        }
 }
@@ -74,10 +74,10 @@ PCACommand::PCACommand(string option){
 void PCACommand::help(){
        try {
        
-               mothurOut("The pca command..."); mothurOutEndLine();
+               m->mothurOut("The pca command..."); m->mothurOutEndLine();
        }
        catch(exception& e) {
-               errorOut(e, "PCACommand", "help");
+               m->errorOut(e, "PCACommand", "help");
                exit(1);
        }
 }
@@ -97,17 +97,11 @@ int PCACommand::execute(){
                vector<string> names;
                vector<vector<double> > D;
        
-               //fbase = filename;
-               //if(fbase.find_last_of(".")!=string::npos){
-               //      fbase.erase(fbase.find_last_of(".")+1); 
-               //}
-               //else{
-               //      fbase += ".";
-               //}
-               
-               fbase = outputDir + getRootName(getSimpleName(filename));
+               fbase = outputDir + m->getRootName(m->getSimpleName(filename));
                
                read(filename, names, D);
+               
+               if (m->control_pressed) { return 0; }
        
                double offset = 0.0000;
                vector<double> d;
@@ -116,23 +110,31 @@ int PCACommand::execute(){
                vector<vector<double> > copy_G;
                //int rank = D.size();
                
-               cout << "\nProcessing...\n";
+               m->mothurOut("\nProcessing...\n");
                
                for(int count=0;count<2;count++){
-                       recenter(offset, D, G);   
-                       tred2(G, d, e);
-                       qtli(d, e, G);
+                       recenter(offset, D, G);         if (m->control_pressed) { return 0; }
+                       tred2(G, d, e);                         if (m->control_pressed) { return 0; }
+                       qtli(d, e, G);                          if (m->control_pressed) { return 0; }
                        offset = d[d.size()-1];
                        if(offset > 0.0) break;
                } 
                
+               if (m->control_pressed) { return 0; }
                
                output(fbase, names, G, d);
                
+               if (m->control_pressed) { for (int i = 0; i < outputNames.size(); i++) {        remove(outputNames[i].c_str());  } return 0; }
+               
+               m->mothurOutEndLine();
+               m->mothurOut("Output File Names: "); m->mothurOutEndLine();
+               for (int i = 0; i < outputNames.size(); i++) {  m->mothurOut(outputNames[i]); m->mothurOutEndLine();    }
+               m->mothurOutEndLine();
+               
                return 0;
        }
        catch(exception& e) {
-               errorOut(e, "PCACommand", "execute");
+               m->errorOut(e, "PCACommand", "execute");
                exit(1);
        }
 }
@@ -152,14 +154,14 @@ void PCACommand::get_comment(istream& f, char begin, char end){
                d = f.peek();
        }
        catch(exception& e) {
-               errorOut(e, "PCACommand", "get_comment");
+               m->errorOut(e, "PCACommand", "get_comment");
                exit(1);
        }
 }      
 
 /*********************************************************************************************************************************/
 
-void PCACommand::read_phylip(istream& f, int square_m, vector<string>& name_list, vector<vector<double> >& d){
+int PCACommand::read_phylip(istream& f, int square_m, vector<string>& name_list, vector<vector<double> >& d){
        try {
                //     int count1=0;
                //     int count2=0;
@@ -176,6 +178,8 @@ void PCACommand::read_phylip(istream& f, int square_m, vector<string>& name_list
                                f >> name_list[i];
                                //                      cout << i << "\t" << name_list[i] << endl;
                                for(int j=0;j<rank;j++) {
+                                       if (m->control_pressed) { return 0; }
+                                       
                                        f >> d[i][j];
                                        if (d[i][j] == -0.0000)
                                                d[i][j] = 0.0000;
@@ -192,6 +196,7 @@ void PCACommand::read_phylip(istream& f, int square_m, vector<string>& name_list
                                f >> name_list[i];
                                d[i][i]=0.0000;
                                for(int j=0;j<i;j++){
+                                       if (m->control_pressed) { return 0; }
                                        f >> d[i][j];
                                        if (d[i][j] == -0.0000)
                                                d[i][j] = 0.0000;
@@ -199,9 +204,11 @@ void PCACommand::read_phylip(istream& f, int square_m, vector<string>& name_list
                                }
                        }
                }
+               
+               return 0;
        }
        catch(exception& e) {
-               errorOut(e, "PCACommand", "read_phylip");
+               m->errorOut(e, "PCACommand", "read_phylip");
                exit(1);
        }
 
@@ -212,11 +219,11 @@ void PCACommand::read_phylip(istream& f, int square_m, vector<string>& name_list
 void PCACommand::read(string fname, vector<string>& names, vector<vector<double> >& D){
        try {
                ifstream f;
-               openInputFile(fname, f);
+               m->openInputFile(fname, f);
                        
                //check whether matrix is square
                char d;
-               int m = 1;
+               int q = 1;
                int numSeqs;
                string name;
                
@@ -226,24 +233,24 @@ void PCACommand::read(string fname, vector<string>& names, vector<vector<double>
                        
                        //is d a number meaning its square
                        if(isalnum(d)){ 
-                               m = 1; 
+                               q = 1; 
                                break; 
                        }
                        
                        //is d a line return meaning its lower triangle
                        if(d == '\n'){
-                               m = 2;
+                               q = 2;
                                break;
                        }
                }
                f.close();
                
                //reopen to get back to beginning
-               openInputFile(fname, f);                        
-               read_phylip(f, m, names, D);
+               m->openInputFile(fname, f);                     
+               read_phylip(f, q, names, D);
        }
                catch(exception& e) {
-               errorOut(e, "PCACommand", "read");
+               m->errorOut(e, "PCACommand", "read");
                exit(1);
        }
 }
@@ -275,7 +282,7 @@ void PCACommand::matrix_mult(vector<vector<double> > first, vector<vector<double
                }
        }
        catch(exception& e) {
-               errorOut(e, "PCACommand", "matrix_mult");
+               m->errorOut(e, "PCACommand", "matrix_mult");
                exit(1);
        }
 
@@ -309,7 +316,7 @@ void PCACommand::recenter(double offset, vector<vector<double> > D, vector<vecto
                matrix_mult(A,C,G);
        }
        catch(exception& e) {
-               errorOut(e, "PCACommand", "recenter");
+               m->errorOut(e, "PCACommand", "recenter");
                exit(1);
        }
 
@@ -402,7 +409,7 @@ void PCACommand::tred2(vector<vector<double> >& a, vector<double>& d, vector<dou
                }
        }
        catch(exception& e) {
-               errorOut(e, "PCACommand", "tred2");
+               m->errorOut(e, "PCACommand", "tred2");
                exit(1);
        }
 
@@ -486,7 +493,7 @@ void PCACommand::qtli(vector<double>& d, vector<double>& e, vector<vector<double
                }
        }
        catch(exception& e) {
-               errorOut(e, "PCACommand", "qtli");
+               m->errorOut(e, "PCACommand", "qtli");
                exit(1);
        }
 }
@@ -508,10 +515,12 @@ void PCACommand::output(string fnameRoot, vector<string> name_list, vector<vecto
                ofstream pcaData((fnameRoot+"pca").c_str(), ios::trunc);
                pcaData.setf(ios::fixed, ios::floatfield);
                pcaData.setf(ios::showpoint);   
+               outputNames.push_back(fnameRoot+"pca");
                
                ofstream pcaLoadings((fnameRoot+"pca.loadings").c_str(), ios::trunc);
                pcaLoadings.setf(ios::fixed, ios::floatfield);
-               pcaLoadings.setf(ios::showpoint);       
+               pcaLoadings.setf(ios::showpoint);
+               outputNames.push_back(fnameRoot+"pca.loadings");        
                
                pcaLoadings << "axis\tloading\n";
                for(int i=0;i<rank;i++){
@@ -533,7 +542,7 @@ void PCACommand::output(string fnameRoot, vector<string> name_list, vector<vecto
                }
        }
        catch(exception& e) {
-               errorOut(e, "PCACommand", "output");
+               m->errorOut(e, "PCACommand", "output");
                exit(1);
        }
 }