https://www.bangspankxxx.com PornMolecular Modelling and GNU/Linux
http://www.steletch.org/
frSPIP - www.spip.netMolecular Modelling and GNU/Linuxhttps://www.steletch.org/local/cache-vignettes/L144xH39/siteon0-55c3f.png?1692019505
http://www.steletch.org/
39144Python : bonnes pratiques pour mettre en place un programme
https://www.steletch.org/spip.php?page=article&id_article=30
https://www.steletch.org/spip.php?page=article&id_article=302024-04-19T09:39:45Ztext/htmlfrStéphane
<p>La langage python est récemment devenu très populaire de par sa facilité apparente d'utilisation. Il reste néanmoins un langage informatique qui comporte des notions complexes, et une fois les premiers programmes écrits (scripts), il faut assez rapidement réfléchir à structurer le programme pour qu'il devienne exploitable sur le moyen terme, au risque sinon de devenir du code mort, jetable, et donc perdu. <br class='autobr' />
Pour éviter cette dérive, voici quelques conseils avec des exemples rapides (...)</p>
-
<a href="https://www.steletch.org/spip.php?page=rubrique&id_rubrique=2" rel="directory">BioInformatique</a>
<div class='rss_texte'><!--sommaire--><div class="well nav-sommaire nav-sommaire-7" id="nav670a9f75454235.65669542">
<h2>Sommaire</h2><ol class="spip"><li> <a id="s-Version-1-du-programme-un-script"></a><a href="#Version-1-du-programme-un-script" class="spip_ancre">Version 1 du programme, un "script"</a></li><li> <a id="s-Version-2-programme-le-rendre-executable"></a><a href="#Version-2-programme-le-rendre-executable" class="spip_ancre">Version 2 : programme, le rendre exécutable</a></li><li> <a id="s-Version-2-du-programme-du-script-au-programme"></a><a href="#Version-2-du-programme-du-script-au-programme" class="spip_ancre">Version 2 du programme, du script au programme</a></li><li> <a id="s-Version-3-decouper-les-fonctionnalites-du-programme"></a><a href="#Version-3-decouper-les-fonctionnalites-du-programme" class="spip_ancre">Version 3 : découper les fonctionnalités du programme</a></li><li> <a id="s-Documenter-son-programme"></a><a href="#Documenter-son-programme" class="spip_ancre">Documenter son programme</a></li><li> <a id="s-Version-4-continuer-a-developper-son-programme"></a><a href="#Version-4-continuer-a-developper-son-programme" class="spip_ancre">Version 4 : continuer à développer son programme</a></li><li> <a id="s-En-conclusion"></a><a href="#En-conclusion" class="spip_ancre">En conclusion</a></li></ol></div><!--/sommaire--><p>La <a href='https://www.python.org/' target="_blank"><strong>langage python</strong></a> est récemment devenu très populaire de par sa facilité apparente d'utilisation. Il reste néanmoins un langage informatique qui comporte des notions complexes, et une fois les premiers programmes écrits (<em>scripts</em>), il faut assez rapidement réfléchir à structurer le programme pour qu'il devienne exploitable sur le moyen terme, au risque sinon de devenir <em><a href='https://fr.wikipedia.org/wiki/R%C3%A9usinage_de_code' target="_blank">du code mort, jetable, et donc perdu</a></em>.</p>
<p>Pour éviter cette dérive, voici quelques conseils avec des exemples rapides d'utilisation.</p>
<h3 class="spip" id='Version-1-du-programme-un-script'>Version 1 du programme, un "script"<a class='sommaire-back sommaire-back-7' href='#s-Version-1-du-programme-un-script' title='Retour au sommaire'></a></h3>
<p>Prenons comme exemple un petit programme en python suivant, qui permet d'afficher un simple "coucou" dans un terminal, que l'on enregistre dans le fichier <strong>programme_v1.py</strong> :</p>
<p> </p>
<pre> print("Coucou")</pre>
<p> </p>
<p>Pour voir le résultat ce petit programme, on peut l'exécuter ainsi :</p>
<pre> python programme_v1.py</pre>
<p>... qui affiche donc dans le terminal</p>
<pre> Coucou</pre><h3 class="spip" id='Version-2-programme-le-rendre-executable'>Version 2 : programme, le rendre exécutable<a class='sommaire-back sommaire-back-7' href='#s-Version-2-programme-le-rendre-executable' title='Retour au sommaire'></a></h3>
<p>Cela peut devenir vite fastidieux de mettre à chaque fois le mot "python" devant chacun des programmes que l'on utilise, alors qu'au final c'est le programme dont on a besoin. Il existe une commande pour changer cela, mais qui nécessite de revoir un peu la structure de notre petit programme, il faut lui ajouter un <a href='https://www.it-connect.fr/dans-un-script-linux-quest-ce-que-le-shebang/' target="_blank"><em>shebang</em></a> à la première ligne.</p>
<pre> #!/usr/bin/env python3 print("Coucou")</pre>
<p>Le nouvelle programme s'appelle maintenant <strong>programme_v1.1.py</strong>.</p>
<p>Remarquez que comme il s'agit d'une version mineure du programme, j'ai incrémenté son numéro simplement (passage de 1 à 1.1). Nous reviendrons sur cette notion plus loin.</p>
<p>Pour rendre ce programme exécutable et le lancer, il faut taper :</p>
<pre> chmod +x programme_v1.1.py <strong>./</strong>programme_v1.1.py Coucou </pre>
<p>Remarquez qu'il faut préciser l'emplacement du fichier pour que le système lance le programme, en spécifiant "./" au début du nombre du programme. Le point suivi d'une barre oblique "<strong>./</strong>" indique que l'on utilise le répertoire courant, et qu'il faut exécuter le programme "programme_v1.1.py".</p>
<p>Le résultat ne change pas.</p>
<h3 class="spip" id='Version-2-du-programme-du-script-au-programme'>Version 2 du programme, du script au programme<a class='sommaire-back sommaire-back-7' href='#s-Version-2-du-programme-du-script-au-programme' title='Retour au sommaire'></a></h3>
<p>Le "script" par définition est un petit programme qui a vocation à être court, pour répondre à un besoin précis, on peut souvent le réécrire sans trop reprendre un ancien script. C'est l'une des raisons de l'utilisation du shell bash, c'est qu'il permet d'enchaîner plusieurs traitements rapidement, par exemple faire le déplacement et le renommage de milliers de fichiers.</p>
<p>Si l'on utilise python c'est souvent parce que le traitement que l'on envisage va faire beaucoup plus d'étapes qu'envisagé initialement. Il est donc utile de mieux organiser son programme dès le départ, en suivant quelques bonnes pratiques.</p>
<p>La version 2 de notre programme ne va pas faire évoluer grandement encore notre programme, mais elle va permettre de le structurer.</p>
<p>Le fichier programme_v2.py devient ainsi à partir du fichier programme_v1.1.py :</p>
<pre> #!/usr/bin/env python3 def main() : print("Coucou") if __name__ == "__main__" : main()</pre>
<p>Quand on rend exécutable le programme et qu'on le lance, le résultat est toujours le même, pour le moment.</p>
<h3 class="spip" id='Version-3-decouper-les-fonctionnalites-du-programme'>Version 3 : découper les fonctionnalités du programme<a class='sommaire-back sommaire-back-7' href='#s-Version-3-decouper-les-fonctionnalites-du-programme' title='Retour au sommaire'></a></h3>
<p>Un programme est un ensemble d'étapes que l'on veut faire faire à un ordinateur. La tâche la plus compliquée est de découper les actions pour qu'elles soient réutilisables dès le début, c'est à la fois utile pour clarifier les étapes à exécuter, mais aussi pour mieux isoler les endroits du programme où il faudra réfléchir sur le meilleur moyen d'arriver au résultat, qui le bien souvent doit faire appel à un <a href='https://fr.wikibooks.org/wiki/Impl%C3%A9mentation_d%27algorithmes_classiques' target="_blank"><strong>algorithme simple ou complexe</strong></a>.</p>
<p>Pour réaliser le programme, on va donc le <strong>découper en fonction</strong>,<strong> chaque fonction va contenir des commentaires</strong> au <a href='https://peps.python.org/pep-0257/' target="_blank">format docstrings</a>.</p>
<pre> # !/usr/bin/env python3 def affiche_coucou() : """ Fonction qui permet d'afficher le texte Coucou """ print("Coucou") def main() : affiche_coucou() if __name__ == "__main__" : main()</pre>
<p>Après avoir donné les permissions d'exécution au programme, le texte "Coucou" s'affiche à nouveau dans le terminal quand lance le programme.</p>
<h3 class="spip" id='Documenter-son-programme'>Documenter son programme<a class='sommaire-back sommaire-back-7' href='#s-Documenter-son-programme' title='Retour au sommaire'></a></h3>
<p>L'intérêt d'avoir mieux organisé son programme est qu'il est maintenant plus modulaire, ce qui permet de le rendre plus visible, donc de produire une documentation !</p>
<p>Il existe plusieurs moyens de documenter son programme, mais une manière simple est de faire appel à <a href='https://pdoc3.github.io/pdoc/' target="_blank"><strong>pydoc3</strong></a>.</p>
<p>Pour l'installer sur son système il faut utiliser la commande pip :</p>
<pre> pip install pdoc3</pre>
<p>Cela va créer dans votre espace de travail ($HOME) une commande dans le répertoire <strong>$HOME/.local/bin</strong>.</p>
<p>Il suffit maintenant de générer un fichier HTML du code en version 3 :</p>
<pre> <strong>$HOME/.local/bin/</strong>pdoc3 programme_v3.py —html —force</pre>
<p>Cette commande va générer un fichier au format HTML qu'il est possible de regarder en ligne directement avec un navigateur.</p>
<p><img align="middle" alt="Image du code commenté" src='https://www.steletch.org/local/cache-vignettes/L500xH233/capture_d_ecfe96-ec21a.png?1713626619' style='display: block; margin-left: auto; margin-right: auto; max-width: 200px; max-height: 200px;' width='500' height='233' /></p>
<h3 class="spip" id='Version-4-continuer-a-developper-son-programme'>Version 4 : continuer à développer son programme<a class='sommaire-back sommaire-back-7' href='#s-Version-4-continuer-a-developper-son-programme' title='Retour au sommaire'></a></h3>
<p>Une fois la première ébauche du programme réalisée, il faut commencer à réfléchir à toutes les étapes que l'on voudrait réaliser, les documenter avec des <a href='https://peps.python.org/pep-0257/' target="_blank"><em>docstrings</em></a>, puis ensuite les écrire une par une. Une fois cette implémentation préliminaire réalisée, il sera possible d'avoir des programmes python très complexes, bien documentés et réutilisables.</p>
<pre> # !/usr/bin/env python3 def affiche_texte(letexte) : """ Fonction qui permet d'afficher le texte fourni en argument """ print(letexte) def demande_texte() : """ Fonction qui demande un mot à afficher à l'utilisateur, pour l'instant elle ne fait rien """ pass def main() : demande_texte() affiche_texte("Coucou") affiche_texte("Bonjour") if __name__ == "__main__" : main()</pre><p class="spip">Dans cette version v4 du programme la fonction <strong>affiche_coucou()</strong> a été renommée et modifiée pour devenir <strong>affiche_texte(<em>letexte</em>)</strong>, elle devient ainsi plus générique car l'argument passé à la fonction (enregistré dans la variable <strong><em>letexte</em></strong>) est le texte à afficher, et non une valeur statique.</p>
<p class="spip">Une seconde fonction a été ajoutée (<strong>demande_texte()</strong>), elle ne fait pour l'instant rien, mais aura comme objectif de demander à l'utilisateur le mot à afficher. Comme il y a plusieurs moyens pour interroger un utilisateur, en ligne de commande, ou via une interface graphique par exemple, ce point ne sera pas détaillé ici.</p>
<h3 class="spip" id='En-conclusion'>En conclusion<a class='sommaire-back sommaire-back-7' href='#s-En-conclusion' title='Retour au sommaire'></a></h3><p class="spip">Le petit exemple présenté dans un article fait partie des bonnes pratiques qu'il est important de suivre à chaque fois que l'on écrit un programme en python. Avec un peu de rigueur cela permet d'obtenir rapidement un code propre, clair et fonctionnel. Cela permet aussi d'obtenir très rapidement un résultat qui correspond à ce dont on a besoin, c'est donc en plus d'une bonne pratique, une méthode efficace de développement.</p>
<p class="spip">Comme indiqué précédemment, un des éléments importants pour éviter d'avoir x version du même programme est de le versionner de manière incrémentale. Cependant cela devient vite compliqué de fonctionner ainsi, c'est pour cela qu'il vaut mieux tout de suite utiliser un <strong>gestionnaire de version comme git avec un hébergement sur github, gitlab ou encore un dépôt local</strong>. Cela vous permettra de mieux suivre vos changements, même en travaillant seul sur un projet, en faisant des changements importants entre chaque commit.</p>
<p class="spip">Le code détaillé rapidement ici est ainsi présent sur mon dépôt github public : <a class="spip_url spip_out auto" href='https://github.com/TeletcheaLab/pythondemo/' rel="nofollow external">https://github.com/TeletcheaLab/pythondemo/</a>.</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p></div>
Introduction à l'informatique pour les étudiants en biologie
https://www.steletch.org/spip.php?page=article&id_article=28
https://www.steletch.org/spip.php?page=article&id_article=282024-03-13T10:42:55Ztext/htmlfrStéphane
<p>Dans le cadre d'enseignements de licence, j'ai l'occasion de faire une introduction à l'informatique à des étudiants en deuxième année de biologie, voici ci-après les documents de cours et les TD associés qui sont mis à la disposition des étudiants. Si vous trouvez ces contenus utiles, merci de me contacter pour me l'indiquer, je pourrai vous transmettre les documents au format éditable sans souci. Ces documents sont fournis sous licence creative commons CC-BY-NC-SA (...)</p>
-
<a href="https://www.steletch.org/spip.php?page=rubrique&id_rubrique=6" rel="directory">Enseignement</a>
<div class='rss_texte'><!--sommaire--><div class="well nav-sommaire nav-sommaire-2" id="nav670a9f75985b14.51126262">
<h2>Sommaire</h2><ol class="spip"><li> <a id="s-Document-de-cours"></a><a href="#Document-de-cours" class="spip_ancre">Document de cours</a></li><li> <a id="s-Documents-de-TD"></a><a href="#Documents-de-TD" class="spip_ancre">Documents de TD</a></li></ol></div><!--/sommaire--><p>Dans le cadre d'enseignements de licence, j'ai l'occasion de faire une introduction à l'informatique à des étudiants en deuxième année de biologie, voici ci-après les documents de cours et les TD associés qui sont mis à la disposition des étudiants. Si vous trouvez ces contenus utiles, merci de me contacter pour me l'indiquer, je pourrai vous transmettre les documents au format éditable sans souci. Ces documents sont fournis sous licence creative commons CC-BY-NC-SA (<a class="spip_url spip_out auto" href='https://creativecommons.org/licenses/by-nc-sa/4.0/deed.fr' rel="nofollow external">https://creativecommons.org/licenses/by-nc-sa/4.0/deed.fr</a>).</p>
<p> </p>
<h3 class="spip" id='Document-de-cours'>Document de cours<a class='sommaire-back sommaire-back-2' href='#s-Document-de-cours' title='Retour au sommaire'></a></h3><div class='spip_document_15 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len="4" data-legende-lenx=""
>
<figure class="spip_doc_inner">
<a href='https://www.steletch.org/IMG/pdf/cm-1.pdf' class=" spip_doc_lien" title='PDF - 1.9 Mio' type="application/pdf"><img src='https://www.steletch.org/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1697614732' width='64' height='64' alt='' /></a>
<figcaption class='spip_doc_legende'> <div class='spip_doc_titre crayon document-titre-15 '><strong>CM
</strong></div> </figcaption></figure>
</div>
<p> </p>
<h3 class="spip" id='Documents-de-TD'>Documents de TD<a class='sommaire-back sommaire-back-2' href='#s-Documents-de-TD' title='Retour au sommaire'></a></h3><div class='spip_document_16 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len="6" data-legende-lenx=""
>
<figure class="spip_doc_inner">
<a href='https://www.steletch.org/IMG/pdf/td1-1.pdf' class=" spip_doc_lien" title='PDF - 71.1 kio' type="application/pdf"><img src='https://www.steletch.org/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1697614732' width='64' height='64' alt='' /></a>
<figcaption class='spip_doc_legende'> <div class='spip_doc_titre crayon document-titre-16 '><strong>TD 1
</strong></div> </figcaption></figure>
</div>
<p> </p>
<div class='spip_document_17 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len="6" data-legende-lenx=""
>
<figure class="spip_doc_inner">
<a href='https://www.steletch.org/IMG/pdf/td2-3.pdf' class=" spip_doc_lien" title='PDF - 57.3 kio' type="application/pdf"><img src='https://www.steletch.org/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1697614732' width='64' height='64' alt='' /></a>
<figcaption class='spip_doc_legende'> <div class='spip_doc_titre crayon document-titre-17 '><strong>TD 2
</strong></div> </figcaption></figure>
</div>
<p> </p>
<div class='spip_document_18 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len="6" data-legende-lenx=""
>
<figure class="spip_doc_inner">
<a href='https://www.steletch.org/IMG/pdf/td3-1.pdf' class=" spip_doc_lien" title='PDF - 41.5 kio' type="application/pdf"><img src='https://www.steletch.org/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1697614732' width='64' height='64' alt='' /></a>
<figcaption class='spip_doc_legende'> <div class='spip_doc_titre crayon document-titre-18 '><strong>TD 3
</strong></div> </figcaption></figure>
</div>
<p> </p>
<p>Cette page sera mise à jour régulièrement pour ajouter des explications et des documents additionnels.</p>
<p> </p></div>
Ajouter des polices Windows sous Ubuntu
https://www.steletch.org/spip.php?page=article&id_article=25
https://www.steletch.org/spip.php?page=article&id_article=252023-12-19T12:44:13Ztext/htmlfrStéphane
<p>Les systèmes GNU/Linux contiennent de nombreuses polices de caractères qui sont largement suffisantes pour un usage du quotidien. Il peut cependant arriver que vous ayez à travailler sur un document qui sera partagé avec des collègues sous Windows, qui utiliseront par défaut la police de caractères "Calibri", ce qui rendra le rendu sous linux sous-optimal, car une police de remplacement sera affichée. <br class='autobr' />
Pour installer les polices complémentaires de celles du système, il est possible (...)</p>
-
<a href="https://www.steletch.org/spip.php?page=rubrique&id_rubrique=4" rel="directory">SysAdmin</a>
<div class='rss_texte'><p>Les systèmes GNU/Linux contiennent de nombreuses polices de caractères qui sont largement suffisantes pour un usage du quotidien. Il peut cependant arriver que vous ayez à travailler sur un document qui sera partagé avec des collègues sous Windows, qui utiliseront par défaut la police de caractères "Calibri", ce qui rendra le rendu sous linux sous-optimal, car une police de remplacement sera affichée.</p>
<p> </p>
<p>Pour installer les polices complémentaires de celles du système, il est possible d'installer la police "fonts-crosextra-carlito" qui permettra d'avoir un rendu compatible avec celui que produirait la police Calibri (même taille de caractères.</p>
<p> </p>
<p><code class="spip_code spip_code_inline" dir="ltr">sudo apt install fonts-crosextra-carlito</code></p>
<p>Il est aussi possible d'installer automatiquement quelques polices True Type Font (TTF) de Microsoft.</p>
<p><code class="spip_code spip_code_inline" dir="ltr">sudo apt install ttf-mscorefonts-installer</code></p>
<p>Pour ce qui est de la police "Calibri" à proprement parler, il est possible de la télécharger ici : <a href="https://www.fontpalace.com/font-download/Calibri/" class="spip_out" rel="external">https://www.fontpalace.com/font-download/Calibri/</a>.</p>
<p>Une fois le fichier calibri.ttf, aller avec le navigateur de fichier (nautilus) sur son emplacement, faites un clic droit sur le fichier, sélectionnez "Ouvrir avec Polices", puis une fois l'application lancée, cliquez sur "Installer".</p>
<p>Vous avez ainsi enrichi rapidement votre distribution d'un certain nombre de polices classiques sous d'autres OS.</p>
<p> </p>
<p> </p></div>
Introduction to Structural bioinformatics
https://www.steletch.org/spip.php?page=article&id_article=22
https://www.steletch.org/spip.php?page=article&id_article=222023-10-18T07:38:49Ztext/htmlenStéphane
<p>This article contains useful links and documents part of an introductory lecture given to lab member of the US2B laboratory (https://us2b.univ-nantes.fr) in October 2023. This page will be updated regularly to add useful information from their feedback. <br class='autobr' />
As much as possible, the origin and references are given for a more complex introduction to the field, feel free to contact me for further precisions. The documents attached below are released under a permissive. <br class='autobr' />
Previous introductions (...)</p>
-
<a href="https://www.steletch.org/spip.php?page=rubrique&id_rubrique=6" rel="directory">Enseignement</a>
<div class='rss_texte'><!--sommaire--><div class="well nav-sommaire nav-sommaire-6" id="nav670a9f7633b9b9.08652591">
<h2>Table of contents</h2><ol class="spip"><li> <a id="s-Previous-introductions"></a><a href="#Previous-introductions" class="spip_ancre">Previous introductions</a>
<ol class="spip"><li> <a id="s-Introduction-to-Structural-bioinformatics-2018-English-video"></a><a href="#Introduction-to-Structural-bioinformatics-2018-English-video" class="spip_ancre">Introduction to Structural bioinformatics, 2018, English (video)</a></li><li> <a id="s-Introduction-a-la-bioinformatique-structurale-2020-French-video"></a><a href="#Introduction-a-la-bioinformatique-structurale-2020-French-video" class="spip_ancre">Introduction à la bioinformatique structurale, 2020, French (video)</a></li><li> <a id="s-Introduction-a-la-bioinformatique-structurale-2020-French-article"></a><a href="#Introduction-a-la-bioinformatique-structurale-2020-French-article" class="spip_ancre">Introduction à la bioinformatique structurale, 2020, French (article)</a></li></ol></li><li> <a id="s-First-lecture-introductory-concepts"></a><a href="#First-lecture-introductory-concepts" class="spip_ancre">First lecture, introductory concepts</a></li><li> <a id="s-Second-lecture-addition-of-definitions-and-model-validation"></a><a href="#Second-lecture-addition-of-definitions-and-model-validation" class="spip_ancre">Second lecture, addition of definitions and model validation</a></li></ol></div><!--/sommaire--><p>This article contains useful links and documents part of an introductory lecture given to lab member of the US2B laboratory (<a class="spip_url spip_out auto" href='https://us2b.univ-nantes.fr' rel="nofollow external">https://us2b.univ-nantes.fr</a>) in October 2023. This page will be updated regularly to add useful information from their feedback.</p>
<p>As much as possible, the origin and references are given for a more complex introduction to the field, feel free to contact me for further precisions. The documents attached below are released under a permissive.</p>
<h3 class="spip" id='Previous-introductions'>Previous introductions<a class='sommaire-back sommaire-back-6' href='#s-Previous-introductions' title='Back to the table of contents'></a></h3>
<p>I did in the past two recorded introductions with common parts on the field. One in French and the second in English. Here are the vidéos.</p>
<h4 class="spip" id='Introduction-to-Structural-bioinformatics-2018-English-video'>Introduction to Structural bioinformatics, 2018, English (video)<a class='sommaire-back sommaire-back-6' href='#s-Introduction-to-Structural-bioinformatics-2018-English-video' title='Back to the table of contents'></a></h4>
<p>Unfortunately this video has some interferences for sound records, so some parts contains sound scratches, overall most of the video is useful. This was an introductory lecture for a GGMM sponsored thematic school In Nantes, France (<a class="spip_url spip_out auto" href='https://dynamoppi.sciencesconf.org/' rel="nofollow external">https://dynamoppi.sciencesconf.org/</a>).</p>
<div class="spip_document_11 spip_document spip_documents spip_document_video spip_documents_center spip_document_center ressource oembed oembed_video oembed_video" > <figure class="spip_doc_inner"> <div class="oembed oe-video async clearfix center" style="max-width:600px;"> <div class="rwd-video-container oe-play-button" style="width:100%;height:0;padding-bottom:56.33%;background-image:url('https://www.steletch.org/local/cache-vignettes/L480xH360/hqdefault-895b0.jpg?1697617158');background-repeat:no-repeat;background-position:center;background-size:cover;" onclick="if (jQuery(this).is('.oe-play-button')){jQuery(this).removeClass('oe-play-button').addClass('loading').html(decodeURIComponent('%3Ciframe%20width%3D%22600%22%20height%3D%22338%22%20src%3D%22https%3A%2F%2Fwww.youtube-nocookie.com%2Fembed%2F_pWmPEkJpjM%3Fstart%3D26%26feature%3Doembed%26autoplay%3D1%22%20frameborder%3D%220%22%20allow%3D%22accelerometer%3B%20autoplay%3B%20clipboard-write%3B%20encrypted-media%3B%20gyroscope%3B%20picture-in-picture%3B%20web-share%22%20allowfullscreen%20title%3D%22Introduction%20to%20structural%20bioinformatics%20%28bad%20noise%29%22%3E%3C%2Fiframe%3E'));}" > <button onclick="jQuery(this).parent().trigger('click');"><span class="oe-play-button_label">Play</span></button> </div> <style><!--/**/.oe-video .loading {background-image:url("prive/themes/spip/images/searching.gif")!important;background-size:auto !important;}/**/--></style>
</div> <figcaption class='spip_doc_legende'> <div class='spip_doc_titre '><strong><a href="https://www.youtube.com/watch?v=_pWmPEkJpjM&t=26s" class="spip_out" rel="external">Introduction to structural bioinformatics (bad noise)</a>
</strong></div> <div class='spip_doc_credits crayon document-credits-11 '><a href="https://www.youtube.com/@stephaneteletchea5240" class="spip_out" rel="external">Stéphane Téletchéa</a>
</div>
</figcaption> </figure>
</div><h4 class="spip" id='Introduction-a-la-bioinformatique-structurale-2020-French-video'>Introduction à la bioinformatique structurale, 2020, French (video)<a class='sommaire-back sommaire-back-6' href='#s-Introduction-a-la-bioinformatique-structurale-2020-French-video' title='Back to the table of contents'></a></h4>
<p>This lecture was given to third-year bachelor students, and includes a little section about SARS-CoV-2 proteins structures and functions.</p>
<div class="spip_document_9 spip_document spip_documents spip_document_video spip_documents_center spip_document_center ressource oembed oembed_video oembed_video" > <figure class="spip_doc_inner"> <div class="oembed oe-video async clearfix center" style="max-width:600px;"> <div class="rwd-video-container oe-play-button" style="width:100%;height:0;padding-bottom:56.33%;background-image:url('https://www.steletch.org/local/cache-vignettes/L480xH360/hqdefault-2-2642b.jpg?1697617158');background-repeat:no-repeat;background-position:center;background-size:cover;" onclick="if (jQuery(this).is('.oe-play-button')){jQuery(this).removeClass('oe-play-button').addClass('loading').html(decodeURIComponent('%3Ciframe%20width%3D%22600%22%20height%3D%22338%22%20src%3D%22https%3A%2F%2Fwww.youtube-nocookie.com%2Fembed%2F1OrQ7i0xL6Q%3Fstart%3D1702%26feature%3Doembed%26autoplay%3D1%22%20frameborder%3D%220%22%20allow%3D%22accelerometer%3B%20autoplay%3B%20clipboard-write%3B%20encrypted-media%3B%20gyroscope%3B%20picture-in-picture%3B%20web-share%22%20allowfullscreen%20title%3D%22Introduction%20%C3%A0%20la%20Bioinformatique%20Structurale%22%3E%3C%2Fiframe%3E'));}" > <button onclick="jQuery(this).parent().trigger('click');"><span class="oe-play-button_label">Play</span></button> </div> <style><!--/**/.oe-video .loading {background-image:url("prive/themes/spip/images/searching.gif")!important;background-size:auto !important;}/**/--></style>
</div> <figcaption class='spip_doc_legende'> <div class='spip_doc_titre '><strong><a href="https://www.youtube.com/watch?v=1OrQ7i0xL6Q&t=1702s" class="spip_out" rel="external">Introduction à la Bioinformatique Structurale</a>
</strong></div> <div class='spip_doc_credits crayon document-credits-9 '><a href="https://www.youtube.com/@stephaneteletchea5240" class="spip_out" rel="external">Stéphane Téletchéa</a>
</div>
</figcaption> </figure>
</div><h4 class="spip" id='Introduction-a-la-bioinformatique-structurale-2020-French-article'>Introduction à la bioinformatique structurale, 2020, French (article)<a class='sommaire-back sommaire-back-6' href='#s-Introduction-a-la-bioinformatique-structurale-2020-French-article' title='Back to the table of contents'></a></h4>
<p>I wrote an article in the French magazine GNU/Linux Magazine France about Structural Bioinformatics and alphaFold (2), you can find it here :</p>
<p><a class="spip_url spip_out auto" href='https://connect.ed-diamond.com/GNU-Linux-Magazine/glmf-234/alphafold-la-reponse-au-probleme-le-plus-complexe-de-l-univers' rel="nofollow external">https://connect.ed-diamond.com/GNU-Linux-Magazine/glmf-234/alphafold-la-reponse-au-probleme-le-plus-complexe-de-l-univers</a></p>
<h3 class="spip" id='First-lecture-introductory-concepts'>First lecture, introductory concepts<a class='sommaire-back sommaire-back-6' href='#s-First-lecture-introductory-concepts' title='Back to the table of contents'></a></h3>
<p>This document presents rapidly some important milestones in structural biology, and the latest developments in structural bioinformatics. It should probably be split into multiple files to focus on more specific chapters and sections.</p>
<p> </p>
<div class='spip_document_3 spip_document spip_documents spip_document_file spip_documents_center spip_document_center'>
<figure class="spip_doc_inner">
<a href='https://www.steletch.org/IMG/pdf/structural_bioinformatics_introduction.pdf' class=" spip_doc_lien" title='PDF - 3.4 MiB' type="application/pdf"><img src='https://www.steletch.org/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1697614732' width='64' height='64' alt='' /></a>
</figure>
</div><h3 class="spip" id='Second-lecture-addition-of-definitions-and-model-validation'>Second lecture, addition of definitions and model validation<a class='sommaire-back sommaire-back-6' href='#s-Second-lecture-addition-of-definitions-and-model-validation' title='Back to the table of contents'></a></h3><div class='spip_document_14 spip_document spip_documents spip_document_file spip_documents_center spip_document_center'>
<figure class="spip_doc_inner">
<a href='https://www.steletch.org/IMG/pdf/structural_bioinformatics_introduction-2.pdf' class=" spip_doc_lien" title='PDF - 4 MiB' type="application/pdf"><img src='https://www.steletch.org/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1697614732' width='64' height='64' alt='' /></a>
</figure>
</div>
<p> </p></div>
Introduction à la chémoinformatique : les fichiers pour les petites molécules 3D
https://www.steletch.org/spip.php?page=article&id_article=21
https://www.steletch.org/spip.php?page=article&id_article=212023-10-11T12:36:45Ztext/htmlfrStéphane
<p>Format de fichier 3D des petites molécules et source <br class='autobr' />
Les ligands ou constituants biologiques sont disponibles dans différentes bases de données, trois formats sont le plus souvent utilisés, en fonction de l'utilisation prévue du ligand : <br class='autobr' /> le format SDF, attention ce format permet de représenter les molécules en 2D, il faut être vigilant à télécharger la molécule au format « 3D ». le format MOL2 le format PDB <br class='autobr' />
Il existe de nombreux autres formats pour représenter les petites (...)</p>
-
<a href="https://www.steletch.org/spip.php?page=rubrique&id_rubrique=6" rel="directory">Enseignement</a>
<div class='rss_texte'><!--sommaire--><div class="well nav-sommaire nav-sommaire-2" id="nav670a9f7646f227.55460330">
<h2>Sommaire</h2><ol class="spip"><li> <a id="s-Format-de-fichier-3D-des-petites-molecules-et-source"></a><a href="#Format-de-fichier-3D-des-petites-molecules-et-source" class="spip_ancre">Format de fichier 3D des petites molécules et source</a></li><li> <a id="s-Bases-de-donnees-comprenant-les-molecules-au-format-3D"></a><a href="#Bases-de-donnees-comprenant-les-molecules-au-format-3D" class="spip_ancre">Bases de données comprenant les molécules au format 3D</a></li></ol></div><!--/sommaire--><h3 class="spip" id='Format-de-fichier-3D-des-petites-molecules-et-source'>Format de fichier 3D des petites molécules et source<a class='sommaire-back sommaire-back-2' href='#s-Format-de-fichier-3D-des-petites-molecules-et-source' title='Retour au sommaire'></a></h3>
<p>Les ligands ou constituants biologiques sont disponibles dans différentes bases de données, trois formats sont le plus souvent utilisés, en fonction de l'utilisation prévue du ligand :</p>
<ol> <li>le format SDF, attention ce format permet de représenter les molécules en 2D, il faut être vigilant à télécharger la molécule au format « 3D ».</li> <li>le format MOL2</li> <li>le format PDB</li>
</ol>
<p>Il existe de nombreux autres formats pour représenter les petites molécules, ils sont décrits sur la page wikipedia en détail (<a class="spip_url spip_out auto" href='https://en.wikipedia.org/wiki/Chemical_file_format' rel="nofollow external">https://en.wikipedia.org/wiki/Chemical_file_format</a>), le détail de l'organisation de ces fichiers et les principes sous-jascents sont présentés dans uen page dédiée (<a class="spip_url spip_out auto" href='https://en.wikipedia.org/wiki/Chemical_table_file' rel="nofollow external">https://en.wikipedia.org/wiki/Chemical_table_file</a>).</p>
<p>Il est possible de décrire sur une ligne (1D) une formule chimique en suivant les descriptions du format SMILES, présentés sur le site de l'entreprise DayLight (<a class="spip_url spip_out auto" href='https://daylight.com/' rel="nofollow external">https://daylight.com/</a>) ou encore sur wikipedia dans la page décrivant SMILES (<a class="spip_url spip_out auto" href='https://en.wikipedia.org/wiki/Simplified_molecular-input_line-entry_system' rel="nofollow external">https://en.wikipedia.org/wiki/Simplified_molecular-input_line-entry_system</a>).</p>
<h3 class="spip" id='Bases-de-donnees-comprenant-les-molecules-au-format-3D'>Bases de données comprenant les molécules au format 3D<a class='sommaire-back sommaire-back-2' href='#s-Bases-de-donnees-comprenant-les-molecules-au-format-3D' title='Retour au sommaire'></a></h3>
<p>Quand il s'agit de petites molécules (qui seront des ligands des protéines), il est possible d'obtenir directement leurs coordonnées au format <strong>SDF 3D</strong> en allant sur :</p>
<ul> <li>PubChem (<a class="spip_url spip_out auto" href='https://pubchem.ncbi.nlm.nih.gov/' rel="nofollow external">https://pubchem.ncbi.nlm.nih.gov/</a>)</li> <li>ChEMBL (<a class="spip_url spip_out auto" href='https://www.ebi.ac.uk/chembl/' rel="nofollow external">https://www.ebi.ac.uk/chembl/</a>)</li> <li>BindingDB (<a class="spip_url spip_out auto" href='https://www.bindingdb.org/bind/index.jsp' rel="nofollow external">https://www.bindingdb.org/bind/index.jsp</a>)</li>
</ul>
<p> </p>
<p> </p></div>
Découverte du Deep Learning
https://www.steletch.org/spip.php?page=article&id_article=20
https://www.steletch.org/spip.php?page=article&id_article=202023-10-02T20:45:35Ztext/htmlfrStéphane
<p>Cette page recense des ressources liées au domaine de l'apprentissage profond, il s'agit d'un article en évolution constante. <br class='autobr' />
Qu'est-ce qu'un transformer ? <br class='autobr' />
https://ledatascientist.com/a-la-decouverte-du-transformer/ <br class='autobr' />
https://www.openstudio.fr/2022/02/08/fonctionnement-des-transformers-et-leurs-applications/ <br class='autobr' />
https://www.journaldunet.fr/web-tech/guide-de-l-intelligence-artificielle/1508983-transformer-deep-learning/ <br class='autobr' />
BERT (...)</p>
-
<a href="https://www.steletch.org/spip.php?page=rubrique&id_rubrique=1" rel="directory">Science</a>
<div class='rss_texte'><!--sommaire--><div class="well nav-sommaire nav-sommaire-3" id="nav670a9f7653a963.27121426">
<h2>Sommaire</h2><ol class="spip"><li> <a id="s-Qu-est-ce-qu-un-transformer"></a><a href="#Qu-est-ce-qu-un-transformer" class="spip_ancre">Qu'est-ce qu'un transformer ?</a></li><li> <a id="s-BERT"></a><a href="#BERT" class="spip_ancre">BERT</a></li><li> <a id="s-GPT-3-4-5"></a><a href="#GPT-3-4-5" class="spip_ancre">GPT (3, 4, 5, ...</a></li></ol></div><!--/sommaire--><p>Cette page recense des ressources liées au domaine de l'apprentissage profond, il s'agit d'un article en évolution constante.</p>
<h3 class="spip" id='Qu-est-ce-qu-un-transformer'>Qu'est-ce qu'un transformer ?<a class='sommaire-back sommaire-back-3' href='#s-Qu-est-ce-qu-un-transformer' title='Retour au sommaire'></a></h3>
<p><a class="spip_url spip_out auto" href='https://ledatascientist.com/a-la-decouverte-du-transformer/' rel="nofollow external">https://ledatascientist.com/a-la-decouverte-du-transformer/ </a></p>
<p><a class="spip_url spip_out auto" href='https://www.openstudio.fr/2022/02/08/fonctionnement-des-transformers-et-leurs-applications/' rel="nofollow external">https://www.openstudio.fr/2022/02/08/fonctionnement-des-transformers-et-leurs-applications/ </a></p>
<p><a class="spip_url spip_out auto" href='https://www.journaldunet.fr/web-tech/guide-de-l-intelligence-artificielle/1508983-transformer-deep-learning/' rel="nofollow external">https://www.journaldunet.fr/web-tech/guide-de-l-intelligence-artificielle/1508983-transformer-deep-learning/</a></p>
<h3 class="spip" id='BERT'>BERT<a class='sommaire-back sommaire-back-3' href='#s-BERT' title='Retour au sommaire'></a></h3>
<p><a class="spip_url spip_out auto" href='https://lesdieuxducode.com/blog/2019/4/bert--le-transformer-model-qui-sentraine-et-qui-represente' rel="nofollow external">https://lesdieuxducode.com/blog/2019/4/bert—le-transformer-model-qui-sentraine-et-qui-represente</a></p>
<p> </p>
<h3 class="spip" id='GPT-3-4-5'>GPT (3, 4, 5, ...<a class='sommaire-back sommaire-back-3' href='#s-GPT-3-4-5' title='Retour au sommaire'></a></h3>
<p> </p>
<p> </p></div>
XmGrace day-to-day usage
https://www.steletch.org/spip.php?page=article&id_article=18
https://www.steletch.org/spip.php?page=article&id_article=182023-08-17T20:04:32Ztext/htmlenStéphane
<p>Before finding the wonderful XmGrace software, i'd loose time to do calculations, regressions, etc. <br class='autobr' />
With this software, i've been able to do in a more robust manner and more rapidly everything i could do before and much more. <br class='autobr' />
Here are some examples of what i'm using. <br class='autobr' />
Some basics commands i use with XmGrace are detailed below. <br class='autobr' />
Renormalizing a plot (mostly angles between -180 and +180, you want it between 0 and 360 ) <br class='autobr' /> Load your file into xmgrace Go to (...)</p>
-
<a href="https://www.steletch.org/spip.php?page=rubrique&id_rubrique=2" rel="directory">BioInformatique</a>
<div class='rss_texte'><!--sommaire--><div class="well nav-sommaire nav-sommaire-7" id="nav670a9f76640e75.87900423">
<h2>Table of contents</h2><ol class="spip"><li> <a id="s-Renormalizing-a-plot-mostly-angles-between-180-and-180-you-want-it-nbsp"></a><a href="#Renormalizing-a-plot-mostly-angles-between-180-and-180-you-want-it-nbsp" class="spip_ancre">Renormalizing a plot (mostly angles between -180 and +180, you want it between 0 and 360 )</a></li><li> <a id="s-Subpopulation-for-instance-for-an-angle-where-are-the-points-above-a-nbsp"></a><a href="#Subpopulation-for-instance-for-an-angle-where-are-the-points-above-a-nbsp" class="spip_ancre">Subpopulation (for instance for an angle, where are the points above a certain value)</a></li><li> <a id="s-Correlation-between-two-states-for-instance-a-sugar-conformation-and-a-nbsp"></a><a href="#Correlation-between-two-states-for-instance-a-sugar-conformation-and-a-nbsp" class="spip_ancre">Correlation between two states (for instance a sugar conformation and a dihedral angle)</a></li><li> <a id="s-Getting-informations-about-points-mean-std-max-min"></a><a href="#Getting-informations-about-points-mean-std-max-min" class="spip_ancre">Getting informations about points (mean, std, max, min, ...)</a></li><li> <a id="s-Sending-data-through-a-pipe"></a><a href="#Sending-data-through-a-pipe" class="spip_ancre">Sending data through a pipe</a></li><li> <a id="s-Sending-data-through-a-fifo"></a><a href="#Sending-data-through-a-fifo" class="spip_ancre">Sending data through a fifo</a></li><li> <a id="s-Other-sites-with-tips"></a><a href="#Other-sites-with-tips" class="spip_ancre">Other sites with tips</a></li></ol></div><!--/sommaire--><p>Before finding the wonderful XmGrace software, i'd loose time to do calculations, regressions, etc.</p>
<p>With this software, i've been able to do in a more robust manner and more rapidly everything i could do before and much more.</p>
<p>Here are some examples of what i'm using.</p>
<p>Some basics commands i use with XmGrace are detailed below.</p>
<h3 class="spip" id='Renormalizing-a-plot-mostly-angles-between-180-and-180-you-want-it-nbsp'>Renormalizing a plot (mostly angles between -180 and +180, you want it between 0 and 360 )<a class='sommaire-back sommaire-back-7' href='#s-Renormalizing-a-plot-mostly-angles-between-180-and-180-you-want-it-nbsp' title='Back to the table of contents'></a></h3><ol> <li>Load your file into xmgrace</li> <li>Go to Data->Transformations->Evaluate expressions</li> <li>Select G0.S0</li> <li>Fill in the box with :</li>
</ol>
<p>y = y<=0 ? y + 360 : y</p>
<p>It is a basic if then else : y equals the value resulting of the test y<=0. If the test is true then y = y+ 360 otherwise take the y value</p>
<h3 class="spip" id='Subpopulation-for-instance-for-an-angle-where-are-the-points-above-a-nbsp'>Subpopulation (for instance for an angle, where are the points above a certain value)<a class='sommaire-back sommaire-back-7' href='#s-Subpopulation-for-instance-for-an-angle-where-are-the-points-above-a-nbsp' title='Back to the table of contents'></a></h3><ol> <li>Load your file into xmgrace</li> <li>Go to Data->Transformations->Sample points</li> <li>Select the desired set (presumably S0)</li> <li>Change sample type for 'Expression'</li> <li>Fill in the form 'Logical expression' with your needs, for instance y=>50 will select the population where all points are equal or above 50.</li>
</ol><h3 class="spip" id='Correlation-between-two-states-for-instance-a-sugar-conformation-and-a-nbsp'>Correlation between two states (for instance a sugar conformation and a dihedral angle)<a class='sommaire-back sommaire-back-7' href='#s-Correlation-between-two-states-for-instance-a-sugar-conformation-and-a-nbsp' title='Back to the table of contents'></a></h3><ol> <li>Load file1 into xmgrace (it will appear as set 0)</li> <li>Load file2 into xmgrace (it will appear as set 1)</li> <li>Go to Data->Transformations->Evaluate expressions</li> <li>Select g0.s1</li> <li>Fill in the box with :<ul> <li>copy s1 to s2</li> <li>s2.x=s0.y</li> </ul> </li> <li>Accept</li>
</ol>
<p>Go back to the graph, hide s0 and s1, click on As (autoscale), you have your correlation :-) you can now fill in legends, etc.</p>
<h3 class="spip" id='Getting-informations-about-points-mean-std-max-min'>Getting informations about points (mean, std, max, min, ...)<a class='sommaire-back sommaire-back-7' href='#s-Getting-informations-about-points-mean-std-max-min' title='Back to the table of contents'></a></h3><ol> <li>Load your file into xmgrace</li> <li>Go to Edit->Data sets</li> <li>Pick your set, the values will be displayed in the box below (rapid, isn't it ?)</li>
</ol><h3 class="spip" id='Sending-data-through-a-pipe'>Sending data through a pipe<a class='sommaire-back sommaire-back-7' href='#s-Sending-data-through-a-pipe' title='Back to the table of contents'></a></h3>
<p>echo -e "1 2\n2 4\n3 6" |xmgrace -pipe</p>
<h3 class="spip" id='Sending-data-through-a-fifo'>Sending data through a fifo<a class='sommaire-back sommaire-back-7' href='#s-Sending-data-through-a-fifo' title='Back to the table of contents'></a></h3>
<p><strong> Create the fifo</strong></p>
<p>mkfifo fifo.pipe<br />
xmgrace -npipe fifo.pipe</p>
<p><strong> Send the commands through the fifo</strong></p>
<p>echo "read \"data.out\"" > fifo.pipe<br />
echo autoscale > fifo.pipe<br />
echo redraw > fifo.pipe</p>
<h3 class="spip" id='Other-sites-with-tips'>Other sites with tips<a class='sommaire-back sommaire-back-7' href='#s-Other-sites-with-tips' title='Back to the table of contents'></a></h3>
<p> <a class="spip_url spip_out auto" href='http://ringo.ams.sunysb.edu/index.php/Xmgrace' rel="nofollow external">http://ringo.ams.sunysb.edu/index.php/Xmgrace</a></p></div>
Django setup with rdkit for chemoinformatics studies
https://www.steletch.org/spip.php?page=article&id_article=17
https://www.steletch.org/spip.php?page=article&id_article=172023-08-17T18:18:19Ztext/htmlenStéphane
<p>Although Rdkit and Django installation and deployment are well documented independently, it may become rapidly difficult to a newcomer to get a simple rdkit + django implementation working using a real apache backend. This article will detail how they can be implemented and used for a small demonstration application. <br class='autobr' />
Django setup <br class='autobr' />
We will first create our django sample application using virtualenv and pip. <br class='autobr' /> virtualenv venv source venv/bin/activate pip install django==3.2.20 <br class='autobr' />
Now (...)</p>
-
<a href="https://www.steletch.org/spip.php?page=rubrique&id_rubrique=4" rel="directory">SysAdmin</a>
<div class='rss_texte'><!--sommaire--><div class="well nav-sommaire nav-sommaire-4" id="nav670a9f766eb661.84028931">
<h2>Table of contents</h2><ol class="spip"><li> <a id="s-Django-setup"></a><a href="#Django-setup" class="spip_ancre">Django setup</a></li><li> <a id="s-RdKit-installation-http-www-rdkit-org"></a><a href="#RdKit-installation-http-www-rdkit-org" class="spip_ancre">RdKit installation (http://www.rdkit.org)</a></li><li> <a id="s-Testing-rdkit-inside-django"></a><a href="#Testing-rdkit-inside-django" class="spip_ancre">Testing rdkit inside django</a></li><li> <a id="s-Migration-to-apache"></a><a href="#Migration-to-apache" class="spip_ancre">Migration to apache</a></li></ol></div><!--/sommaire--><p>Although Rdkit and Django installation and deployment are well documented independently, it may become rapidly difficult to a newcomer to get a simple rdkit + django implementation working using a real apache backend. This article will detail how they can be implemented and used for a small demonstration application.</p>
<h3 class="spip" id='Django-setup'>Django setup<a class='sommaire-back sommaire-back-4' href='#s-Django-setup' title='Back to the table of contents'></a></h3>
<p>We will first create our django sample application <a href='https://docs.python-guide.org/dev/virtualenvs/' target="_blank">using virtualenv and pip</a>.</p>
<div class="precode">
<pre> <code>virtualenv venv source venv/bin/activate pip install django==3.2.20</code></pre>
</div>
<p>Now that the minimum requirements are met, it is time to start a new project called <strong>chemoinformaticsDemo</strong>.</p>
<div class="python">
<pre> <code>django-admin startproject chemoinformaticsDemo</code></pre>
</div>
<p>This will install django files and a subdirectory called again chemoinformaticsDemo where the projects settings will have to be updated. For now we can keep it as is.</p>
<p>At this point we only need some dirs that will be filled in later.</p>
<div class="precode">
<pre> <code>cd chemoinformaticsDemo mkdir static mkdir chemoinformaticsDemo/templates</code></pre>
</div>
<p>There is now the default infrastructure for the django project (without rdkit calls, see below). In order to get a proper django setup, we need to initalize the database for django models, mostly for authentication management at this step.</p>
<p>This will install django files and a subdirectory called again chemoinformaticsDemo where the projects settings will have to be updated. For now we can keep it as is.</p>
<p>At this point we only need some dirs that will be filled in later.</p>
<div class="precode">
<pre> <code>cd chemoinformaticsDemo mkdir static mkdir chemoinformaticsDemo/templates</code></pre>
</div>
<p>There is now the default infrastructure for the django project (without rdkit calls, see below). In order to get a proper django setup, we need to initalize the database for django models, mostly for authentication management at this step.</p>
<div class="precode">
<pre> <code class="python">python manage.py makemigrations python manage.py migrate</code></pre>
</div>
<p>It you are really impatient, you can already start your application in the developper mode using:</p>
<div class="precode">
<pre> <code class="python">python manage.py runserver</code></pre>
</div>
<p>To see the result you can fire up your browser and point to the location</p>
<div class="precode">
<pre> <code>http://localhost:8000</code></pre>
</div>
<p>To get something more specific, you can add a template in chemoinformaticsDemo/templates, for instance called base.html.</p>
<div class="precode">
<pre> <code class="html">chemoinformaticsDemo/templates/base.html <html lang="en"> <head> <meta charset="utf-8"> </head> <body> This is the starting page of the project. <div id="content"> {% block content %}{% endblock content %} </div> </body> </html> </code></pre>
</div>
<p>This page will be displayed via the urls mapping in django, so you have to specify a simple urls.py and views.py, as exemplified after.</p>
<div class="precode">
<pre> <code>chemoinformaticsDemo/urls.py from django.conf.urls import patterns, include, url from django.conf import settings from django.contrib import admin admin.autodiscover() urlpatterns = ( url(r'^$','chemoinformaticsDemo.views.home', name='home'), url(r'^admin/', include(admin.site.urls)), ) </code></pre>
</div>
<p>The corresponding views.py will be called from this url redirection.</p>
<div class="precode">
<pre> <code> chemoinformaticsDemo/views.py from django.shortcuts import render from django.conf import settings def home(request): return render(request, 'home.html') </code></pre>
</div>
<p>If you refresh the previously opened http page, you should now get a small message welcoming you:</p>
<div class="precode">
<pre> <code> This is the starting page of the project. </code></pre>
</div>
<p>It is now time to add some content to the project, and especially to link rdkit with django.</p>
<h3 class="spip" id='RdKit-installation-http-www-rdkit-org'>RdKit installation (<a href="http://www.rdkit.org" class="spip_url spip_out auto" rel="nofollow external">http://www.rdkit.org</a>)<a class='sommaire-back sommaire-back-4' href='#s-RdKit-installation-http-www-rdkit-org' title='Back to the table of contents'></a></h3>
<p>This installation was performed on Ubuntu 14.04.4 LTS 64bits.</p>
<p>First download the latest rdkit tarball. ( <a href="https://sourceforge.net/projects/rdkit/files/latest/download" class="spip_url spip_out auto" rel="nofollow external">https://sourceforge.net/projects/rdkit/files/latest/download</a> )<br class='autobr' />
Decompress the archive, enter the rdkit directory and create a build directory, then use default options, except for the rdkit installation location:</p>
<div class="precode">
<pre> <code> cd /opt tar -zxvf RDKit_2016_03_1.tgz cd rdkit-Release_2016_03_1 mkdir build cd build sudo cmake .. sudo make install </code></pre>
</div>
<p>You will need sudo / root rights to write to the /opt directory.</p>
<p>It is important to have rdkit paths available system-wide so Apache will also be able to find it properly. The easiest way is to indicate to the system where it should search for rdkit libraries. This is done by adding a file in the linker directory, in /etc/ld.so.conf.d/ (<a href="https://howtolamp.com/articles/adding-shared-libraries-to-system-library-path/" class="spip_url spip_out auto" rel="nofollow external">https://howtolamp.com/articles/adding-shared-libraries-to-system-library-path/</a>). We can create a simple file called rdkit.conf, and update the dynamic loader cache to have rdkit included properly. In short:</p>
<div class="precode">
<pre> <code> sudo echo "/opt/rdkit-Release_2016_03_1/lib" > /etc/ld.so.conf.d/rdkit.conf sudo ldconfig </code></pre>
</div>
<p>If you want to be sure the library search now contains the RdKit path, just grep for it.</p>
<div class="precode">
<pre> <code> grep -i rdkit /etc/ld.so.cache Binary file /etc/ld.so.cache matches </code></pre>
</div>
<p>You also need that rdkit is available for python programs out of you django environment.</p>
<div class="precode">
<pre> <code> Python 2.7.6 (default, Jun 22 2015, 17:58:13) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path.append('/opt/RDkit_2016_03_1') >>> from rdkit import Chem >>> quit() </code></pre>
</div>
<p><strong>Please note that the /lib directory is not present</strong> in the sys.path.append command because python bindings are present at the RDkit root.</p>
<h3 class="spip" id='Testing-rdkit-inside-django'>Testing rdkit inside django<a class='sommaire-back sommaire-back-4' href='#s-Testing-rdkit-inside-django' title='Back to the table of contents'></a></h3>
<p>Now that everything is in place, we can test a simple but functionnal application. First we create a dedicated application called <strong>rdkitDemo</strong> (and not simply rdkit otherwise there will be namespace collisions).</p>
<div class="precode">
<pre> <code> python manage.py startapp rdkitDemo mkdir rdkitDemo/templates </code></pre>
</div>
<p>You need to edit the chemoinformaticsDemo/settings.py to add to "INSTALLED_APPS" <strong>rdkitDemo</strong> (using any text editor).<br class='autobr' />
Now django has to take into account this new application, so migrate existing tables.</p>
<div class="precode">
<pre> <code> python manage.py makemigrations python manage.py migrate </code></pre>
</div>
<p>Up-to-now since no modifications were made to the models (and therefore to the tables) there should be no error messages and no migrations detected.<br class='autobr' />
To enrich you django project, we will add new urls to take into account <strong>rdkitDemo</strong> and add a sample html file for showing a simple demonstration of rkdit.</p>
<div class="precode">
<pre> <code> update to chemoinformaticsDemo/urls.py from django.conf.urls import patterns, include, url from django.conf import settings from django.contrib import admin admin.autodiscover() urlpatterns = ( url(r'^$','essai.views.home', name='home'), url(r'^admin/', include(admin.site.urls)), {{url(r'^rdkit/', include('rdkitDemo.urls')),}} ) </code></pre>
</div>
<p>The corresponding entry in the new application involves its own urls.py file.</p>
<div class="precode">
<pre> <code> rdkitDemo/urls.py from django.conf.urls import patterns, include, url from django.contrib import admin urlpatterns = patterns('', url(r'^demo', 'rdkitDemo.views.simple_example', name='rdkit_simple_example'), ) </code></pre>
</div>
<p>We can now set up a small demonstration of what can be accomplished with rdkit, for instance computing the 2D coordinates of beta galactose from its SMILES description in pubchem, and optimize its geometry in 3D (<a href="https://pubchem.ncbi.nlm.nih.gov/compound/beta-D-galactose" class="spip_url spip_out auto" rel="nofollow external">https://pubchem.ncbi.nlm.nih.gov/compound/beta-D-galactose</a>). The generated molecule will be transformed into a 2D plot stored on the disk.</p>
<p>To store the PNG file, add a subdirectory to the <strong>static</strong> directory seen above.</p>
<div class="precode">
<pre> <code> mkdir static/demo chmod 777 static/demo </code></pre>
</div>
<p><strong>Important Note:</strong> the chmod will be used later, this is not mandatory for now and should also NOT be done on a production server...</p>
<p>Now that everything is in place, we can add the necessary files in rdkitDemo.</p>
<div class="precode">
<pre> <code> rdkitDemo/views.py from django.shortcuts import render from django.conf import settings from rdkit import Chem from rdkit.Chem import AllChem from rdkit import DataStructs from rdkit.Chem.Fingerprints import FingerprintMols from rdkit.Chem import Draw from PIL import Image # Create your views here. def simple_example(request): smiles_data='C([C@@H]1[C@@H]([C@@H]([C@H]([C@@H](O1)O)O)O)O)O' m = Chem.MolFromSmiles(smiles_data) # Code SMILES issu de pubchem # data=Chem.MolToMolBlock(m) # Unused, not pretty to display (yet) # 3D conversion and optimization m2=Chem.AddHs(m) AllChem.EmbedMolecule(m2) AllChem.MMFFOptimizeMolecule(m2) # more complex, better? # AllChem.UFFOptimizeMolecule(m) # faster, less stronger :-) Draw.MolToFile(m,settings.BASE_DIR+'/static/demo/test.png') toto=FingerprintMols.FingerprintMol(m) # not used return render(request,'demo.html', {'data':smiles_data}) </code></pre>
</div>
<p>To display the result of the view, a new template is created, based on the <strong>base.html</strong> file already available.</p>
<div class="precode">
<pre> <code> rdkitDemo/templates/demo.html {% extends "base.html" %} {% load static %} {% block title %}Simple rdkit Demo{% endblock title %} {% block content %} Welcome to this demo project for the molecule described by {{ data }}.<br /> <img src="{% static 'demo/test.png' %}" alt="Image générée" /> <footer style="text-align:right"> <a href="{% url 'home' %}">Back</a> </footer> {% endblock content %} </code></pre>
</div>
<p>If everything worked perfectly until here, you can start again your django project in developper mode, pay attention to update your manage.py file to extend the system path for rdkit. Pay also attention to spaces above if you copy/paste the code since python uses spaces (or abs) to indent the code and determine logical blocks.</p>
<div class="precode">
<pre> <code> manage.py #!/usr/bin/env python import os import sys if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "essai.settings") sys.path.append('/opt/RDkit_2016_03_1') from django.core.management import execute_from_command_line execute_from_command_line(sys.argv) </code></pre>
</div>
<p>You should now get a working rdkit + django installation in the developper mode for django.</p>
<div class="precode">
<pre> <code> (venv)python manage.py runserver </code></pre>
</div>
<p><strong>Reminder:</strong> we are still in the virtualenvironment created at the beginning. If you get errors about PIL not found, just add it using pip, and do the same for any missing dependencies.</p>
<div class="precode">
<pre> <code> pip install Pillow </code></pre>
</div>
<p>Only one step is needed to migrate this small application to a real server available for the community.</p>
<h3 class="spip" id='Migration-to-apache'>Migration to apache<a class='sommaire-back sommaire-back-4' href='#s-Migration-to-apache' title='Back to the table of contents'></a></h3>
<p>If everything is is place, you can now configure apache to use your virtual environment and rkdit. Assuming the virtual environment was stored in <strong>/home/stephane/example</strong>, one needs to write the following apache configuration file.</p>
<div class="precode">
<pre> <code> /etc/apache2/sites-available/rdkitDemo.conf <VirtualHost *:80> ServerName localhost ServerAlias localhost # Very important, see https://code.google.com/archive/p/modwsgi/wikis/ApplicationIssues.wiki#Python_Simplified_GIL_State_API WSGIApplicationGroup %{GLOBAL} # https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/ WSGIDaemonProcess essaiRdkit python-path=/home/stephane/example/chemoinformaticsDemo:/opt/RDkit_2016_03_1/:/home/stephane/example/chemoinformaticsDemo/django1.8/lib/python2.7/site-packages display-name=essaiRdkit WSGIProcessGroup essaiRdkit WSGIScriptAlias /essai '/home/stephane/example/chemoinformaticsDemo/chemoinformaticsDemo//wsgi.py' <Directory /home/stephane/example/chemoinformaticsDemo/> WSGIProcessGroup essaiRdkit <Files wsgi.py> Options +ExecCGI -MultiViews +FollowSymLinks AllowOverride None Require all granted </Files> </Directory> Alias /static /home/stephane/example/chemoinformaticsDemo/static/ <Location /static/> WSGIProcessGroup essaiRdkit Options -Indexes +FollowSymLinks Require all granted </Location> # Pour séparer les bons logs de l'ivraie ErrorLog ${APACHE_LOG_DIR}/djangoprojects-error.log CustomLog ${APACHE_LOG_DIR}/djangoprojects-access.log combined </VirtualHost> </code></pre>
</div>
<p><strong>Remember</strong> that we opened the door for apache writing with the <strong>chmod 777 to the demo subdir before</strong>, THIS HAS TO BE CHANGED using a proper location for <i>www-data</i> user access...</p>
<p>Everything is now in place, activate the new virtual apache environment and reload apache configuration.</p>
<div class="precode">
<pre> <code> udo a2ensite rdkitDemo sudo service apache2 reload </code></pre>
</div>
<p>You should now have a great django web site to play with, just integrate your rdkit applications!<br class='autobr' />
To ensure everything is up and running, open your brower to the location</p>
<div class="precode">
<pre> <code> http://localhost/essai/ </code></pre>
</div>
<p>In case you will be in trouble, check apache logs in <strong>/var/log/apache2/djangoprojects-error.log</strong>, they are isolated to better identify mistakes and / or copy/pasting errors.<br class='autobr' />
Enjoy.</p></div>
DockNmine, a Web Portal to Assemble and Analyse Virtual and Experimental Interaction Data
https://www.steletch.org/spip.php?page=article&id_article=16
https://www.steletch.org/spip.php?page=article&id_article=162023-08-17T16:19:55Ztext/htmlenStéphane
<p>My latest article is published online, its objectives are to assemble virtual and experimental data on public and private ligands, in order to provide a broader overview of the performance of virtual screening studies. <br class='autobr' />
You can find the complete article online, do not hesitate to contact me for further explanations, demands, comments, etc. <br class='autobr' />
You can also browse it directly at the webserver address http://www.ufip.univ-nantes.fr/tools/docknmine. <br class='autobr' />
Enjoy!</p>
-
<a href="https://www.steletch.org/spip.php?page=rubrique&id_rubrique=5" rel="directory">Articles</a>
<div class='rss_texte'><p>My latest article is published online, its objectives are to assemble virtual and experimental data on public and private ligands, in order to provide a broader overview of the performance of virtual screening studies.</p>
<p>You can find the <a href='https://www.mdpi.com/1422-0067/20/20/5062' target="_blank">complete article online</a>, do not hesitate to contact me for further explanations, demands, comments, etc.</p>
<p>You can also browse it directly at the webserver address <a class="spip_url spip_out auto" href='http://www.ufip.univ-nantes.fr/tools/docknmine' rel="nofollow external">http://www.ufip.univ-nantes.fr/tools/docknmine</a>.</p>
<p>Enjoy!</p></div>
What's in a (Red Blood) Cell?
https://www.steletch.org/spip.php?page=article&id_article=15
https://www.steletch.org/spip.php?page=article&id_article=152023-08-17T16:09:07Ztext/htmlenStéphane
<p>The red blood cell is a metabolically-driven cell where protein synthesis or dna material is no more available. This specific cell is essential for life, and a tremendous amount of work has been performed to decipher the complexity of RBC during the cell differentiation process and its entire lifespan. <br class='autobr' />
Red blood cells contain a very large amount of hemoglobin, essential for breathing, involved in oxygen transport and exchange. This mechanism is understood in detail but there is a lot of (...)</p>
-
<a href="https://www.steletch.org/spip.php?page=rubrique&id_rubrique=5" rel="directory">Articles</a>
<div class='rss_texte'><p>The red blood cell is a metabolically-driven cell where protein synthesis or dna material is no more available. This specific cell is essential for life, and a tremendous amount of work has been performed to decipher the complexity of RBC during the cell differentiation process and its entire lifespan.</p>
<p>Red blood cells contain a very large amount of hemoglobin, essential for breathing, involved in oxygen transport and exchange. This mechanism is understood in detail but there is a lot of other proteins where their exact role and function are not described in as much details.</p>
<p>In order to provide a review of red blood cell content, in order to get a broader understanding of diseases and antigens linked to erythrocyte, we have set up a database of the red blood cell proteome assembling data (i) from various reference sources, (ii) incoporating protein three-dimensional structures (existing ones) or protein models (genuinely produced for the database).</p>
<p>You can find the details of this database in our recently published article <a href='https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0211043' target="_blank"><strong>Repository of Enriched Structures of Proteins Involved in the Red Blood Cell Environment (RESPIRE). Téletchéa S, Santuz H, Léonard S, Etchebest C. (2019). PLOS ONE 14(2) : e0211043".</strong></a></p>
<p>The database itself is freely accessible online: <a href='https://www.dsimb.inserm.fr/respire/' target="_blank">RESPIRE</a>.</p>
<p>Enjoy !</p></div>