WSTester updated to work plus hopefully all the other changes that need to go into...
[jabaws.git] / binaries / src / ViennaRNA / H / part_func_co.h
diff --git a/binaries/src/ViennaRNA/H/part_func_co.h b/binaries/src/ViennaRNA/H/part_func_co.h
new file mode 100644 (file)
index 0000000..8ef94c1
--- /dev/null
@@ -0,0 +1,235 @@
+#ifndef __VIENNA_RNA_PACKAGE_PART_FUNC_CO_H__
+#define __VIENNA_RNA_PACKAGE_PART_FUNC_CO_H__
+
+#include "data_structures.h"
+
+#ifdef __GNUC__
+#define DEPRECATED(func) func __attribute__ ((deprecated))
+#else
+#define DEPRECATED(func) func
+#endif
+
+/**
+ *  \addtogroup pf_cofold
+ *  \brief Partition Function Cofolding
+ *
+ *  To simplify the implementation the partition function computation is done
+ *  internally in a null model that does not include the duplex initiation
+ *  energy, i.e. the entropic penalty for producing a dimer from two
+ *  monomers). The resulting free energies and pair probabilities are initially
+ *  relative to that null model. In a second step the free energies can be
+ *  corrected to include the dimerization penalty, and the pair probabilities
+ *  can be divided into the conditional pair probabilities given that a re
+ *  dimer is formed or not formed. See \cite bernhart:2006 for further details.
+ *  @{
+ *  \file part_func_co.h
+ * 
+ *  \brief Partition function for two RNA sequences
+ * 
+ *  As for folding one RNA molecule, this computes the partition function
+ *  of all possible structures and the base pair probabilities. Uses the
+ *  same global #pf_scale variable to avoid overflows.
+ * 
+ *  To simplify the implementation the partition function computation is done
+ *  internally in a null model that does not include the duplex initiation
+ *  energy, i.e. the entropic penalty for producing a dimer from two
+ *  monomers). The resulting free energies and pair probabilities are initially
+ *  relative to that null model. In a second step the free energies can be
+ *  corrected to include the dimerization penalty, and the pair probabilities
+ *  can be divided into the conditional pair probabilities given that a re
+ *  dimer is formed or not formed.
+ * 
+ *  After computing the partition functions of all possible dimeres one
+ *  can compute the probabilities of base pairs, the concentrations out of
+ *  start concentrations and sofar and soaway.
+ * 
+ *  Dimer formation is inherently concentration dependent. Given the free
+ *  energies of the monomers A and B and dimers AB, AA, and BB one can compute
+ *  the equilibrium concentrations, given input concentrations of A and B, see
+ *  e.g. Dimitrov & Zuker (2004)
+ */
+
+/**
+ *  \brief Toggles no intrabp in 2nd mol
+ */
+extern int    mirnatog;
+
+/**
+ *  \brief Free energies of the two monomers
+ */
+extern double F_monomer[2];
+
+/**
+ *  \brief Calculate partition function and base pair probabilities
+ *
+ *  This is the cofold partition function folding. The second molecule starts
+ *  at the #cut_point nucleotide.
+ *
+ *  \note OpenMP: Since this function relies on the global parameters
+ *        #do_backtrack, #dangles, #temperature and #pf_scale it is not
+ *        threadsafe according to concurrent changes in these variables!
+ *        Use co_pf_fold_par() instead to circumvent this issue.
+ *
+ *  \see co_pf_fold_par()
+ *
+ *  \param  sequence  Concatenated RNA sequences
+ *  \param  structure Will hold the structure or constraints
+ *  \return           cofoldF structure containing a set of energies needed for
+ *                    concentration computations.
+ */
+cofoldF co_pf_fold( char *sequence,
+                    char *structure);
+
+/**
+ *  \brief Calculate partition function and base pair probabilities
+ *
+ *  This is the cofold partition function folding. The second molecule starts
+ *  at the #cut_point nucleotide.
+ *
+ *  \see get_boltzmann_factors(), co_pf_fold()
+ *
+ *  \param sequence       Concatenated RNA sequences
+ *  \param structure      Pointer to the structure constraint
+ *  \param parameters     Data structure containing the precalculated Boltzmann factors
+ *  \param calculate_bppm Switch to turn Base pair probability calculations on/off (0==off)
+ *  \param is_constrained Switch to indicate that a structure contraint is passed via the
+ *                        structure argument (0==off)
+ *  \return               cofoldF structure containing a set of energies needed for
+ *                        concentration computations.
+ */
+cofoldF co_pf_fold_par( char *sequence,
+                        char *structure,
+                        pf_paramT *parameters,
+                        int calculate_bppm,
+                        int is_constrained);
+
+/**
+ *  \brief Get a pointer to the base pair probability array
+ * 
+ *  Accessing the base pair probabilities for a pair (i,j) is achieved by
+ *  \verbatim FLT_OR_DBL *pr = export_bppm(); pr_ij = pr[iindx[i]-j]; \endverbatim
+ * 
+ *  \see get_iindx()
+ *  \return A pointer to the base pair probability array
+ */
+FLT_OR_DBL *export_co_bppm(void);
+
+/**
+ *  \brief Free the memory occupied by co_pf_fold()
+ */
+void    free_co_pf_arrays(void);
+
+/**
+ *  \brief Recalculate energy parameters
+ *
+ *  This function recalculates all energy parameters given
+ *  the current model settings.
+ *
+ *  \note This function relies on the global variables #pf_scale, #dangles and
+ *        #temperature. Thus it might not be threadsafe in certain situations.
+ *        Use update_co_pf_params_par() instead.
+ *
+ *  \see get_boltzmann_factors(), update_co_pf_params_par()
+ *
+ *  \param    length      Length of the current RNA sequence
+ */
+void    update_co_pf_params(int length);
+
+/**
+ *  \brief Recalculate energy parameters
+ *
+ *  This function recalculates all energy parameters given
+ *  the current model settings.
+ *  It's second argument can either be NULL or a data structure
+ *  containing the precomputed Boltzmann factors. In the first
+ *  scenario, the necessary data structure will be created automatically
+ *  according to the current global model settings, i.e. this
+ *  mode might not be threadsafe.
+ *  However, if the provided data structure is not NULL, threadsafety
+ *  for the model parameters #dangles, #pf_scale and #temperature is regained, since their
+ *  values are taken from this data structure during subsequent calculations.
+ *
+ *  \see get_boltzmann_factors(), update_co_pf_params()
+ *
+ *  \param    length      Length of the current RNA sequence
+ *  \param    parameters  data structure containing the precomputed Boltzmann factors
+ */
+void    update_co_pf_params_par(int length,
+                                pf_paramT *parameters);
+
+/**
+ *  \brief Compute Boltzmann probabilities of dimerization without homodimers
+ * 
+ *  Given the pair probabilities and free energies (in the null model) for a
+ *  dimer AB and the two constituent monomers A and B, compute the conditional pair
+ *  probabilities given that a dimer AB actually forms.
+ *  Null model pair probabilities are given as a list as produced by
+ *  assign_plist_from_pr(), the dimer probabilities 'prAB' are modified in place.
+ * 
+ *  \param FAB      free energy of dimer AB
+ *  \param FEA      free energy of monomer A
+ *  \param FEB      free energy of monomer B
+ *  \param prAB     pair probabilities for dimer
+ *  \param prA      pair probabilities monomer
+ *  \param prB      pair probabilities monomer
+ *  \param Alength  Length of molecule A
+ */
+void    compute_probabilities(double FAB,
+                              double FEA,
+                              double FEB,
+                              struct plist  *prAB,
+                              struct plist  *prA,
+                              struct plist  *prB,
+                              int Alength);
+
+/**
+ *  \brief Given two start monomer concentrations a and b, compute the
+ *  concentrations in thermodynamic equilibrium of all dimers and the monomers.
+ * 
+ *  This function takes an array  'startconc' of input concentrations with alternating
+ *  entries for the initial concentrations of molecules A and B (terminated by
+ *  two zeroes), then computes the resulting equilibrium concentrations
+ *  from the free energies for the dimers. Dimer free energies should be the
+ *  dimer-only free energies, i.e. the FcAB entries from the #cofoldF struct.
+ * 
+ *  \param FEAB       Free energy of AB dimer (FcAB entry)
+ *  \param FEAA       Free energy of AA dimer (FcAB entry)
+ *  \param FEBB       Free energy of BB dimer (FcAB entry)
+ *  \param FEA        Free energy of monomer A
+ *  \param FEB        Free energy of monomer B
+ *  \param startconc  List of start concentrations [a0],[b0],[a1],[b1],...,[an][bn],[0],[0]
+ *  \return ConcEnt array containing the equilibrium energies and start concentrations
+ */
+ConcEnt *get_concentrations(double FEAB,
+                            double FEAA,
+                            double FEBB,
+                            double FEA,
+                            double FEB,
+                            double *startconc);
+
+
+/**
+ *  @}
+ */
+
+/*
+#################################################
+# DEPRECATED FUNCTIONS                          #
+#################################################
+*/
+
+/**
+ *  DO NOT USE THIS FUNCTION ANYMORE
+ *  \deprecated{ This function is deprecated and will be removed soon!}
+ *  use \ref assign_plist_from_pr() instead!
+ */
+DEPRECATED(plist  *get_plist( struct plist *pl,
+                              int length,
+                              double cut_off));
+/**
+ *  DO NOT USE THIS FUNCTION ANYMORE
+ *  \deprecated{ This function is deprecated and will be removed soon!}
+ */
+DEPRECATED(void   init_co_pf_fold(int length));
+
+#endif