LocARNA-1.8.11
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 
9 #include<iosfwd>
10 
11 #include <vector>
12 #include <set>
13 #include <assert.h>
14 
15 #include "params.hh"
16 #include "sparse_matrix.hh"
17 
18 namespace LocARNA {
19 
20  class RnaData;
21  class Sequence;
22 
41  private:
42  size_t idx_;
43  size_t left_;
44  size_t right_;
45  public:
46 
54  BasePairs__Arc(size_t idx, size_t left, size_t right):
55  idx_(idx),
56  left_(left),
57  right_(right)
58  {}
59 
60  /*
61  * @brief Virtual destructor
62  */
63  virtual
64  ~BasePairs__Arc();
65 
71  size_t
72  left() const {return left_;}
73 
79  size_t
80  right() const {return right_;}
81 
87  size_t
88  idx() const {return idx_;}
89  };
90 
91  // ============================================================
107  class BasePairs
108  {
109  private:
110  const RnaData *rna_data_;
111  double min_prob_;
112  double len_;
113 
114  public:
115  typedef size_t size_type;
116 
117  typedef BasePairs__Arc Arc;
118 
130  class LeftAdjEntry : public Arc {
131  public:
137  explicit
138  LeftAdjEntry(const Arc &a): Arc(a) {}
139  };
140 
145  class RightAdjEntry : public Arc {
146  public:
152  explicit
153  RightAdjEntry(const Arc &a): Arc(a) {}
154  };
155 
157  typedef std::vector<Arc> arc_vec_t;
158 
159  /* types for data structures for the access of an arc in the structure,
160  by its right end, its left end, or left and right end
161 
162  the access structure is implemented as a hash map,
163  */
164 
166  typedef std::vector<LeftAdjEntry> LeftAdjList;
167 
169  typedef std::vector<RightAdjEntry> RightAdjList;
170 
173 
175  typedef std::pair<size_type,size_type> bpair_t;
176 
178  typedef std::set<bpair_t> bpair_set_t;
179 
180  private:
181  std::vector<LeftAdjList> left_;
182  std::vector<RightAdjList> right_;
183 
184  arc_vec_t arc_vec_;
185  arc_matrix_t arcs_;
186 
195  void
196  resize(size_type seq_len);
197 
199  void
200  generateBPLists(const RnaData &rna_data);
201 
203  void
204  sortAdjLists();
205 
206  public:
207 
218  BasePairs(const RnaData *rna_data,double min_prob):
219  rna_data_(rna_data),
220  min_prob_(min_prob),
221  len_(get_length_from_rna_data()),
222  left_(),
223  right_(),
224  arc_vec_(),
225  arcs_(-1)
226  {
227  generateBPLists(*rna_data_);
228  }
229 
236  BasePairs(size_type len, const bpair_set_t &bps ):
237  rna_data_(0),
238  min_prob_(1.0),
239  len_(len),
240  left_(),
241  right_(),
242  arc_vec_(),
243  arcs_(-1)
244  {
245  resize(seqlen());
246  for (bpair_set_t::const_iterator it=bps.begin(); bps.end()!=it; ++it) {
247  register_arc(it->first,it->second);
248  }
249  sortAdjLists();
250  }
251 
252  // /**
253  // * @brief Copy constructor
254  // */
255  // BasePairs(const BasePairs &bps);
256 
257  // /**
258  // * @brief Assignment operator
259  // */
260  // BasePairs &
261  // operator =(const BasePairs &bps);
262 
267  void
268  register_arc(int i, int j);
269 
271  const LeftAdjList &
272  left_adjlist(int i) const {
273  //std::cout<<"size of left adjlist of "<<i<<"is "<<left_[i].size()<<std::endl;
274  return left_[i];
275  }
276 
278  const RightAdjList &
279  right_adjlist(int i) const { return right_[i];}
280 
282  const Arc &
283  arc(int i,int j) const {return arc_vec_[arcs_(i,j)];}
284 
289  const Arc &
290  arc(size_type idx) const {
291  assert(idx<arc_vec_.size());
292  return arc_vec_[idx];
293  }
294 
296  bool
297  exists_arc(int i,int j) const {return -1 != arcs_(i,j);}
298 
300  size_type
301  num_bps() const {return arc_vec_.size();}
302 
304  size_type
305  seqlen() const;
306 
307  double
308  prob_min() const;
309 
310  // /**
311  // * @brief Access to corresponding RnaData object
312  // *
313  // * @return reference to RnaData object
314  // */
315  // const RnaData &
316  // get_rna_data() const {
317  // assert(rna_data_!=NULL);
318  // return *rna_data_;
319  // }
320 
321 
322  private:
323 
324  // return length from rna data
325  // pre: rna data available
326  size_type
327  get_length_from_rna_data() const;
328 
329  };
330 
331  std::ostream &
332  operator <<(std::ostream &out, const BasePairs::Arc &arc);
333 
334 
335 
336 }
337 #endif
BasePairs__Arc(size_t idx, size_t left, size_t right)
Definition: basepairs.hh:54
represent sparsified data of RNA ensemble
Definition: rna_data.hh:42
size_t left() const
Definition: basepairs.hh:72
size_t right() const
Definition: basepairs.hh:80
std::ostream & operator<<(std::ostream &out, AlignerRestriction r)
Definition: aligner_restriction.hh:113
std::pair< size_type, size_type > bpair_t
type for pair of positions (base pairs)
Definition: basepairs.hh:175
Entry in a left adjacency list.
Definition: basepairs.hh:130
const Arc & arc(int i, int j) const
accesses basepair by (i,j)
Definition: basepairs.hh:283
Entry in a right adjacency list.
Definition: basepairs.hh:145
LeftAdjEntry(const Arc &a)
Definition: basepairs.hh:138
bool exists_arc(int i, int j) const
returns whether basepair (i,j) exists
Definition: basepairs.hh:297
Definition: aligner.cc:17
SparseMatrix< int > arc_matrix_t
type for matrix of arcs (actually arc indices)
Definition: basepairs.hh:172
BasePairs__Arc Arc
arc
Definition: basepairs.hh:117
const LeftAdjList & left_adjlist(int i) const
returns the list of arcs with right end i
Definition: basepairs.hh:272
size_t size_type
size
Definition: basepairs.hh:115
std::set< bpair_t > bpair_set_t
type for set of position pairs
Definition: basepairs.hh:178
const Arc & arc(size_type idx) const
Definition: basepairs.hh:290
size_type num_bps() const
returns number of basepairs in the object
Definition: basepairs.hh:301
BasePairs(size_type len, const bpair_set_t &bps)
Construct from a set of base pairs.
Definition: basepairs.hh:236
BasePairs(const RnaData *rna_data, double min_prob)
Definition: basepairs.hh:218
std::vector< Arc > arc_vec_t
Vector of arcs.
Definition: basepairs.hh:157
Represents a base pair.
Definition: basepairs.hh:40
std::vector< LeftAdjEntry > LeftAdjList
type of left adjacency list
Definition: basepairs.hh:166
const RightAdjList & right_adjlist(int i) const
returns the list of arcs with left end i
Definition: basepairs.hh:279
std::vector< RightAdjEntry > RightAdjList
type of right adjacency list
Definition: basepairs.hh:169
size_t idx() const
Definition: basepairs.hh:88
Describes sequence and structure ensemble of an RNA.
Definition: basepairs.hh:107
RightAdjEntry(const Arc &a)
Definition: basepairs.hh:153