<?xml 
version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://www.steletch.org/spip.php?page=backend.xslt" ?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>Molecular Modelling and GNU/Linux</title>
	<link>https://www.steletch.org/</link>
	<description></description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://www.steletch.org/spip.php?page=backend" rel="self" type="application/rss+xml" />

	<image>
		<title>Molecular Modelling and GNU/Linux</title>
		<url>https://www.steletch.org/local/cache-vignettes/L144xH82/dall.e_2024-12-12_22.09.02_-_a_cheerful_cartoon-style_penguin_resembling_the_gnu_linux_mascot_tux_depicted_happily_gazing_at_a_thought_bubble_above_its_head__inside_the_thought_-61205.webp?1734078381</url>
		<link>https://www.steletch.org/</link>
		<height>82</height>
		<width>144</width>
	</image>



<item xml:lang="fr">
		<title>R&#233;cup&#233;rer les donn&#233;es d'une page internet avec Python</title>
		<link>https://www.steletch.org/spip.php?page=article&amp;id_article=33</link>
		<guid isPermaLink="true">https://www.steletch.org/spip.php?page=article&amp;id_article=33</guid>
		<dc:date>2026-04-22T09:44:43Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>S. T&#233;letch&#233;a</dc:creator>



		<description>
&lt;p&gt;En bioinformatique, il est courant de devoir r&#233;cup&#233;rer les informations de diff&#233;rents endroits pour les recouper et les organiser diff&#233;remment. Par exemple, une liste de g&#232;nes d'int&#233;r&#234;t peut &#234;tre identifi&#233;e sur le site du National Center for Biotechnology Information (NCBI)) sont disponibles sur le site du [Broad Institute : Genome Aggregration Database (gnomAD)-&gt;https://gnomad.broadinstitute.org. Dans cette derni&#232;re base de donn&#233;es, la diversit&#233; des s&#233;quences de chacun de nos g&#232;nes est (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.steletch.org/spip.php?page=rubrique&amp;id_rubrique=6" rel="directory"&gt;Enseignement&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-9&#034; id=&#034;nav69e96df135eaf3.90678413&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Python-requests-et-BeautifulSoup&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Python-requests-et-BeautifulSoup&#034; class=&#034;spip_ancre&#034;&gt;Python, requests et BeautifulSoup&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Acceder-aux-informations-biologiques&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Acceder-aux-informations-biologiques&#034; class=&#034;spip_ancre&#034;&gt;Acc&#233;der aux informations biologiques&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Organisation-d-une-page-internet-web&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Organisation-d-une-page-internet-web&#034; class=&#034;spip_ancre&#034;&gt;Organisation d'une page internet (web)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Cas-pratique-lister-toutes-les-maladies-genetiques-a-gene-identifie&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Cas-pratique-lister-toutes-les-maladies-genetiques-a-gene-identifie&#034; class=&#034;spip_ancre&#034;&gt;Cas pratique : lister toutes les maladies g&#233;n&#233;tiques &#224; g&#232;ne identifi&#233;&lt;/a&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Version-1-telechargement-de-la-page-avec-requests&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Version-1-telechargement-de-la-page-avec-requests&#034; class=&#034;spip_ancre&#034;&gt;Version 1 : t&#233;l&#233;chargement de la page avec requests&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Version-2-analyser-le-code-HTML-avec-BeautifulSoup&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Version-2-analyser-le-code-HTML-avec-BeautifulSoup&#034; class=&#034;spip_ancre&#034;&gt;Version 2 : analyser le code HTML avec BeautifulSoup&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Version-3-exporter-le-resultat-dans-un-fichier-Microsoft-Excel&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Version-3-exporter-le-resultat-dans-un-fichier-Microsoft-Excel&#034; class=&#034;spip_ancre&#034;&gt;Version 3 : exporter le r&#233;sultat dans un fichier Microsoft Excel&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Dependances-et-utilisation-du-programme-V3&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Dependances-et-utilisation-du-programme-V3&#034; class=&#034;spip_ancre&#034;&gt;D&#233;pendances et utilisation du programme V3&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Pour-aller-plus-loin&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Pour-aller-plus-loin&#034; class=&#034;spip_ancre&#034;&gt;Pour aller plus loin&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;En bioinformatique, il est courant de devoir r&#233;cup&#233;rer les informations de diff&#233;rents endroits pour les recouper et les organiser diff&#233;remment. Par exemple, une liste de g&#232;nes d'int&#233;r&#234;t peut &#234;tre identifi&#233;e sur le site du &lt;a href=&#034;https://www.ncbi.nlm.nih.gov/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;i&gt;National Center for Biotechnology Information&lt;/i&gt; (NCBI)&lt;/a&gt;. Les maladies associ&#233;es &#224; ces g&#232;nes vont &#234;tre disponibles sur le site &lt;a href=&#034;https://omim.org/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;i&gt;Online Mendellian Inheritance In Men&lt;/i&gt; (OMIM)&lt;/a&gt;. Gr&#226;ce aux projets de s&#233;quen&#231;age &#224; haut d&#233;bit, les changements nucl&#233;otidiques simples (&lt;a href=&#034;https://www.genome.gov/genetics-glossary/Single-Nucleotide-Polymorphisms-SNPs&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;i&gt;Single Nucleotide Polymorphism&lt;/i&gt;&lt;/a&gt;) sont disponibles sur le site du &lt;a href=&#034;https://gnomad.broadinstitute.org/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;i&gt;Broad Institute : Genome Aggregration Database (gnomAD)&lt;/i&gt;&lt;/a&gt;. Dans cette derni&#232;re base de donn&#233;es, la diversit&#233; des s&#233;quences de chacun de nos g&#232;nes est d&#233;crite, mais la cons&#233;quence de ces changements nucl&#233;otidiques est souvent inconnue. Pour terminer cette introduction rapide sur les sources de donn&#233;es, il faut noter que les donn&#233;es sur les prot&#233;ines vont &#234;tre accessibles sur le site &lt;a href=&#034;https://www.uniprot.org/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;UniProt&lt;/a&gt; et que les structures des prot&#233;ines vont &#234;tre disponibles sur la &lt;a href=&#034;https://www.rcsb.org/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;&lt;i&gt;Protein Data Bank&lt;/i&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;En pratique, cela veut dire que l'on peut r&#233;cup&#233;rer beaucoup d'informations de mani&#232;re assez rapide, en se rendant sur chacun des sites un par un, puis en recoupant celles-ci dans un fichier texte ou dans un tableur. Ce travail est essentiel en biologie, mais tr&#232;s vite fastidieux, car il existe plusieurs all&#232;les d'un g&#232;ne, au moins une dizaine de SNP par all&#232;le, au moins une prot&#233;ine par all&#232;le, et tr&#232;s fr&#233;quemment plusieurs structures du m&#234;me g&#232;ne, par exemple de la prot&#233;ine libre et de la prot&#233;ine li&#233;e &#224; une petite mol&#233;cule ou &#224; un autre partenaire prot&#233;ique. Dans ce cas, cela devient tr&#232;s vite compliqu&#233; d'assembler de mani&#232;re claire ces informations. C'est l&#224; que python intervient.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Python-requests-et-BeautifulSoup'&gt;Python, requests et BeautifulSoup&lt;a class='sommaire-back sommaire-back-9' href='#s-Python-requests-et-BeautifulSoup' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Le langage python a &#233;t&#233; invent&#233; par Guido van Rossum pour enseigner l'informatique. La courbe d'apprentissage du langage est rapide, car sa syntaxe est claire et concise. Il est possible d'&#233;crire un programme sous forme de suite d'instructions &#224; r&#233;aliser, mais tr&#232;s vite, il est plus clair d'organiser chaque &#233;l&#233;ment en fonction, ce qui va permettre de r&#233;utiliser des &#233;l&#233;ments du code.&lt;/p&gt;
&lt;p&gt;Quand certaines fonctions couvrent des besoins qui vont &#234;tre transversaux, que chaque d&#233;veloppeuse ou d&#233;veloppeur va utiliser, les auteurs de ces fonctions les regroupent dans des paquets python que l'on va pouvoir appeler en d&#233;but de notre programme pour les utiliser.&lt;/p&gt;
&lt;p&gt;La librairie &lt;a href=&#034;https://docs.python-requests.org/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;requests&lt;/a&gt; permet de r&#233;cup&#233;rer le contenu d'une page internet, mais aussi d'interagir avec, par exemple pour remplir et envoyer un formulaire automatiquement.&lt;/p&gt;
&lt;p&gt;La librairie &lt;a href=&#034;https://beautiful-soup-4.readthedocs.io&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;beautifulsoup&lt;/a&gt; permet de parcourir le contenu d'une page internet qui a &#233;t&#233; t&#233;l&#233;charg&#233;e, d'analyser sa structure, et de r&#233;cup&#233;rer des &#233;l&#233;ments selon un mot-cl&#233;, une balise (&lt;i&gt;tag&lt;/i&gt;) ou tout autre &#233;l&#233;ment remarquable.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Acceder-aux-informations-biologiques'&gt;Acc&#233;der aux informations biologiques&lt;a class='sommaire-back sommaire-back-9' href='#s-Acceder-aux-informations-biologiques' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;La plupart du temps, les sites indiqu&#233;s ci-dessus vont fournir une interface d'interrogation programmatique, ou &lt;i&gt;Application Programming Interface : &lt;strong&gt;API&lt;/strong&gt;&lt;/i&gt;, qui permet de communiquer directement avec le site d'int&#233;r&#234;t. Pour UniProt il est ainsi possible de r&#233;cup&#233;rer la s&#233;quence d'une prot&#233;ine directement via un lien, comme cela est indiqu&#233; dans la documentation officielle ici : &lt;a href=&#034;https://www.uniprot.org/help/api&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;https://www.uniprot.org/help/api&lt;/a&gt;. Pour chacun des autres sites mentionn&#233;s, il faudra utiliser une syntaxe sp&#233;cifique, mais le principe est le m&#234;me, une mani&#232;re d'acc&#233;der &#224; une information pr&#233;cise est &lt;strong&gt;pr&#233;vue&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Dans la suite de l'article, nous allons traiter un cas g&#233;n&#233;rique pour illustrer comment python peut nous aider dans l'extraction de donn&#233;es sur des pages g&#233;n&#233;riques.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Organisation-d-une-page-internet-web'&gt;Organisation d'une page internet (web)&lt;a class='sommaire-back sommaire-back-9' href='#s-Organisation-d-une-page-internet-web' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Une page internet est un document texte organis&#233;e avec des &#233;l&#233;ments ouvrants et fermants pour d&#233;finir du contenu &#224; interpr&#233;ter par le navigateur web ou &#224; afficher pour l'utilisateur. Chaque balise, que l'on traduit donc par markup en Anglais, va avoir un r&#244;le unique, indiqu&#233; rapidement ci-dessous :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; balise p : sert &#224; d&#233;limiter un &#233;l&#233;ment de paragraphe. Un paragraphe va correponsdre &#224; un bloc de texte qui se termine par un retour &#224; la ligne forc&#233;. Utilisation : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;p&gt;le texte&lt;/p&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt; balise b : sert &#224; indiquer un &#233;l&#233;ment en gras (&lt;strong&gt;bold&lt;/strong&gt; en Anglais). Utilisation : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;b&gt;le texte&lt;/b&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt; balise i : sert &#224; mettre un &#233;l&#233;ment en italique. Utilisation : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;i&gt;le texte&lt;/i&gt;&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Il existe d'autres balises (head, body, h1, h2, ...) qui servent &#224; d&#233;limiter d'autres &#233;l&#233;ments de la page, qui ne sont pas d&#233;taill&#233;es ici. Pour une liste plus compl&#232;te, il vaut mieux se r&#233;f&#233;rer aux sites &#233;tablis (&lt;a href=&#034;https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Il est possible de retenir que l'ensemble d'une page internet est consitu&#233;e d'un bloc principal d&#233;fini par la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;html&gt; ... contenu ... &lt;/html&gt;&lt;/code&gt;, qu'&#224; l'int&#233;rieur de ce bloc se situent deux autres blocs, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;head&gt; ... diverses commandes ... &lt;/head&gt;&lt;/code&gt; qui contient les instructions pour le navigateur, les &#233;lements de style et l'appel aux biblioth&#232;ques javascript, et enfin la partie du corps de la page celle qui est visible pour l'utilisateur, d&#233;finie par la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;body&gt; ... contenu visibile pour l'utilisateur ... &lt;/body&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;La complexit&#233; de lecture d'une page web par un humain vient du fait que ces balises sont imbriqu&#233;es les unes dans les autres, et que souvent les espaces sont enlev&#233;s pour optimiser le chargement et l'interpr&#233;tation des pages.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Cas-pratique-lister-toutes-les-maladies-genetiques-a-gene-identifie'&gt;Cas pratique : lister toutes les maladies g&#233;n&#233;tiques &#224; g&#232;ne identifi&#233;&lt;a class='sommaire-back sommaire-back-9' href='#s-Cas-pratique-lister-toutes-les-maladies-genetiques-a-gene-identifie' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Une page wikip&#233;dia recense des maladies o&#249; un g&#232;ne unique est li&#233; &#224; une maladie : &lt;a href=&#034;https://fr.wikipedia.org/wiki/Liste_des_maladies_g%C3%A9n%C3%A9tiques_%C3%A0_g%C3%A8ne_identifi%C3%A9&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;https://fr.wikipedia.org/wiki/Liste_des_maladies_g%C3%A9n%C3%A9tiques_%C3%A0_g%C3%A8ne_identifi%C3%A9&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Cette liste est affich&#233;e sous forme d'un tableau qui a comme titres de colonnes :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Nom&lt;/li&gt;&lt;li&gt; OMIM&lt;/li&gt;&lt;li&gt; Transmission&lt;/li&gt;&lt;li&gt; Chromosome&lt;/li&gt;&lt;li&gt; Type de mutation&lt;/li&gt;&lt;li&gt; G&#232;ne en cause&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ce tableau est d&#233;fini en HTML par la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;table&gt; contenu du tableau &lt;/table&gt;&lt;/code&gt;, chaque ligne du tableau est d&#233;finie avec la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;tr&gt; ... contenu de la ligne ... &lt;/tr&gt;&lt;/code&gt; puis chaque cellule est d&#233;limit&#233;e par la balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;td&gt; contenu de la cellule ... &lt;/td&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Il est possible de voir l'organisation du tableau en faisant un clic droit sur la page et en choisissant l'entr&#233;e de menu &#034;Afficher le code source de la page&#034;.&lt;/p&gt;
&lt;p&gt;Nous allons maintenant utiliser python pour r&#233;cup&#233;rer le contenu de la page et transformer le tableau en donn&#233;es exploitables. A ce stade, il faut noter qu'il est aussi possible de ne s&#233;lectionner &#224; la souris que le tableau et de le copier dans un tableur (Microsoft Excel, LibreOffice Calc, etc) qui devrait reconna&#238;tre le format et r&#233;cup&#233;rer les &#233;l&#233;ments (le temps de traitement peut &#234;tre un peu long).&lt;/p&gt;
&lt;h4 class=&#034;spip&#034; id='Version-1-telechargement-de-la-page-avec-requests'&gt;Version 1 : t&#233;l&#233;chargement de la page avec requests&lt;a class='sommaire-back sommaire-back-9' href='#s-Version-1-telechargement-de-la-page-avec-requests' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Nous allons utiliser la librairie requests pour t&#233;l&#233;charger en local le texte de la page.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;python&#034; class='spip_code spip_code_block language-python' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#!/usr/bin/env python3 from bs4 import BeautifulSoup import requests import sys def telecharge_url(url): &#034;&#034;&#034; T&#233;l&#233;charge une page distante avec la biblioth&#232;que requests et renvoie le contenu au format texte https://www.w3schools.com/python/module_requests.asp &#034;&#034;&#034; # Wikipedia demande un User Agent headers = {&#034;User-Agent&#034;: &#034;Mozilla/5.0&#034;} html = requests.get(url,headers=headers) # print(f&#034;Contenu de la page \n:{html}&#034;) return html def main(): # R&#233;cup&#233;ration des donn&#233;es # Liste des maladies g&#233;n&#233;tiques avec un g&#232;ne identifi&#233; lien = &#034;https://fr.wikipedia.org/wiki/Liste_des_maladies_g%C3%A9n%C3%A9tiques_%C3%A0_g%C3%A8ne_identifi%C3%A9&#034; page = telecharge_url(lien) if __name__ == &#034;__main__&#034;: main() &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 class=&#034;spip&#034; id='Version-2-analyser-le-code-HTML-avec-BeautifulSoup'&gt;Version 2 : analyser le code HTML avec BeautifulSoup&lt;a class='sommaire-back sommaire-back-9' href='#s-Version-2-analyser-le-code-HTML-avec-BeautifulSoup' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h4&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;python&#034; class='spip_code spip_code_block language-python' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#!/usr/bin/env python3 from bs4 import BeautifulSoup import requests import sys def telecharge_url(url): &#034;&#034;&#034; T&#233;l&#233;charge une page distante avec la biblioth&#232;que requests et renvoie le contenu au format texte https://www.w3schools.com/python/module_requests.asp &#034;&#034;&#034; # Wikipedia demande un User Agent headers = {&#034;User-Agent&#034;: &#034;Mozilla/5.0&#034;} html = requests.get(url,headers=headers).text # print(f&#034;Contenu de la page \n:{html}&#034;) return html def analyse_page(page): &#034;&#034;&#034; Analyse le contenu d'une page web pour r&#233;cup&#233;rer ce qui correspond &#224; une balise sp&#233;cifique Renvoie une liste &#224; partir du tableau de donn&#233;es Documentation : thunderbit.com/fr/blog/beautifulsoup-in-python &#034;&#034;&#034; data=[] # Analyser la page avec beautifulsoup soup = BeautifulSoup(page, 'html.parser') # R&#233;cup&#233;rer tous les tableaux tables = soup.find_all('table') # Extraire les donn&#233;es de chaque tableau for t in tables: # Lire chaque ligne trouv&#233;e for ligne in t.find_all('tr'): # Lire chaque cellule de la ligne cellules = ligne.find_all('td') # Transformer la ligne de cellules en liste l = [c.text.strip() for c in cellules] try: if l[5] != '' and l[0] != 'Nom': data.append(l) except: # The table has no disease data pass return data def main(): # R&#233;cup&#233;ration des donn&#233;es # Liste des maladies g&#233;n&#233;tiques avec un g&#232;ne identifi&#233; lien = &#034;https://fr.wikipedia.org/wiki/Liste_des_maladies_g%C3%A9n%C3%A9tiques_%C3%A0_g%C3%A8ne_identifi%C3%A9&#034; page = telecharge_url(lien) liste = analyse_page(page) print(liste) if __name__ == &#034;__main__&#034;: main() &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 class=&#034;spip&#034; id='Version-3-exporter-le-resultat-dans-un-fichier-Microsoft-Excel'&gt;Version 3 : exporter le r&#233;sultat dans un fichier Microsoft Excel&lt;a class='sommaire-back sommaire-back-9' href='#s-Version-3-exporter-le-resultat-dans-un-fichier-Microsoft-Excel' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;La libraire &lt;a href=&#034;https://pandas.pydata.org/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;PANDAS&lt;/a&gt; permet d'exporter des donn&#233;es dans un fichier excel. Pour manipuler les donn&#233;es, elle repr&#233;sente celles-ci sous une forme de feuille de calcul (&lt;i&gt;DataFrame&lt;/i&gt;), ce qui permet d'acc&#233;der rapidement &#224; de nombreuses fonctions, comme l'export de fichier au format excel.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;python&#034; class='spip_code spip_code_block language-python' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#!/usr/bin/env python3 from bs4 import BeautifulSoup import pandas as pd import requests import sys def telecharge_url(url): &#034;&#034;&#034; T&#233;l&#233;charge une page distante avec la biblioth&#232;que requests et renvoie le contenu au format texte https://www.w3schools.com/python/module_requests.asp &#034;&#034;&#034; # Wikipedia demande un User Agent headers = {&#034;User-Agent&#034;: &#034;Mozilla/5.0&#034;} html = requests.get(url,headers=headers).text # print(f&#034;Contenu de la page \n:{html}&#034;) return html def analyse_page(page): &#034;&#034;&#034; Analyse le contenu d'une page web pour r&#233;cup&#233;rer ce qui correspond &#224; une balise sp&#233;cifique Renvoie une liste &#224; partir du tableau de donn&#233;es Documentation : thunderbit.com/fr/blog/beautifulsoup-in-python &#034;&#034;&#034; data=[] # Analyser la page avec beautifulsoup soup = BeautifulSoup(page, 'html.parser') # R&#233;cup&#233;rer tous les tableaux tables = soup.find_all('table') # Extraire les donn&#233;es de chaque tableau for t in tables: # Lire chaque ligne trouv&#233;e for ligne in t.find_all('tr'): # Lire chaque cellule de la ligne cellules = ligne.find_all('td') # Transformer la ligne de cellules en liste l = [c.text.strip() for c in cellules] try: if l[5] != '' and l[0] != 'Nom': data.append(l) except: # The table has no disease data pass return data def main(): # R&#233;cup&#233;ration des donn&#233;es # Liste des maladies g&#233;n&#233;tiques avec un g&#232;ne identifi&#233; lien = &#034;https://fr.wikipedia.org/wiki/Liste_des_maladies_g%C3%A9n%C3%A9tiques_%C3%A0_g%C3%A8ne_identifi%C3%A9&#034; page = telecharge_url(lien) liste = analyse_page(page) # Export en fichier format&#233; df = pd.DataFrame(liste, columns=['Nom', 'OMIM', 'Transmission', 'Chromosome', 'Type de mutation', 'G&#232;ne en cause']) # Enregistrement au format Microsoft Excel df.to_excel(&#034;liste_maladies_genes_identifies.xlsx&#034;, index=False) if __name__ == &#034;__main__&#034;: main() &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/i&gt;
&lt;h3 class=&#034;spip&#034; id='Dependances-et-utilisation-du-programme-V3'&gt;D&#233;pendances et utilisation du programme V3&lt;a class='sommaire-back sommaire-back-9' href='#s-Dependances-et-utilisation-du-programme-V3' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Le programme (v3) ci-dessous fait appel &#224; requests, beautifulsoup, pandas, openpyxl (pour l'export python). Si vous utiliser un IDE comme PyCharm vous pouvez les installer via celui-ci, sinon vous pouvez cr&#233;er un environnement virtuel l&#233;ger python comme suit :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo apt install python3-virtualenv ou sous Mac OS : brew install virtualenv virtualenv -p python3 venv source venv/bin/activate pip install beautifulsoup4 pandas openpyxl requests &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour utiliser le programme ci-dessus, vous pouvez l'ex&#233;cuter via PyCharm ou via le terminal :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;source venv/bin/activate chmod +x programme_v3.py ./programme_v3.py &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le fichier excel &#034;liste_maladies_genes_identifies.xlsx&#034; sera cr&#233;&#233; au m&#234;me endroit que le programme, et vous pouvez ouvrir ce fichier pour &#233;tudier son contenu, effectuer des tris, etc.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Pour-aller-plus-loin'&gt;Pour aller plus loin&lt;a class='sommaire-back sommaire-back-9' href='#s-Pour-aller-plus-loin' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a href=&#034;https://docs.python-requests.org&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://docs.python-requests.org&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://beautiful-soup-4.readthedocs.io&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://beautiful-soup-4.readthedocs.io&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://www.genome.gov/genetics-glossary/Single-Nucleotide-Polymorphisms-SNPs&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://www.genome.gov/genetics-glossary/Single-Nucleotide-Polymorphisms-SNPs&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://omim.org/help/api&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://omim.org/help/api&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://gnomad.broadinstitute.org/data&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://gnomad.broadinstitute.org/data&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://www.ncbi.nlm.nih.gov/home/develop/api/&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://www.ncbi.nlm.nih.gov/home/develop/api/&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://www.uniprot.org/help/api&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://www.uniprot.org/help/api&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://thecodingbiologist.com/posts/Accessing-UniProt-via-its-REST-API&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://thecodingbiologist.com/posts/Accessing-UniProt-via-its-REST-API&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://woteq.com/how-to-retrieve-protein-sequences-from-uniprot-using-biopython&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://woteq.com/how-to-retrieve-protein-sequences-from-uniprot-using-biopython&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Python : bonnes pratiques pour mettre en place un programme</title>
		<link>https://www.steletch.org/spip.php?page=article&amp;id_article=30</link>
		<guid isPermaLink="true">https://www.steletch.org/spip.php?page=article&amp;id_article=30</guid>
		<dc:date>2024-04-19T09:39:45Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>S. T&#233;letch&#233;a</dc:creator>



		<description>
&lt;p&gt;La langage python est r&#233;cemment devenu tr&#232;s populaire de par sa facilit&#233; apparente d'utilisation. Il reste n&#233;anmoins un langage informatique qui comporte des notions complexes, et une fois les premiers programmes &#233;crits (scripts), il faut assez rapidement r&#233;fl&#233;chir &#224; structurer le programme pour qu'il devienne exploitable sur le moyen terme, au risque sinon de devenir du code mort, jetable, et donc perdu. &lt;br class='autobr' /&gt;
Pour &#233;viter cette d&#233;rive, voici quelques conseils avec des exemples rapides (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.steletch.org/spip.php?page=rubrique&amp;id_rubrique=2" rel="directory"&gt;BioInformatique&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-7&#034; id=&#034;nav69e96df143db07.43580779&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Version-1-du-programme-un-script&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Version-1-du-programme-un-script&#034; class=&#034;spip_ancre&#034;&gt;Version 1 du programme, un &#034;script&#034;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Version-2-programme-le-rendre-executable&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Version-2-programme-le-rendre-executable&#034; class=&#034;spip_ancre&#034;&gt;Version 2 : programme, le rendre ex&#233;cutable&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Version-2-du-programme-du-script-au-programme&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Version-2-du-programme-du-script-au-programme&#034; class=&#034;spip_ancre&#034;&gt;Version 2 du programme, du script au programme&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Version-3-decouper-les-fonctionnalites-du-programme&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Version-3-decouper-les-fonctionnalites-du-programme&#034; class=&#034;spip_ancre&#034;&gt;Version 3 : d&#233;couper les fonctionnalit&#233;s du programme&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Documenter-son-programme&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Documenter-son-programme&#034; class=&#034;spip_ancre&#034;&gt;Documenter son programme&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Version-4-continuer-a-developper-son-programme&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Version-4-continuer-a-developper-son-programme&#034; class=&#034;spip_ancre&#034;&gt;Version 4 : continuer &#224; d&#233;velopper son programme&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-En-conclusion&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#En-conclusion&#034; class=&#034;spip_ancre&#034;&gt;En conclusion&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;La &lt;a href='https://www.python.org/' target=&#034;_blank&#034;&gt;&lt;strong&gt;langage python&lt;/strong&gt;&lt;/a&gt; est r&#233;cemment devenu tr&#232;s populaire de par sa facilit&#233; apparente d'utilisation. Il reste n&#233;anmoins un langage informatique qui comporte des notions complexes, et une fois les premiers programmes &#233;crits (&lt;em&gt;scripts&lt;/em&gt;), il faut assez rapidement r&#233;fl&#233;chir &#224; structurer le programme pour qu'il devienne exploitable sur le moyen terme, au risque sinon de devenir &lt;em&gt;&lt;a href='https://fr.wikipedia.org/wiki/R%C3%A9usinage_de_code' target=&#034;_blank&#034;&gt;du code mort, jetable, et donc perdu&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Pour &#233;viter cette d&#233;rive, voici quelques conseils avec des exemples rapides d'utilisation.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Version-1-du-programme-un-script'&gt;Version 1 du programme, un &#034;script&#034;&lt;a class='sommaire-back sommaire-back-7' href='#s-Version-1-du-programme-un-script' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Prenons comme exemple un petit programme en python suivant, qui permet d'afficher un simple &#034;coucou&#034; dans un terminal, que l'on enregistre dans le fichier &lt;strong&gt;programme_v1.py&lt;/strong&gt; :&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;pre&gt;&lt;code class=&#034;python&#034; data-language=&#034;python&#034;&gt;print(&#034;Coucou&#034;)&lt;/pre&gt;&lt;/code&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Pour voir le r&#233;sultat ce petit programme, on peut l'ex&#233;cuter ainsi :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#034;bash&#034;&gt;python programme_v1.py&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;... qui affiche donc dans le terminal&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#034;bash&#034;&gt;Coucou&lt;/code&gt;&lt;/pre&gt;&lt;h3 class=&#034;spip&#034; id='Version-2-programme-le-rendre-executable'&gt;Version 2 : programme, le rendre ex&#233;cutable&lt;a class='sommaire-back sommaire-back-7' href='#s-Version-2-programme-le-rendre-executable' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Cela peut devenir vite fastidieux de mettre &#224; chaque fois le mot &#034;python&#034; 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&#233;cessite de revoir un peu la structure de notre petit programme, il faut lui ajouter un &lt;a href='https://www.it-connect.fr/dans-un-script-linux-quest-ce-que-le-shebang/' target=&#034;_blank&#034;&gt;&lt;em&gt;shebang&lt;/em&gt;&lt;/a&gt; &#224; la premi&#232;re ligne.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#034;python&#034;&gt;#!/usr/bin/env python3 print(&#034;Coucou&#034;) &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le nouvelle programme s'appelle maintenant &lt;strong&gt;programme_v1.1.py&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Remarquez que comme il s'agit d'une version mineure du programme, j'ai incr&#233;ment&#233; son num&#233;ro simplement (passage de 1 &#224; 1.1). Nous reviendrons sur cette notion plus loin.&lt;/p&gt;
&lt;p&gt;Pour rendre ce programme ex&#233;cutable et le lancer, il faut taper :&lt;/p&gt;
&lt;pre&gt; &lt;code class=&#034;bash&#034;&gt;chmod +x programme_v1.1.py ./programme_v1.1.py Coucou &lt;/code&gt; &lt;/pre&gt;
&lt;p&gt;Remarquez qu'il faut pr&#233;ciser l'emplacement du fichier pour que le syst&#232;me lance le programme, en sp&#233;cifiant &#034;./&#034; au d&#233;but du nombre du programme. Le point suivi d'une barre oblique &#034;&lt;strong&gt;./&lt;/strong&gt;&#034; indique que l'on utilise le r&#233;pertoire courant, et qu'il faut ex&#233;cuter le programme &#034;programme_v1.1.py&#034;.&lt;/p&gt;
&lt;p&gt;Le r&#233;sultat ne change pas.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Version-2-du-programme-du-script-au-programme'&gt;Version 2 du programme, du script au programme&lt;a class='sommaire-back sommaire-back-7' href='#s-Version-2-du-programme-du-script-au-programme' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Le &#034;script&#034; par d&#233;finition est un petit programme qui a vocation &#224; &#234;tre court, pour r&#233;pondre &#224; un besoin pr&#233;cis, on peut souvent le r&#233;&#233;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&#238;ner plusieurs traitements rapidement, par exemple faire le d&#233;placement et le renommage de milliers de fichiers.&lt;/p&gt;
&lt;p&gt;Si l'on utilise python c'est souvent parce que le traitement que l'on envisage va faire beaucoup plus d'&#233;tapes qu'envisag&#233; initialement. Il est donc utile de mieux organiser son programme d&#232;s le d&#233;part, en suivant quelques bonnes pratiques.&lt;/p&gt;
&lt;p&gt;La version 2 de notre programme ne va pas faire &#233;voluer grandement encore notre programme, mais elle va permettre de le structurer.&lt;/p&gt;
&lt;p&gt;Le fichier programme_v2.py devient ainsi &#224; partir du fichier programme_v1.1.py :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#034;python&#034;&gt;#!/usr/bin/env python3 def main() : print(&#034;Coucou&#034;) if __name__ == &#034;__main__&#034; : main() &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quand on rend ex&#233;cutable le programme et qu'on le lance, le r&#233;sultat est toujours le m&#234;me, pour le moment.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Version-3-decouper-les-fonctionnalites-du-programme'&gt;Version 3 : d&#233;couper les fonctionnalit&#233;s du programme&lt;a class='sommaire-back sommaire-back-7' href='#s-Version-3-decouper-les-fonctionnalites-du-programme' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Un programme est un ensemble d'&#233;tapes que l'on veut faire faire &#224; un ordinateur. La t&#226;che la plus compliqu&#233;e est de d&#233;couper les actions pour qu'elles soient r&#233;utilisables d&#232;s le d&#233;but, c'est &#224; la fois utile pour clarifier les &#233;tapes &#224; ex&#233;cuter, mais aussi pour mieux isoler les endroits du programme o&#249; il faudra r&#233;fl&#233;chir sur le meilleur moyen d'arriver au r&#233;sultat, qui le bien souvent doit faire appel &#224; un &lt;a href='https://fr.wikibooks.org/wiki/Impl%C3%A9mentation_d%27algorithmes_classiques' target=&#034;_blank&#034;&gt;&lt;strong&gt;algorithme simple ou complexe&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour r&#233;aliser le programme, on va donc le &lt;strong&gt;d&#233;couper en fonction&lt;/strong&gt;,&lt;strong&gt; chaque fonction va contenir des commentaires&lt;/strong&gt; au &lt;a href='https://peps.python.org/pep-0257/' target=&#034;_blank&#034;&gt;format docstrings&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#034;python&#034;&gt;# !/usr/bin/env python3 def affiche_coucou() : &#034;&#034;&#034; Fonction qui permet d'afficher le texte Coucou &#034;&#034;&#034; print(&#034;Coucou&#034;) def main() : affiche_coucou() if __name__ == &#034;__main__&#034; : main() &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Apr&#232;s avoir donn&#233; les permissions d'ex&#233;cution au programme, le texte &#034;Coucou&#034; s'affiche &#224; nouveau dans le terminal quand lance le programme.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Documenter-son-programme'&gt;Documenter son programme&lt;a class='sommaire-back sommaire-back-7' href='#s-Documenter-son-programme' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;L'int&#233;r&#234;t d'avoir mieux organis&#233; son programme est qu'il est maintenant plus modulaire, ce qui permet de le rendre plus visible, donc de produire une documentation !&lt;/p&gt;
&lt;p&gt;Il existe plusieurs moyens de documenter son programme, mais une mani&#232;re simple est de faire appel &#224; &lt;a href='https://pdoc3.github.io/pdoc/' target=&#034;_blank&#034;&gt;&lt;strong&gt;pydoc3&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour l'installer sur son syst&#232;me il faut utiliser la commande pip :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#034;bash&#034;&gt;pip install pdoc3&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cela va cr&#233;er dans votre espace de travail ($HOME) une commande dans le r&#233;pertoire &lt;strong&gt;$HOME/.local/bin&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Il suffit maintenant de g&#233;n&#233;rer un fichier HTML du code en version 3 :&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#034;bash&#034;&gt;$HOME/.local/bin/pdoc3 programme_v3.py &#8212;html &#8212;force&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Cette commande va g&#233;n&#233;rer un fichier au format HTML qu'il est possible de regarder en ligne directement avec un navigateur.&lt;/p&gt;
&lt;p&gt;&lt;img align=&#034;middle&#034; alt=&#034;Image du code comment&#233;&#034; src=&#034;https://www.steletch.org/IMG/png/capture_d_ecran_du_2024-04-19_11-18-40.png?docid=19&amp;doctype=&#034; style='max-width: 500px;max-width: min(100%,500px); max-height: 10000px' /&gt;&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Version-4-continuer-a-developper-son-programme'&gt;Version 4 : continuer &#224; d&#233;velopper son programme&lt;a class='sommaire-back sommaire-back-7' href='#s-Version-4-continuer-a-developper-son-programme' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Une fois la premi&#232;re &#233;bauche du programme r&#233;alis&#233;e, il faut commencer &#224; r&#233;fl&#233;chir &#224; toutes les &#233;tapes que l'on voudrait r&#233;aliser, les documenter avec des &lt;a href='https://peps.python.org/pep-0257/' target=&#034;_blank&#034;&gt;&lt;em&gt;docstrings&lt;/em&gt;&lt;/a&gt;, puis ensuite les &#233;crire une par une. Une fois cette impl&#233;mentation pr&#233;liminaire r&#233;alis&#233;e, il sera possible d'avoir des programmes python tr&#232;s complexes, bien document&#233;s et r&#233;utilisables.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#034;python&#034;&gt;# !/usr/bin/env python3 def affiche_texte(letexte) : &#034;&#034;&#034; Fonction qui permet d'afficher le texte fourni en argument &#034;&#034;&#034; print(letexte) def demande_texte() : &#034;&#034;&#034; Fonction qui demande un mot &#224; afficher &#224; l'utilisateur, pour l'instant elle ne fait rien &#034;&#034;&#034; pass def main() : demande_texte() affiche_texte(&#034;Coucou&#034;) affiche_texte(&#034;Bonjour&#034;) if __name__ == &#034;__main__&#034; : main()&lt;/code&gt;&lt;/pre&gt;&lt;p class=&#034;spip&#034;&gt;Dans cette version v4 du programme la fonction &lt;strong&gt;affiche_coucou()&lt;/strong&gt; a &#233;t&#233; renomm&#233;e et modifi&#233;e pour devenir &lt;strong&gt;affiche_texte(&lt;em&gt;letexte&lt;/em&gt;)&lt;/strong&gt;, elle devient ainsi plus g&#233;n&#233;rique car l'argument pass&#233; &#224; la fonction (enregistr&#233; dans la variable &lt;strong&gt;&lt;em&gt;letexte&lt;/em&gt;&lt;/strong&gt;) est le texte &#224; afficher, et non une valeur statique.&lt;/p&gt;
&lt;p class=&#034;spip&#034;&gt;Une seconde fonction a &#233;t&#233; ajout&#233;e (&lt;strong&gt;demande_texte()&lt;/strong&gt;), elle ne fait pour l'instant rien, mais aura comme objectif de demander &#224; l'utilisateur le mot &#224; 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&#233;taill&#233; ici.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='En-conclusion'&gt;En conclusion&lt;a class='sommaire-back sommaire-back-7' href='#s-En-conclusion' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p class=&#034;spip&#034;&gt;Le petit exemple pr&#233;sent&#233; dans un article fait partie des bonnes pratiques qu'il est important de suivre &#224; chaque fois que l'on &#233;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&#232;s rapidement un r&#233;sultat qui correspond &#224; ce dont on a besoin, c'est donc en plus d'une bonne pratique, une m&#233;thode efficace de d&#233;veloppement.&lt;/p&gt;
&lt;p class=&#034;spip&#034;&gt;Comme indiqu&#233; pr&#233;c&#233;demment, un des &#233;l&#233;ments importants pour &#233;viter d'avoir x version du m&#234;me programme est de le versionner de mani&#232;re incr&#233;mentale. Cependant cela devient vite compliqu&#233; de fonctionner ainsi, c'est pour cela qu'il vaut mieux tout de suite utiliser un &lt;strong&gt;gestionnaire de version comme git avec un h&#233;bergement sur github, gitlab ou encore un d&#233;p&#244;t local&lt;/strong&gt;. Cela vous permettra de mieux suivre vos changements, m&#234;me en travaillant seul sur un projet, en faisant des changements importants entre chaque commit.&lt;/p&gt;
&lt;p class=&#034;spip&#034;&gt;Le code d&#233;taill&#233; rapidement ici est ainsi pr&#233;sent sur mon d&#233;p&#244;t github public : &lt;a class=&#034;spip_url spip_out auto&#034; href='https://github.com/TeletcheaLab/pythondemo/' rel=&#034;nofollow external&#034;&gt;https://github.com/TeletcheaLab/pythondemo/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Introduction &#224; l'informatique pour les &#233;tudiants en biologie</title>
		<link>https://www.steletch.org/spip.php?page=article&amp;id_article=28</link>
		<guid isPermaLink="true">https://www.steletch.org/spip.php?page=article&amp;id_article=28</guid>
		<dc:date>2024-03-13T10:42:55Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>S. T&#233;letch&#233;a</dc:creator>



		<description>
&lt;p&gt;Dans le cadre d'enseignements de licence, j'ai l'occasion de faire une introduction &#224; l'informatique &#224; des &#233;tudiants en deuxi&#232;me ann&#233;e de biologie, voici ci-apr&#232;s les documents de cours et les TD associ&#233;s qui sont mis &#224; la disposition des &#233;tudiants. Si vous trouvez ces contenus utiles, merci de me contacter pour me l'indiquer, je pourrai vous transmettre les documents au format &#233;ditable sans souci. Ces documents sont fournis sous licence creative commons CC-BY-NC-SA (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.steletch.org/spip.php?page=rubrique&amp;id_rubrique=6" rel="directory"&gt;Enseignement&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-2&#034; id=&#034;nav69e96df1851276.48973191&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Document-de-cours&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Document-de-cours&#034; class=&#034;spip_ancre&#034;&gt;Document de cours&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Documents-de-TD&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Documents-de-TD&#034; class=&#034;spip_ancre&#034;&gt;Documents de TD&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;Dans le cadre d'enseignements de licence, j'ai l'occasion de faire une introduction &#224; l'informatique &#224; des &#233;tudiants en deuxi&#232;me ann&#233;e de biologie, voici ci-apr&#232;s les documents de cours et les TD associ&#233;s qui sont mis &#224; la disposition des &#233;tudiants. Si vous trouvez ces contenus utiles, merci de me contacter pour me l'indiquer, je pourrai vous transmettre les documents au format &#233;ditable sans souci. Ces documents sont fournis sous licence creative commons CC-BY-NC-SA (&lt;a class=&#034;spip_url spip_out auto&#034; href='https://creativecommons.org/licenses/by-nc-sa/4.0/deed.fr' rel=&#034;nofollow external&#034;&gt;https://creativecommons.org/licenses/by-nc-sa/4.0/deed.fr&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Document-de-cours'&gt;Document de cours&lt;a class='sommaire-back sommaire-back-2' href='#s-Document-de-cours' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;&lt;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=&#034;4&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.steletch.org/IMG/pdf/cm-1.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 1.9 Mio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://www.steletch.org/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1773943770' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;CM
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Documents-de-TD'&gt;Documents de TD&lt;a class='sommaire-back sommaire-back-2' href='#s-Documents-de-TD' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;&lt;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=&#034;6&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.steletch.org/IMG/pdf/td1-1.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 71.1 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://www.steletch.org/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1773943770' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;TD 1
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;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=&#034;6&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.steletch.org/IMG/pdf/td2-3.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 57.3 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://www.steletch.org/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1773943770' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;TD 2
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;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=&#034;6&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.steletch.org/IMG/pdf/td3-1.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 41.5 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://www.steletch.org/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1773943770' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;TD 3
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Cette page sera mise &#224; jour r&#233;guli&#232;rement pour ajouter des explications et des documents additionnels.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Ajouter des polices Windows sous Ubuntu</title>
		<link>https://www.steletch.org/spip.php?page=article&amp;id_article=25</link>
		<guid isPermaLink="true">https://www.steletch.org/spip.php?page=article&amp;id_article=25</guid>
		<dc:date>2023-12-19T12:44:13Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>S. T&#233;letch&#233;a</dc:creator>



		<description>
&lt;p&gt;Les syst&#232;mes GNU/Linux contiennent de nombreuses polices de caract&#232;res qui sont largement suffisantes pour un usage du quotidien. Il peut cependant arriver que vous ayez &#224; travailler sur un document qui sera partag&#233; avec des coll&#232;gues sous Windows, qui utiliseront par d&#233;faut la police de caract&#232;res &#034;Calibri&#034;, ce qui rendra le rendu sous linux sous-optimal, car une police de remplacement sera affich&#233;e. &lt;br class='autobr' /&gt;
Pour installer les polices compl&#233;mentaires de celles du syst&#232;me, il est possible (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.steletch.org/spip.php?page=rubrique&amp;id_rubrique=4" rel="directory"&gt;SysAdmin&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Les syst&#232;mes GNU/Linux contiennent de nombreuses polices de caract&#232;res qui sont largement suffisantes pour un usage du quotidien. Il peut cependant arriver que vous ayez &#224; travailler sur un document qui sera partag&#233; avec des coll&#232;gues sous Windows, qui utiliseront par d&#233;faut la police de caract&#232;res &#034;Calibri&#034;, ce qui rendra le rendu sous linux sous-optimal, car une police de remplacement sera affich&#233;e.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Pour installer les polices compl&#233;mentaires de celles du syst&#232;me, il est possible d'installer la police &#034;fonts-crosextra-carlito&#034; qui permettra d'avoir un rendu compatible avec celui que produirait la police Calibri (m&#234;me taille de caract&#232;res.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sudo apt install fonts-crosextra-carlito&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Il est aussi possible d'installer automatiquement quelques polices True Type Font (TTF) de Microsoft.&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sudo apt install ttf-mscorefonts-installer&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Pour ce qui est de la police &#034;Calibri&#034; &#224; proprement parler, il est possible de la t&#233;l&#233;charger ici : &lt;a href=&#034;https://www.fontpalace.com/font-download/Calibri/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;https://www.fontpalace.com/font-download/Calibri/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Une fois le fichier calibri.ttf, aller avec le navigateur de fichier (nautilus) sur son emplacement, faites un clic droit sur le fichier, s&#233;lectionnez &#034;Ouvrir avec Polices&#034;, puis une fois l'application lanc&#233;e, cliquez sur &#034;Installer&#034;.&lt;/p&gt;
&lt;p&gt;Vous avez ainsi enrichi rapidement votre distribution d'un certain nombre de polices classiques sous d'autres OS.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="en">
		<title>Introduction to Structural bioinformatics</title>
		<link>https://www.steletch.org/spip.php?page=article&amp;id_article=22</link>
		<guid isPermaLink="true">https://www.steletch.org/spip.php?page=article&amp;id_article=22</guid>
		<dc:date>2023-10-18T07:38:49Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>en</dc:language>
		<dc:creator>S. T&#233;letch&#233;a</dc:creator>



		<description>
&lt;p&gt;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. &lt;br class='autobr' /&gt;
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. &lt;br class='autobr' /&gt;
Previous introductions (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.steletch.org/spip.php?page=rubrique&amp;id_rubrique=6" rel="directory"&gt;Enseignement&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-6&#034; id=&#034;nav69e96df1c41099.81751259&#034;&gt;
&lt;h2&gt;Table of contents&lt;/h2&gt;&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Previous-introductions&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Previous-introductions&#034; class=&#034;spip_ancre&#034;&gt;Previous introductions&lt;/a&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Introduction-to-Structural-bioinformatics-2018-English-video&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Introduction-to-Structural-bioinformatics-2018-English-video&#034; class=&#034;spip_ancre&#034;&gt;Introduction to Structural bioinformatics, 2018, English (video)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Introduction-a-la-bioinformatique-structurale-2020-French-video&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Introduction-a-la-bioinformatique-structurale-2020-French-video&#034; class=&#034;spip_ancre&#034;&gt;Introduction &#224; la bioinformatique structurale, 2020, French (video)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Introduction-a-la-bioinformatique-structurale-2020-French-article&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Introduction-a-la-bioinformatique-structurale-2020-French-article&#034; class=&#034;spip_ancre&#034;&gt;Introduction &#224; la bioinformatique structurale, 2020, French (article)&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-First-lecture-introductory-concepts&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#First-lecture-introductory-concepts&#034; class=&#034;spip_ancre&#034;&gt;First lecture, introductory concepts&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Second-lecture-addition-of-definitions-and-model-validation&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Second-lecture-addition-of-definitions-and-model-validation&#034; class=&#034;spip_ancre&#034;&gt;Second lecture, addition of definitions and model validation&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;This article contains useful links and documents part of an introductory lecture given to lab member of the US2B laboratory (&lt;a class=&#034;spip_url spip_out auto&#034; href='https://us2b.univ-nantes.fr' rel=&#034;nofollow external&#034;&gt;https://us2b.univ-nantes.fr&lt;/a&gt;) in October 2023. This page will be updated regularly to add useful information from their feedback.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Previous-introductions'&gt;Previous introductions&lt;a class='sommaire-back sommaire-back-6' href='#s-Previous-introductions' title='Back to the table of contents'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;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&#233;os.&lt;/p&gt;
&lt;h4 class=&#034;spip&#034; id='Introduction-to-Structural-bioinformatics-2018-English-video'&gt;Introduction to Structural bioinformatics, 2018, English (video)&lt;a class='sommaire-back sommaire-back-6' href='#s-Introduction-to-Structural-bioinformatics-2018-English-video' title='Back to the table of contents'&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;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 (&lt;a class=&#034;spip_url spip_out auto&#034; href='https://dynamoppi.sciencesconf.org/' rel=&#034;nofollow external&#034;&gt;https://dynamoppi.sciencesconf.org/&lt;/a&gt;).&lt;/p&gt;
&lt;div class='spip_document_11 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;74&#034; data-legende-lenx=&#034;xx&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.steletch.org/IMG/distant/html/watchv_pWmPE1931-2db5606.html' class=&#034; spip_doc_lien&#034; title='HTML - 325 bytes' type=&#034;text/html&#034;&gt;&lt;img src='https://www.steletch.org/local/cache-vignettes/L64xH64/html-25d7d.svg?1773945876' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;Introduction to structural bioinformatics (bad noise)
&lt;/strong&gt;&lt;/div&gt; &lt;div class='spip_doc_credits '&gt;&lt;a href=&#034;https://www.youtube.com/@stephaneteletchea5240&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;St&#233;phane T&#233;letch&#233;a&lt;/a&gt;
&lt;/div&gt;
&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h4 class=&#034;spip&#034; id='Introduction-a-la-bioinformatique-structurale-2020-French-video'&gt;Introduction &#224; la bioinformatique structurale, 2020, French (video)&lt;a class='sommaire-back sommaire-back-6' href='#s-Introduction-a-la-bioinformatique-structurale-2020-French-video' title='Back to the table of contents'&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;This lecture was given to third-year bachelor students, and includes a little section about SARS-CoV-2 proteins structures and functions.&lt;/p&gt;
&lt;div class='spip_document_9 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;66&#034; data-legende-lenx=&#034;xx&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.steletch.org/IMG/distant/html/watchv1OrQ7ia204-6e800cd.html' class=&#034; spip_doc_lien&#034; title='HTML - 320 bytes' type=&#034;text/html&#034;&gt;&lt;img src='https://www.steletch.org/local/cache-vignettes/L64xH64/html-25d7d.svg?1773945876' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;Introduction &#224; la Bioinformatique Structurale
&lt;/strong&gt;&lt;/div&gt; &lt;div class='spip_doc_credits '&gt;&lt;a href=&#034;https://www.youtube.com/@stephaneteletchea5240&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;St&#233;phane T&#233;letch&#233;a&lt;/a&gt;
&lt;/div&gt;
&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h4 class=&#034;spip&#034; id='Introduction-a-la-bioinformatique-structurale-2020-French-article'&gt;Introduction &#224; la bioinformatique structurale, 2020, French (article)&lt;a class='sommaire-back sommaire-back-6' href='#s-Introduction-a-la-bioinformatique-structurale-2020-French-article' title='Back to the table of contents'&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;I wrote an article in the French magazine GNU/Linux Magazine France about Structural Bioinformatics and alphaFold (2), you can find it here :&lt;/p&gt;
&lt;p&gt;&lt;a class=&#034;spip_url spip_out auto&#034; href='https://connect.ed-diamond.com/GNU-Linux-Magazine/glmf-234/alphafold-la-reponse-au-probleme-le-plus-complexe-de-l-univers' rel=&#034;nofollow external&#034;&gt;https://connect.ed-diamond.com/GNU-Linux-Magazine/glmf-234/alphafold-la-reponse-au-probleme-le-plus-complexe-de-l-univers&lt;/a&gt;&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='First-lecture-introductory-concepts'&gt;First lecture, introductory concepts&lt;a class='sommaire-back sommaire-back-6' href='#s-First-lecture-introductory-concepts' title='Back to the table of contents'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class='spip_document_3 spip_document spip_documents spip_document_file spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.steletch.org/IMG/pdf/structural_bioinformatics_introduction.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 3.4 MiB' type=&#034;application/pdf&#034;&gt;&lt;img src='https://www.steletch.org/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1773943770' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;h3 class=&#034;spip&#034; id='Second-lecture-addition-of-definitions-and-model-validation'&gt;Second lecture, addition of definitions and model validation&lt;a class='sommaire-back sommaire-back-6' href='#s-Second-lecture-addition-of-definitions-and-model-validation' title='Back to the table of contents'&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class='spip_document_14 spip_document spip_documents spip_document_file spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.steletch.org/IMG/pdf/structural_bioinformatics_introduction-2.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 4 MiB' type=&#034;application/pdf&#034;&gt;&lt;img src='https://www.steletch.org/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1773943770' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Introduction &#224; la ch&#233;moinformatique : les fichiers pour les petites mol&#233;cules 3D</title>
		<link>https://www.steletch.org/spip.php?page=article&amp;id_article=21</link>
		<guid isPermaLink="true">https://www.steletch.org/spip.php?page=article&amp;id_article=21</guid>
		<dc:date>2023-10-11T12:36:45Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>S. T&#233;letch&#233;a</dc:creator>



		<description>
&lt;p&gt;Format de fichier 3D des petites mol&#233;cules et source &lt;br class='autobr' /&gt;
Les ligands ou constituants biologiques sont disponibles dans diff&#233;rentes bases de donn&#233;es, trois formats sont le plus souvent utilis&#233;s, en fonction de l'utilisation pr&#233;vue du ligand : &lt;br class='autobr' /&gt; le format SDF, attention ce format permet de repr&#233;senter les mol&#233;cules en 2D, il faut &#234;tre vigilant &#224; t&#233;l&#233;charger la mol&#233;cule au format &#171; 3D &#187;. le format MOL2 le format PDB &lt;br class='autobr' /&gt;
Il existe de nombreux autres formats pour repr&#233;senter les petites (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.steletch.org/spip.php?page=rubrique&amp;id_rubrique=6" rel="directory"&gt;Enseignement&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-2&#034; id=&#034;nav69e96df1cb6760.86473132&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Format-de-fichier-3D-des-petites-molecules-et-source&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Format-de-fichier-3D-des-petites-molecules-et-source&#034; class=&#034;spip_ancre&#034;&gt;Format de fichier 3D des petites mol&#233;cules et source&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Bases-de-donnees-comprenant-les-molecules-au-format-3D&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Bases-de-donnees-comprenant-les-molecules-au-format-3D&#034; class=&#034;spip_ancre&#034;&gt;Bases de donn&#233;es comprenant les mol&#233;cules au format 3D&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;h3 class=&#034;spip&#034; id='Format-de-fichier-3D-des-petites-molecules-et-source'&gt;Format de fichier 3D des petites mol&#233;cules et source&lt;a class='sommaire-back sommaire-back-2' href='#s-Format-de-fichier-3D-des-petites-molecules-et-source' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Les ligands ou constituants biologiques sont disponibles dans diff&#233;rentes bases de donn&#233;es, trois formats sont le plus souvent utilis&#233;s, en fonction de l'utilisation pr&#233;vue du ligand :&lt;/p&gt;
&lt;ol&gt; &lt;li&gt;le format SDF, attention ce format permet de repr&#233;senter les mol&#233;cules en 2D, il faut &#234;tre vigilant &#224; t&#233;l&#233;charger la mol&#233;cule au format &#171; 3D &#187;.&lt;/li&gt; &lt;li&gt;le format MOL2&lt;/li&gt; &lt;li&gt;le format PDB&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Il existe de nombreux autres formats pour repr&#233;senter les petites mol&#233;cules, ils sont d&#233;crits sur la page wikipedia en d&#233;tail (&lt;a class=&#034;spip_url spip_out auto&#034; href='https://en.wikipedia.org/wiki/Chemical_file_format' rel=&#034;nofollow external&#034;&gt;https://en.wikipedia.org/wiki/Chemical_file_format&lt;/a&gt;), le d&#233;tail de l'organisation de ces fichiers et les principes sous-jascents sont pr&#233;sent&#233;s dans uen page d&#233;di&#233;e (&lt;a class=&#034;spip_url spip_out auto&#034; href='https://en.wikipedia.org/wiki/Chemical_table_file' rel=&#034;nofollow external&#034;&gt;https://en.wikipedia.org/wiki/Chemical_table_file&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Il est possible de d&#233;crire sur une ligne (1D) une formule chimique en suivant les descriptions du format SMILES, pr&#233;sent&#233;s sur le site de l'entreprise DayLight (&lt;a class=&#034;spip_url spip_out auto&#034; href='https://daylight.com/' rel=&#034;nofollow external&#034;&gt;https://daylight.com/&lt;/a&gt;) ou encore sur wikipedia dans la page d&#233;crivant SMILES (&lt;a class=&#034;spip_url spip_out auto&#034; href='https://en.wikipedia.org/wiki/Simplified_molecular-input_line-entry_system' rel=&#034;nofollow external&#034;&gt;https://en.wikipedia.org/wiki/Simplified_molecular-input_line-entry_system&lt;/a&gt;).&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Bases-de-donnees-comprenant-les-molecules-au-format-3D'&gt;Bases de donn&#233;es comprenant les mol&#233;cules au format 3D&lt;a class='sommaire-back sommaire-back-2' href='#s-Bases-de-donnees-comprenant-les-molecules-au-format-3D' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Quand il s'agit de petites mol&#233;cules (qui seront des ligands des prot&#233;ines), il est possible d'obtenir directement leurs coordonn&#233;es au format &lt;strong&gt;SDF 3D&lt;/strong&gt; en allant sur :&lt;/p&gt;
&lt;ul&gt; &lt;li&gt;PubChem (&lt;a class=&#034;spip_url spip_out auto&#034; href='https://pubchem.ncbi.nlm.nih.gov/' rel=&#034;nofollow external&#034;&gt;https://pubchem.ncbi.nlm.nih.gov/&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;ChEMBL (&lt;a class=&#034;spip_url spip_out auto&#034; href='https://www.ebi.ac.uk/chembl/' rel=&#034;nofollow external&#034;&gt;https://www.ebi.ac.uk/chembl/&lt;/a&gt;)&lt;/li&gt; &lt;li&gt;BindingDB (&lt;a class=&#034;spip_url spip_out auto&#034; href='https://www.bindingdb.org/bind/index.jsp' rel=&#034;nofollow external&#034;&gt;https://www.bindingdb.org/bind/index.jsp&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>D&#233;couverte du Deep Learning</title>
		<link>https://www.steletch.org/spip.php?page=article&amp;id_article=20</link>
		<guid isPermaLink="true">https://www.steletch.org/spip.php?page=article&amp;id_article=20</guid>
		<dc:date>2023-10-02T20:45:35Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>S. T&#233;letch&#233;a</dc:creator>



		<description>
&lt;p&gt;Cette page recense des ressources li&#233;es au domaine de l'apprentissage profond, il s'agit d'un article en &#233;volution constante. &lt;br class='autobr' /&gt;
Qu'est-ce qu'un transformer ? &lt;br class='autobr' /&gt;
https://ledatascientist.com/a-la-decouverte-du-transformer/ &lt;br class='autobr' /&gt;
https://www.openstudio.fr/2022/02/08/fonctionnement-des-transformers-et-leurs-applications/ &lt;br class='autobr' /&gt;
https://www.journaldunet.fr/web-tech/guide-de-l-intelligence-artificielle/1508983-transformer-deep-learning/ &lt;br class='autobr' /&gt;
BERT (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.steletch.org/spip.php?page=rubrique&amp;id_rubrique=1" rel="directory"&gt;Science&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-3&#034; id=&#034;nav69e96df1da3076.39010157&#034;&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Qu-est-ce-qu-un-transformer&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Qu-est-ce-qu-un-transformer&#034; class=&#034;spip_ancre&#034;&gt;Qu'est-ce qu'un transformer ?&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-BERT&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#BERT&#034; class=&#034;spip_ancre&#034;&gt;BERT&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-GPT-3-4-5&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#GPT-3-4-5&#034; class=&#034;spip_ancre&#034;&gt;GPT (3, 4, 5, ...&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;Cette page recense des ressources li&#233;es au domaine de l'apprentissage profond, il s'agit d'un article en &#233;volution constante.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Qu-est-ce-qu-un-transformer'&gt;Qu'est-ce qu'un transformer ?&lt;a class='sommaire-back sommaire-back-3' href='#s-Qu-est-ce-qu-un-transformer' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#034;spip_url spip_out auto&#034; href='https://ledatascientist.com/a-la-decouverte-du-transformer/' rel=&#034;nofollow external&#034;&gt;https://ledatascientist.com/a-la-decouverte-du-transformer/ &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#034;spip_url spip_out auto&#034; href='https://www.openstudio.fr/2022/02/08/fonctionnement-des-transformers-et-leurs-applications/' rel=&#034;nofollow external&#034;&gt;https://www.openstudio.fr/2022/02/08/fonctionnement-des-transformers-et-leurs-applications/ &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#034;spip_url spip_out auto&#034; href='https://www.journaldunet.fr/web-tech/guide-de-l-intelligence-artificielle/1508983-transformer-deep-learning/' rel=&#034;nofollow external&#034;&gt;https://www.journaldunet.fr/web-tech/guide-de-l-intelligence-artificielle/1508983-transformer-deep-learning/&lt;/a&gt;&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='BERT'&gt;BERT&lt;a class='sommaire-back sommaire-back-3' href='#s-BERT' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a class=&#034;spip_url spip_out auto&#034; href='https://lesdieuxducode.com/blog/2019/4/bert--le-transformer-model-qui-sentraine-et-qui-represente' rel=&#034;nofollow external&#034;&gt;https://lesdieuxducode.com/blog/2019/4/bert&#8212;le-transformer-model-qui-sentraine-et-qui-represente&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='GPT-3-4-5'&gt;GPT (3, 4, 5, ...&lt;a class='sommaire-back sommaire-back-3' href='#s-GPT-3-4-5' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="en">
		<title>XmGrace day-to-day usage</title>
		<link>https://www.steletch.org/spip.php?page=article&amp;id_article=18</link>
		<guid isPermaLink="true">https://www.steletch.org/spip.php?page=article&amp;id_article=18</guid>
		<dc:date>2023-08-17T20:04:32Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>en</dc:language>
		<dc:creator>S. T&#233;letch&#233;a</dc:creator>



		<description>
&lt;p&gt;Before finding the wonderful XmGrace software, i'd loose time to do calculations, regressions, etc. &lt;br class='autobr' /&gt;
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. &lt;br class='autobr' /&gt;
Here are some examples of what i'm using. &lt;br class='autobr' /&gt;
Some basics commands i use with XmGrace are detailed below. &lt;br class='autobr' /&gt;
Renormalizing a plot (mostly angles between -180 and +180, you want it between 0 and 360 ) &lt;br class='autobr' /&gt; Load your file into xmgrace Go to (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.steletch.org/spip.php?page=rubrique&amp;id_rubrique=2" rel="directory"&gt;BioInformatique&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-7&#034; id=&#034;nav69e96df1e2caa8.87342399&#034;&gt;
&lt;h2&gt;Table of contents&lt;/h2&gt;&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Renormalizing-a-plot-mostly-angles-between-180-and-180-you-want-it-nbsp&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Renormalizing-a-plot-mostly-angles-between-180-and-180-you-want-it-nbsp&#034; class=&#034;spip_ancre&#034;&gt;Renormalizing a plot (mostly angles between -180 and +180, you want it between 0 and 360 )&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Subpopulation-for-instance-for-an-angle-where-are-the-points-above-a-nbsp&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Subpopulation-for-instance-for-an-angle-where-are-the-points-above-a-nbsp&#034; class=&#034;spip_ancre&#034;&gt;Subpopulation (for instance for an angle, where are the points above a certain value)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Correlation-between-two-states-for-instance-a-sugar-conformation-and-a-nbsp&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Correlation-between-two-states-for-instance-a-sugar-conformation-and-a-nbsp&#034; class=&#034;spip_ancre&#034;&gt;Correlation between two states (for instance a sugar conformation and a dihedral angle)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Getting-informations-about-points-mean-std-max-min&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Getting-informations-about-points-mean-std-max-min&#034; class=&#034;spip_ancre&#034;&gt;Getting informations about points (mean, std, max, min, ...)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Sending-data-through-a-pipe&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Sending-data-through-a-pipe&#034; class=&#034;spip_ancre&#034;&gt;Sending data through a pipe&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Sending-data-through-a-fifo&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Sending-data-through-a-fifo&#034; class=&#034;spip_ancre&#034;&gt;Sending data through a fifo&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Other-sites-with-tips&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Other-sites-with-tips&#034; class=&#034;spip_ancre&#034;&gt;Other sites with tips&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;Before finding the wonderful XmGrace software, i'd loose time to do calculations, regressions, etc.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Here are some examples of what i'm using.&lt;/p&gt;
&lt;p&gt;Some basics commands i use with XmGrace are detailed below.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Renormalizing-a-plot-mostly-angles-between-180-and-180-you-want-it-nbsp'&gt;Renormalizing a plot (mostly angles between -180 and +180, you want it between 0 and 360 )&lt;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'&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt; &lt;li&gt;Load your file into xmgrace&lt;/li&gt; &lt;li&gt;Go to Data-&gt;Transformations-&gt;Evaluate expressions&lt;/li&gt; &lt;li&gt;Select G0.S0&lt;/li&gt; &lt;li&gt;Fill in the box with :&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;y = y&lt;=0 ? y + 360 : y&lt;/p&gt;
&lt;p&gt;It is a basic if then else : y equals the value resulting of the test y&lt;=0. If the test is true then y = y+ 360 otherwise take the y value&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Subpopulation-for-instance-for-an-angle-where-are-the-points-above-a-nbsp'&gt;Subpopulation (for instance for an angle, where are the points above a certain value)&lt;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'&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt; &lt;li&gt;Load your file into xmgrace&lt;/li&gt; &lt;li&gt;Go to Data-&gt;Transformations-&gt;Sample points&lt;/li&gt; &lt;li&gt;Select the desired set (presumably S0)&lt;/li&gt; &lt;li&gt;Change sample type for 'Expression'&lt;/li&gt; &lt;li&gt;Fill in the form 'Logical expression' with your needs, for instance y=&gt;50 will select the population where all points are equal or above 50.&lt;/li&gt;
&lt;/ol&gt;&lt;h3 class=&#034;spip&#034; id='Correlation-between-two-states-for-instance-a-sugar-conformation-and-a-nbsp'&gt;Correlation between two states (for instance a sugar conformation and a dihedral angle)&lt;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'&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt; &lt;li&gt;Load file1 into xmgrace (it will appear as set 0)&lt;/li&gt; &lt;li&gt;Load file2 into xmgrace (it will appear as set 1)&lt;/li&gt; &lt;li&gt;Go to Data-&gt;Transformations-&gt;Evaluate expressions&lt;/li&gt; &lt;li&gt;Select g0.s1&lt;/li&gt; &lt;li&gt;Fill in the box with :&lt;ul&gt; &lt;li&gt;copy s1 to s2&lt;/li&gt; &lt;li&gt;s2.x=s0.y&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;Accept&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Go back to the graph, hide s0 and s1, click on As (autoscale), you have your correlation :-) you can now fill in legends, etc.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Getting-informations-about-points-mean-std-max-min'&gt;Getting informations about points (mean, std, max, min, ...)&lt;a class='sommaire-back sommaire-back-7' href='#s-Getting-informations-about-points-mean-std-max-min' title='Back to the table of contents'&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ol&gt; &lt;li&gt;Load your file into xmgrace&lt;/li&gt; &lt;li&gt;Go to Edit-&gt;Data sets&lt;/li&gt; &lt;li&gt;Pick your set, the values will be displayed in the box below (rapid, isn't it ?)&lt;/li&gt;
&lt;/ol&gt;&lt;h3 class=&#034;spip&#034; id='Sending-data-through-a-pipe'&gt;Sending data through a pipe&lt;a class='sommaire-back sommaire-back-7' href='#s-Sending-data-through-a-pipe' title='Back to the table of contents'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;echo -e &#034;1 2\n2 4\n3 6&#034; |xmgrace -pipe&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Sending-data-through-a-fifo'&gt;Sending data through a fifo&lt;a class='sommaire-back sommaire-back-7' href='#s-Sending-data-through-a-fifo' title='Back to the table of contents'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt; Create the fifo&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;mkfifo fifo.pipe&lt;br /&gt;
xmgrace -npipe fifo.pipe&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; Send the commands through the fifo&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;echo &#034;read \&#034;data.out\&#034;&#034; &gt; fifo.pipe&lt;br /&gt;
echo autoscale &gt; fifo.pipe&lt;br /&gt;
echo redraw &gt; fifo.pipe&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Other-sites-with-tips'&gt;Other sites with tips&lt;a class='sommaire-back sommaire-back-7' href='#s-Other-sites-with-tips' title='Back to the table of contents'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt; &lt;a class=&#034;spip_url spip_out auto&#034; href='http://ringo.ams.sunysb.edu/index.php/Xmgrace' rel=&#034;nofollow external&#034;&gt;http://ringo.ams.sunysb.edu/index.php/Xmgrace&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="en">
		<title>Django setup with rdkit for chemoinformatics studies</title>
		<link>https://www.steletch.org/spip.php?page=article&amp;id_article=17</link>
		<guid isPermaLink="true">https://www.steletch.org/spip.php?page=article&amp;id_article=17</guid>
		<dc:date>2023-08-17T18:18:19Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>en</dc:language>
		<dc:creator>S. T&#233;letch&#233;a</dc:creator>



		<description>
&lt;p&gt;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. &lt;br class='autobr' /&gt;
Django setup &lt;br class='autobr' /&gt;
We will first create our django sample application using virtualenv and pip. &lt;br class='autobr' /&gt; virtualenv venv source venv/bin/activate pip install django==3.2.20 &lt;br class='autobr' /&gt;
Now that (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.steletch.org/spip.php?page=rubrique&amp;id_rubrique=4" rel="directory"&gt;SysAdmin&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;!--sommaire--&gt;&lt;div class=&#034;well nav-sommaire nav-sommaire-4&#034; id=&#034;nav69e96df1e9d127.87880212&#034;&gt;
&lt;h2&gt;Table of contents&lt;/h2&gt;&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a id=&#034;s-Django-setup&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Django-setup&#034; class=&#034;spip_ancre&#034;&gt;Django setup&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-RdKit-installation-http-www-rdkit-org&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#RdKit-installation-http-www-rdkit-org&#034; class=&#034;spip_ancre&#034;&gt;RdKit installation (http://www.rdkit.org)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Testing-rdkit-inside-django&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Testing-rdkit-inside-django&#034; class=&#034;spip_ancre&#034;&gt;Testing rdkit inside django&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Migration-to-apache&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Migration-to-apache&#034; class=&#034;spip_ancre&#034;&gt;Migration to apache&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;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.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Django-setup'&gt;Django setup&lt;a class='sommaire-back sommaire-back-4' href='#s-Django-setup' title='Back to the table of contents'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We will first create our django sample application &lt;a href='https://docs.python-guide.org/dev/virtualenvs/' target=&#034;_blank&#034;&gt;using virtualenv and pip&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt;virtualenv venv source venv/bin/activate pip install django==3.2.20&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Now that the minimum requirements are met, it is time to start a new project called &lt;strong&gt;chemoinformaticsDemo&lt;/strong&gt;.&lt;/p&gt;
&lt;div class=&#034;python&#034;&gt;
&lt;pre&gt; &lt;code&gt;django-admin startproject chemoinformaticsDemo&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;At this point we only need some dirs that will be filled in later.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt;cd chemoinformaticsDemo mkdir static mkdir chemoinformaticsDemo/templates&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;At this point we only need some dirs that will be filled in later.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt;cd chemoinformaticsDemo mkdir static mkdir chemoinformaticsDemo/templates&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code class=&#034;python&#034;&gt;python manage.py makemigrations python manage.py migrate&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;It you are really impatient, you can already start your application in the developper mode using:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code class=&#034;python&#034;&gt;python manage.py runserver&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;To see the result you can fire up your browser and point to the location&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt;http://localhost:8000&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;To get something more specific, you can add a template in chemoinformaticsDemo/templates, for instance called base.html.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code class=&#034;html&#034;&gt;chemoinformaticsDemo/templates/base.html &lt;html lang=&#034;en&#034;&gt; &lt;head&gt; &lt;meta charset=&#034;utf-8&#034;&gt; &lt;/head&gt; &lt;body&gt; This is the starting page of the project. &lt;div id=&#034;content&#034;&gt; {% block content %}{% endblock content %} &lt;/div&gt; &lt;/body&gt; &lt;/html&gt; &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt;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)), ) &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The corresponding views.py will be called from this url redirection.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; chemoinformaticsDemo/views.py from django.shortcuts import render from django.conf import settings def home(request): return render(request, 'home.html') &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;If you refresh the previously opened http page, you should now get a small message welcoming you:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; This is the starting page of the project. &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;It is now time to add some content to the project, and especially to link rdkit with django.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='RdKit-installation-http-www-rdkit-org'&gt;RdKit installation (&lt;a href=&#034;http://www.rdkit.org&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://www.rdkit.org&lt;/a&gt;)&lt;a class='sommaire-back sommaire-back-4' href='#s-RdKit-installation-http-www-rdkit-org' title='Back to the table of contents'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This installation was performed on Ubuntu 14.04.4 LTS 64bits.&lt;/p&gt;
&lt;p&gt;First download the latest rdkit tarball. ( &lt;a href=&#034;https://sourceforge.net/projects/rdkit/files/latest/download&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://sourceforge.net/projects/rdkit/files/latest/download&lt;/a&gt; )&lt;br class='autobr' /&gt;
Decompress the archive, enter the rdkit directory and create a build directory, then use default options, except for the rdkit installation location:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; cd /opt tar -zxvf RDKit_2016_03_1.tgz cd rdkit-Release_2016_03_1 mkdir build cd build sudo cmake .. sudo make install &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;You will need sudo / root rights to write to the /opt directory.&lt;/p&gt;
&lt;p&gt;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/ (&lt;a href=&#034;https://howtolamp.com/articles/adding-shared-libraries-to-system-library-path/&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://howtolamp.com/articles/adding-shared-libraries-to-system-library-path/&lt;/a&gt;). We can create a simple file called rdkit.conf, and update the dynamic loader cache to have rdkit included properly. In short:&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; sudo echo &#034;/opt/rdkit-Release_2016_03_1/lib&#034; &gt; /etc/ld.so.conf.d/rdkit.conf sudo ldconfig &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;If you want to be sure the library search now contains the RdKit path, just grep for it.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; grep -i rdkit /etc/ld.so.cache Binary file /etc/ld.so.cache matches &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;You also need that rdkit is available for python programs out of you django environment.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; Python 2.7.6 (default, Jun 22 2015, 17:58:13) [GCC 4.8.2] on linux2 Type &#034;help&#034;, &#034;copyright&#034;, &#034;credits&#034; or &#034;license&#034; for more information. &gt;&gt;&gt; import sys &gt;&gt;&gt; sys.path.append('/opt/RDkit_2016_03_1') &gt;&gt;&gt; from rdkit import Chem &gt;&gt;&gt; quit() &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Please note that the /lib directory is not present&lt;/strong&gt; in the sys.path.append command because python bindings are present at the RDkit root.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Testing-rdkit-inside-django'&gt;Testing rdkit inside django&lt;a class='sommaire-back sommaire-back-4' href='#s-Testing-rdkit-inside-django' title='Back to the table of contents'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Now that everything is in place, we can test a simple but functionnal application. First we create a dedicated application called &lt;strong&gt;rdkitDemo&lt;/strong&gt; (and not simply rdkit otherwise there will be namespace collisions).&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; python manage.py startapp rdkitDemo mkdir rdkitDemo/templates &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;You need to edit the chemoinformaticsDemo/settings.py to add to &#034;INSTALLED_APPS&#034; &lt;strong&gt;rdkitDemo&lt;/strong&gt; (using any text editor).&lt;br class='autobr' /&gt;
Now django has to take into account this new application, so migrate existing tables.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; python manage.py makemigrations python manage.py migrate &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;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.&lt;br class='autobr' /&gt;
To enrich you django project, we will add new urls to take into account &lt;strong&gt;rdkitDemo&lt;/strong&gt; and add a sample html file for showing a simple demonstration of rkdit.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; 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')),}} ) &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The corresponding entry in the new application involves its own urls.py file.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; 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'), ) &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;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 (&lt;a href=&#034;https://pubchem.ncbi.nlm.nih.gov/compound/beta-D-galactose&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://pubchem.ncbi.nlm.nih.gov/compound/beta-D-galactose&lt;/a&gt;). The generated molecule will be transformed into a 2D plot stored on the disk.&lt;/p&gt;
&lt;p&gt;To store the PNG file, add a subdirectory to the &lt;strong&gt;static&lt;/strong&gt; directory seen above.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; mkdir static/demo chmod 777 static/demo &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Important Note:&lt;/strong&gt; the chmod will be used later, this is not mandatory for now and should also NOT be done on a production server...&lt;/p&gt;
&lt;p&gt;Now that everything is in place, we can add the necessary files in rdkitDemo.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; 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}) &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;To display the result of the view, a new template is created, based on the &lt;strong&gt;base.html&lt;/strong&gt; file already available.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; rdkitDemo/templates/demo.html {% extends &#034;base.html&#034; %} {% load static %} {% block title %}Simple rdkit Demo{% endblock title %} {% block content %} Welcome to this demo project for the molecule described by {{ data }}.&lt;br /&gt; &lt;img src=&#034;{% static 'demo/test.png' %}&#034; alt=&#034;Image g&#233;n&#233;r&#233;e&#034; /&gt; &lt;footer style=&#034;text-align:right&#034;&gt; &lt;a href=&#034;{% url 'home' %}&#034;&gt;Back&lt;/a&gt; &lt;/footer&gt; {% endblock content %} &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; manage.py #!/usr/bin/env python import os import sys if __name__ == &#034;__main__&#034;: os.environ.setdefault(&#034;DJANGO_SETTINGS_MODULE&#034;, &#034;essai.settings&#034;) sys.path.append('/opt/RDkit_2016_03_1') from django.core.management import execute_from_command_line execute_from_command_line(sys.argv) &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;You should now get a working rdkit + django installation in the developper mode for django.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; (venv)python manage.py runserver &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Reminder:&lt;/strong&gt; 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.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; pip install Pillow &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Only one step is needed to migrate this small application to a real server available for the community.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034; id='Migration-to-apache'&gt;Migration to apache&lt;a class='sommaire-back sommaire-back-4' href='#s-Migration-to-apache' title='Back to the table of contents'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If everything is is place, you can now configure apache to use your virtual environment and rkdit. Assuming the virtual environment was stored in &lt;strong&gt;/home/stephane/example&lt;/strong&gt;, one needs to write the following apache configuration file.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; /etc/apache2/sites-available/rdkitDemo.conf &lt;VirtualHost *:80&gt; 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' &lt;Directory /home/stephane/example/chemoinformaticsDemo/&gt; WSGIProcessGroup essaiRdkit &lt;Files wsgi.py&gt; Options +ExecCGI -MultiViews +FollowSymLinks AllowOverride None Require all granted &lt;/Files&gt; &lt;/Directory&gt; Alias /static /home/stephane/example/chemoinformaticsDemo/static/ &lt;Location /static/&gt; WSGIProcessGroup essaiRdkit Options -Indexes +FollowSymLinks Require all granted &lt;/Location&gt; # Pour s&#233;parer les bons logs de l'ivraie ErrorLog ${APACHE_LOG_DIR}/djangoprojects-error.log CustomLog ${APACHE_LOG_DIR}/djangoprojects-access.log combined &lt;/VirtualHost&gt; &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Remember&lt;/strong&gt; that we opened the door for apache writing with the &lt;strong&gt;chmod 777 to the demo subdir before&lt;/strong&gt;, THIS HAS TO BE CHANGED using a proper location for &lt;i&gt;www-data&lt;/i&gt; user access...&lt;/p&gt;
&lt;p&gt;Everything is now in place, activate the new virtual apache environment and reload apache configuration.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; udo a2ensite rdkitDemo sudo service apache2 reload &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;You should now have a great django web site to play with, just integrate your rdkit applications!&lt;br class='autobr' /&gt;
To ensure everything is up and running, open your brower to the location&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt; http://localhost/essai/ &lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;In case you will be in trouble, check apache logs in &lt;strong&gt;/var/log/apache2/djangoprojects-error.log&lt;/strong&gt;, they are isolated to better identify mistakes and / or copy/pasting errors.&lt;br class='autobr' /&gt;
Enjoy.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="en">
		<title>DockNmine, a Web Portal to Assemble and Analyse Virtual and Experimental Interaction Data</title>
		<link>https://www.steletch.org/spip.php?page=article&amp;id_article=16</link>
		<guid isPermaLink="true">https://www.steletch.org/spip.php?page=article&amp;id_article=16</guid>
		<dc:date>2023-08-17T16:19:55Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>en</dc:language>
		<dc:creator>S. T&#233;letch&#233;a</dc:creator>



		<description>
&lt;p&gt;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. &lt;br class='autobr' /&gt;
You can find the complete article online, do not hesitate to contact me for further explanations, demands, comments, etc. &lt;br class='autobr' /&gt;
You can also browse it directly at the webserver address http://www.ufip.univ-nantes.fr/tools/docknmine. &lt;br class='autobr' /&gt;
Enjoy!&lt;/p&gt;


-
&lt;a href="https://www.steletch.org/spip.php?page=rubrique&amp;id_rubrique=5" rel="directory"&gt;Articles&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;You can find the &lt;a href='https://www.mdpi.com/1422-0067/20/20/5062' target=&#034;_blank&#034;&gt;complete article online&lt;/a&gt;, do not hesitate to contact me for further explanations, demands, comments, etc.&lt;/p&gt;
&lt;p&gt;You can also browse it directly at the webserver address &lt;a class=&#034;spip_url spip_out auto&#034; href='http://www.ufip.univ-nantes.fr/tools/docknmine' rel=&#034;nofollow external&#034;&gt;http://www.ufip.univ-nantes.fr/tools/docknmine&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
