Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / muscle / pwpath.h
diff --git a/website/archive/binaries/mac/src/muscle/pwpath.h b/website/archive/binaries/mac/src/muscle/pwpath.h
new file mode 100644 (file)
index 0000000..69628e3
--- /dev/null
@@ -0,0 +1,100 @@
+#ifndef        PWPath_h\r
+#define PWPath_h\r
+\r
+/***\r
+Each PWEdge in a PWPath specifies a column in a pair-wise (PW) alignment.\r
+"Path" is by analogy with the path through an HMM.\r
+Edge types are:\r
+\r
+       'M'             LetterA + LetterB\r
+       'D'             LetterA + GapB\r
+       'I'             GapB + LetterA\r
+\r
+The mnemomic is Match, Delete, Insert (with respect to A).\r
+Here is a global alignment of sequences A and B.\r
+\r
+       A:      AMQT-F\r
+       B:      -M-TIF\r
+\r
+The path for this example is:\r
+\r
+       Edge    cType   uPrefixLengthA  uPrefixLengthB\r
+       0               D               1                               0\r
+       1               M               2                               1\r
+       2               D               3                               1\r
+       3               M               4                               2\r
+       4               I               4                               3\r
+       5               M               5                               4\r
+\r
+Given the starting positions in each alignment (e.g., column zero for\r
+a global alignment), the prefix length fields are redundant; they are\r
+included only for convenience and as a sanity check, we are not trying\r
+to optimize for speed or space here. We use prefix lengths rather than\r
+column indexes because of the problem of representing the special case\r
+of a gap in the first position.\r
+***/\r
+\r
+class Seq;\r
+class MSA;\r
+class SatchmoParams;\r
+class PW;\r
+class TextFile;\r
+class PWScore;\r
+\r
+class PWEdge\r
+       {\r
+public:\r
+       char cType;\r
+       unsigned uPrefixLengthA;\r
+       unsigned uPrefixLengthB;\r
+\r
+       bool Equal(const PWEdge &e) const\r
+               {\r
+               return uPrefixLengthA == e.uPrefixLengthA &&\r
+                 uPrefixLengthB == e.uPrefixLengthB &&\r
+                 cType == e.cType;\r
+               }\r
+       };\r
+\r
+class PWPath\r
+       {\r
+// Disable compiler defaults\r
+private:\r
+       PWPath &operator=(const PWPath &rhs);\r
+       PWPath(const PWPath &rhs);\r
+\r
+public:\r
+       PWPath();\r
+       virtual ~PWPath();\r
+\r
+public:\r
+       void Clear();\r
+       void FromStr(const char Str[]);\r
+       void Copy(const PWPath &Path);\r
+       void AppendEdge(const PWEdge &Edge);\r
+       void AppendEdge(char cType, unsigned uPrefixLengthA, unsigned uPrefixLengthB);\r
+       void PrependEdge(const PWEdge &Edge);\r
+       unsigned GetEdgeCount() const { return m_uEdgeCount; }\r
+       const PWEdge &GetEdge(unsigned uEdgeIndex) const;\r
+       void Validate(const PWScore &PWS) const;\r
+       void Validate() const;\r
+       void LogMe() const;\r
+       void FromFile(TextFile &File);\r
+       void ToFile(TextFile &File) const;\r
+       void FromMSAPair(const MSA &msaA, const MSA &msaB);\r
+       void AssertEqual(const PWPath &Path) const;\r
+       bool Equal(const PWPath &Path) const;\r
+       unsigned GetMatchCount() const;\r
+       unsigned GetDeleteCount() const;\r
+       unsigned GetInsertCount() const;\r
+\r
+private:\r
+       void ExpandPath(unsigned uAdditionalEdgeCount);\r
+\r
+private:\r
+       unsigned m_uEdgeCount;\r
+       unsigned m_uArraySize;\r
+       PWEdge *m_Edges;\r
+       };\r
+\r
+#endif // PWPath_h\r