packages feed

ViennaRNA-bindings-0.233.2.0: C/ffiwrap_centroid.c

// functions wrapped in here need a C-wrapper because they do "more work"
// before they can be called from C.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "ViennaRNA/part_func.h"
#include "ViennaRNA/part_func_co.h"
#include "ViennaRNA/duplex.h"
#include "ViennaRNA/plex.h"
#include "ViennaRNA/alifold.h"
#include "ViennaRNA/fold.h"

double ffiwrap_centroid_temp (double temp, const char *sequence, char *structure, double *dist)
{
  double                e;
  char*                 cent;
  char*                 pf_struc;
  double                cent_en;
  vrna_fold_compound_t  *vc;
  vrna_md_t             md;

  vrna_md_set_default(&md);
  md.noLP = 1;
  md.dangles = 2;
//  md.noGUclosure = 1;
  md.temperature = temp;
  vc  = vrna_fold_compound(sequence, &md, 0);
  e = vrna_pf(vc, pf_struc);
  cent = vrna_centroid(vc, dist);
  cent_en = vrna_eval_structure(vc, (const char*) cent);
  strcpy (structure, cent);
  free (cent);
  free (pf_struc);

  vrna_fold_compound_free(vc);

  return cent_en;
}