10 * Created by Sarah Westcott on 2/19/09.
11 * Copyright 2009 Schloss Lab UMASS Amherst. All rights reserved.
15 /* This file contains all the standard incudes we use in the project as well as some common utilities. */
54 /***********************************************************************/
56 #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
59 #include <sys/resource.h>
60 #include <sys/types.h>
65 #include <readline/readline.h>
66 #include <readline/history.h>
70 #include <conio.h> //allows unbuffered screen capture from stdin
71 #include <direct.h> //get cwd
81 #define exp(x) (exp((double) x))
82 #define sqrt(x) (sqrt((double) x))
83 #define log10(x) (log10((double) x))
84 #define log2(x) (log10(x)/log10(2))
85 #define isnan(x) ((x) != (x))
86 #define isinf(x) (fabs(x) == std::numeric_limits<double>::infinity())
89 typedef unsigned long ull;
99 IntNode(int lv, int rv, IntNode* l, IntNode* r) : lvalue(lv), rvalue(rv), left(l), right(r) {};
109 /************************************************************/
113 int smallChild; //used to make linkTable work with list and rabund. represents bin number of this cluster node
114 clusterNode(int num, int par, int kid) : numSeq(num), parent(par), smallChild(kid) {};
116 /************************************************************/
122 seqDist(int s1, int s2, float d) : seq1(s1), seq2(s2), dist(d) {}
125 /************************************************************/
126 struct distlinePair {
131 /************************************************************/
132 struct seqPriorityNode {
137 seqPriorityNode(int n, string s, string nm) : numIdentical(n), seq(s), name(nm) {}
138 ~seqPriorityNode() {}
140 /***************************************************************/
141 struct spearmanRank {
145 spearmanRank(string n, float s) : name(n), score(s) {}
147 //********************************************************************************************************************
148 //sorts highest to lowest
149 inline bool compareSpearman(spearmanRank left, spearmanRank right){
150 return (left.score > right.score);
152 //********************************************************************************************************************
153 //sorts highest to lowest
154 inline bool compareSeqPriorityNodes(seqPriorityNode left, seqPriorityNode right){
155 return (left.numIdentical > right.numIdentical);
157 //********************************************************************************************************************
158 //sorts lowest to highest
159 inline bool compareSpearmanReverse(spearmanRank left, spearmanRank right){
160 return (left.score < right.score);
162 /************************************************************/
163 //sorts lowest to highest
164 inline bool compareDistLinePairs(distlinePair left, distlinePair right){
165 return (left.end < right.end);
167 //********************************************************************************************************************
168 //sorts lowest to highest
169 inline bool compareSequenceDistance(seqDist left, seqDist right){
170 return (left.dist < right.dist);
172 /***********************************************************************/
174 // snagged from http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.2
175 // works for now, but there should be a way to do it without killing the whole program
177 class BadConversion : public runtime_error {
179 BadConversion(const string& s) : runtime_error(s){ }
182 //**********************************************************************************************************************
184 void convert(const string& s, T& x, bool failIfLeftoverChars = true){
188 if (!(i >> x) || (failIfLeftoverChars && i.get(c)))
189 throw BadConversion(s);
193 //**********************************************************************************************************************
196 bool convertTestFloat(const string& s, T& x, bool failIfLeftoverChars = true){
200 if (!(i >> x) || (failIfLeftoverChars && i.get(c)))
208 //**********************************************************************************************************************
211 bool convertTest(const string& s, T& x, bool failIfLeftoverChars = true){
215 if (!(i >> x) || (failIfLeftoverChars && i.get(c)))
222 //**********************************************************************************************************************
224 string toString(const T&x){
232 //**********************************************************************************************************************
235 string toHex(const T&x){
244 //**********************************************************************************************************************
247 string toString(const T&x, int i){
252 output << fixed << x;
257 //**********************************************************************************************************************
260 T fromString(const string& s){
261 istringstream stream (s);
267 //**********************************************************************************************************************