LocARNA-2.0.0
base_pair_filter.hh
1 #ifndef LOCARNA_BASE_PAIR_FILTER
2 #define LOCARNA_BASE_PAIR_FILTER
3 
4 #ifdef HAVE_CONFIG_H
5 #include <config.h>
6 #endif
7 
8 namespace LocARNA {
9  namespace BasePairFilter {
10 
12  typedef std::pair<size_t, size_t> bp_t;
13 
17  class Filter {
18  public:
19  Filter(){};
20 
21  virtual ~Filter(){};
22 
23  virtual bool
24  operator()(size_t i, size_t j) const {
25  assert(1 <= i); // sequences are 1-based
26  assert(i <= j);
27  return true;
28  }
29 
30  virtual bool
31  operator()(const bp_t &bp) const {
32  return (*this)(bp.first, bp.second);
33  }
34  };
35 
39  class BPMinLoopSize : public Filter {
40  size_t mls_;
41 
42  public:
46  explicit BPMinLoopSize(size_t mls) : Filter(), mls_(mls) {}
47 
51 
57  bool
58  operator()(size_t i, size_t j) const {
59  assert(i >= 1);
60  return i + mls_ < j;
61  }
62  };
63 
67  class SpanRange : public Filter {
68  size_t lo_;
69  size_t up_;
70 
71  public:
78  SpanRange(size_t lo, size_t up) : Filter(), lo_(lo), up_(up) {}
79 
83 
89  bool
90  operator()(size_t i, size_t j) const {
91  assert(i <= j);
92  return lo_ <= (j - i + 1) && (up_ == 0 || (j - i + 1) <= up_);
93  }
94  };
95 
99  class Canonical : public Filter {
100  const std::string &sequence_;
101 
102  public:
106  explicit Canonical(const std::string &sequence)
107  : Filter(), sequence_(sequence) {}
108 
112 
119  bool
120  operator()(size_t i, size_t j) const {
121  return Filter::operator()(i, j) &&
122  canonical(sequence_[i], sequence_[j]);
123  }
124 
125  private:
126  static bool
127  canonical(char x, char y) {
128  static std::string cpairs = "AUCGGUUAGCUG";
129  for (size_t i = 0; i < cpairs.length(); i += 2) {
130  if (x == cpairs[i] && y == cpairs[i + 1])
131  return true;
132  }
133  return false;
134  }
135  };
136 
137  class Combined : public Filter {
138  const Filter &fa_;
139  const Filter &fb_;
140 
141  public:
142  Combined(const Filter &fa, const Filter &fb)
143  : Filter(), fa_(fa), fb_(fb) {}
144 
145  ~Combined() {}
146 
147  bool
148  operator()(size_t i, size_t j) const {
149  return fa_(i, j) && fb_(i, j);
150  }
151  };
152 
153  } // end namespace BasePairFilter
154 } // end namespace LocARNA
155 
156 #endif // LOCARNA_BASE_PAIR_FILTER
loop size base pair filter
Definition: base_pair_filter.hh:39
BPMinLoopSize(size_t mls)
constructor
Definition: base_pair_filter.hh:46
~BPMinLoopSize()
d'tor
Definition: base_pair_filter.hh:50
bool operator()(size_t i, size_t j) const
check for minimum loop size
Definition: base_pair_filter.hh:58
base pair filter to allow only canonical base pairs
Definition: base_pair_filter.hh:99
~Canonical()
d'tor
Definition: base_pair_filter.hh:111
Canonical(const std::string &sequence)
constructor
Definition: base_pair_filter.hh:106
bool operator()(size_t i, size_t j) const
check for canonical base pair
Definition: base_pair_filter.hh:120
Definition: base_pair_filter.hh:137
basic class for base pair filters (no filtering)
Definition: base_pair_filter.hh:17
base pair range filter
Definition: base_pair_filter.hh:67
bool operator()(size_t i, size_t j) const
check for span
Definition: base_pair_filter.hh:90
~SpanRange()
d'tor
Definition: base_pair_filter.hh:82
SpanRange(size_t lo, size_t up)
Construct with range.
Definition: base_pair_filter.hh:78
Definition: aligner.cc:15