(Re-)folding Paths, Saddle Points, Energy Barriers, and Local Minima

API for various RNA folding path algorithms.

This part of our API allows for generating RNA secondary structure (re-)folding paths between two secondary structures or simply starting from a single structure.

This is most important if an estimate of the refolding energy barrier between two structures is required, or a structure’s corresponding local minimum needs to be determined, e.g. through a gradient-descent walk.

This part of the interface is further split into the following sections:


#include <ViennaRNA/landscape/paths.h>

Flag to indicate producing a (re-)folding path as list of dot-bracket structures.

#include <ViennaRNA/landscape/paths.h>

Flag to indicate producing a (re-)folding path as list of transition moves.


typedef struct vrna_path_s vrna_path_t
#include <ViennaRNA/landscape/paths.h>

Typename for the refolding path data structure vrna_path_s.

typedef struct vrna_path_options_s *vrna_path_options_t
#include <ViennaRNA/landscape/paths.h>

Options data structure for (re-)folding path implementations.


void vrna_path_free(vrna_path_t *path)
#include <ViennaRNA/landscape/paths.h>

Release (free) memory occupied by a (re-)folding path.

  • path – The refolding path to be free’d

void vrna_path_options_free(vrna_path_options_t options)
#include <ViennaRNA/landscape/paths.h>

Release (free) memory occupied by an options data structure for (re-)folding path implementations.

  • options – The options data structure to be free’d

struct vrna_path_s
#include <ViennaRNA/landscape/paths.h>

An element of a refolding path list.

Usually, one has to deal with an array of vrna_path_s, e.g. returned from one of the refolding-path algorithms.

Since in most cases the length of the list is not known in advance, such lists have an end-of-list marker, which is either:

In the following we show an example for how to cover both cases of iteration:

vrna_path_t *ptr = path; // path was returned from one of the refolding path functions, e.g. vrna_path_direct()

if (ptr) {
  if (ptr->type == VRNA_PATH_TYPE_DOT_BRACKET) {
    for (; ptr->s; ptr++)
      printf("%s [%6.2f]\n", ptr->s, ptr->en);
  } else if (ptr->type == VRNA_PATH_TYPE_MOVES) {
    for (; ptr->move.pos_5 != 0; ptr++)
      printf("move %d:%d, dG = %6.2f\n", ptr->move.pos_5, ptr->move.pos_3, ptr->en);

See also


Public Members

unsigned int type

The type of the path element.

A value of VRNA_PATH_TYPE_DOT_BRACKET indicates that vrna_path_s::s consists of the secondary structure in dot-bracket notation, and vrna_path_s::en

the corresponding free energy.

On the other hand, if the value is

VRNA_PATH_TYPE_MOVES, vrna_path_s::s is NULL and vrna_path_s::move is set to the transition move that transforms a previous structure into it’s neighbor along the path. In this case, the attribute vrna_path_s::en states the change in free energy with respect to the structure before application of vrna_path_s::move.

double en

Free energy of current structure.

char *s

Secondary structure in dot-bracket notation.

vrna_move_t move

Move that transforms the previous structure into it’s next neighbor along the path.