+
+ m->mothurOutEndLine();
+
+ //run trim.flows on the fasta file
+ string flowFile = "";
+ it = filenames.find("flow");
+ if (it != filenames.end()) { if ((it->second).size() != 0) { flowFile = (it->second)[0]; } }
+ else { m->mothurOut("[ERROR]: sffinfo did not create a flow file, quitting.\n"); m->control_pressed = true; break; }
+
+ inputString = "flow=" + flowFile;
+ if (oligos != "") { inputString += ", oligos=" + oligos; }
+ inputString += ", maxhomop=" + toString(maxHomoP) + ", maxflows=" + toString(maxFlows) + ", minflows=" + toString(minFlows);
+ inputString += ", pdiffs=" + toString(pdiffs) + ", bdiffs=" + toString(bdiffs) + ", ldiffs=" + toString(ldiffs) + ", sdiffs=" + toString(sdiffs);
+ inputString += ", tdiffs=" + toString(tdiffs) + ", signal=" + toString(signal) + ", noise=" + toString(noise) + ", order=" + flowOrder + ", processors=1";
+
+ m->mothurOutEndLine();
+ m->mothurOut("Running command: trim.flows(" + inputString + ")"); m->mothurOutEndLine();
+ m->mothurCalling = true;
+
+ Command* trimFlowCommand = new TrimFlowsCommand(inputString);
+ trimFlowCommand->execute();
+
+ if (m->control_pressed){ break; }
+
+ temp = trimFlowCommand->getOutputFiles();
+ mergeOutputFileList(filenames, temp);
+
+ delete trimFlowCommand;
+ m->mothurCalling = false;
+
+
+ string fileFileName = "";
+ flowFile = "";
+ if (oligos != "") {
+ it = temp.find("file");
+ if (it != temp.end()) { if ((it->second).size() != 0) { fileFileName = (it->second)[0]; } }
+ else { m->mothurOut("[ERROR]: trim.flows did not create a file file, quitting.\n"); m->control_pressed = true; break; }
+ }else {
+ vector<string> flowFiles;
+ it = temp.find("flow");
+ if (it != temp.end()) { if ((it->second).size() != 0) { flowFiles = (it->second); } }
+ else { m->mothurOut("[ERROR]: trim.flows did not create a flow file, quitting.\n"); m->control_pressed = true; break; }
+
+ for (int i = 0; i < flowFiles.size(); i++) {
+ string end = flowFiles[i].substr(flowFiles[i].length()-9);
+ if (end == "trim.flow") {
+ flowFile = flowFiles[i]; i+=flowFiles.size(); //if we found the trim.flow file stop looking
+ }
+ }
+ }
+
+ if ((fileFileName == "") && (flowFile == "")) { m->mothurOut("[ERROR]: trim.flows did not create a file file or a trim.flow file, quitting.\n"); m->control_pressed = true; break; }
+
+ if (fileFileName != "") { inputString = "file=" + fileFileName; }
+ else { inputString = "flow=" + flowFile; }
+
+ inputString += ", lookup=" + lookupFileName + ", cutoff=" + toString(cutoff); + ", maxiters=" + toString(maxIters);
+ if (large) { inputString += ", large=" + toString(largeSize); }
+ inputString += ", sigma=" +toString(sigma);
+ inputString += ", mindelta=" + toString(minDelta);
+ inputString += ", order=" + flowOrder + ", processors=1";
+
+ //run shhh.flows
+ m->mothurOutEndLine();
+ m->mothurOut("Running command: shhh.flows(" + inputString + ")"); m->mothurOutEndLine();
+ m->mothurCalling = true;
+
+ Command* shhhFlowCommand = new ShhherCommand(inputString);
+ shhhFlowCommand->execute();
+
+ if (m->control_pressed){ break; }
+
+ temp = shhhFlowCommand->getOutputFiles();
+ mergeOutputFileList(filenames, temp);
+
+ delete shhhFlowCommand;
+ m->mothurCalling = false;
+
+ vector<string> fastaFiles;
+ vector<string> nameFiles;
+ it = temp.find("fasta");
+ if (it != temp.end()) { if ((it->second).size() != 0) { fastaFiles = (it->second); } }
+ else { m->mothurOut("[ERROR]: shhh.flows did not create a fasta file, quitting.\n"); m->control_pressed = true; break; }
+
+ it = temp.find("name");
+ if (it != temp.end()) { if ((it->second).size() != 0) { nameFiles = (it->second); } }
+ else { m->mothurOut("[ERROR]: shhh.flows did not create a name file, quitting.\n"); m->control_pressed = true; break; }
+
+ //find fasta and name files with the shortest name. This is because if there is a composite name it will be the shortest.
+ fastaFile = fastaFiles[0];
+ for (int i = 1; i < fastaFiles.size(); i++) { if (fastaFiles[i].length() < fastaFile.length()) { fastaFile = fastaFiles[i]; } }
+ string nameFile = nameFiles[0];
+ for (int i = 1; i < nameFiles.size(); i++) { if (nameFiles[i].length() < nameFile.length()) { nameFile = nameFiles[i]; } }
+
+ inputString = "fasta=" + fastaFile + ", name=" + nameFile;
+ if (oligos != "") { inputString += ", oligos=" + oligos; }
+ if (allFiles) { inputString += ", allfiles=t"; }
+ else { inputString += ", allfiles=f"; }
+ if (flip) { inputString += ", flip=t"; }
+ else { inputString += ", flip=f"; }
+ if (keepforward) { inputString += ", keepforward=t"; }
+ else { inputString += ", keepforward=f"; }
+
+
+ inputString += ", pdiffs=" + toString(pdiffs) + ", bdiffs=" + toString(bdiffs) + ", ldiffs=" + toString(ldiffs) + ", sdiffs=" + toString(sdiffs);
+ inputString += ", tdiffs=" + toString(tdiffs) + ", maxambig=" + toString(maxAmbig) + ", minlength=" + toString(minLength) + ", maxlength=" + toString(maxLength);
+ if (keepFirst != 0) { inputString += ", keepfirst=" + toString(keepFirst); }
+ if (removeLast != 0) { inputString += ", removelast=" + toString(removeLast); }
+ inputString += ", processors=1";
+
+ //run trim.seqs
+ m->mothurOutEndLine();
+ m->mothurOut("Running command: trim.seqs(" + inputString + ")"); m->mothurOutEndLine();
+ m->mothurCalling = true;
+
+ Command* trimseqsCommand = new TrimSeqsCommand(inputString);
+ trimseqsCommand->execute();
+
+ if (m->control_pressed){ break; }
+
+ temp = trimseqsCommand->getOutputFiles();
+ mergeOutputFileList(filenames, temp);
+
+ delete trimseqsCommand;
+ m->mothurCalling = false;
+
+ it = temp.find("fasta");
+ if (it != temp.end()) { if ((it->second).size() != 0) { fastaFiles = (it->second); } }
+ else { m->mothurOut("[ERROR]: trim.seqs did not create a fasta file, quitting.\n"); m->control_pressed = true; break; }
+
+ for (int i = 0; i < fastaFiles.size(); i++) {
+ string end = fastaFiles[i].substr(fastaFiles[i].length()-10);
+ if (end == "trim.fasta") {
+ fastaFile = fastaFiles[i]; i+=fastaFiles.size(); //if we found the trim.fasta file stop looking
+ }
+ }
+
+ it = temp.find("name");
+ if (it != temp.end()) { if ((it->second).size() != 0) { nameFiles = (it->second); } }
+ else { m->mothurOut("[ERROR]: trim.seqs did not create a name file, quitting.\n"); m->control_pressed = true; break; }
+
+ for (int i = 0; i < nameFiles.size(); i++) {
+ string end = nameFiles[i].substr(nameFiles[i].length()-10);
+ if (end == "trim.names") {
+ nameFile = nameFiles[i]; i+=nameFiles.size(); //if we found the trim.names file stop looking
+ }
+ }
+
+ vector<string> groupFiles;
+ string groupFile = "";
+ if (makeGroup) {
+ it = temp.find("group");
+ if (it != temp.end()) { if ((it->second).size() != 0) { groupFiles = (it->second); } }
+
+ //find group file with the shortest name. This is because if there is a composite group file it will be the shortest.
+ groupFile = groupFiles[0];
+ for (int i = 1; i < groupFiles.size(); i++) { if (groupFiles[i].length() < groupFile.length()) { groupFile = groupFiles[i]; } }
+ }
+
+ inputString = "fasta=" + fastaFile + ", processors=1, name=" + nameFile;
+ m->mothurOutEndLine();
+ m->mothurOut("Running command: summary.seqs(" + inputString + ")"); m->mothurOutEndLine();
+ m->mothurCalling = true;
+
+ summarySeqsCommand = new SeqSummaryCommand(inputString);
+ summarySeqsCommand->execute();
+
+ if (m->control_pressed){ break; }
+
+ temp = summarySeqsCommand->getOutputFiles();
+ mergeOutputFileList(filenames, temp);
+
+ delete summarySeqsCommand;
+ m->mothurCalling = false;
+
+ m->mothurOutEndLine();