# Local (sliding window) MFE Prediction

Variations of the local (sliding window) Minimum Free Energy (MFE) prediction algorithm.

We provide implementations for the local (sliding window) MFE prediction algorithm for

- Single sequences,

- Multiple sequence alignments (MSA), and

Note, that our implementation scans an RNA sequence (or MSA) from the 3’ to the 5’ end, and reports back locally optimal (consensus) structures, the corresponding free energy, and the position of the sliding window in global coordinates.

For any particular RNA sequence (or MSA) multiple locally optimal (consensus) secondary structures may be predicted. Thus, we tried to implement an interface that allows for an effortless conversion of the corresponding hits into any target data structure. As a consequence, we provide two distinct ways to retrieve the corresponding predictions, either

- through directly writing to an open `FILE` stream on-the-fly, or

- through a callback function mechanism.

The latter allows one to store the results in any possible target data structure. Our implementations then pass the results through the user-implemented callback as soon as the prediction for a particular window is finished.

  Basic local (sliding window) MFE prediction interface

  float vrna_mfe_window(vrna_fold_compound_t *fc, FILE *file)
    #include <ViennaRNA/mfe/local.h>

    Local MFE prediction using a sliding window approach.

    Computes minimum free energy structures using a sliding window approach, where base pairs may not span outside the window. In contrast to vrna_mfe(), where a maximum base pair span may be set using the vrna_md_t.max_bp_span attribute and one globally optimal structure is predicted, this function uses a sliding window to retrieve all locally optimal structures within each window. The size of the sliding window is set in the vrna_md_t.window_size attribute, prior to the retrieval of the vrna_fold_compound_t using vrna_fold_compound() with option VRNA_OPTION_WINDOW

    The predicted structures are written on-the-fly, either to stdout, if a NULL pointer is passed as file parameter, or to the corresponding filehandle.

    SWIG Wrapper Notes:

      This function is attached as overloaded method `mfe_window()` to objects of type `fold_compound`. The parameter `FILE` has default value of `NULL` and can be omitted. See e.g. `RNA.fold_compound.mfe_window()` in the Python API.

    See also

    vrna_fold_compound(), vrna_mfe_window_zscore(), vrna_mfe(), vrna_Lfold(), vrna_Lfoldz(), VRNA_OPTION_WINDOW, vrna_md_t.max_bp_span, vrna_md_t.window_size

    Parameters:

      - fc – The vrna_fold_compound_t with preallocated memory for the DP matrices

      - file – The output file handle where predictions are written to (maybe NULL)

  float vrna_mfe_window_cb(vrna_fold_compound_t *fc, vrna_mfe_window_f cb, void *data)
    #include <ViennaRNA/mfe/local.h>

    SWIG Wrapper Notes:

      This function is attached as overloaded method `mfe_window_cb()` to objects of type `fold_compound`. The parameter `data` has default value of `NULL` and can be omitted. See e.g. `RNA.fold_compound.mfe_window_cb()` in the Python API.

  float vrna_mfe_window_zscore(vrna_fold_compound_t *fc, double min_z, FILE *file)
    #include <ViennaRNA/mfe/local.h>

    Local MFE prediction using a sliding window approach (with z-score cut-off)

    Computes minimum free energy structures using a sliding window approach, where base pairs may not span outside the window. This function is the z-score version of vrna_mfe_window(), i.e. only predictions above a certain z-score cut-off value are printed. As for vrna_mfe_window(), the size of the sliding window is set in the vrna_md_t.window_size attribute, prior to the retrieval of the vrna_fold_compound_t using vrna_fold_compound() with option VRNA_OPTION_WINDOW.

    The predicted structures are written on-the-fly, either to stdout, if a NULL pointer is passed as file parameter, or to the corresponding filehandle.

    SWIG Wrapper Notes:

      This function is attached as overloaded method `mfe_window_zscore()` to objects of type `fold_compound`. The parameter `FILE` has default value of `NULL` and can be omitted. See e.g. `RNA.fold_compound.mfe_window_zscore()` in the Python API.

    See also

    vrna_fold_compound(), vrna_mfe_window_zscore(), vrna_mfe(), vrna_Lfold(), vrna_Lfoldz(), VRNA_OPTION_WINDOW, vrna_md_t.max_bp_span, vrna_md_t.window_size

    Parameters:

      - fc – The vrna_fold_compound_t with preallocated memory for the DP matrices

      - min_z – The minimal z-score for a predicted structure to appear in the output

      - file – The output file handle where predictions are written to (maybe NULL)

  float vrna_mfe_window_zscore_cb(vrna_fold_compound_t *fc, double min_z, vrna_mfe_window_zscore_f cb, void *data)
    #include <ViennaRNA/mfe/local.h>

    SWIG Wrapper Notes:

      This function is attached as overloaded method `mfe_window_zscore_cb()` to objects of type `fold_compound`. The parameter `data` has default value of `NULL` and can be omitted. See e.g. `RNA.fold_compound.mfe_window_zscore()` in the Python API.

  int vrna_backtrack_window(vrna_fold_compound_t *fc, const char *Lfold_filename, long file_pos, char **structure, double mfe)
    #include <ViennaRNA/mfe/local.h>

  Simplified local MFE prediction using sequence(s) or multiple sequence alignment(s)

  float vrna_Lfold(const char *string, int window_size, FILE *file)
    #include <ViennaRNA/mfe/local.h>

    Local MFE prediction using a sliding window approach (simplified interface)

    This simplified interface to vrna_mfe_window() computes the MFE and locally optimal secondary structure using default options. Structures are predicted using a sliding window approach, where base pairs may not span outside the window. Memory required for dynamic programming (DP) matrices will be allocated and free’d on-the-fly. Hence, after return of this function, the recursively filled matrices are not available any more for any post-processing.

    SWIG Wrapper Notes:

      This function is available as overloaded function `Lfold()` in the global namespace. The parameter `file` defaults to `NULL` and may be omitted. See e.g. `RNA.Lfold()` in the Python API.

    See also

    vrna_mfe_window(), vrna_Lfoldz(), vrna_mfe_window_zscore()

    Note

    In case you want to use the filled DP matrices for any subsequent post-processing step, or you require other conditions than specified by the default model details, use vrna_mfe_window(), and the data structure vrna_fold_compound_t instead.

    Parameters:

      - string – The nucleic acid sequence

      - window_size – The window size for locally optimal structures

      - file – The output file handle where predictions are written to (if NULL, output is written to stdout)

  float vrna_Lfold_cb(const char *string, int window_size, vrna_mfe_window_f cb, void *data)
    #include <ViennaRNA/mfe/local.h>

    SWIG Wrapper Notes:

      This function is available as overloaded function `Lfold_cb()` in the global namespace. The parameter `data` defaults to `NULL` and may be omitted. See e.g. `RNA.Lfold_cb()` in the Python API.

  float vrna_Lfoldz(const char *string, int window_size, double min_z, FILE *file)
    #include <ViennaRNA/mfe/local.h>

    Local MFE prediction using a sliding window approach with z-score cut-off (simplified interface)

    This simplified interface to vrna_mfe_window_zscore() computes the MFE and locally optimal secondary structure using default options. Structures are predicted using a sliding window approach, where base pairs may not span outside the window. Memory required for dynamic programming (DP) matrices will be allocated and free’d on-the-fly. Hence, after return of this function, the recursively filled matrices are not available any more for any post-processing. This function is the z-score version of vrna_Lfold(), i.e. only predictions above a certain z-score cut-off value are printed.

    See also

    vrna_mfe_window_zscore(), vrna_Lfold(), vrna_mfe_window()

    Note

    In case you want to use the filled DP matrices for any subsequent post-processing step, or you require other conditions than specified by the default model details, use vrna_mfe_window(), and the data structure vrna_fold_compound_t instead.

    Parameters:

      - string – The nucleic acid sequence

      - window_size – The window size for locally optimal structures

      - min_z – The minimal z-score for a predicted structure to appear in the output

      - file – The output file handle where predictions are written to (if NULL, output is written to stdout)

  float vrna_Lfoldz_cb(const char *string, int window_size, double min_z, vrna_mfe_window_zscore_f cb, void *data)
    #include <ViennaRNA/mfe/local.h>

    SWIG Wrapper Notes:

      This function is available as overloaded function `Lfoldz_cb()` in the global namespace. The parameter `data` defaults to `NULL` and may be omitted. See e.g. `RNA.Lfoldz_cb()` in the Python API.

  float vrna_aliLfold(const char **alignment, int maxdist, FILE *fp)
    #include <ViennaRNA/mfe/local.h>

    SWIG Wrapper Notes:

      This function is available as overloaded function `aliLfold()` in the global namespace. The parameter `fp` defaults to `NULL` and may be omitted. See e.g. `RNA.aliLfold()` in the Python API.

  float vrna_aliLfold_cb(const char **alignment, int maxdist, vrna_mfe_window_f cb, void *data)
    #include <ViennaRNA/mfe/local.h>

    SWIG Wrapper Notes:

      This function is available as overloaded function `aliLfold_cb()` in the global namespace. The parameter `data` defaults to `NULL` and may be omitted. See e.g. `RNA.aliLfold_cb()` in the Python API.

  Typedefs

  typedef void (*vrna_mfe_window_f)(unsigned int start, unsigned int end, const char *structure, float en, void *data)
    #include <ViennaRNA/mfe/local.h>

    The default callback for sliding window MFE structure predictions.

    Notes on Callback Functions:

      This function will be called for each hit in a sliding window MFE prediction.

    See also

    vrna_mfe_window()

    Param start:

      provides the first position of the hit (1-based, relative to entire sequence/alignment)

    Param end:

      provides the last position of the hit (1-based, relative to the entire sequence/alignment)

    Param structure:

      provides the (sub)structure in dot-bracket notation

    Param en:

      is the free energy of the structure hit in kcal/mol

    Param data:

      is some arbitrary data pointer passed through by the function executing the callback

  typedef void vrna_mfe_window_callback(int start, int end, const char *structure, float en, void *data)
    #include <ViennaRNA/mfe/local.h>
  typedef void (*vrna_mfe_window_zscore_f)(unsigned int start, unsigned int end, const char *structure, float en, float zscore, void *data)
    #include <ViennaRNA/mfe/local.h>
  typedef void vrna_mfe_window_zscore_callback(int start, int end, const char *structure, float en, float zscore, void *data)
    #include <ViennaRNA/mfe/local.h>