IntaRNA 3.4.1
RNA-RNA interaction prediction | C++ API
Loading...
Searching...
No Matches
AccessibilityConstraint.h
Go to the documentation of this file.
1
2#ifndef INTARNA_ACCESSIBILITYCONSTRAINT_H_
3#define INTARNA_ACCESSIBILITYCONSTRAINT_H_
4
7
8#include <boost/regex.hpp>
9
10#include <utility>
11#include <vector>
12
13namespace IntaRNA {
14
27
28public:
29
31 static const char dotBracket_unconstrained;
33 static const char dotBracket_blocked;
35 static const char dotBracket_accessible;
37 static const char dotBracket_paired;
38
40 static const std::string dotBracket_constraints;
41
43 static const std::string dotBracketAlphabet;
44
46 static const std::string regionIndexList;
47
49 static const boost::regex regex;
50
52 static const boost::regex regexShapeMethod;
53
55 static const boost::regex regexShapeConversion;
56
57public:
58
72 , const size_t maxBpSpan
73 , const std::string & shapeFile
74 , const std::string & shapeMethod
75 , const std::string & shapeConversion
76 );
77
85 , const bool reverseIndices = false );
86
101 , const std::string& dotBracket
102 , const size_t maxBpSpan
103 , const std::string & shapeFile
104 , const std::string & shapeMethod
105 , const std::string & shapeConversion
106 );
107
108 virtual ~AccessibilityConstraint();
109
115 bool
116 isMarkedBlocked( const size_t i ) const;
117
123 bool
124 isMarkedAccessible( const size_t i ) const;
125
132 bool
133 isMarkedPaired( const size_t i ) const;
134
140 bool
141 isUnconstrained( const size_t i ) const;
142
148 bool
149 isAccessible( const size_t i ) const;
150
156 bool
157 isEmpty() const;
158
159
165 char
166 getVrnaDotBracket( const size_t i ) const;
167
173 size_t
174 getMaxBpSpan() const;
175
180 const std::string &
181 getShapeFile() const;
182
187 const std::string &
188 getShapeMethod() const;
189
194 const std::string &
195 getShapeConversion() const;
196
203
204
205 friend std::ostream& operator<<(std::ostream& out, const AccessibilityConstraint& c);
206
207protected:
208
210 size_t length;
211
213 size_t maxBpSpan;
214
216 std::string shapeFile;
217
219 std::string shapeMethod;
220
222 std::string shapeConversion;
223
226
229
232
233protected:
234
242 static
243 void
244 screenDotBracket( const std::string& dotBracket
245 , const char marker
246 , IndexRangeList & storage );
247
248};
249
250
257std::ostream& operator<<(std::ostream& out, const AccessibilityConstraint& c);
258
259
263
264inline
266AccessibilityConstraint( const size_t length_
267 , const size_t maxBpSpan_
268 , const std::string & shapeFile_
269 , const std::string & shapeMethod_
270 , const std::string & shapeConversion_
271 )
272 :
273 length(length_),
274 maxBpSpan( maxBpSpan_==0 ? length : std::min(maxBpSpan_,length) ),
275 shapeFile(shapeFile_),
276 shapeMethod(shapeFile_.empty() ? "" : shapeMethod_),
277 shapeConversion(shapeFile_.empty() ? "" : shapeConversion_),
278 blocked(),
279 accessible(),
280 paired()
281{
282#if INTARNA_IN_DEBUG_MODE
283 if (!shapeFile.empty()) {
284 if (!boost::regex_match( shapeMethod, AccessibilityConstraint::regexShapeMethod, boost::match_perl )) {
285 throw std::runtime_error("AccessibilityConstraint(shapeMethod="+shapeMethod+") does not match its encoding regular expression");
286 }
287 if (!boost::regex_match( shapeConversion, AccessibilityConstraint::regexShapeConversion, boost::match_perl )) {
288 throw std::runtime_error("AccessibilityConstraint(shapeConversion="+shapeConversion+") does not match its encoding regular expression");
289 }
290 }
291#endif
292}
293
295
296inline
299 , const bool reverseIndices)
300 :
301 length(toCopy.length)
302 , maxBpSpan(toCopy.maxBpSpan)
303 , shapeFile(toCopy.shapeFile)
304 , shapeMethod(toCopy.shapeMethod)
305 , shapeConversion(toCopy.shapeConversion)
306 , blocked(toCopy.blocked)
307 , accessible(toCopy.accessible)
308 , paired(toCopy.paired)
309{
310
311
312 if (reverseIndices) {
313
314 // reverse blocked
316
317 // reverse accessible
319
320 // reverse accessible
322
323 }
324}
325
327
328inline
332
334
335inline
336bool
338isMarkedBlocked(const size_t i) const
339{
340 return blocked.covers(i);
341}
342
344
345inline
346bool
348isMarkedAccessible(const size_t i) const
349{
350 return accessible.covers(i);
351}
352
354
355inline
356bool
358isMarkedPaired(const size_t i) const
359{
360 return paired.covers(i);
361}
362
364
365inline
366bool
368isUnconstrained( const size_t i ) const
369{
370 return isEmpty()
372}
373
375
376inline
377bool
379isAccessible( const size_t i ) const
380{
381 return isEmpty()
382 || !(isMarkedBlocked(i) || isMarkedPaired(i));
383}
384
386
387inline
388bool
390isEmpty() const
391{
392 // check if any constrained regions given
393 return (accessible.size() + blocked.size() + paired.size() + shapeFile.size()) == 0;
394}
395
397
398inline
399char
401getVrnaDotBracket(const size_t i) const
402{
403 // check if to be accessible or blocked (==unstructured)
404 if (isMarkedAccessible(i) || isMarkedBlocked(i)) {
405 return 'x';
406 }
407
408 // check if intramolecularly paired
409 if (isMarkedPaired(i)) {
410 return '|';
411 }
412
413 return '.';
414}
415
417
418inline
419size_t
421getMaxBpSpan() const
422{
423 return maxBpSpan;
424}
425
427
428inline
429const std::string &
431getShapeFile() const
432{
433 return shapeFile;
434}
435
437
438inline
439const std::string &
441getShapeMethod() const
442{
443 return shapeMethod;
444}
445
447
448inline
449const std::string &
455
457
458inline
462{
463 // copy data
464 length = c.length;
469 blocked = c.blocked;
471 paired = c.paired;
472
473 return *this;
474}
475
479
480inline
481std::ostream& operator<<(std::ostream& out, const AccessibilityConstraint& c)
482{
483 bool alreadyPrinted = false;
484 // print ranges if non-empty
485 if (!c.accessible.empty()) {
486 out <<(alreadyPrinted?",":"") <<AccessibilityConstraint::dotBracket_accessible <<':' <<c.accessible;
487 alreadyPrinted = true;
488 }
489 // print ranges if non-empty
490 if (!c.blocked.empty()) {
491 out <<(alreadyPrinted?",":"") <<AccessibilityConstraint::dotBracket_blocked <<':' <<c.blocked;
492 alreadyPrinted = true;
493 }
494 // print ranges if non-empty
495 if (!c.paired.empty()) {
496 out <<(alreadyPrinted?",":"") <<AccessibilityConstraint::dotBracket_paired <<':' <<c.paired;
497 alreadyPrinted = true;
498 }
499 // print shape file if non-empty
500 if (!c.shapeFile.empty()) {
501 out <<(alreadyPrinted?",":"") <<"shapeFile" <<':' <<c.shapeFile;
502 alreadyPrinted = true;
503 }
504 return out;
505}
506
508
509} // namespace
510
511#endif /* ACCESSIBILITYCONSTRAINT_H_ */
Definition AccessibilityConstraint.h:26
std::string shapeMethod
method for converting SHAPE reactivity data to pseudo energies
Definition AccessibilityConstraint.h:219
static const boost::regex regexShapeConversion
the regular expression to be matched by shapeConversion encodings
Definition AccessibilityConstraint.h:55
bool isMarkedPaired(const size_t i) const
Definition AccessibilityConstraint.h:358
static const std::string regionIndexList
regular expression that encodes a single region encoding as index list
Definition AccessibilityConstraint.h:46
bool isUnconstrained(const size_t i) const
Definition AccessibilityConstraint.h:368
const std::string & getShapeMethod() const
Definition AccessibilityConstraint.h:441
bool isAccessible(const size_t i) const
Definition AccessibilityConstraint.h:379
const std::string & getShapeFile() const
Definition AccessibilityConstraint.h:431
IndexRangeList accessible
sorted list of ranges that are marked as accessible
Definition AccessibilityConstraint.h:228
bool isMarkedAccessible(const size_t i) const
Definition AccessibilityConstraint.h:348
std::string shapeConversion
method for conversion of SHAPE reactivity data to paired probabilities
Definition AccessibilityConstraint.h:222
static void screenDotBracket(const std::string &dotBracket, const char marker, IndexRangeList &storage)
static const char dotBracket_accessible
the marker for accessible positions in dot-bracket notation
Definition AccessibilityConstraint.h:35
std::string shapeFile
filename of SHAPE reactivity data or empty if no SHAPE data to be used
Definition AccessibilityConstraint.h:216
size_t length
the overall sequence length this constraint is about
Definition AccessibilityConstraint.h:210
const std::string & getShapeConversion() const
Definition AccessibilityConstraint.h:451
static const char dotBracket_paired
the marker for paired positions in dot-bracket notation
Definition AccessibilityConstraint.h:37
static const std::string dotBracket_constraints
collection of all allowed encoding of constraints
Definition AccessibilityConstraint.h:40
size_t maxBpSpan
the maximal base pair span to be used for accessibility computation
Definition AccessibilityConstraint.h:213
static const std::string dotBracketAlphabet
the alphabet to encode accessibility constraints in dot-bracket notation
Definition AccessibilityConstraint.h:43
static const char dotBracket_blocked
the marker for blocked positions in dot-bracket notation
Definition AccessibilityConstraint.h:33
AccessibilityConstraint(const size_t length, const size_t maxBpSpan, const std::string &shapeFile, const std::string &shapeMethod, const std::string &shapeConversion)
Definition AccessibilityConstraint.h:266
bool isMarkedBlocked(const size_t i) const
Definition AccessibilityConstraint.h:338
bool isEmpty() const
Definition AccessibilityConstraint.h:390
AccessibilityConstraint & operator=(const AccessibilityConstraint &c)
Definition AccessibilityConstraint.h:461
AccessibilityConstraint(const RnaSequence &seq, const std::string &dotBracket, const size_t maxBpSpan, const std::string &shapeFile, const std::string &shapeMethod, const std::string &shapeConversion)
IndexRangeList blocked
sorted list of ranges that are marked as blocked
Definition AccessibilityConstraint.h:225
char getVrnaDotBracket(const size_t i) const
Definition AccessibilityConstraint.h:401
IndexRangeList paired
sorted list of ranges that are marked as paired (intramolecular)
Definition AccessibilityConstraint.h:231
virtual ~AccessibilityConstraint()
Definition AccessibilityConstraint.h:329
static const char dotBracket_unconstrained
the marker for unconstrained positions in dot-bracket notation
Definition AccessibilityConstraint.h:31
size_t getMaxBpSpan() const
Definition AccessibilityConstraint.h:421
static const boost::regex regex
the regular expression that marks a non-empty valid constraint encoding
Definition AccessibilityConstraint.h:49
static const boost::regex regexShapeMethod
the regular expression to be matched by shapeMethod encodings
Definition AccessibilityConstraint.h:52
friend std::ostream & operator<<(std::ostream &out, const AccessibilityConstraint &c)
Definition AccessibilityConstraint.h:481
Definition IndexRangeList.h:20
IndexRangeList & reverseInplace(const size_t seqLength)
bool covers(const size_t index) const
bool empty() const
Definition IndexRangeList.h:453
size_t size() const
Definition IndexRangeList.h:463
Definition RnaSequence.h:29
Definition Accessibility.h:13
std::ostream & operator<<(std::ostream &out, const AccessibilityConstraint &c)
Definition AccessibilityConstraint.h:481