RNA-RNA interaction as a stepwise process

In this approach to cofolding the interaction between two RNA molecules is seen as a stepwise process. In a first step, the target molecule has to adopt a structure in which a binding site is accessible. In a second step, the ligand molecule will hybridize with a region accessible to an interaction. Consequently the algorithm is designed as a two step process: The first step is the calculation of the probability that a region within the target is unpaired, or equivalently, the calculation of the free energy needed to expose a region. In the second step we compute the free energy of an interaction for every possible binding site.


pu_contrib *pf_unstru(char *sequence, int max_w)
#include <ViennaRNA/part_func_up.h>

Calculate the partition function over all unpaired regions of a maximal length.

You have to call function pf_fold() providing the same sequence before calling pf_unstru(). If you want to calculate unpaired regions for a constrained structure, set variable ‘structure’ in function ‘pf_fold()’ to the constrain string. It returns a pu_contrib struct containing four arrays of dimension [i = 1 to length(sequence)][j = 0 to u-1] containing all possible contributions to the probabilities of unpaired regions of maximum length u. Each array in pu_contrib contains one of the contributions to the total probability of being unpaired: The probability of being unpaired within an exterior loop is in array pu_contrib->E, the probability of being unpaired within a hairpin loop is in array pu_contrib->H, the probability of being unpaired within an interior loop is in array pu_contrib->I and probability of being unpaired within a multi-loop is in array pu_contrib->M. The total probability of being unpaired is the sum of the four arrays of pu_contrib.

This function frees everything allocated automatically. To free the output structure call free_pu_contrib().

  • sequence

  • max_w


interact *pf_interact(const char *s1, const char *s2, pu_contrib *p_c, pu_contrib *p_c2, int max_w, char *cstruc, int incr3, int incr5)
#include <ViennaRNA/part_func_up.h>

Calculates the probability of a local interaction between two sequences.

The function considers the probability that the region of interaction is unpaired within ‘s1’ and ‘s2’. The longer sequence has to be given as ‘s1’. The shorter sequence has to be given as ‘s2’. Function pf_unstru()

has to be called for ‘s1’ and ‘s2’, where the probabilities of being unpaired have to be given in ‘p_c’ and ‘p_c2’, respectively. If you do not want to include the probabilities of being unpaired for ‘s2’ set ‘p_c2’ to NULL. If variable ‘cstruc’ is not NULL, constrained folding is done: The available constrains for intermolecular interaction are: ‘.’ (no constrain), ‘x’ (the base has no intermolecular interaction) and ‘|’ (the corresponding base has to be paired intermolecularily).

The parameter ‘w’ determines the maximal length of the interaction. The parameters ‘incr5’ and ‘incr3’ allows inclusion of unpaired residues left (‘incr5’) and right (‘incr3’) of the region of interaction in ‘s1’. If the ‘incr’ options are used, function

pf_unstru() has to be called with w=w+incr5+incr3 for the longer sequence ‘s1’.

It returns a structure of type interact which contains the probability of the best local interaction including residue i in Pi and the minimum free energy in Gi, where i is the position in sequence ‘s1’. The member Gikjl of structure interact

is the best interaction between region [k,i] k<i in longer sequence ‘s1’ and region [j,l] j<l in ‘s2’. Gikjl_wo is Gikjl without the probability of beeing unpaired.


free_interact() to free the returned structure, all other stuff is freed inside pf_interact().

  • s1

  • s2

  • p_c

  • p_c2

  • max_w

  • cstruc

  • incr3

  • incr5


void free_interact(interact *pin)
#include <ViennaRNA/part_func_up.h>

Frees the output of function pf_interact().

int Up_plot(pu_contrib *p_c, pu_contrib *p_c_sh, interact *pint, char *ofile, int **unpaired_values, char *select_contrib, char *head, unsigned int mode)
#include <ViennaRNA/part_func_up.h>
pu_contrib *get_pu_contrib_struct(unsigned int n, unsigned int w)
#include <ViennaRNA/part_func_up.h>
void free_pu_contrib_struct(pu_contrib *pu)
#include <ViennaRNA/part_func_up.h>

Frees the output of function pf_unstru().

void free_pu_contrib(pu_contrib *pu)
#include <ViennaRNA/part_func_up.h>