1 /*
2 * Various wrappers to create simplified interfaces for Minimum Free Energy
3 * prediction
4 */
5
6 #ifdef HAVE_CONFIG_H
7 #include "config.h"
8 #endif
9
10 #include <stdio.h>
11 #include <stdlib.h>
12
13 #include "ViennaRNA/fold_compound.h"
14 #include "ViennaRNA/model.h"
15 #include "ViennaRNA/utils/basic.h"
16 #include "ViennaRNA/mfe_window.h"
17
18
19 /* wrappers for local MFE prediction */
20 PUBLIC float
vrna_Lfold(const char * string,int window_size,FILE * file)21 vrna_Lfold(const char *string,
22 int window_size,
23 FILE *file)
24 {
25 float energy;
26 vrna_fold_compound_t *vc;
27 vrna_md_t md;
28
29 vrna_md_set_default(&md);
30
31 md.window_size = window_size;
32 md.max_bp_span = window_size;
33
34 vc = vrna_fold_compound(string, &md, VRNA_OPTION_WINDOW);
35
36 energy = vrna_mfe_window(vc, file);
37
38 vrna_fold_compound_free(vc);
39
40 return energy;
41 }
42
43
44 PUBLIC float
vrna_Lfold_cb(const char * string,int window_size,vrna_mfe_window_callback * cb,void * data)45 vrna_Lfold_cb(const char *string,
46 int window_size,
47 vrna_mfe_window_callback *cb,
48 void *data)
49 {
50 float energy;
51 vrna_fold_compound_t *vc;
52 vrna_md_t md;
53
54 vrna_md_set_default(&md);
55
56 md.window_size = window_size;
57 md.max_bp_span = window_size;
58
59 vc = vrna_fold_compound(string, &md, VRNA_OPTION_WINDOW);
60
61 energy = vrna_mfe_window_cb(vc, cb, data);
62
63 vrna_fold_compound_free(vc);
64
65 return energy;
66 }
67
68
69 #ifdef VRNA_WITH_SVM
70
71 PUBLIC float
vrna_Lfoldz(const char * string,int window_size,double min_z,FILE * file)72 vrna_Lfoldz(const char *string,
73 int window_size,
74 double min_z,
75 FILE *file)
76 {
77 float energy;
78 vrna_fold_compound_t *vc;
79 vrna_md_t md;
80
81 vrna_md_set_default(&md);
82
83 md.window_size = window_size;
84 md.max_bp_span = window_size;
85
86 vc = vrna_fold_compound(string, &md, VRNA_OPTION_WINDOW);
87
88 energy = vrna_mfe_window_zscore(vc, min_z, file);
89
90 vrna_fold_compound_free(vc);
91
92 return energy;
93 }
94
95
96 PUBLIC float
vrna_Lfoldz_cb(const char * string,int window_size,double min_z,vrna_mfe_window_zscore_callback * cb,void * data)97 vrna_Lfoldz_cb(const char *string,
98 int window_size,
99 double min_z,
100 vrna_mfe_window_zscore_callback *cb,
101 void *data)
102 {
103 float energy;
104 vrna_fold_compound_t *vc;
105 vrna_md_t md;
106
107 vrna_md_set_default(&md);
108
109 md.window_size = window_size;
110 md.max_bp_span = window_size;
111
112 vc = vrna_fold_compound(string, &md, VRNA_OPTION_WINDOW);
113
114 energy = vrna_mfe_window_zscore_cb(vc, min_z, cb, data);
115
116 vrna_fold_compound_free(vc);
117
118 return energy;
119 }
120
121
122 #endif
123
124 /* wrappers for local MFE prediction using multiple sequence alignments */
125 PUBLIC float
vrna_aliLfold(const char ** AS,int window_size,FILE * file)126 vrna_aliLfold(const char **AS,
127 int window_size,
128 FILE *file)
129 {
130 float energy;
131 vrna_fold_compound_t *vc;
132 vrna_md_t md;
133
134 vrna_md_set_default(&md);
135
136 md.window_size = window_size;
137 md.max_bp_span = window_size;
138
139 vc = vrna_fold_compound_comparative(AS, &md, VRNA_OPTION_MFE | VRNA_OPTION_WINDOW);
140
141 energy = vrna_mfe_window(vc, file);
142
143 vrna_fold_compound_free(vc);
144
145 return energy;
146 }
147
148
149 PUBLIC float
vrna_aliLfold_cb(const char ** AS,int window_size,vrna_mfe_window_callback * cb,void * data)150 vrna_aliLfold_cb(const char **AS,
151 int window_size,
152 vrna_mfe_window_callback *cb,
153 void *data)
154 {
155 float energy;
156 vrna_fold_compound_t *vc;
157 vrna_md_t md;
158
159 vrna_md_set_default(&md);
160
161 md.window_size = window_size;
162 md.max_bp_span = window_size;
163
164 vc = vrna_fold_compound_comparative(AS, &md, VRNA_OPTION_MFE | VRNA_OPTION_WINDOW);
165
166 energy = vrna_mfe_window_cb(vc, cb, data);
167
168 vrna_fold_compound_free(vc);
169
170 return energy;
171 }
172