1 #ifndef VIENNA_RNA_PACKAGE_LOOPS_INTERNAL_H 2 #define VIENNA_RNA_PACKAGE_LOOPS_INTERNAL_H 5 #include <ViennaRNA/params/default.h> 11 #ifdef VRNA_WARN_DEPRECATED 12 # if defined(DEPRECATED) 15 # if defined(__clang__) 16 # define DEPRECATED(func, msg) func __attribute__ ((deprecated("", msg))) 17 # elif defined(__GNUC__) 18 # define DEPRECATED(func, msg) func __attribute__ ((deprecated(msg))) 20 # define DEPRECATED(func, msg) func 23 # define DEPRECATED(func, msg) func 27 # define INLINE inline 154 #ifndef VRNA_DISABLE_BACKWARD_COMPATIBILITY 161 #ifdef ON_SAME_STRAND 162 #undef ON_SAME_STRAND 165 #define ON_SAME_STRAND(I, J, C) (((I) >= (C)) || ((J) < (C))) 252 PRIVATE INLINE
int E_IntLoop_Co(
int type,
278 ubf_eval_int_loop(
int i,
291 unsigned char type_2,
303 if ((cp < 0) || (ON_SAME_STRAND(i, p, cp) && ON_SAME_STRAND(q, j, cp))) {
305 energy =
E_IntLoop(u1, u2, type, type_2, si, sj, sp, sq, P);
309 Si = ON_SAME_STRAND(i, i1, cp) ? si : -1;
310 Sj = ON_SAME_STRAND(j1, j, cp) ? sj : -1;
311 energy = E_IntLoop_Co(rtype[type], rtype[type_2],
347 ubf_eval_int_loop2(
int i,
360 unsigned char type_2,
373 if ((sn[i] == sn[p]) && (sn[q] == sn[j])) {
375 energy =
E_IntLoop(u1, u2, type, type_2, si, sj, sp, sq, P);
379 Si = (sn[i1] == sn[i]) ? si : -1;
380 Sj = (sn[j] == sn[j1]) ? sj : -1;
381 energy = E_IntLoop_Co(rtype[type], rtype[type_2],
427 ubf_eval_ext_int_loop(
int i,
440 unsigned char type_2,
445 int energy, u1, u2, u3;
451 energy =
E_IntLoop(u2, u1 + u3, type, type_2, si, sj, sp, sq, P);
462 if (u1 + u2 + u3 == 0)
488 int nl, ns, u, energy;
501 return P->stack[type][type_2];
505 energy = (nl <=
MAXLOOP) ? P->bulge[nl] :
506 (P->bulge[30] + (
int)(P->lxc * log(nl / 30.)));
508 energy += P->stack[type][type_2];
511 energy += P->TerminalAU;
514 energy += P->TerminalAU;
522 return P->int11[type][type_2][si1][sj1];
527 energy = P->int21[type][type_2][si1][sq1][sj1];
529 energy = P->int21[type_2][type][sq1][si1][sp1];
536 MAXLOOP) ? (P->internal_loop[nl + 1]) : (P->internal_loop[30] +
537 (int)(P->lxc * log((nl + 1) / 30.)));
538 energy +=
MIN2(MAX_NINIO, (nl - ns) * P->ninio[2]);
539 energy += P->mismatch1nI[type][si1][sj1] + P->mismatch1nI[type_2][sq1][sp1];
542 }
else if (ns == 2) {
545 return P->int22[type][type_2][si1][sp1][sq1][sj1];
546 }
else if (nl == 3) {
548 energy = P->internal_loop[5] + P->ninio[2];
549 energy += P->mismatch23I[type][si1][sj1] + P->mismatch23I[type_2][sq1][sp1];
559 MAXLOOP) ? (P->internal_loop[u]) : (P->internal_loop[30] + (int)(P->lxc * log((u) / 30.)));
561 energy +=
MIN2(MAX_NINIO, (nl - ns) * P->ninio[2]);
563 energy += P->mismatchI[type][si1][sj1] + P->mismatchI[type_2][sq1][sp1];
582 int ul, us, no_close = 0;
586 if ((noGUclosure) && ((type2 == 3) || (type2 == 4) || (type == 3) || (type == 4)))
599 z = P->expstack[type][type2];
600 }
else if (!no_close) {
605 z *= P->expstack[type][type2];
615 }
else if (us == 1) {
617 return (
FLT_OR_DBL)(P->expint11[type][type2][si1][sj1]);
622 return (
FLT_OR_DBL)(P->expint21[type][type2][si1][sq1][sj1]);
624 return (
FLT_OR_DBL)(P->expint21[type2][type][sq1][si1][sp1]);
627 z = P->expinternal[ul + us] * P->expmismatch1nI[type][si1][sj1] *
628 P->expmismatch1nI[type2][sq1][sp1];
629 return (
FLT_OR_DBL)(z * P->expninio[2][ul - us]);
631 }
else if (us == 2) {
634 return (
FLT_OR_DBL)(P->expint22[type][type2][si1][sp1][sq1][sj1]);
635 }
else if (ul == 3) {
637 z = P->expinternal[5] * P->expmismatch23I[type][si1][sj1] *
638 P->expmismatch23I[type2][sq1][sp1];
644 z = P->expinternal[ul + us] * P->expmismatchI[type][si1][sj1] *
645 P->expmismatchI[type2][sq1][sp1];
646 return (
FLT_OR_DBL)(z * P->expninio[2][ul - us]);
654 E_IntLoop_Co(
int type,
668 int energy, ci, cj, cp, cq, d3, d5, d5_2, d3_2, tmm, tmm_2;
672 energy += P->TerminalAU;
675 energy += P->TerminalAU;
680 ci = ON_SAME_STRAND(i, i + 1, cutpoint);
681 cj = ON_SAME_STRAND(j - 1, j, cutpoint);
682 cp = ON_SAME_STRAND(p - 1, p, cutpoint);
683 cq = ON_SAME_STRAND(q, q + 1, cutpoint);
685 d3 = ci ? P->dangle3[type][si1] : 0;
686 d5 = cj ? P->dangle5[type][sj1] : 0;
687 d5_2 = cp ? P->dangle5[type_2][sp1] : 0;
688 d3_2 = cq ? P->dangle3[type_2][sq1] : 0;
690 tmm = (cj && ci) ? P->mismatchExt[type][sj1][si1] : d5 + d3;
691 tmm_2 = (cp && cq) ? P->mismatchExt[type_2][sp1][sq1] : d5_2 + d3_2;
694 return energy + tmm + tmm_2;
699 energy += tmm + tmm_2;
701 energy += (cj && cq) ?
MIN2(tmm + d5_2, tmm_2 + d3) : tmm + tmm_2;
704 }
else if (p - i == 2) {
706 energy += (ci && cp) ?
MIN2(tmm + d3_2, tmm_2 + d5) : tmm + tmm_2;
708 energy +=
MIN2(tmm,
MIN2(tmm_2,
MIN2(d5 + d5_2, d3 + d3_2)));
710 energy +=
MIN2(d3, d5_2);
715 energy +=
MIN2(d5, d3_2);
Functions and data structures for secondary structure soft constraints.
int vrna_eval_int_loop(vrna_fold_compound_t *fc, int i, int j, int k, int l)
Evaluate the free energy contribution of an interior loop with delimiting base pairs and ...
vrna_md_t model_details
Model details to be used in the recursions.
Definition: basic.h:95
vrna_md_t model_details
Model details to be used in the recursions.
Definition: basic.h:153
double FLT_OR_DBL
Typename for floating point number in partition function computations.
Definition: basic.h:43
The most basic data structure required by many functions throughout the RNAlib.
Definition: fold_compound.h:132
The datastructure that contains temperature scaled energy parameters.
Definition: basic.h:56
int * energy_stack
Pseudo Energy contribution per base pair involved in a stack.
Definition: soft.h:202
#define MIN2(A, B)
Get the minimum of two comparable values.
Definition: basic.h:111
#define MAXLOOP
Definition: constants.h:29
vrna_callback_sc_energy * f
A function pointer used for pseudo energy contribution in MFE calculations.
Definition: soft.h:206
#define INF
Definition: constants.h:17
Various data structures and pre-processor macros.
The soft constraints data structure.
Definition: soft.h:170
The data structure that contains temperature scaled Boltzmann weights of the energy parameters...
Definition: basic.h:102
Functions and data structures for handling of secondary structure hard constraints.
int ** energy_up
Energy contribution for stretches of unpaired nucleotides.
Definition: soft.h:176
#define VRNA_DECOMP_PAIR_IL
Indicator for interior loop decomposition step.
Definition: basic.h:144
int vrna_BT_int_loop(vrna_fold_compound_t *fc, int *i, int *j, int en, vrna_bp_stack_t *bp_stack, int *stack_count)
Backtrack an interior loop closed by .
int dangles
Specifies the dangle model used in any energy evaluation (0,1,2 or 3)
Definition: model.h:180
Base pair stack element.
Definition: basic.h:143
Functions to deal with sets of energy parameters.
int * energy_bp
Energy contribution for base pairs.
Definition: soft.h:187
int vrna_BT_stack(vrna_fold_compound_t *fc, int *i, int *j, int *en, vrna_bp_stack_t *bp_stack, int *stack_count)
Backtrack a stacked pair closed by .
General utility- and helper-functions used throughout the ViennaRNA Package.
int noGUclosure
Do not allow loops to be closed by GU pair.
Definition: model.h:207
int dangles
Switch the energy model for dangling end contributions (0, 1, 2, 3)
PRIVATE FLT_OR_DBL exp_E_IntLoop(int u1, int u2, int type, int type2, short si1, short sj1, short sp1, short sq1, vrna_exp_param_t *P)
Definition: internal.h:572
PRIVATE int E_IntLoop(int n1, int n2, int type, int type_2, int si1, int sj1, int sp1, int sq1, vrna_param_t *P)
Definition: internal.h:477
void * data
A pointer to the data object provided for for pseudo energy contribution functions of the generic sof...
Definition: soft.h:223