#include "seqsummarycommand.h"
#include "sequence.hpp"
+//**********************************************************************************************************************
+vector<string> SeqSummaryCommand::getValidParameters(){
+ try {
+ string Array[] = {"fasta","processors","outputdir","inputdir"};
+ vector<string> myArray (Array, Array+(sizeof(Array)/sizeof(string)));
+ return myArray;
+ }
+ catch(exception& e) {
+ m->errorOut(e, "SeqSummaryCommand", "getValidParameters");
+ exit(1);
+ }
+}
+//**********************************************************************************************************************
+SeqSummaryCommand::SeqSummaryCommand(){
+ try {
+ abort = true;
+ //initialize outputTypes
+ vector<string> tempOutNames;
+ outputTypes["summary"] = tempOutNames;
+ }
+ catch(exception& e) {
+ m->errorOut(e, "SeqSummaryCommand", "SeqSummaryCommand");
+ exit(1);
+ }
+}
+//**********************************************************************************************************************
+vector<string> SeqSummaryCommand::getRequiredParameters(){
+ try {
+ string Array[] = {"fasta"};
+ vector<string> myArray (Array, Array+(sizeof(Array)/sizeof(string)));
+ return myArray;
+ }
+ catch(exception& e) {
+ m->errorOut(e, "SeqSummaryCommand", "getRequiredParameters");
+ exit(1);
+ }
+}
+//**********************************************************************************************************************
+vector<string> SeqSummaryCommand::getRequiredFiles(){
+ try {
+ vector<string> myArray;
+ return myArray;
+ }
+ catch(exception& e) {
+ m->errorOut(e, "SeqSummaryCommand", "getRequiredFiles");
+ exit(1);
+ }
+}
//***************************************************************************************************************
SeqSummaryCommand::SeqSummaryCommand(string option) {
it = parameters.find("fasta");
//user has given a template file
if(it != parameters.end()){
- path = hasPath(it->second);
+ path = m->hasPath(it->second);
//if the user has not given a path then, add inputdir. else leave path alone.
if (path == "") { parameters["fasta"] = inputDir + it->second; }
}
}
+ //initialize outputTypes
+ vector<string> tempOutNames;
+ outputTypes["summary"] = tempOutNames;
+
//check for required parameters
fastafile = validParameter.validFile(parameters, "fasta", true);
if (fastafile == "not open") { abort = true; }
//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(fastafile); //if user entered a file with a path then preserve it
+ outputDir += m->hasPath(fastafile); //if user entered a file with a path then preserve it
}
string temp = validParameter.validFile(parameters, "processors", false); if (temp == "not found"){ temp = "1"; }
if (abort == true) { return 0; }
- string summaryFile = outputDir + getSimpleName(fastafile) + ".summary";
+ string summaryFile = outputDir + m->getSimpleName(fastafile) + ".summary";
int numSeqs = 0;
MPI_File_write_shared(outMPI, buf2, length, MPI_CHAR, &statusOut);
delete buf2;
- MPIPos = setFilePosFasta(fastafile, numSeqs); //fills MPIPos, returns numSeqs
+ MPIPos = m->setFilePosFasta(fastafile, numSeqs); //fills MPIPos, returns numSeqs
for(int i = 1; i < processors; i++) {
MPI_Send(&numSeqs, 1, MPI_INT, i, tag, MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD); //make everyone wait - just in case
#else
- vector<unsigned long int> positions = divideFile(fastafile, processors);
+ vector<unsigned long int> positions = m->divideFile(fastafile, processors);
for (int i = 0; i < (positions.size()-1); i++) {
lines.push_back(new linePair(positions[i], positions[(i+1)]));
rename((summaryFile + toString(processIDS[0]) + ".temp").c_str(), summaryFile.c_str());
//append files
for(int i=1;i<processors;i++){
- appendFiles((summaryFile + toString(processIDS[i]) + ".temp"), summaryFile);
+ m->appendFiles((summaryFile + toString(processIDS[i]) + ".temp"), summaryFile);
remove((summaryFile + toString(processIDS[i]) + ".temp").c_str());
}
}
m->mothurOutEndLine();
m->mothurOut("Output File Name: "); m->mothurOutEndLine();
- m->mothurOut(summaryFile); m->mothurOutEndLine();
+ m->mothurOut(summaryFile); m->mothurOutEndLine(); outputNames.push_back(summaryFile); outputTypes["summary"].push_back(summaryFile);
m->mothurOutEndLine();
#ifdef USE_MPI
try {
ofstream outSummary;
- openOutputFile(sumFile, outSummary);
+ m->openOutputFile(sumFile, outSummary);
//print header if you are process 0
if (filePos->start == 0) {
}
ifstream in;
- openInputFile(filename, in);
+ m->openInputFile(filename, in);
in.seekg(filePos->start);
if (m->control_pressed) { in.close(); outSummary.close(); return 1; }
- Sequence current(in); gobble(in);
+ Sequence current(in); m->gobble(in);
if (current.getName() != "") {
startPosition.push_back(current.getStartPos());
count++;
}
- unsigned long int pos = in.tellg();
- if ((pos == -1) || (pos >= filePos->end)) { break; }
+ #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
+ unsigned long int pos = in.tellg();
+ if ((pos == -1) || (pos >= filePos->end)) { break; }
+ #else
+ if (in.eof()) { break; }
+ #endif
//report progress
- if((count) % 100 == 0){ m->mothurOut(toString(count)); m->mothurOutEndLine(); }
+ //if((count) % 100 == 0){ m->mothurOut(toString(count)); m->mothurOutEndLine(); }
}
//report progress
- if((count) % 100 != 0){ m->mothurOut(toString(count)); m->mothurOutEndLine(); }
+ //if((count) % 100 != 0){ m->mothurOut(toString(count)); m->mothurOutEndLine(); }
in.close();
//pass numSeqs to parent
ofstream out;
string tempFile = fastafile + toString(getpid()) + ".num.temp";
- openOutputFile(tempFile, out);
+ m->openOutputFile(tempFile, out);
out << num << endl;
for (int k = 0; k < startPosition.size(); k++) { out << startPosition[k] << '\t'; } out << endl;
out.close();
exit(0);
- }else { m->mothurOut("unable to spawn the necessary processes."); m->mothurOutEndLine(); exit(0); }
+ }else {
+ m->mothurOut("[ERROR]: unable to spawn the necessary processes."); m->mothurOutEndLine();
+ for (int i = 0; i < processIDS.size(); i++) { kill (processIDS[i], SIGINT); }
+ exit(0);
+ }
}
//force parent to wait until all the processes are done
for (int i = 0; i < processIDS.size(); i++) {
string tempFilename = fastafile + toString(processIDS[i]) + ".num.temp";
ifstream in;
- openInputFile(tempFilename, in);
+ m->openInputFile(tempFilename, in);
int temp, tempNum;
- in >> tempNum; gobble(in); num += tempNum;
- for (int k = 0; k < tempNum; k++) { in >> temp; startPosition.push_back(temp); } gobble(in);
- for (int k = 0; k < tempNum; k++) { in >> temp; endPosition.push_back(temp); } gobble(in);
- for (int k = 0; k < tempNum; k++) { in >> temp; seqLength.push_back(temp); } gobble(in);
- for (int k = 0; k < tempNum; k++) { in >> temp; ambigBases.push_back(temp); } gobble(in);
- for (int k = 0; k < tempNum; k++) { in >> temp; longHomoPolymer.push_back(temp); } gobble(in);
+ in >> tempNum; m->gobble(in); num += tempNum;
+ for (int k = 0; k < tempNum; k++) { in >> temp; startPosition.push_back(temp); } m->gobble(in);
+ for (int k = 0; k < tempNum; k++) { in >> temp; endPosition.push_back(temp); } m->gobble(in);
+ for (int k = 0; k < tempNum; k++) { in >> temp; seqLength.push_back(temp); } m->gobble(in);
+ for (int k = 0; k < tempNum; k++) { in >> temp; ambigBases.push_back(temp); } m->gobble(in);
+ for (int k = 0; k < tempNum; k++) { in >> temp; longHomoPolymer.push_back(temp); } m->gobble(in);
in.close();
remove(tempFilename.c_str());