--- /dev/null
+#ifndef MOTHURPERSEUS
+#define MOTHURPERSEUS
+
+/*
+ * myPerseus.h
+ *
+ *
+ * Created by Pat Schloss on 9/5/11.
+ * Copyright 2011 Patrick D. Schloss. All rights reserved.
+ *
+ */
+
+
+#include "mothurout.h"
+
+/**************************************************************************************************/
+struct seqData {
+
+ seqData(string name, string seq, int freq) : seqName(name), sequence(seq), frequency(freq) { }
+
+ bool operator<( seqData const& rhs ) const {
+
+ bool verdict = 0;
+
+ if(frequency < rhs.frequency){
+ verdict = 1;
+ }
+ else if(frequency == rhs.frequency){
+ verdict = (seqName > rhs.seqName);
+ }
+
+ return verdict;
+ }
+
+ string seqName;
+ string sequence;
+ int frequency;
+};
+/**************************************************************************************************/
+struct pwModel {
+ pwModel(double m, double mm, double g): MATCH(m), MISMATCH(mm), GAP_OPEN(g) {;}
+ double MATCH;
+ double MISMATCH;
+ double GAP_OPEN;
+};
+/**************************************************************************************************/
+struct pwAlign {
+ pwAlign(): query(""), reference(""){}
+ pwAlign(string q, string r): query(q), reference(r){}
+ string query;
+ string reference;
+
+};
+/**************************************************************************************************/
+class Perseus {
+
+public:
+ Perseus() { m = MothurOut::getInstance(); }
+ ~Perseus() {}
+
+ vector<vector<double> > binomial(int);
+ double modeledPairwiseAlignSeqs(string, string, string&, string&, vector<vector<double> >&);
+ int getAlignments(int, vector<seqData>, vector<pwAlign>&, vector<vector<int> >& , vector<vector<int> >&, vector<vector<int> >&, vector<vector<int> >&, int&, int&, vector<bool>&);
+ int getChimera(vector<seqData>,vector<vector<int> >&, vector<vector<int> >&,int&, int&, int&,vector<int>&, vector<int>&, vector<int>&, vector<int>&, vector<bool>);
+ string stitchBimera(vector<pwAlign>&, int, int, int, vector<vector<int> >&, vector<vector<int> >&);
+ int getTrimera(vector<seqData>&, vector<vector<int> >&, int&, int&, int&, int&, int&, vector<int>&, vector<int>&, vector<int>&, vector<int>&, vector<bool>);
+ string stitchTrimera(vector<pwAlign>, int, int, int, int, int, vector<vector<int> >&, vector<vector<int> >&);
+ double calcLoonIndex(string, string, string, int, vector<vector<double> >&);
+ double classifyChimera(double, double, double, double, double);
+
+private:
+ MothurOut* m;
+ int toInt(char);
+ double basicPairwiseAlignSeqs(string, string, string&, string&, pwModel);
+ int getDiffs(string, string, vector<int>&, vector<int>&, vector<int>&, vector<int>&);
+ int getLastMatch(char, vector<vector<char> >&, int, int, string&, string&);
+ int threeWayAlign(string, string, string, string&, string&, string&);
+ double calcBestDistance(string, string);
+
+
+};
+/**************************************************************************************************/
+#endif
+
+