X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=shhhercommand.h;fp=shhhercommand.h;h=00bd41abef486338da1d33463b0698bd895266a1;hb=ae57e166b2ed7b475ec3f466106bd76fabadd063;hp=bdc850362b4b08e6c2e14655360e455353e74793;hpb=55386dddad84cc1140d736cabaf4dd0ae16f2e01;p=mothur.git diff --git a/shhhercommand.h b/shhhercommand.h index bdc8503..00bd41a 100644 --- a/shhhercommand.h +++ b/shhhercommand.h @@ -13,6 +13,15 @@ #include "mothur.h" #include "command.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 { @@ -116,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). +typedef 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