#include "readphylip.h"
#include "readcolumn.h"
#include "readmatrix.hpp"
+#include "clusterdoturcommand.h"
//**********************************************************************************************************************
vector<string> ClusterCommand::setParameters(){
//allow user to run help
if(option == "help") { help(); abort = true; calledHelp = true; }
+ else if(option == "citation") { citation(); abort = true; calledHelp = true;}
else {
vector<string> myArray = setParameters();
phylipfile = validParameter.validFile(parameters, "phylip", true);
if (phylipfile == "not open") { phylipfile = ""; abort = true; }
else if (phylipfile == "not found") { phylipfile = ""; }
- else { distfile = phylipfile; format = "phylip"; }
+ else { distfile = phylipfile; format = "phylip"; m->setPhylipFile(phylipfile); }
columnfile = validParameter.validFile(parameters, "column", true);
if (columnfile == "not open") { columnfile = ""; abort = true; }
else if (columnfile == "not found") { columnfile = ""; }
- else { distfile = columnfile; format = "column"; }
+ else { distfile = columnfile; format = "column"; m->setColumnFile(columnfile); }
namefile = validParameter.validFile(parameters, "name", true);
if (namefile == "not open") { abort = true; }
else if (namefile == "not found") { namefile = ""; }
+ else { m->setNameFile(namefile); }
if ((phylipfile == "") && (columnfile == "")) {
//is there are current file available for either of these?
if (temp == "not found") { temp = "100"; }
//saves precision legnth for formatting below
length = temp.length();
- convert(temp, precision);
+ m->mothurConvert(temp, precision);
temp = validParameter.validFile(parameters, "hard", false); if (temp == "not found") { temp = "T"; }
hard = m->isTrue(temp);
temp = validParameter.validFile(parameters, "cutoff", false);
if (temp == "not found") { temp = "10"; }
- convert(temp, cutoff);
+ m->mothurConvert(temp, cutoff);
cutoff += (5 / (precision * 10.0));
method = validParameter.validFile(parameters, "method", false);
timing = validParameter.validFile(parameters, "timing", false);
if (timing == "not found") { timing = "F"; }
- }
+ }
}
catch(exception& e) {
m->errorOut(e, "ClusterCommand", "ClusterCommand");
if (abort == true) { if (calledHelp) { return 0; } return 2; }
+ //phylip file given and cutoff not given - use cluster.classic because it uses less memory and is faster
+ if ((format == "phylip") && (cutoff > 10.0)) {
+ m->mothurOutEndLine(); m->mothurOut("You are using a phylip file and no cutoff. I will run cluster.classic to save memory and time."); m->mothurOutEndLine();
+
+ //run unique.seqs for deconvolute results
+ string inputString = "phylip=" + distfile;
+ if (namefile != "") { inputString += ", name=" + namefile; }
+ inputString += ", precision=" + toString(precision);
+ inputString += ", method=" + method;
+ if (hard) { inputString += ", hard=T"; }
+ else { inputString += ", hard=F"; }
+ if (sim) { inputString += ", sim=T"; }
+ else { inputString += ", sim=F"; }
+
+
+ m->mothurOutEndLine();
+ m->mothurOut("/------------------------------------------------------------/"); m->mothurOutEndLine();
+ m->mothurOut("Running command: cluster.classic(" + inputString + ")"); m->mothurOutEndLine();
+
+ Command* clusterClassicCommand = new ClusterDoturCommand(inputString);
+ clusterClassicCommand->execute();
+ delete clusterClassicCommand;
+
+ m->mothurOut("/------------------------------------------------------------/"); m->mothurOutEndLine();
+
+ return 0;
+ }
+
ReadMatrix* read;
if (format == "column") { read = new ReadColumnMatrix(columnfile, sim); } //sim indicates whether its a similarity matrix
else if (format == "phylip") { read = new ReadPhylipMatrix(phylipfile, sim); }
if (m->control_pressed) { //clean up
delete list; delete matrix; delete rabund;
sabundFile.close();rabundFile.close();listFile.close();
- for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } outputTypes.clear();
+ for (int i = 0; i < outputNames.size(); i++) { m->mothurRemove(outputNames[i]); } outputTypes.clear();
return 0;
}
if (m->control_pressed) { //clean up
delete list; delete matrix; delete rabund; delete cluster;
sabundFile.close();rabundFile.close();listFile.close();
- for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } outputTypes.clear();
+ for (int i = 0; i < outputNames.size(); i++) { m->mothurRemove(outputNames[i]); } outputTypes.clear();
return 0;
}
cout.flush();
print_start = false;
}
-
+
if(previousDist <= 0.0000){
printData("unique");
}