]> git.donarmstrong.com Git - mothur.git/blobdiff - mothur.h
added oligos class. added check orient parameter to trim.flows, sffinfo, fastq.info...
[mothur.git] / mothur.h
index 53074eb1e146f28af23a87e6888d57bfaa5184fa..b4fc3ce1c41171c0cde75a83f6365e12873984bc 100644 (file)
--- a/mothur.h
+++ b/mothur.h
@@ -42,6 +42,7 @@
 #include <cmath>
 #include <math.h>
 #include <algorithm>
+#include <numeric>
 
 //misc
 #include <cerrno>
@@ -53,7 +54,7 @@
 #endif
 /***********************************************************************/
 
-#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
+#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix)
        #include <sys/wait.h>
        #include <sys/time.h>
        #include <sys/resource.h>
@@ -72,6 +73,8 @@
        #include <windows.h>
        #include <psapi.h>
        #include <direct.h>
+       #include <tchar.h>
+
 #endif
 
 using namespace std;
@@ -83,7 +86,9 @@ using namespace std;
 #define isnan(x) ((x) != (x))
 #define isinf(x) (fabs(x) == std::numeric_limits<double>::infinity())
 
+
 typedef unsigned long ull;
+typedef unsigned short intDist;
 
 struct IntNode {
        int lvalue;
@@ -103,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<unsigned short> flowgram;
+       vector<unsigned int> flowIndex;
+       string bases;
+       vector<unsigned int> 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;
@@ -114,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() {}
 };
 /************************************************************/
@@ -125,6 +210,16 @@ struct distlinePair {
        int end;
        
 };
+/************************************************************/
+struct oligosPair {
+       string forward;
+       string reverse;
+       
+       oligosPair() { forward = ""; reverse = "";  }
+       oligosPair(string f, string r) : forward(f), reverse(r) {}
+       ~oligosPair() {}
+};
+
 /************************************************************/
 struct seqPriorityNode {
        int numIdentical;
@@ -134,6 +229,15 @@ struct 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;
@@ -141,21 +245,43 @@ struct spearmanRank {
        
        spearmanRank(string n, float s) : name(n), score(s) {}
 };
+//***********************************************************************
+inline bool compareIndexes(PDistCell left, PDistCell right){
+       return (left.index > right.index);      
+}
 //********************************************************************************************************************
-//sorts highest to lowest
 inline bool compareSpearman(spearmanRank left, spearmanRank right){
-       return (left.score > right.score);      
-} 
+       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){
-       return (left.numIdentical > right.numIdentical);        
-} 
-//********************************************************************************************************************
-//sorts lowest to highest
-inline bool compareSpearmanReverse(spearmanRank left, spearmanRank right){
-       return (left.score < right.score);      
+       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){
@@ -165,7 +291,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
@@ -186,7 +320,8 @@ void convert(const string& s, T& x, bool failIfLeftoverChars = true){
                        throw BadConversion(s);
        
 }
-
+//**********************************************************************************************************************
+template <typename T> int sgn(T val){ return (val > T(0)) - (val < T(0)); }
 //**********************************************************************************************************************
 
 template<typename T>