X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=shhhercommand.h;h=b3a0071079bdbcbdb6a1069cf6bc1d2f53f8fad9;hb=8dd3c225255d7084e3aff8740aa4f1f1cabb367a;hp=9e50824b05f9c70a151a903b8119ba09c447b963;hpb=2a99ff8ba22dda9d0c1b125e5c9ff91e23ed6879;p=mothur.git diff --git a/shhhercommand.h b/shhhercommand.h index 9e50824..b3a0071 100644 --- a/shhhercommand.h +++ b/shhhercommand.h @@ -12,47 +12,60 @@ #include "mothur.h" #include "command.hpp" -#include "globaldata.hpp" + +//********************************************************************************************************************** + +#define NUMBINS 1000 +#define HOMOPS 10 +#define MIN_COUNT 0.1 +#define MIN_WEIGHT 0.1 +#define MIN_TAU 0.0001 +#define MIN_ITER 10 +//********************************************************************************************************************** class ShhherCommand : public Command { public: ShhherCommand(string); ShhherCommand(); - ~ShhherCommand(); - vector getRequiredParameters(); - vector getValidParameters(); - vector getRequiredFiles(); - map > getOutputFiles() { return outputTypes; } - int execute(); - void help(); + ~ShhherCommand() {} + vector setParameters(); + string getCommandName() { return "shhh.flows"; } + string getCommandCategory() { return "Sequence Processing"; } + string getHelpString(); + string getCitation() { return "http://www.mothur.org/wiki/Shhh.flows"; } + string getDescription() { return "shhh.flows"; } + + + int execute(); + void help() { m->mothurOut(getHelpString()); } private: - GlobalData* globaldata; int abort; - map > outputTypes; - string outputDir, flowFileName, flowFilesFileName, lookupFileName, compositeFASTAFileName; + string outputDir, flowFileName, flowFilesFileName, lookupFileName, compositeFASTAFileName, compositeNamesFileName; int processors, maxIters; float cutoff, sigma, minDelta; + string flowOrder; vector nSeqsBreaks; vector nOTUsBreaks; - vector flowDataPrI; - vector flowDataIntI; - vector lengths; - vector seqNameVector; vector singleLookUp; vector jointLookUp; + + vector seqNameVector; + vector lengths; + vector flowDataIntI; + vector flowDataPrI; map nameMap; vector otuData; vector cumNumSeqs; vector nSeqsPerOTU; vector > aaP; //tMaster->aanP: each row is a different otu / each col contains the sequence indices - vector seqNumber; //tMaster->anP: the sequence id number sorted by OTU vector > aaI; //tMaster->aanI: that are in each otu - can't differentiate between aaP and aaI + vector seqNumber; //tMaster->anP: the sequence id number sorted by OTU vector seqIndex; //tMaster->anI; the index that corresponds to seqNumber vector dist; //adDist - distance of sequences to centroids vector change; //did the centroid sequence change? 0 = no; 1 = yes @@ -61,10 +74,12 @@ private: vector singleTau; //tMaster->adTau: 1-D Tau vector (1xnumSeqs) vector uniqueFlowgrams; vector uniqueCount; - vector uniqueLengths; vector mapSeqToUnique; vector mapUniqueToSeq; - + vector uniqueLengths; + + vector outputNames; + int numSeqs, numUniques, numOTUs, numFlowCells; void getSingleLookUp(); @@ -110,6 +125,125 @@ private: }; +/**************************************************************************************************/ +//custom data structure for threads to use. +// This is passed by void pointer so it can be any data type +// that can be passed using a single void pointer (LPVOID). +struct flowDistParentForkData { + string distFileName; + vector mapUniqueToSeq; + vector mapSeqToUnique; + vector lengths; + vector flowDataIntI; + vector flowDataPrI; + vector jointLookUp; + MothurOut* m; + int threadID, startSeq, stopSeq, numFlowCells; + float cutoff; + + flowDistParentForkData(){} + flowDistParentForkData(string d, vector mapU, vector mapS, vector l, vector flowD, vector flowDa, vector j, MothurOut* mout, int st, int sp, int n, float cut, int tid) { + distFileName = d; + mapUniqueToSeq = mapU; + mapSeqToUnique = mapS; + lengths = l; + flowDataIntI = flowD; + flowDataPrI = flowDa; + jointLookUp = j; + m = mout; + startSeq = st; + stopSeq = sp; + numFlowCells = n; + cutoff= cut; + threadID = tid; + } +}; + +/**************************************************************************************************/ +#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) +#else +static DWORD WINAPI MyflowDistParentForkThreadFunction(LPVOID lpParam){ + flowDistParentForkData* pDataArray; + pDataArray = (flowDistParentForkData*)lpParam; + + try { + ostringstream outStream; + outStream.setf(ios::fixed, ios::floatfield); + outStream.setf(ios::dec, ios::basefield); + outStream.setf(ios::showpoint); + outStream.precision(6); + + int begTime = time(NULL); + double begClock = clock(); + string tempOut = "start and end = " + toString(pDataArray->startSeq) +'\t' + toString(pDataArray->stopSeq) + "-"; + cout << tempOut << endl; + + for(int i=pDataArray->startSeq;istopSeq;i++){ + + if (pDataArray->m->control_pressed) { break; } + cout << "thread i = " << i << endl; + for(int j=0;jm->mothurOut("\t" + toString((clock()-begClock)/CLOCKS_PER_SEC)); + pDataArray->m->mothurOutEndLine(); + } + } + + ofstream distFile(pDataArray->distFileName.c_str()); + distFile << outStream.str(); + distFile.close(); + + if (pDataArray->m->control_pressed) {} + else { + pDataArray->m->mothurOut(toString(pDataArray->stopSeq-1) + "\t" + toString(time(NULL) - begTime)); + pDataArray->m->mothurOut("\t" + toString((clock()-begClock)/CLOCKS_PER_SEC)); + pDataArray->m->mothurOutEndLine(); + } + + } + catch(exception& e) { + pDataArray->m->errorOut(e, "ShhherCommand", "MyflowDistParentForkThreadFunction"); + exit(1); + } +} +#endif + #endif