--- /dev/null
+/*
+ minimum free energy
+ RNA secondary structure with
+ basepair distance d to reference structure prediction
+
+*/
+#ifndef __VIENNA_RNA_PACKAGE_TWO_D_PF_FOLD_H__
+#define __VIENNA_RNA_PACKAGE_TWO_D_PF_FOLD_H__
+
+#include "data_structures.h"
+
+#ifdef __GNUC__
+#define DEPRECATED(func) func __attribute__ ((deprecated))
+#else
+#define DEPRECATED(func) func
+#endif
+
+/**
+ * \addtogroup kl_neighborhood_pf
+ * \brief Compute the partition function and stochastically sample secondary structures for a partitioning of
+ * the secondary structure space according to the base pair distance to two fixed reference structures
+ * @{
+ *
+ * \file 2Dpfold.h
+ */
+
+/**
+ * \brief Get a datastructure containing all necessary attributes and global folding switches
+ *
+ * This function prepares all necessary attributes and matrices etc which are needed for a call
+ * of TwoDpfoldList.
+ * A snapshot of all current global model switches (dangles, temperature and so on) is done and
+ * stored in the returned datastructure. Additionally, all matrices that will hold the partition
+ * function values are prepared.
+ *
+ * \param seq the RNA sequence in uppercase format with letters from the alphabet {AUCG}
+ * \param structure1 the first reference structure in dot-bracket notation
+ * \param structure2 the second reference structure in dot-bracket notation
+ * \param circ a switch indicating if the sequence is linear (0) or circular (1)
+ * \returns the datastructure containing all necessary partition function attributes
+ */
+TwoDpfold_vars *get_TwoDpfold_variables( const char *seq,
+ const char *structure1,
+ char *structure2,
+ int circ);
+
+/**
+ * \brief Get the datastructure containing all necessary attributes and global folding switches from
+ * a pre-filled mfe-datastructure
+ *
+ * This function actually does the same as get_TwoDpfold_variables but takes its switches and
+ * settings from a pre-filled MFE equivalent datastructure
+ *
+ * \see get_TwoDfold_variables(), get_TwoDpfold_variables()
+ *
+ * \param mfe_vars the pre-filled mfe datastructure
+ * \returns the datastructure containing all necessary partition function attributes
+ */
+TwoDpfold_vars *get_TwoDpfold_variables_from_MFE(TwoDfold_vars *mfe_vars);
+
+/**
+ * \brief Free all memory occupied by a TwoDpfold_vars datastructure
+ *
+ * This function free's all memory occupied by a datastructure obtained from from
+ * get_TwoDpfold_variables() or get_TwoDpfold_variables_from_MFE()
+ *
+ * \see get_TwoDpfold_variables(), get_TwoDpfold_variables_from_MFE()
+ *
+ * \param vars the datastructure to be free'd
+ */
+void destroy_TwoDpfold_variables(TwoDpfold_vars *vars);
+
+/**
+ * \brief Compute the partition function for all distance classes
+ *
+ * This function computes the partition functions for all distance classes
+ * according the two reference structures specified in the datastructure 'vars'.
+ * Similar to TwoDfoldList() the arguments maxDistance1 and maxDistance2 specify
+ * the maximum distance to both reference structures. A value of '-1' in either of
+ * them makes the appropriate distance restrictionless, i.e. all basepair distancies
+ * to the reference are taken into account during computation.
+ * In case there is a restriction, the returned solution contains an entry where
+ * the attribute k=l=-1 contains the partition function for all structures exceeding
+ * the restriction.
+ * A values of #INF in the attribute 'k' of the returned list denotes the end of the list
+ *
+ * \see get_TwoDpfold_variables(), destroy_TwoDpfold_variables(), #TwoDpfold_solution
+ *
+ * \param vars the datastructure containing all necessary folding attributes and matrices
+ * \param maxDistance1 the maximum basepair distance to reference1 (may be -1)
+ * \param maxDistance2 the maximum basepair distance to reference2 (may be -1)
+ * \returns a list of partition funtions for the appropriate distance classes
+ */
+TwoDpfold_solution *TwoDpfoldList( TwoDpfold_vars *vars,
+ int maxDistance1,
+ int maxDistance2);
+
+/** @} */ /* End of group kl_neighborhood_pf */
+
+/**
+ * \addtogroup kl_neighborhood_stochbt
+ * \brief Contains functions related to stochastic backtracking from a specified distance class
+ * @{
+ */
+
+/**
+ * \brief Sample secondary structure representatives from a set of distance classes according to their
+ * Boltzmann probability
+ *
+ * If the argument 'd1' is set to '-1', the structure will be backtracked in the distance class
+ * where all structures exceeding the maximum basepair distance to either of the references reside.
+ *
+ * \pre The argument 'vars' must contain precalculated partition function matrices,
+ * i.e. a call to TwoDpfoldList() preceding this function is mandatory!
+ *
+ * \see TwoDpfoldList()
+ *
+ * \param[in] vars the datastructure containing all necessary folding attributes and matrices
+ * \param[in] d1 the distance to reference1 (may be -1)
+ * \param[in] d2 the distance to reference2
+ * \returns A sampled secondary structure in dot-bracket notation
+ */
+char *TwoDpfold_pbacktrack(TwoDpfold_vars *vars,
+ int d1,
+ int d2);
+
+/**
+ * \brief Sample secondary structure representatives with a specified length from a set of distance classes according to their
+ * Boltzmann probability
+ *
+ * This function does essentially the same as TwoDpfold_pbacktrack with the only difference that partial structures,
+ * i.e. structures beginning from the 5' end with a specified length of the sequence, are backtracked
+ *
+ * \note This function does not work (since it makes no sense) for circular RNA sequences!
+ * \pre The argument 'vars' must contain precalculated partition function matrices,
+ * i.e. a call to TwoDpfoldList() preceding this function is mandatory!
+ *
+ * \see TwoDpfold_pbacktrack(), TwoDpfoldList()
+ *
+ * \param[in] vars the datastructure containing all necessary folding attributes and matrices
+ * \param[in] d1 the distance to reference1 (may be -1)
+ * \param[in] d2 the distance to reference2
+ * \param[in] length the length of the structure beginning from the 5' end
+ * \returns A sampled secondary structure in dot-bracket notation
+ */
+char *TwoDpfold_pbacktrack5( TwoDpfold_vars *vars,
+ int d1,
+ int d2,
+ unsigned int length);
+
+/** @} */ /* End of group kl_neighborhood_stochbt */
+
+/**
+ * \brief
+ *
+ *
+ */
+DEPRECATED(FLT_OR_DBL **TwoDpfold(TwoDpfold_vars *our_variables,
+ int maxDistance1,
+ int maxDistance2));
+
+/**
+ * \brief
+ *
+ *
+ */
+DEPRECATED(FLT_OR_DBL **TwoDpfold_circ(
+ TwoDpfold_vars *our_variables,
+ int maxDistance1,
+ int maxDistance2));
+
+
+#endif