// functions wrapped in here need a C-wrapper because they do "more work" // before they can be called from C. #include #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" float ffiwrap_fold_temp (float temp, const char *sequence, char *structure) { float mfe; vrna_fold_compound_t *vc; vrna_md_t md; vrna_md_set_default(&md); md.noLP = 1; md.temperature = temp; vc = vrna_fold_compound(sequence, &md, 0); mfe = vrna_mfe(vc, structure); vrna_fold_compound_free(vc); return mfe; } float ffiwrap_eos_temp (float temp, const char *string, const char *structure) { float e; vrna_md_t md; vrna_md_set_default(&md); md.temperature = temp; /* create fold_compound with default parameters and without DP matrices */ vrna_fold_compound_t *vc = vrna_fold_compound(string, &md, VRNA_OPTION_EVAL_ONLY); /* evaluate structure */ e = vrna_eval_structure(vc, structure); /* free fold_compound */ vrna_fold_compound_free(vc); return e; }