X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=mothur.h;h=102b44d57030561244c8ba6205f7c02c831b9b36;hp=337e5b33a6b1d8100effe484c230d42c7fd93f58;hb=d1faab5efe1c28700890bdec5b4d8e817fa1dab2;hpb=173a1a82a4e4aa6bef8e4ba77bce342fb9c6563e diff --git a/mothur.h b/mothur.h index 337e5b3..102b44d 100644 --- a/mothur.h +++ b/mothur.h @@ -36,11 +36,13 @@ #include #include #include +#include //math #include #include #include +#include //misc #include @@ -52,10 +54,12 @@ #endif /***********************************************************************/ -#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) +#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix) #include #include #include + #include + #include #include #ifdef USE_READLINE @@ -68,6 +72,8 @@ #include //get cwd #include #include + #include + #include #endif @@ -80,7 +86,9 @@ using namespace std; #define isnan(x) ((x) != (x)) #define isinf(x) (fabs(x) == std::numeric_limits::infinity()) + typedef unsigned long ull; +typedef unsigned short intDist; struct IntNode { int lvalue; @@ -100,6 +108,86 @@ struct ThreadNode { IntNode* right; }; +struct diffPair { + float prob; + float reverseProb; + + diffPair() { + prob = 0; reverseProb = 0; + } + diffPair(float p, float rp) { + prob = p; + reverseProb = rp; + } +}; + +/**********************************************************/ +struct CommonHeader { + unsigned int magicNumber; + string version; + unsigned long long indexOffset; + unsigned int indexLength; + unsigned int numReads; + unsigned short headerLength; + unsigned short keyLength; + unsigned short numFlowsPerRead; + int flogramFormatCode; + string flowChars; //length depends on number flow reads + string keySequence; //length depends on key length + + CommonHeader(){ magicNumber=0; indexOffset=0; indexLength=0; numReads=0; headerLength=0; keyLength=0; numFlowsPerRead=0; flogramFormatCode='s'; } + ~CommonHeader() { } +}; +/**********************************************************/ +struct Header { + unsigned short headerLength; + unsigned short nameLength; + unsigned int numBases; + unsigned short clipQualLeft; + unsigned short clipQualRight; + unsigned short clipAdapterLeft; + unsigned short clipAdapterRight; + string name; //length depends on nameLength + string timestamp; + string region; + string xy; + + Header() { headerLength=0; nameLength=0; numBases=0; clipQualLeft=0; clipQualRight=0; clipAdapterLeft=0; clipAdapterRight=0; } + ~Header() { } +}; +/**********************************************************/ +struct seqRead { + vector flowgram; + vector flowIndex; + string bases; + vector qualScores; + + seqRead() { } + ~seqRead() { } +}; + +/***********************************************************************/ +struct PDistCell{ + ull index; + float dist; + PDistCell() : index(0), dist(0) {}; + PDistCell(ull c, float d) : index(c), dist(d) {} +}; +/***********************************************************************/ +struct consTax{ + string name; + string taxonomy; + int abundance; + consTax() : name(""), taxonomy("unknown"), abundance(0) {}; + consTax(string n, string t, int a) : name(n), taxonomy(t), abundance(a) {} +}; +/***********************************************************************/ +struct consTax2{ + string taxonomy; + int abundance; + consTax2() : taxonomy("unknown"), abundance(0) {}; + consTax2(string t, int a) : taxonomy(t), abundance(a) {} +}; /************************************************************/ struct clusterNode { int numSeq; @@ -111,9 +199,9 @@ struct clusterNode { struct seqDist { int seq1; int seq2; - float dist; + double dist; seqDist() {} - seqDist(int s1, int s2, float d) : seq1(s1), seq2(s2), dist(d) {} + seqDist(int s1, int s2, double d) : seq1(s1), seq2(s2), dist(d) {} ~seqDist() {} }; /************************************************************/ @@ -122,6 +210,68 @@ struct distlinePair { int end; }; +/************************************************************/ +struct seqPriorityNode { + int numIdentical; + string seq; + string name; + seqPriorityNode() {} + seqPriorityNode(int n, string s, string nm) : numIdentical(n), seq(s), name(nm) {} + ~seqPriorityNode() {} +}; +/************************************************************/ +struct compGroup { + string group1; + string group2; + compGroup() {} + compGroup(string s, string nm) : group1(s), group2(nm) {} + string getCombo() { return group1+"-"+group2; } + ~compGroup() {} +}; +/***************************************************************/ +struct spearmanRank { + string name; + float score; + + spearmanRank(string n, float s) : name(n), score(s) {} +}; +//*********************************************************************** +inline bool compareIndexes(PDistCell left, PDistCell right){ + return (left.index > right.index); +} +//******************************************************************************************************************** +inline bool compareSpearman(spearmanRank left, spearmanRank right){ + return (left.score < right.score); +} +//******************************************************************************************************************** +inline double max(double left, double right){ + if (left > right) { return left; } + else { return right; } +} +//******************************************************************************************************************** +inline double max(int left, double right){ + double value = left; + if (left > right) { return value; } + else { return right; } +} +//******************************************************************************************************************** +inline double max(double left, int right){ + double value = right; + if (left > value) { return left; } + else { return value; } +} +//******************************************************************************************************************** +//sorts highest to lowest +inline bool compareSeqPriorityNodes(seqPriorityNode left, seqPriorityNode right){ + if (left.numIdentical > right.numIdentical) { + return true; + }else if (left.numIdentical == right.numIdentical) { + if (left.seq > right.seq) { return true; } + else { return false; } + } + return false; +} + /************************************************************/ //sorts lowest to highest inline bool compareDistLinePairs(distlinePair left, distlinePair right){ @@ -131,7 +281,15 @@ inline bool compareDistLinePairs(distlinePair left, distlinePair right){ //sorts lowest to highest inline bool compareSequenceDistance(seqDist left, seqDist right){ return (left.dist < right.dist); -} +} +//******************************************************************************************************************** +//returns sign of double +inline double sign(double temp){ + //find sign + if (temp > 0) { return 1.0; } + else if (temp < 0) { return -1.0; } + return 0; +} /***********************************************************************/ // snagged from http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.2 @@ -152,7 +310,8 @@ void convert(const string& s, T& x, bool failIfLeftoverChars = true){ throw BadConversion(s); } - +//********************************************************************************************************************** +template int sgn(T val){ return (val > T(0)) - (val < T(0)); } //********************************************************************************************************************** template @@ -219,5 +378,15 @@ string toString(const T&x, int i){ } //********************************************************************************************************************** +template +T fromString(const string& s){ + istringstream stream (s); + T t; + stream >> t; + return t; +} + +//********************************************************************************************************************** + #endif