LocARNA-2.0.0
basepairs.hh
1 #ifndef LOCARNA_BASEPAIRS_HH
2 #define LOCARNA_BASEPAIRS_HH
3 
4 #ifdef HAVE_CONFIG_H
5 #include <config.h>
6 #endif
7 
8 #include <iosfwd>
9 
10 #include <vector>
11 #include <set>
12 #include <assert.h>
13 
14 #include "sparse_matrix.hh"
15 
16 namespace LocARNA {
17 
18  class RnaData;
19  class Sequence;
20 
40  private:
41  size_t idx_;
42  size_t left_;
43  size_t right_;
44 
45  public:
53  BasePairs__Arc(size_t idx, size_t left, size_t right)
54  : idx_(idx), left_(left), right_(right) {}
55 
56  /*
57  * @brief Virtual destructor
58  */
59  virtual ~BasePairs__Arc();
60 
66  size_t
67  left() const {
68  return left_;
69  }
70 
76  size_t
77  right() const {
78  return right_;
79  }
80 
86  size_t
87  idx() const {
88  return idx_;
89  }
90  };
91 
92  // ============================================================
108  class BasePairs {
109  public:
110  typedef size_t size_type;
111 
112  typedef BasePairs__Arc Arc;
113 
125  class LeftAdjEntry : public Arc {
126  public:
132  explicit LeftAdjEntry(const Arc &a) : Arc(a) {}
133  };
134 
139  class RightAdjEntry : public Arc {
140  public:
146  explicit RightAdjEntry(const Arc &a) : Arc(a) {}
147  };
148 
150  typedef std::vector<Arc> arc_vec_t;
151 
152  /* types for data structures for the access of an arc in the structure,
153  by its right end, its left end, or left and right end
154 
155  the access structure is implemented as a hash map,
156  */
157 
159  typedef std::vector<LeftAdjEntry> LeftAdjList;
160 
162  typedef std::vector<RightAdjEntry> RightAdjList;
163 
166 
168  typedef std::pair<size_type, size_type> bpair_t;
169 
171  typedef std::set<bpair_t> bpair_set_t;
172 
183  BasePairs(const RnaData *rna_data, double min_prob);
184 
191  BasePairs(size_type len, const bpair_set_t &bps);
192 
197  void
198  register_arc(int i, int j);
199 
205  const LeftAdjList &
207  auto & xs = left_adjlists_[i];
208  assert(xs[xs.size() - 1].right() == len_+1 /* check sentinel */);
209  return xs;
210  }
211 
217  const RightAdjList &
219  auto & xs = right_adjlists_[i];
220  assert(xs[xs.size() - 1].left() == 0 /* check sentinel */);
221  return xs;
222  }
223 
225  const Arc &
226  arc(int i, int j) const {
227  return arc_vec_[arcs_(i, j)];
228  }
229 
234  const Arc &
235  arc(size_type idx) const {
236  assert(idx < arc_vec_.size());
237  return arc_vec_[idx];
238  }
239 
241  bool
242  exists_arc(int i, int j) const {
243  return -1 != arcs_(i, j);
244  }
245 
247  size_type
248  num_bps() const {
249  return arc_vec_.size();
250  }
251 
253  size_type
254  seqlen() const;
255 
256  double
257  prob_min() const;
258 
259  // /**
260  // * @brief Access to corresponding RnaData object
261  // *
262  // * @return reference to RnaData object
263  // */
264  // const RnaData &
265  // get_rna_data() const {
266  // assert(rna_data_!=NULL);
267  // return *rna_data_;
268  // }
269 
270  private:
271  const RnaData *rna_data_;
272  double min_prob_;
273  double len_;
274 
275  std::vector<LeftAdjList> left_adjlists_;
276  std::vector<RightAdjList> right_adjlists_;
277 
278  arc_vec_t arc_vec_;
279  arc_matrix_t arcs_;
280 
289  void
290  resize(size_type seq_len);
291 
293  void
294  generateBPLists(const RnaData &rna_data);
295 
297  void
298  sort_adj_lists();
299 
301  void
302  add_adj_list_sentinels();
303  };
304 
305  std::ostream &
306  operator<<(std::ostream &out, const BasePairs::Arc &arc);
307 }
308 #endif
Entry in a left adjacency list.
Definition: basepairs.hh:125
LeftAdjEntry(const Arc &a)
Definition: basepairs.hh:132
Entry in a right adjacency list.
Definition: basepairs.hh:139
RightAdjEntry(const Arc &a)
Definition: basepairs.hh:146
Represents a base pair.
Definition: basepairs.hh:39
size_t right() const
Definition: basepairs.hh:77
size_t idx() const
Definition: basepairs.hh:87
size_t left() const
Definition: basepairs.hh:67
BasePairs__Arc(size_t idx, size_t left, size_t right)
Definition: basepairs.hh:53
Describes sequence and structure ensemble of an RNA.
Definition: basepairs.hh:108
size_type seqlen() const
returns length of sequence
Definition: basepairs.cc:208
double prob_min() const
return minimal probability
Definition: basepairs.cc:105
void register_arc(int i, int j)
registers an arc (i,j)
Definition: basepairs.cc:126
const RightAdjList & right_adjlist_s(size_type i) const
Get right adjacency list with sentinel.
Definition: basepairs.hh:218
const Arc & arc(size_type idx) const
Definition: basepairs.hh:235
std::pair< size_type, size_type > bpair_t
type for pair of positions (base pairs)
Definition: basepairs.hh:168
std::vector< Arc > arc_vec_t
Vector of arcs.
Definition: basepairs.hh:150
BasePairs(const RnaData *rna_data, double min_prob)
Definition: basepairs.cc:68
std::set< bpair_t > bpair_set_t
type for set of position pairs
Definition: basepairs.hh:171
size_t size_type
size
Definition: basepairs.hh:110
bool exists_arc(int i, int j) const
returns whether basepair (i,j) exists
Definition: basepairs.hh:242
const Arc & arc(int i, int j) const
accesses basepair by (i,j)
Definition: basepairs.hh:226
std::vector< LeftAdjEntry > LeftAdjList
type of left adjacency list
Definition: basepairs.hh:159
const LeftAdjList & left_adjlist_s(size_type i) const
Get left adjacency list with sentinel.
Definition: basepairs.hh:206
size_type num_bps() const
returns number of basepairs in the object
Definition: basepairs.hh:248
SparseMatrix< int > arc_matrix_t
type for matrix of arcs (actually arc indices)
Definition: basepairs.hh:165
BasePairs__Arc Arc
arc
Definition: basepairs.hh:112
std::vector< RightAdjEntry > RightAdjList
type of right adjacency list
Definition: basepairs.hh:162
represent sparsified data of RNA ensemble
Definition: rna_data.hh:44
Definition: aligner.cc:15
std::ostream & operator<<(std::ostream &out, const AlignerRestriction &r)
Definition: aligner_restriction.hh:135
size_t size_type
general size type
Definition: aux.hh:120