X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=mothur.h;h=32f4778a7c1ee19db25eeb4e1eafaf74fabcd617;hp=e5c389005df83b47e45504433269ac7735f6a8c4;hb=d1c97b8c04bb75faca1e76ffad60b37a4d789d3d;hpb=bfbc55964f1977da72c2cea984288a427d370a59 diff --git a/mothur.h b/mothur.h index e5c3890..32f4778 100644 --- a/mothur.h +++ b/mothur.h @@ -1,7 +1,6 @@ #ifndef MOTHUR_H #define MOTHUR_H -using namespace std; /* @@ -13,14 +12,17 @@ using namespace std; * */ -/* This file contains all the standard incudes we use in the project. */ +/* This file contains all the standard incudes we use in the project as well as some common utilities. */ +//#include //io libraries #include #include #include #include +#include + //exception #include @@ -34,11 +36,294 @@ using namespace std; #include #include #include +#include //math #include #include #include +#include + +//misc +#include +#include +#include + +#ifdef USE_MPI + #include "mpi.h" +#endif +/***********************************************************************/ + +#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix) + #include + #include + #include + #include + #include + #include + + #ifdef USE_READLINE + #include + #include + #endif + +#else + #include //allows unbuffered screen capture from stdin + #include //get cwd + #include + #include + #include + #include + +#endif + +using namespace std; + +#define exp(x) (exp((double) x)) +#define sqrt(x) (sqrt((double) x)) +#define log10(x) (log10((double) x)) +#define log2(x) (log10(x)/log10(2)) +#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; + int rvalue; + int lcoef; + int rcoef; + IntNode* left; + IntNode* right; + + IntNode(int lv, int rv, IntNode* l, IntNode* r) : lvalue(lv), rvalue(rv), left(l), right(r) {}; + IntNode() {}; +}; + +struct ThreadNode { + int* pid; + IntNode* left; + IntNode* right; +}; + +struct diffPair { + float prob; + float reverseProb; + + diffPair() { + prob = 0; reverseProb = 0; + } + diffPair(float p, float rp) { + prob = p; + reverseProb = rp; + } +}; +/***********************************************************************/ +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; + int parent; + int smallChild; //used to make linkTable work with list and rabund. represents bin number of this cluster node + clusterNode(int num, int par, int kid) : numSeq(num), parent(par), smallChild(kid) {}; +}; +/************************************************************/ +struct seqDist { + int seq1; + int seq2; + double dist; + seqDist() {} + seqDist(int s1, int s2, double d) : seq1(s1), seq2(s2), dist(d) {} + ~seqDist() {} +}; +/************************************************************/ +struct distlinePair { + int start; + 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); +} +//******************************************************************************************************************** +//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){ + return (left.end < right.end); +} +//******************************************************************************************************************** +//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 +// works for now, but there should be a way to do it without killing the whole program + +class BadConversion : public runtime_error { +public: + BadConversion(const string& s) : runtime_error(s){ } +}; + +//********************************************************************************************************************** +template +void convert(const string& s, T& x, bool failIfLeftoverChars = true){ + + istringstream i(s); + char c; + if (!(i >> x) || (failIfLeftoverChars && i.get(c))) + throw BadConversion(s); + +} +//********************************************************************************************************************** +template int sgn(T val){ return (val > T(0)) - (val < T(0)); } +//********************************************************************************************************************** + +template +bool convertTestFloat(const string& s, T& x, bool failIfLeftoverChars = true){ + + istringstream i(s); + char c; + if (!(i >> x) || (failIfLeftoverChars && i.get(c))) + { + return false; + } + return true; + +} + +//********************************************************************************************************************** + +template +bool convertTest(const string& s, T& x, bool failIfLeftoverChars = true){ + + istringstream i(s); + char c; + if (!(i >> x) || (failIfLeftoverChars && i.get(c))) + { + return false; + } + return true; + +} +//********************************************************************************************************************** +template +string toString(const T&x){ + + stringstream output; + output << x; + return output.str(); + +} + +//********************************************************************************************************************** + +template +string toHex(const T&x){ + + stringstream output; + + output << hex << x; + + return output.str(); + +} +//********************************************************************************************************************** + +template +string toString(const T&x, int i){ + + stringstream output; + + output.precision(i); + output << fixed << x; + + return output.str(); + +} +//********************************************************************************************************************** + +template +T fromString(const string& s){ + istringstream stream (s); + T t; + stream >> t; + return t; +} + +//********************************************************************************************************************** #endif