Par exemple :
De plus la fonction fold retourne un nombre de type float, qui est l'énergie libre de repliement en kJ.mol-1.
Ainsi, en supposant que nous ayons déclaré une variable de type float nommée mfe, et deux chaînes de
caractères de même longueur, seq et str, et que seq contienne la séquence à replier, nous pouvons effectuer
le repliement à l'aide de l'instruction :
mfe=fold(seq,str);
après exécution de cet appel, str contient la structure sous forme parenthésée, et mfe contient l'énergie libre
du repliement.
► Écrire en C le programme foldseq, qui contient une fonction dont l'en-tête est :
char *seq2str(const char *seq);
Cette fonction doit prendre en paramètre la chaîne de caractères seq qui contient la séquence à replier, et
retourner une chaîne de caractère qui contient la structure sous forme parenthésée. Pour ce faire, elle utilise la
fonction fold du package ViennaRNA, et le source C doit donc inclure fold.h, fold_vars.h, et
utils.h qui se trouvent dans /usr/local/include/ViennaRNA (cette localisation peut dépendre de
l'installation)
La fonction main() de foldseq appelle seq2str pour calculer et afficher le repliement optimal de la
séquence passée en argument lors de l'appel1. Exemple :
[prompt] ./foldseq GCCUCGAUAGCUCAGUUGGGAGAGCG
GCCUCGAUAGCUCAGUUGGGAGAGCG
(((((..((((...)))).))).)).
► Modifier seq2str pour que la chaîne retournée contienne de plus l'énergie libre de repliement (au
maximum 10 caractères de plus, dont 2 chiffres après la virgule). On obtient alors :
[prompt] ./foldseq GCCUCGAUAGCUCAGUUGGGAGAGCG
GCCUCGAUAGCUCAGUUGGGAGAGCG
(((((..((((...)))).))).)). -5.90
2. Revenons à Python
Pour utiliser la fonction seq2str depuis Python, il faut la compiler à l'aide de SWIG, ce qui nécessite d'écrire
le fichier foldseq.i (s'inspirer de l'exemple du cours). La compilation elle-même se fait avec :
[prompt] swig -python foldseq.i
[prompt] gcc -shared -fpic foldseq.c foldseq_wrap.c -I
/usr/include/python2.6 -lRNA -lm -Xlinker -rpath
/usr/local/include/ViennaRNA -o _foldseq.so
La première de ces deux instructions génère les fichiers foldseq_wrap.c et foldseq.py.
foldseq_wrap.c est ensuite utilisé pour compiler foldseq.c et générer la bibliothèque partagée
_foldseq.so. Le fichier foldseq.py doit être importé pour que Python dispose des fonctions de la
1. Pour utiliser un tel argument, la convention est de déclarer int main(int argc, char *agrv), où argc
contient le nombre de mots de la ligne de commande, ici 2 : le premier (argv[0]) est le chemin vers le programme (ici
./foldseq) et le suivant (argv[1]) est le premier argument de la commande (ici la séquence à replier).