X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mgclustercommand.cpp;h=d240de6c73c98a705472e5cb50c689041a7b36dc;hb=2397df97b12cd5d21ea10dc4248c18a5803ddd41;hp=81e80ccaf6ee82a0bbed8cd5a757a4502fd5449d;hpb=832d53a9dfac6b1795735eec643d8cf627b0d8e3;p=mothur.git diff --git a/mgclustercommand.cpp b/mgclustercommand.cpp index 81e80cc..d240de6 100644 --- a/mgclustercommand.cpp +++ b/mgclustercommand.cpp @@ -20,24 +20,54 @@ MGClusterCommand::MGClusterCommand(string option){ else { //valid paramters for this command - string Array[] = {"blast", "method", "name", "cutoff", "precision", "length", "min", "penalty", "hcluster","merge"}; + string Array[] = {"blast", "method", "name", "cutoff", "precision", "length", "min", "penalty", "hcluster","merge","outputdir","inputdir"}; vector myArray (Array, Array+(sizeof(Array)/sizeof(string))); OptionParser parser(option); map parameters = parser.getParameters(); ValidParameters validParameter; + map::iterator it; //check to make sure all parameters are valid for command - for (map::iterator it = parameters.begin(); it != parameters.end(); it++) { + for (it = parameters.begin(); it != parameters.end(); it++) { if (validParameter.isValidParameter(it->first, myArray, it->second) != true) { abort = true; } } + //if the user changes the input directory command factory will send this info to us in the output parameter + string inputDir = validParameter.validFile(parameters, "inputdir", false); + if (inputDir == "not found"){ inputDir = ""; } + else { + string path; + it = parameters.find("blast"); + //user has given a template file + if(it != parameters.end()){ + path = hasPath(it->second); + //if the user has not given a path then, add inputdir. else leave path alone. + if (path == "") { parameters["blast"] = inputDir + it->second; } + } + + it = parameters.find("name"); + //user has given a template file + if(it != parameters.end()){ + path = hasPath(it->second); + //if the user has not given a path then, add inputdir. else leave path alone. + if (path == "") { parameters["name"] = inputDir + it->second; } + } + } + + //check for required parameters blastfile = validParameter.validFile(parameters, "blast", true); if (blastfile == "not open") { abort = true; } else if (blastfile == "not found") { blastfile = ""; } + //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(blastfile); //if user entered a file with a path then preserve it + } + namefile = validParameter.validFile(parameters, "name", true); if (namefile == "not open") { abort = true; } else if (namefile == "not found") { namefile = ""; } @@ -120,7 +150,7 @@ int MGClusterCommand::execute(){ nameMap->readMap(); }else{ nameMap= new NameAssignment(); } - string fileroot = getRootName(blastfile); + string fileroot = outputDir + getRootName(getSimpleName(blastfile)); string tag = ""; time_t start; float previousDist = 0.00000; @@ -153,15 +183,15 @@ int MGClusterCommand::execute(){ delete read; //create cluster - if (method == "furthest") { cluster = new CompleteLinkage(rabund, list, distMatrix, cutoff); } - else if(method == "nearest"){ cluster = new SingleLinkage(rabund, list, distMatrix, cutoff); } - else if(method == "average"){ cluster = new AverageLinkage(rabund, list, distMatrix, cutoff); } + if (method == "furthest") { cluster = new CompleteLinkage(rabund, list, distMatrix, cutoff, method); } + else if(method == "nearest"){ cluster = new SingleLinkage(rabund, list, distMatrix, cutoff, method); } + else if(method == "average"){ cluster = new AverageLinkage(rabund, list, distMatrix, cutoff, method); } cluster->setMapWanted(true); //cluster using cluster classes while (distMatrix->getSmallDist() < cutoff && distMatrix->getNNodes() > 0){ - cluster->update(); + cluster->update(cutoff); float dist = distMatrix->getSmallDist(); float rndDist = roundDist(dist, precision); @@ -210,7 +240,6 @@ int MGClusterCommand::execute(){ delete cluster; }else { //use hcluster to cluster - tag = "fn"; //get distmatrix and overlap overlapFile = read->getOverlapFile(); distFile = read->getDistFile();