X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=pcacommand.cpp;h=7103adb8a150a3e6f9871989ba94bd45d2b6a542;hp=2cb37bda8896f8f2cb1f64521f1a73232507f24b;hb=1a20e24ee786195ab0e1cccd4f5aede7a88f3f4e;hpb=f687723a8357916e86a05116978e6869b039ce36 diff --git a/pcacommand.cpp b/pcacommand.cpp index 2cb37bd..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); } @@ -49,25 +49,20 @@ string PCACommand::getHelpString(){ } } //********************************************************************************************************************** -string PCACommand::getOutputFileNameTag(string type, string inputName=""){ - try { - string outputFileName = ""; - map >::iterator it; +string PCACommand::getOutputPattern(string type) { + try { + string pattern = ""; - //is this a type this command creates - it = outputTypes.find(type); - if (it == outputTypes.end()) { m->mothurOut("[ERROR]: this command doesn't create a " + type + " output file.\n"); } - else { - if (type == "pca") { outputFileName = "pca.axes"; } - else if (type == "loadings") { outputFileName = "pca.loadings"; } - else { m->mothurOut("[ERROR]: No definition for type " + type + " output file tag.\n"); m->control_pressed = true; } - } - return outputFileName; - } - catch(exception& e) { - m->errorOut(e, "PCACommand", "getOutputFileNameTag"); - exit(1); - } + 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); + } } //********************************************************************************************************************** @@ -386,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->getGroups(), X, d); + //string outputFileName = fbase + lookupFloat[0]->getLabel(); + output(fbase, lookupFloat[0]->getLabel(), m->getGroups(), X, d); if (metric) { @@ -416,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(); @@ -426,18 +421,23 @@ void PCACommand::output(string fnameRoot, vector name_list, vectoropenOutputFile((fnameRoot+"."+getOutputFileNameTag("pca")), pcaData); + map 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+"."+getOutputFileNameTag("pca")); - outputTypes["pca"].push_back(fnameRoot+"."+getOutputFileNameTag("pca")); + outputNames.push_back(pcaFileName); + outputTypes["pca"].push_back(pcaFileName); ofstream pcaLoadings; - m->openOutputFile((fnameRoot+"."+getOutputFileNameTag("loadings")), pcaLoadings); + string loadingsFilename = getOutputFileName("loadings",variables); + m->openOutputFile(loadingsFilename, pcaLoadings); pcaLoadings.setf(ios::fixed, ios::floatfield); pcaLoadings.setf(ios::showpoint); - outputNames.push_back(fnameRoot+"."+getOutputFileNameTag("loadings")); - outputTypes["loadings"].push_back(fnameRoot+"."+getOutputFileNameTag("loadings")); + outputNames.push_back(loadingsFilename); + outputTypes["loadings"].push_back(loadingsFilename); pcaLoadings << "axis\tloading\n"; for(int i=0;i