Musaline
 All Classes Namespaces Functions Variables Pages
musaline.hpp
1 #ifndef MUSALIGNA7GDNETYQI385MDKWOWOO
2 #define MUSALIGNA7GDNETYQI385MDKWOWOO
3 
4 // Author: Geert-Jan Giezeman <geert@cs.uu.nl>
5 // Copyright: Utrecht University, 2012
6 
7 #include <vector>
8 #include <limits>
9 #include "csuu_matrix.hpp"
10 
12 namespace musaline {
13 
15  namespace detail {
16  using Geert_cs_uu_nl::Matrix;
17  const double mininf= -std::numeric_limits<double>::infinity();
18 
19  struct NwCell {
20  double asb;
21  int from;
22  // 0: from topleft; 1: from top; 2: from left; 3: stop
23  };
24 
25  struct NwgCell {
26  double asb[3];
27  int from;
28  bool ext_1;
29  bool ext_2;
30  };
31 
32  }
33 
37  struct Match {
41  int n[2];
43  double score;
44  };
45 
54  struct Alignment {
57  double score;
67  size_t start[2];
71  size_t end[2];
76  std::vector< Match > matches;
77  };
78 
79 
80 #if 0
81 
87  enum AlignKind {FirstSeqWithGap=0, SecondSeqWithGap=1, BothSeqs, FirstWithMany, SecondWithMany};
88 
93  struct Alignment {
95  double score;
103  size_t start[2];
107  size_t end[2];
113  std::vector< AlignKind > a;
114  };
115 #endif
116 
190  template <class CostCalc>
192  public:
193  typedef CostCalc CostCalculator;
194  private:
195  mutable CostCalculator m_ccal;
196  template <class Iter1, class Iter2>
197  void fill_matrix_std(Geert_cs_uu_nl::Matrix<detail::NwCell> &matrix,
198  Iter1 s1cur, Iter2 s2begin) const;
199  template <class Iter1, class Iter2>
200  void fill_matrix_partial(Geert_cs_uu_nl::Matrix<detail::NwCell> &matrix,
201  Iter1 s1cur, Iter2 s2begin) const;
202  public:
207  CostCalculator ccal = CostCalculator())
208  :
209  m_ccal(ccal) {}
211  void set_cost_calculator(CostCalculator ccal) { m_ccal = ccal;}
213  CostCalculator const &get_cost_calculator() const { return m_ccal;}
217  template <class Sequence0, class Sequence1>
218  Alignment global_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
222  template <class Sequence0, class Sequence1>
223  Alignment cut_one_end_off_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
227  template <class Sequence0, class Sequence1>
228  Alignment cut_one_begin_off_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
231  template <class Sequence0, class Sequence1>
232  Alignment initial_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
235  template <class Sequence0, class Sequence1>
236  Alignment end_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
239  template <class Sequence0, class Sequence1>
240  Alignment inside_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
243  template <class Sequence0, class Sequence1>
244  Alignment semi_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
246  template <class Sequence0, class Sequence1>
247  Alignment partial_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
248  };
249 
250 
251 
252 
315  template <class CostCalc>
317  public:
318  typedef CostCalc CostCalculator;
319  private:
320  mutable CostCalculator m_ccal;
321 
322  template <class Iter1, class Iter2>
323  void fill_matrix_std(Geert_cs_uu_nl::Matrix<detail::NwgCell> &matrix,
324  Iter1 s1cur, Iter2 s2begin) const;
325  template <class Iter1, class Iter2>
326  void fill_matrix_partial(Geert_cs_uu_nl::Matrix<detail::NwgCell> &matrix,
327  Iter1 s1cur, Iter2 s2begin) const;
328  public:
332  AffineAligner( CostCalculator ccal = CostCalculator())
333  : m_ccal(ccal)
334  {}
336  void set_cost_calculator(CostCalculator ccal) { m_ccal = ccal;}
338  CostCalculator const &get_cost_calculator() const { return m_ccal;}
342  template <class Sequence0, class Sequence1>
343  Alignment global_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
347  template <class Sequence0, class Sequence1>
348  Alignment cut_one_end_off_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
352  template <class Sequence0, class Sequence1>
353  Alignment cut_one_begin_off_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
356  template <class Sequence0, class Sequence1>
357  Alignment inside_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
360  template <class Sequence0, class Sequence1>
361  Alignment initial_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
364  template <class Sequence0, class Sequence1>
365  Alignment end_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
368  template <class Sequence0, class Sequence1>
369  Alignment semi_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
371  template <class Sequence0, class Sequence1>
372  Alignment partial_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
373  };
374 
375 #if 0
376 
380  struct AlignType2 {
381  AlignKind ak;
385  double score;
391  int n;
392  };
393 
398  struct Alignment2 {
400  double score;
408  size_t start[2];
412  size_t end[2];
419  std::vector<AlignType2> a;
420  };
421 #endif
422 
423  namespace detail {
424  struct FrCell {
425  double asb;
426  int from;
427  int fragments;
428  };
429  }
430 
527  template <class CostCalc>
529  public:
530  typedef CostCalc CostCalculator;
531  private:
532  mutable CostCalculator m_ccal;
533  template <class Iter1, class Iter2>
534  void fill_matrix(Geert_cs_uu_nl::Matrix<detail::FrCell> &matrix,
535  Iter1 s1begin, Iter2 s2begin, double initial_value) const;
536  template <class Iter1, class Iter2>
537  void fill_matrix_std(Geert_cs_uu_nl::Matrix<detail::FrCell> &matrix,
538  Iter1 s1begin, Iter2 s2begin) const
539  {
540  fill_matrix(matrix, s1begin, s2begin, detail::mininf);
541  }
542  template <class Iter1, class Iter2>
543  void fill_matrix_partial(Geert_cs_uu_nl::Matrix<detail::FrCell> &matrix,
544  Iter1 s1begin, Iter2 s2begin) const
545  {
546  fill_matrix(matrix, s1begin, s2begin, 0.0);
547  }
548 
549  template <class Sequence1>
550  void gap_init_first_column(
551  Geert_cs_uu_nl::Matrix<detail::FrCell> &matrix,
552  Sequence1 const &seq1) const;
553  template <class Sequence0>
554  void gap_init_first_row(Geert_cs_uu_nl::Matrix<detail::FrCell> &matrix,
555  Sequence0 const &seq0) const;
556 
557  template <class Sequence0, class Sequence1>
558  void gap_init(Geert_cs_uu_nl::Matrix<detail::FrCell> &matrix,
559  Sequence0 const &seq0, Sequence1 const &seq1) const;
560 
561  public:
565  CostCalculator ccal = CostCalculator())
566  : m_ccal(ccal) {}
568  void set_cost_calculator(CostCalculator ccal) { m_ccal = ccal;}
570  CostCalculator const &get_cost_calculator() const { return m_ccal;}
574  template <class Sequence0, class Sequence1>
575  Alignment global_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
579  template <class Sequence0, class Sequence1>
580  Alignment cut_one_end_off_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
584  template <class Sequence0, class Sequence1>
585  Alignment cut_one_begin_off_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
588  template <class Sequence0, class Sequence1>
589  Alignment initial_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
592  template <class Sequence0, class Sequence1>
593  Alignment end_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
596  template <class Sequence0, class Sequence1>
597  Alignment inside_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
600  template <class Sequence0, class Sequence1>
601  Alignment semi_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
603  template <class Sequence0, class Sequence1>
604  Alignment partial_align(Sequence0 const &seq0, Sequence1 const &seq1) const;
605  };
606 
607 }
608 
609 #include "musaline_impl.hpp"
610 #include "musaline_fragment.hpp"
611 
612 // vim:set shiftwidth=4 softtabstop=4 expandtab cindent:
613 
614 #endif // MUSALIGNA7GDNETYQI385MDKWOWOO
Definition: musaline.hpp:528
ConsolidatingAligner(CostCalculator ccal=CostCalculator())
Constructor. Takes a CostaCalculator object as parameter.
Definition: musaline.hpp:564
int n[2]
n[0] and n[1] hold the number of elements of seq0 and seq1 that are involved. At most one of them can...
Definition: musaline.hpp:41
AffineAligner(CostCalculator ccal=CostCalculator())
Constructor.
Definition: musaline.hpp:332
CostCalculator const & get_cost_calculator() const
Get a const reference to the current CostCalculator object.
Definition: musaline.hpp:213
double score
The contribution of this match to the total alignment score.
Definition: musaline.hpp:43
Definition: musaline.hpp:54
CostCalculator const & get_cost_calculator() const
Get a const reference to the current CostCalculator object.
Definition: musaline.hpp:338
Alignment cut_one_begin_off_align(Sequence0 const &seq0, Sequence1 const &seq1) const
Alignment cut_one_begin_off_align(Sequence0 const &seq0, Sequence1 const &seq1) const
Definition: musaline.hpp:424
void set_cost_calculator(CostCalculator ccal)
Set a different CostCalculator object.
Definition: musaline.hpp:211
double score
The computed similarity value for the alignment.
Definition: musaline.hpp:57
Alignment cut_one_end_off_align(Sequence0 const &seq0, Sequence1 const &seq1) const
Alignment initial_align(Sequence0 const &seq0, Sequence1 const &seq1) const
This class can compute the most simple form of alignment.
Definition: musaline.hpp:191
Alignment initial_align(Sequence0 const &seq0, Sequence1 const &seq1) const
Alignment inside_align(Sequence0 const &seq0, Sequence1 const &seq1) const
Alignment global_align(Sequence0 const &seq0, Sequence1 const &seq1) const
Alignment initial_align(Sequence0 const &seq0, Sequence1 const &seq1) const
Alignment semi_align(Sequence0 const &seq0, Sequence1 const &seq1) const
Definition: musaline.hpp:19
Alignment cut_one_end_off_align(Sequence0 const &seq0, Sequence1 const &seq1) const
Alignment end_align(Sequence0 const &seq0, Sequence1 const &seq1) const
size_t start[2]
start[i] points to the start of the matched part of sequence i.
Definition: musaline.hpp:67
Alignment semi_align(Sequence0 const &seq0, Sequence1 const &seq1) const
This class can compute a form of alignment with a slightly more complicated cost function than Linear...
Definition: musaline.hpp:316
Alignment partial_align(Sequence0 const &seq0, Sequence1 const &seq1) const
No requirement for start and end.
void set_cost_calculator(CostCalculator ccal)
Set a different CostCalculator object.
Definition: musaline.hpp:568
Alignment end_align(Sequence0 const &seq0, Sequence1 const &seq1) const
Alignment semi_align(Sequence0 const &seq0, Sequence1 const &seq1) const
Alignment global_align(Sequence0 const &seq0, Sequence1 const &seq1) const
size_t end[2]
end[i] points one after the end of the matched part of sequence i.
Definition: musaline.hpp:71
Alignment global_align(Sequence0 const &seq0, Sequence1 const &seq1) const
Alignment end_align(Sequence0 const &seq0, Sequence1 const &seq1) const
Definition: musaline.hpp:25
LinearAligner(CostCalculator ccal=CostCalculator())
Constructor.
Definition: musaline.hpp:206
void set_cost_calculator(CostCalculator ccal)
Set a different CostCalculator object.
Definition: musaline.hpp:336
Alignment partial_align(Sequence0 const &seq0, Sequence1 const &seq1) const
No requirement for start and end.
Alignment cut_one_end_off_align(Sequence0 const &seq0, Sequence1 const &seq1) const
Alignment inside_align(Sequence0 const &seq0, Sequence1 const &seq1) const
CostCalculator const & get_cost_calculator() const
Get a const reference to the current CostCalculator object.
Definition: musaline.hpp:570
Alignment partial_align(Sequence0 const &seq0, Sequence1 const &seq1) const
No requirement for start and end.
std::vector< Match > matches
This vector holds details of the parts of seq0 and seq1 that are matched with each other...
Definition: musaline.hpp:76
Alignment cut_one_begin_off_align(Sequence0 const &seq0, Sequence1 const &seq1) const
Definition: musaline.hpp:37
Alignment inside_align(Sequence0 const &seq0, Sequence1 const &seq1) const