X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=pcacommand.cpp;h=7103adb8a150a3e6f9871989ba94bd45d2b6a542;hp=3a92fa002559fcc7d7f19e1f5f91fe2574f4a3c1;hb=1a20e24ee786195ab0e1cccd4f5aede7a88f3f4e;hpb=19fcbbdba99658f5eca244803280f9ee7f9f6607 diff --git a/pcacommand.cpp b/pcacommand.cpp index 3a92fa0..7103adb 100644 --- a/pcacommand.cpp +++ b/pcacommand.cpp @@ -13,13 +13,13 @@ //********************************************************************************************************************** vector PCACommand::setParameters(){ try { - CommandParameter pshared("shared", "InputTypes", "", "", "LRSS", "LRSS", "none",false,false); parameters.push_back(pshared); - CommandParameter prelabund("relabund", "InputTypes", "", "", "LRSS", "LRSS", "none",false,false); parameters.push_back(prelabund); - CommandParameter pgroups("groups", "String", "", "", "", "", "",false,false); parameters.push_back(pgroups); - CommandParameter pmetric("metric", "Boolean", "", "T", "", "", "",false,false); parameters.push_back(pmetric); - CommandParameter plabel("label", "String", "", "", "", "", "",false,false); parameters.push_back(plabel); - CommandParameter pinputdir("inputdir", "String", "", "", "", "", "",false,false); parameters.push_back(pinputdir); - CommandParameter poutputdir("outputdir", "String", "", "", "", "", "",false,false); parameters.push_back(poutputdir); + CommandParameter pshared("shared", "InputTypes", "", "", "LRSS", "LRSS", "none","pca-loadings",false,false,true); parameters.push_back(pshared); + CommandParameter prelabund("relabund", "InputTypes", "", "", "LRSS", "LRSS", "none","pca-loadings",false,false,true); parameters.push_back(prelabund); + CommandParameter pgroups("groups", "String", "", "", "", "", "","",false,false); parameters.push_back(pgroups); + CommandParameter pmetric("metric", "Boolean", "", "T", "", "", "","",false,false); parameters.push_back(pmetric); + CommandParameter plabel("label", "String", "", "", "", "", "","",false,false); parameters.push_back(plabel); + CommandParameter pinputdir("inputdir", "String", "", "", "", "", "","",false,false); parameters.push_back(pinputdir); + CommandParameter poutputdir("outputdir", "String", "", "", "", "", "","",false,false); parameters.push_back(poutputdir); vector myArray; for (int i = 0; i < parameters.size(); i++) { myArray.push_back(parameters[i].name); } @@ -48,6 +48,23 @@ string PCACommand::getHelpString(){ exit(1); } } +//********************************************************************************************************************** +string PCACommand::getOutputPattern(string type) { + try { + string pattern = ""; + + if (type == "pca") { pattern = "[filename],[distance],pca.axes"; } + else if (type == "loadings") { pattern = "[filename],[distance],pca.loadings"; } + else { m->mothurOut("[ERROR]: No definition for type " + type + " output pattern.\n"); m->control_pressed = true; } + + return pattern; + } + catch(exception& e) { + m->errorOut(e, "PCACommand", "getOutputPattern"); + exit(1); + } +} + //********************************************************************************************************************** PCACommand::PCACommand(){ try { @@ -157,7 +174,7 @@ PCACommand::PCACommand(string option) { groups = validParameter.validFile(parameters, "groups", false); if (groups == "not found") { groups = ""; } else { m->splitAtDash(groups, Groups); } - m->Groups = Groups; + m->setGroups(Groups); } @@ -364,8 +381,8 @@ int PCACommand::process(vector& lookupFloat){ if (m->control_pressed) { return 0; } string fbase = outputDir + m->getRootName(m->getSimpleName(inputFile)); - string outputFileName = fbase + lookupFloat[0]->getLabel(); - output(outputFileName, m->Groups, X, d); + //string outputFileName = fbase + lookupFloat[0]->getLabel(); + output(fbase, lookupFloat[0]->getLabel(), m->getGroups(), X, d); if (metric) { @@ -394,7 +411,7 @@ int PCACommand::process(vector& lookupFloat){ } /*********************************************************************************************************************************/ -void PCACommand::output(string fnameRoot, vector name_list, vector >& G, vector d) { +void PCACommand::output(string fbase, string label, vector name_list, vector >& G, vector d) { try { int numEigenValues = d.size(); @@ -403,17 +420,24 @@ void PCACommand::output(string fnameRoot, vector name_list, vector variables; + variables["[filename]"] = fbase; + variables["[distance]"] = label; + string pcaFileName = getOutputFileName("pca",variables); + m->openOutputFile(pcaFileName, pcaData); pcaData.setf(ios::fixed, ios::floatfield); pcaData.setf(ios::showpoint); - outputNames.push_back(fnameRoot+".pca.axes"); - outputTypes["pca"].push_back(fnameRoot+".pca.axes"); + outputNames.push_back(pcaFileName); + outputTypes["pca"].push_back(pcaFileName); - ofstream pcaLoadings((fnameRoot+".pca.loadings").c_str(), ios::trunc); + ofstream pcaLoadings; + string loadingsFilename = getOutputFileName("loadings",variables); + m->openOutputFile(loadingsFilename, pcaLoadings); pcaLoadings.setf(ios::fixed, ios::floatfield); pcaLoadings.setf(ios::showpoint); - outputNames.push_back(fnameRoot+".pca.loadings"); - outputTypes["loadings"].push_back(fnameRoot+".pca.loadings"); + outputNames.push_back(loadingsFilename); + outputTypes["loadings"].push_back(loadingsFilename); pcaLoadings << "axis\tloading\n"; for(int i=0;i