IntaRNA 3.4.1
RNA-RNA interaction prediction | C++ API
Loading...
Searching...
No Matches
HelixHandlerUnpaired.h
Go to the documentation of this file.
1
2#ifndef INTARNA_HELIXHANDLERUNPAIRED_H_
3#define INTARNA_HELIXHANDLERUNPAIRED_H_
4
8
9#include <boost/multi_array.hpp>
10
11#include "IntaRNA/Matrix.h"
12
13#include <tuple>
14
15namespace IntaRNA {
16
24
25public:
26
32 typedef boost::multi_array<std::pair<E_type, size_t>,3> HelixRecMatrix;
33
36 typedef boost::array<HelixRecMatrix::index, 3> HelixIndex;
37
44
45
46public:
47
55 , SeedHandler * const seedHandler = NULL
56 );
57
61 virtual ~HelixHandlerUnpaired();
62
67 virtual
68 const HelixConstraint&
69 getConstraint() const;
70
75 virtual
78
87 virtual
88 size_t
89 fillHelix( const size_t i1, const size_t j1, const size_t i2, const size_t j2 );
90
99 virtual
100 size_t
101 fillHelixSeed(const size_t i1, const size_t j1, const size_t i2, const size_t j2);
102
113 virtual
114 void
115 traceBackHelix( Interaction & interaction, const size_t i1, const size_t i2);
116
127 virtual
128 void
129 traceBackHelixSeed( Interaction & interaction, const size_t i1, const size_t i2);
130
137 virtual
138 E_type
139 getHelixE( const size_t i1, const size_t i2 ) const;
140
147 virtual
148 E_type
149 getHelixSeedE( const size_t i1, const size_t i2 ) const;
150
157 virtual
158 size_t
159 getHelixLength1( const size_t i1, const size_t i2 ) const;
160
167 virtual
168 size_t
169 getHelixLength2( const size_t i1, const size_t i2 ) const;
170
178 virtual
179 size_t
180 getHelixLength1( const size_t i1, const size_t i2, const size_t bp ) const;
181
189 virtual
190 size_t
191 getHelixLength2( const size_t i1, const size_t i2, const size_t bp ) const;
192
199 virtual
200 size_t
201 getHelixSeedLength1( const size_t i1, const size_t i2 ) const;
202
209 virtual
210 size_t
211 getHelixSeedLength2( const size_t i1, const size_t i2 ) const;
212
218
219protected:
220
226 size_t
227 getBestBP( const size_t i1, const size_t i2) const;
228
240 E_type
241 getHelixE( const size_t i1, const size_t i2, const size_t bp);
242
243
254 void
255 setHelixPair( const size_t i1, const size_t i2, const size_t bp
256 , const E_type E, const size_t length );
257
258
265 size_t
266 encodeHelixLength( const size_t l1, const size_t l2 ) const;
267
274 size_t
275 decodeHelixLength1( const size_t code ) const;
276
277
284 size_t
285 decodeHelixLength2( const size_t code ) const;
286
293 size_t
294 encodeHelixSeedLength( const size_t l1, const size_t l2 ) const;
295
302 size_t
303 decodeHelixSeedLength1( const size_t code ) const;
304
311 size_t
312 decodeHelixSeedLength2( const size_t code ) const;
313
325 void
327 , const size_t i1, const size_t i2, const size_t bp);
328
329protected:
330
333
336
342
345
348
350 size_t offset1;
351
353 size_t offset2;
354
357};
358
359
363
364inline
366 const InteractionEnergy & energy
367 , const HelixConstraint & helixConstraint
368 , SeedHandler * const seedHandler
369)
370 :
371 energy(energy)
372 , helixConstraint(helixConstraint)
373 , seedHandler(seedHandler)
374 , helixE_rec( HelixIndex({{ 0, 0, 0 }}))
375 , helix()
376 , helixSeed()
377 , offset1(0)
378 , offset2(0)
379{
380 if (seedHandler != NULL) {
381 setSeedHandler(*seedHandler);
382 }
383}
384
386
387inline
391
393
394inline
398{
399 return energy;
400}
401
403
404inline
405const HelixConstraint&
407getConstraint() const
408{
409 return helixConstraint;
410}
412
413inline
414size_t
416getBestBP(const size_t i1, const size_t i2) const
417{
418 return std::get<2>(helix(i1-offset1, i2-offset2));
419}
420
422
423inline
424void
426 , const size_t i1
427 , const size_t i2
428)
429{
430#if INTARNA_IN_DEBUG_MODE
431 if ( i1 < offset1 ) throw std::runtime_error("HelixHandlerUnpaired::traceBackHelix(i1="+toString(i1)+") is out of range (>"+toString(offset1)+")");
432 if ( i1-offset1 >= helix.size1() ) throw std::runtime_error("HelixHandlerUnpaired::traceBackHelix(i1="+toString(i1)+") is out of range (<"+toString(helix.size1()+offset1)+")");
433 if ( i2 < offset2 ) throw std::runtime_error("HelixHandlerUnpaired::traceBackHelix(i2="+toString(i2)+") is out of range (>"+toString(offset2)+")");
434 if ( i2-offset2 >= helix.size2() ) throw std::runtime_error("HelixHandlerUnpaired::traceBackHelix(i2="+toString(i2)+") is out of range (<"+toString(helix.size2()+offset2)+")");
435 if ( E_isINF( getHelixE(i1,i2) ) ) throw std::runtime_error("HelixHandlerUnpaired::traceBackHelix(i1="+toString(i1)+",i2="+toString(i2)+") no helix known (E_INF)");
436 if ( i1+getHelixLength1(i1,i2)-1-offset1 >= helix.size1() ) throw std::runtime_error("HelixHandlerUnpaired::traceBackHelix(i1="+toString(i1)+") helix length ("+toString(getHelixLength1(i1,i2))+") exceeds of range (<"+toString(helix.size1()+offset1)+")");
437 if ( i2+getHelixLength2(i1,i2)-1-offset2 >= helix.size2() ) throw std::runtime_error("HelixHandlerUnpaired::traceBackHelix(i2="+toString(i2)+") helix length ("+toString(getHelixLength2(i1,i2))+") exceeds of range (<"+toString(helix.size2()+offset2)+")");
438#endif
439 // get number of base pairs allowed within the helix
440 const size_t bestBP = getBestBP(i1,i2);
441
442 // trace back the according helix
443 traceBackHelix( interaction, i1-offset1, i2-offset2, bestBP);
444}
445
447
448inline
449E_type
451getHelixE(const size_t i1, const size_t i2) const
452{
453 return std::get<0>(helix(i1-offset1, i2-offset2));
454}
455
456
458
459inline
460E_type
462getHelixSeedE(const size_t i1, const size_t i2) const
463{
464 return helixSeed(i1-offset1, i2-offset2).first;
465}
466
468
469inline
470size_t
472getHelixLength1(const size_t i1, const size_t i2) const
473{
474 return decodeHelixLength1(std::get<1>(helix(i1-offset1, i2-offset2)));
475}
476
478
479inline
480size_t
482getHelixLength2(const size_t i1, const size_t i2) const
483{
484 return decodeHelixLength2(std::get<1>(helix(i1-offset1, i2-offset2)));
485}
486
488
489inline
490size_t
492getHelixLength1(const size_t i1, const size_t i2, const size_t bp) const {
493// if no base pair is given return 0 in order to simplify helixHandlerSeed computation.
494 if (bp <= 1) {
495 return 0;
496 } else {
498 {{(HelixRecMatrix::index) i1, (HelixRecMatrix::index) i2, (HelixRecMatrix::index) bp}})).second);
499 }
500}
502
503inline
504size_t
506getHelixLength2(const size_t i1, const size_t i2, const size_t bp) const
507{
508 // if no base pair is given return 0 in order to simplify helixHandlerSeed computation.
509 if (bp <= 1) {
510 return 0;
511 } else {
513 {{(HelixRecMatrix::index) i1, (HelixRecMatrix::index) i2, (HelixRecMatrix::index) bp}})).second);
514 }
515}
516
518
519inline
520size_t
522getHelixSeedLength1(const size_t i1, const size_t i2) const
523{
524 return decodeHelixSeedLength1(helixSeed(i1-offset1, i2-offset2).second);
525}
526
528
529inline
530size_t
532getHelixSeedLength2(const size_t i1, const size_t i2) const
533{
534 return decodeHelixSeedLength2(helixSeed(i1-offset1, i2-offset2).second);
535}
536
538
539inline
540E_type
542getHelixE(const size_t i1, const size_t i2, const size_t bp)
543{
544 // if no base pair is given return 0 in order to simplify helixHandlerSeed computation.
545 if (bp <= 1) {
546 return 0;
547 } else {
548 return helixE_rec(HelixIndex({{(HelixRecMatrix::index) i1, (HelixRecMatrix::index) i2, (HelixRecMatrix::index) bp}})).first;
549 }
550}
551
553
554inline
555void
557setHelixPair(const size_t i1, const size_t i2, const size_t bp, const E_type E, const size_t length)
558{
560 (HelixRecMatrix::index) i1
561 , (HelixRecMatrix::index) i2
562 , (HelixRecMatrix::index) bp}}) ) = std::make_pair(E, E_isINF(E) ? 0 : length);
563}
564
566
567inline
568size_t
570encodeHelixLength(const size_t l1, const size_t l2) const
571{
572 return l1 + l2 * (helixConstraint.getMaxLength1()+1);
573}
574
576
577inline
578size_t
580decodeHelixLength1(const size_t code) const
581{
582 return code % (helixConstraint.getMaxLength1()+1);
583}
584
586
587inline
588size_t
590decodeHelixLength2(const size_t code) const
591{
592 return code / (helixConstraint.getMaxLength1()+1);
593}
594
596
597inline
598size_t
600encodeHelixSeedLength(const size_t l1, const size_t l2) const
601{
603}
604
606
607inline
608size_t
610decodeHelixSeedLength1(const size_t code) const
611{
613}
614
616
617inline
618size_t
620decodeHelixSeedLength2(const size_t code) const
621{
623}
624
626
627inline
628void
630setSeedHandler(SeedHandler & seedHandler) {
631 this->seedHandler = &seedHandler;
632}
633
634
635
637
638} // namespace
639
640#endif //INTARNA_HELIXHANDLERUNPAIRED_H_
Definition HelixConstraint.h:19
size_t getMaxLength1() const
Definition HelixConstraint.h:229
Definition HelixHandlerUnpaired.h:23
boost::array< HelixRecMatrix::index, 3 > HelixIndex
Definition HelixHandlerUnpaired.h:36
size_t decodeHelixSeedLength1(const size_t code) const
Definition HelixHandlerUnpaired.h:610
SeedHandler * seedHandler
used seedHandler
Definition HelixHandlerUnpaired.h:356
size_t offset2
offset for seq2 indices for the current matrices
Definition HelixHandlerUnpaired.h:353
size_t encodeHelixLength(const size_t l1, const size_t l2) const
Definition HelixHandlerUnpaired.h:570
size_t offset1
offset for seq1 indices for the current matrices
Definition HelixHandlerUnpaired.h:350
virtual size_t getHelixSeedLength2(const size_t i1, const size_t i2) const
Definition HelixHandlerUnpaired.h:532
const HelixConstraint & helixConstraint
the helix constraint to be applied
Definition HelixHandlerUnpaired.h:335
Matrix< std::pair< E_type, size_t > > HelixSeedMatrix
Definition HelixHandlerUnpaired.h:43
size_t encodeHelixSeedLength(const size_t l1, const size_t l2) const
Definition HelixHandlerUnpaired.h:600
virtual E_type getHelixSeedE(const size_t i1, const size_t i2) const
Definition HelixHandlerUnpaired.h:462
Matrix< std::tuple< E_type, size_t, size_t > > HelixMatrix
Definition HelixHandlerUnpaired.h:42
virtual size_t getHelixSeedLength1(const size_t i1, const size_t i2) const
Definition HelixHandlerUnpaired.h:522
void setSeedHandler(SeedHandler &seedHandler)
Definition HelixHandlerUnpaired.h:630
boost::multi_array< std::pair< E_type, size_t >, 3 > HelixRecMatrix
Definition HelixHandlerUnpaired.h:32
virtual size_t getHelixLength1(const size_t i1, const size_t i2) const
Definition HelixHandlerUnpaired.h:472
virtual const HelixConstraint & getConstraint() const
Definition HelixHandlerUnpaired.h:407
size_t getBestBP(const size_t i1, const size_t i2) const
Definition HelixHandlerUnpaired.h:416
size_t decodeHelixSeedLength2(const size_t code) const
Definition HelixHandlerUnpaired.h:620
void setHelixPair(const size_t i1, const size_t i2, const size_t bp, const E_type E, const size_t length)
Definition HelixHandlerUnpaired.h:557
virtual size_t fillHelixSeed(const size_t i1, const size_t j1, const size_t i2, const size_t j2)
virtual const InteractionEnergy & getInteractionEnergy() const
Definition HelixHandlerUnpaired.h:397
virtual size_t fillHelix(const size_t i1, const size_t j1, const size_t i2, const size_t j2)
size_t decodeHelixLength2(const size_t code) const
Definition HelixHandlerUnpaired.h:590
HelixMatrix helix
the helix mfe information for helix starting at (i1, i2)
Definition HelixHandlerUnpaired.h:344
HelixSeedMatrix helixSeed
the helix mfe information for helix with seed starting at (i1, i2)
Definition HelixHandlerUnpaired.h:347
virtual void traceBackHelixSeed(Interaction &interaction, const size_t i1, const size_t i2)
virtual size_t getHelixLength2(const size_t i1, const size_t i2) const
Definition HelixHandlerUnpaired.h:482
const InteractionEnergy & energy
the used energy function
Definition HelixHandlerUnpaired.h:332
virtual void traceBackHelix(Interaction &interaction, const size_t i1, const size_t i2)
Definition HelixHandlerUnpaired.h:425
virtual E_type getHelixE(const size_t i1, const size_t i2) const
Definition HelixHandlerUnpaired.h:451
virtual ~HelixHandlerUnpaired()
Definition HelixHandlerUnpaired.h:388
HelixRecMatrix helixE_rec
Definition HelixHandlerUnpaired.h:341
void traceBackHelix(Interaction &interaction, const size_t i1, const size_t i2, const size_t bp)
size_t decodeHelixLength1(const size_t code) const
Definition HelixHandlerUnpaired.h:580
HelixHandlerUnpaired(const InteractionEnergy &energy, const HelixConstraint &helixConstraint, SeedHandler *const seedHandler=NULL)
Definition HelixHandlerUnpaired.h:365
Definition HelixHandler.h:16
Definition InteractionEnergy.h:20
Definition Interaction.h:28
Definition Matrix.h:49
std::size_t size2() const noexcept
Definition Matrix.h:164
std::size_t size1() const noexcept
Definition Matrix.h:159
size_t getMaxLength1() const
Definition SeedConstraint.h:370
Definition SeedHandler.h:17
virtual const SeedConstraint & getConstraint() const
Definition SeedHandler.h:237
#define toString(x)
Definition general.h:60
#define E_isINF(e)
check if a given energy is set to E_INF
Definition general.h:143
Definition Accessibility.h:13
int E_type
type for energy values (energy + accessibility [ED]) (internally)
Definition general.h:78