source: trunk/GDE/MUSCLE/src/pwpath.h

Last change on this file was 10390, checked in by aboeckma, 11 years ago

added muscle sourcles amd makefile

File size: 2.4 KB
Line 
1#ifndef PWPath_h
2#define PWPath_h
3
4/***
5Each PWEdge in a PWPath specifies a column in a pair-wise (PW) alignment.
6"Path" is by analogy with the path through an HMM.
7Edge types are:
8
9        'M'             LetterA + LetterB
10        'D'             LetterA + GapB
11        'I'             GapB + LetterA
12
13The mnemomic is Match, Delete, Insert (with respect to A).
14Here is a global alignment of sequences A and B.
15
16        A:      AMQT-F
17        B:      -M-TIF
18
19The path for this example is:
20
21        Edge    cType   uPrefixLengthA  uPrefixLengthB
22        0               D               1                               0
23        1               M               2                               1
24        2               D               3                               1
25        3               M               4                               2
26        4               I               4                               3
27        5               M               5                               4
28
29Given the starting positions in each alignment (e.g., column zero for
30a global alignment), the prefix length fields are redundant; they are
31included only for convenience and as a sanity check, we are not trying
32to optimize for speed or space here. We use prefix lengths rather than
33column indexes because of the problem of representing the special case
34of a gap in the first position.
35***/
36
37class Seq;
38class MSA;
39class SatchmoParams;
40class PW;
41class TextFile;
42class PWScore;
43
44class PWEdge
45        {
46public:
47        char cType;
48        unsigned uPrefixLengthA;
49        unsigned uPrefixLengthB;
50
51        bool Equal(const PWEdge &e) const
52                {
53                return uPrefixLengthA == e.uPrefixLengthA &&
54                  uPrefixLengthB == e.uPrefixLengthB &&
55                  cType == e.cType;
56                }
57        };
58
59class PWPath
60        {
61// Disable compiler defaults
62private:
63        PWPath &operator=(const PWPath &rhs);
64        PWPath(const PWPath &rhs);
65
66public:
67        PWPath();
68        virtual ~PWPath();
69
70public:
71        void Clear();
72        void FromStr(const char Str[]);
73        void Copy(const PWPath &Path);
74        void AppendEdge(const PWEdge &Edge);
75        void AppendEdge(char cType, unsigned uPrefixLengthA, unsigned uPrefixLengthB);
76        void PrependEdge(const PWEdge &Edge);
77        unsigned GetEdgeCount() const { return m_uEdgeCount; }
78        const PWEdge &GetEdge(unsigned uEdgeIndex) const;
79        void Validate(const PWScore &PWS) const;
80        void Validate() const;
81        void LogMe() const;
82        void FromFile(TextFile &File);
83        void ToFile(TextFile &File) const;
84        void FromMSAPair(const MSA &msaA, const MSA &msaB);
85        void AssertEqual(const PWPath &Path) const;
86        bool Equal(const PWPath &Path) const;
87        unsigned GetMatchCount() const;
88        unsigned GetDeleteCount() const;
89        unsigned GetInsertCount() const;
90
91private:
92        void ExpandPath(unsigned uAdditionalEdgeCount);
93
94private:
95        unsigned m_uEdgeCount;
96        unsigned m_uArraySize;
97        PWEdge *m_Edges;
98        };
99
100#endif  // PWPath_h
Note: See TracBrowser for help on using the repository browser.