Victor
 All Data Structures Functions Variables Friends Pages
Align.h
1 /* This file is part of Victor.
2 
3  Victor is free software: you can redistribute it and/or modify
4  it under the terms of the GNU General Public License as published by
5  the Free Software Foundation, either version 3 of the License, or
6  (at your option) any later version.
7 
8  Victor is distributed in the hope that it will be useful,
9  but WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  GNU General Public License for more details.
12 
13  You should have received a copy of the GNU General Public License
14  along with Victor. If not, see <http://www.gnu.org/licenses/>.
15  */
16 
17 
18 #ifndef __Align_H__
19 #define __Align_H__
20 
21 #include <Alignment.h>
22 #include <AlignmentData.h>
23 #include <GapFunction.h>
24 #include <IoTools.h>
25 #include <ScoringScheme.h>
26 #include <Traceback.h>
27 #include <algorithm>
28 #include <iostream>
29 #include <limits>
30 #include <math.h>
31 #include <string>
32 #include <vector>
33 
35 #define EQ_EPS 1E-8
36 
38 #define EQUALS(a, b) (fabs(a - b) < EQ_EPS ? true : false)
39 
40 namespace Victor { namespace Align2{
41 
48  class Align {
49  public:
50 
52 
53  enum {
54  INVALID_POS = -1
55  };
56 
57 
58  // CONSTRUCTORS:
59 
62 
64  Align(const Align &orig);
65 
67  virtual ~Align();
68 
69 
70  // OPERATORS:
71 
73  Align& operator =(const Align &orig);
74 
75 
76  // PREDICATES:
77 
80 
83 
86 
88  virtual Traceback next(const Traceback &tb) const;
89 
91  virtual double getScore() const;
92 
94  virtual vector<double> getMultiMatchScore(unsigned int num = 10);
95 
97  virtual vector<string> getMatch() const;
98 
100  virtual void getMultiMatch() = 0;
101 
103  virtual vector< vector<int> > getMatchSubset();
104 
106  virtual vector<int> shiftMatchSubset(vector<int> inputVector,
107  int newStartPos);
108 
110  virtual void outputMultiMatch(ostream &os, unsigned int num = 10,
111  bool fasta = false);
112 
114  virtual vector<Alignment> generateMultiMatch(unsigned int num = 1);
115 
117  virtual vector<double> generateMultiMatchScore(unsigned int num = 10);
118 
120  virtual void doMatch(ostream &os) const;
121 
123  virtual void doMatchPlusHeader(ostream &os, string headerTarget,
124  string headerTemplate) const;
125 
126 
127  // MODIFIERS:
128 
130  virtual void copy(const Align &orig);
131 
133  virtual Align* newCopy() = 0;
134 
136  void setPenalties(double mul, double add);
137 
139  void pModifyMatrix(int i, int j);
140 
142  virtual void recalculateMatrix();
143 
144 
145  // HELPERS:
146 
148  virtual void pCalculateMatrix(bool update = true) = 0;
149 
151  virtual void pCalculateMatrix(const vector<unsigned int> &v1,
152  const vector<unsigned int> &v2, bool update = true) = 0;
153 
154 
155  // ATTRIBUTES:
156 
160  vector< vector<double> > F;
161  vector< vector<Traceback> > B;
163  unsigned int n;
164  unsigned int m;
165  mutable vector<int> res1Pos;
166  mutable vector<int> res2Pos;
167  double penaltyMul;
168  double penaltyAdd;
169 
170 
171  protected:
172 
173 
174  private:
175 
176  };
177 
178  // -----------------------------------------------------------------------------
179  // Align
180  // -----------------------------------------------------------------------------
181 
182  // PREDICATES:
183 
184  inline AlignmentData*
186  return ad;
187  }
188 
189  inline GapFunction*
191  return gf;
192  }
193 
194  inline ScoringScheme*
196  return ss;
197  }
198 
199  inline Traceback
200  Align::next(const Traceback& tb) const {
201  if ((B.size() > 0) && (tb.i >= 0) && (tb.j >= 0) &&
202  (tb.i < static_cast<int> (B.size())) &&
203  (tb.j < static_cast<int> (B[tb.i].size())))
204  return B[tb.i][tb.j];
206  }
207 
208  inline double
209  Align::getScore() const {
210  return F[B0.i][B0.j];
211  }
212 
213 
214  // MODIFIERS:
221  inline void
222  Align::setPenalties(double mul, double add) {
223  penaltyMul = mul;
224  penaltyAdd = add;
225  }
231  inline void
232  Align::pModifyMatrix(int i, int j) {
233  F[i][j] = penaltyMul * F[i][j] - penaltyAdd;
234  }
235 
236 }} // namespace
237 
238 #endif
Pairwise sequence and profile alignment.
Definition: Align.h:48
virtual void getMultiMatch()=0
Return two-element array containing an alignment with maximal score.
virtual void recalculateMatrix()
Recalculate the alignment matrix.
Definition: Align.cc:275
Base class for gap functions.
Definition: GapFunction.h:31
virtual vector< string > getMatch() const
Return two-element array containing an alignment with maximal score.
Definition: Align.cc:82
virtual void copy(const Align &orig)
Copy orig object to this object ("deep copy").
Definition: Align.cc:235
AlignmentData * ad
Pointer to AlignmentData.
Definition: Align.h:157
double penaltyMul
Multiplicative penalty for suboptimal alignment.
Definition: Align.h:167
unsigned int m
Length of template sequence.
Definition: Align.h:164
virtual Traceback next(const Traceback &tb) const
Return next Traceback element.
Definition: Align.h:200
virtual double getScore() const
Return alignment score.
Definition: Align.h:209
virtual void outputMultiMatch(ostream &os, unsigned int num=10, bool fasta=false)
Generate and output an ensemble of suboptimal alignments.
Definition: Align.cc:157
virtual Align * newCopy()=0
Construct a new "deep copy" of this object.
Align(AlignmentData *ad, GapFunction *gf, ScoringScheme *ss)
Default constructor.
Definition: Align.cc:31
virtual ~Align()
Destructor.
Definition: Align.cc:52
Traceback B0
Starting point of the traceback.
Definition: Align.h:162
ScoringScheme * getScoringScheme()
Return ScoringScheme pointer.
Definition: Align.h:195
vector< int > res1Pos
Aligned positions for target sequence.
Definition: Align.h:165
virtual void doMatchPlusHeader(ostream &os, string headerTarget, string headerTemplate) const
Output of alignment result (including headers of the two sequences).
Definition: Align.cc:217
virtual vector< Alignment > generateMultiMatch(unsigned int num=1)
Generate and return an ensemble of suboptimal alignments.
Definition: Align.cc:177
double penaltyAdd
Additive penalty for suboptimal alignment.
Definition: Align.h:168
int j
Position (column).
Definition: Traceback.h:90
GapFunction * getGapFunction()
Return GapFunction pointer.
Definition: Align.h:190
vector< vector< double > > F
Score matrix.
Definition: Align.h:160
Base class for printing alignments.
Definition: AlignmentData.h:35
virtual vector< int > shiftMatchSubset(vector< int > inputVector, int newStartPos)
Return vector with positions shifted depending on new position.
Definition: Align.cc:135
virtual vector< vector< int > > getMatchSubset()
Return subset corresponding to match.
Definition: Align.cc:126
vector< vector< Traceback > > B
Traceback matrix.
Definition: Align.h:161
virtual vector< double > generateMultiMatchScore(unsigned int num=10)
Generate and return scores of an ensemble of suboptimal alignments.
Definition: Align.cc:196
int i
Position (row).
Definition: Traceback.h:89
unsigned int n
Length of target sequence.
Definition: Align.h:163
Reconstruct the path in the alignment matrix.
Definition: Traceback.h:30
virtual vector< double > getMultiMatchScore(unsigned int num=10)
Return alignment scores of an ensemble of suboptimal alignments.
Definition: Align.cc:70
virtual void doMatch(ostream &os) const
Output of alignment result.
Definition: Align.cc:208
vector< int > res2Pos
Aligned positions for template sequence.
Definition: Align.h:166
Align & operator=(const Align &orig)
Assignment operator.
Definition: Align.cc:59
static Traceback getInvalidTraceback()
Return invalid position.
Definition: Traceback.h:128
virtual void pCalculateMatrix(bool update=true)=0
Update/create matrix values.
ScoringScheme * ss
Pointer to ScoringScheme.
Definition: Align.h:159
Base class for scoring schemes.
Definition: ScoringScheme.h:34
void pModifyMatrix(int i, int j)
Modify matrix during suboptimal alignment generation.
Definition: Align.h:232
AlignmentData * getAlignmentData()
Return AlignmentData pointer.
Definition: Align.h:185
void setPenalties(double mul, double add)
Set penalties for suboptimal alignments.
Definition: Align.h:222
GapFunction * gf
Pointer to GapFunction.
Definition: Align.h:158