<?xml
version="1.0" encoding="utf-8"?>
<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>
	
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://www.steletch.org/spip.php?id_rubrique=2&amp;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>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;nav69e6e1922cbac8.93481252&#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;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Version-1-du-programme-un-script&#034;&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;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Version-2-programme-le-rendre-executable&#034;&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;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Version-2-du-programme-du-script-au-programme&#034;&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;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Version-3-decouper-les-fonctionnalites-du-programme&#034;&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;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Documenter-son-programme&#034;&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;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Version-4-continuer-a-developper-son-programme&#034;&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;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;En-conclusion&#034;&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;/section&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;nav69e6e1936d6e06.49241305&#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;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Renormalizing-a-plot-mostly-angles-between-180-and-180-you-want-it-nbsp&#034;&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;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Subpopulation-for-instance-for-an-angle-where-are-the-points-above-a-nbsp&#034;&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;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Correlation-between-two-states-for-instance-a-sugar-conformation-and-a-nbsp&#034;&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;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Getting-informations-about-points-mean-std-max-min&#034;&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;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Sending-data-through-a-pipe&#034;&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;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Sending-data-through-a-fifo&#034;&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;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Other-sites-with-tips&#034;&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;/section&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>How popular is a programming language (in bioinformatics) ?</title>
		<link>https://www.steletch.org/spip.php?page=article&amp;id_article=7</link>
		<guid isPermaLink="true">https://www.steletch.org/spip.php?page=article&amp;id_article=7</guid>
		<dc:date>2023-06-29T14:29:38Z</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;If in doubt, go for Python :-) &lt;br class='autobr' /&gt;
There are many ways to compare the &#034;popularity&#034; of programming languages used nowadays. It can be monitored from the demands of companies nearby you, from the relationships you may have access to (aka &#034;the developpers&#034;), or even by following the guidance of university teachers. &lt;br class='autobr' /&gt;
Since this is a complex problem, there is no easy answer to this question. For a rapid comparison, you can for instance use google trends to compare PHP and Python queries over time. (&#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-3&#034; id=&#034;nav69e73e1f4b2be3.66509354&#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-The-TIOBE-index&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#The-TIOBE-index&#034; class=&#034;spip_ancre&#034;&gt;The TIOBE index&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-PYPL-PopularitY-of-Programming-Language&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#PYPL-PopularitY-of-Programming-Language&#034; class=&#034;spip_ancre&#034;&gt;PYPL - PopularitY of Programming Language&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-In-conclusion&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#In-conclusion&#034; class=&#034;spip_ancre&#034;&gt;In conclusion&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;If in doubt, go for Python :-)&lt;/p&gt;
&lt;p&gt;There are many ways to compare the &#034;popularity&#034; of programming languages used nowadays. It can be monitored from the demands of companies nearby you, from the relationships you may have access to (aka &#034;the developpers&#034;), or even by following the guidance of university teachers.&lt;/p&gt;
&lt;p&gt;Since this is a complex problem, there is no easy answer to this question. For a rapid comparison, you can for instance use google trends to compare PHP and Python queries over time.&lt;/p&gt;
&lt;p&gt;This google search bounds your analysis to google queries. Albeit being popular, they only capture part of the problem... How to get better data then ?&lt;/p&gt;
&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;The-TIOBE-index&#034;&gt;&lt;h3 class=&#034;spip&#034; id='The-TIOBE-index'&gt;The TIOBE index&lt;a class='sommaire-back sommaire-back-3' href='#s-The-TIOBE-index' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To compare programming data, why not asking a company dedicated to providing development solutions for hackers ?&lt;/p&gt;
&lt;p&gt;There comes the TIOBE index : &lt;a href=&#034;https://www.tiobe.com/tiobe-index&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://www.tiobe.com/tiobe-index&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;From this index, Java, C, and python are the TOP 3 programming languages in september 2018. Python usage is rapidly and steadily increasing, as was also remarked on Stack Overflow last year (&lt;a href=&#034;https://stackoverflow.blog/2017/09/06/incredible-growth-python/&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://stackoverflow.blog/2017/09/06/incredible-growth-python/&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Two different sources, same conclusion, Python usage is growing. What if there was some bias from those sources ?&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;PYPL-PopularitY-of-Programming-Language&#034;&gt;&lt;h3 class=&#034;spip&#034; id='PYPL-PopularitY-of-Programming-Language'&gt;PYPL - PopularitY of Programming Language&lt;a class='sommaire-back sommaire-back-3' href='#s-PYPL-PopularitY-of-Programming-Language' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If you need another way of getting the trends, PYPL analyses differently the data found. I'm not to comment on this approach, but you can find the details in their FAQ and explanations why their results are slightly different from others.&lt;/p&gt;
&lt;p&gt;In their rankings, Python comes first, followed by Java (decreasing) and JavaScript (increasing). In short, the ranking is different, but Python is again important.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;In-conclusion&#034;&gt;&lt;h3 class=&#034;spip&#034; id='In-conclusion'&gt;In conclusion&lt;a class='sommaire-back sommaire-back-3' href='#s-In-conclusion' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This rapid post is there to keep a track of reference sources where you can find the information on programming languages trends.&lt;/p&gt;
&lt;p&gt;As of September 2018, high-level languages are still getting more and more popular, as Java+Python+PHP represent more than 50 % of the total languages referenced (PYPL) or 25% of engineer languages (TIOBE). Surprisingly, they are just followed by very-old-but-thought-to-be-obsolete C/C++ (6 % for PYPL, 22% for TIOBE).&lt;/p&gt;
&lt;p&gt;If you understand the programming paradigms pertaining to this small list of languages + some practical expertise on some of them, it seems you are ready for the future, i.e. the next 5 years in the computational world (&lt;a href=&#034;https://prezi.com/_mu9uml7kaap/computational-world/&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://prezi.com/_mu9uml7kaap/computational-world/&lt;/a&gt;).&lt;/p&gt;&lt;/section&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Parall&#233;lisation rapide de code (bio)python</title>
		<link>https://www.steletch.org/spip.php?page=article&amp;id_article=3</link>
		<guid isPermaLink="true">https://www.steletch.org/spip.php?page=article&amp;id_article=3</guid>
		<dc:date>2023-06-29T09:17:05Z</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;Comment ex&#233;cuter facilement un programme plus rapidement sur un ordinateur moderne ? &lt;br class='autobr' /&gt;
Voici les commandes rapides pour transformer un programme monot&#226;che en python en programme capable d'utiliser tous les processeurs de votre machine. &lt;br class='autobr' /&gt;
Programme exemple monot&#226;che en biopython &lt;br class='autobr' /&gt;
Le code simplifi&#233; ci-dessous permet de lire l'ensemble des transcrits du transcriptome de Physarum polycephalum autrement connu sous le nom de BLOB, vous pouvez trouver une pr&#233;sentation sur YouTube de ce petit (&#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-4&#034; id=&#034;nav69c8a36c57e436.10293690&#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-Comment-executer-facilement-un-programme-plus-rapidement-sur-un-ordinateur-nbsp&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Comment-executer-facilement-un-programme-plus-rapidement-sur-un-ordinateur-nbsp&#034; class=&#034;spip_ancre&#034;&gt;Comment ex&#233;cuter facilement un programme plus rapidement sur un ordinateur moderne ?&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Programme-exemple-monotache-en-biopython&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Programme-exemple-monotache-en-biopython&#034; class=&#034;spip_ancre&#034;&gt;Programme exemple monot&#226;che en biopython&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Programme-parallelise&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Programme-parallelise&#034; class=&#034;spip_ancre&#034;&gt;Programme parall&#233;lis&#233;&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;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Comment-executer-facilement-un-programme-plus-rapidement-sur-un-ordinateur-nbsp&#034;&gt;&lt;h3 class=&#034;spip&#034; id='Comment-executer-facilement-un-programme-plus-rapidement-sur-un-ordinateur-nbsp'&gt;Comment ex&#233;cuter facilement un programme plus rapidement sur un ordinateur moderne ?&lt;a class='sommaire-back sommaire-back-4' href='#s-Comment-executer-facilement-un-programme-plus-rapidement-sur-un-ordinateur-nbsp' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Voici les commandes rapides pour transformer un programme monot&#226;che en python en programme capable d'utiliser tous les processeurs de votre machine.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Programme-exemple-monotache-en-biopython&#034;&gt;&lt;h3 class=&#034;spip&#034; id='Programme-exemple-monotache-en-biopython'&gt;Programme exemple monot&#226;che en biopython&lt;a class='sommaire-back sommaire-back-4' href='#s-Programme-exemple-monotache-en-biopython' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Le code simplifi&#233; ci-dessous permet de lire l'ensemble des transcrits du transcriptome de &lt;i&gt;Physarum polycephalum&lt;/i&gt; autrement connu sous le nom de BLOB, vous pouvez trouver une pr&#233;sentation sur YouTube de ce petit organisme par Audrey DUSSOTOUR : &lt;a href=&#034;https://www.youtube.com/watch?v=wjzEMIox_a8&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://www.youtube.com/watch?v=wjzEMIox_a8&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#!/usr/bin/env python3 from Bio import SeqIO def processTranscrit(identifiant): try: r = SeqIO.read(f&#034;{identifiant}.fasta&#034;, &#034;fasta&#034;) print(r.id) except Exception as e: print(f&#034; **** Erreur pour traiter {identifiant} : {e}&#034;) def main(): proteome = &#034;proteome_physarum.fasta&#034; for r in SeqIO.parse(proteome, &#034;fasta&#034;): processTranscrit(r.id) if __name__ == &#034;__main__&#034;: main() &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ce programme va lire le fichier avec biopython (voir une excellente introduction par Olivier Dameron et Gr&#233;gory Farrant : &lt;a href=&#034;https://inria.hal.science/hal-01095475&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://inria.hal.science/hal-01095475&lt;/a&gt; ), extraire les s&#233;quences d'int&#233;r&#234;t une par une, puis les traiter avec la fonction processTranscrit qui pour l'exemple ne fait que l'affichage de l'identifiant de la s&#233;quence.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Programme-parallelise&#034;&gt;&lt;h3 class=&#034;spip&#034; id='Programme-parallelise'&gt;Programme parall&#233;lis&#233;&lt;a class='sommaire-back sommaire-back-4' href='#s-Programme-parallelise' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Pour parall&#233;liser notre code o&#249; pour le moment une boucle monot&#226;che est pr&#233;sente dans la fonction main(), il suffit de faire appel &#224; la biblioth&#232;que &lt;strong&gt;multiprocessing&lt;/strong&gt; de python en d&#233;but de code :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;# Multiprocessing du calcul # https://docs.python.org/fr/3/library/multiprocessing.html import multiprocessing as mp from multiprocessing import Process, Pool, TimeoutError &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La boucle de la fonction main() faisant appel &#224; la fonction processTranscrit(identifiant) devient ainsi :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt; pool = mp.Pool(mp.cpu_count()/2) pool.map(processTranscrit, [r.id for r in SeqIO.parse(proteome, &#034;fasta&#034;)]) pool.close() &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il faut tout d'abord cr&#233;er un Pool qui va indiquer le nombre de t&#226;ches &#224; ex&#233;cuter, soit le nombre de c&#339;ur divis&#233; par deux dans mon cas, pour n'utiliser que les processeurs physiques, ajouter toutes les t&#226;ches &#224; r&#233;aliser avec la fonction &lt;strong&gt;map&lt;/strong&gt; qui fait appel aux compr&#233;hension de listes en python, puis de lancer le calcul avec la m&#233;thode close().&lt;/p&gt;
&lt;p&gt;Le code s'ex&#233;cute ainsi en parall&#232;le sur 4 t&#226;ches, threads en anglais, sur ma machine, le temps de calcul initial qui d&#233;passait une journ&#233;e est ainsi descendu &#224; moins de 6 heures...&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Pour-aller-plus-loin&#034;&gt;&lt;h3 class=&#034;spip&#034; id='Pour-aller-plus-loin'&gt;Pour aller plus loin&lt;a class='sommaire-back sommaire-back-4' href='#s-Pour-aller-plus-loin' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Une explication plus compl&#232;te et en anglais est disponible sur le site &lt;a href=&#034;https://www.analyticsvidhya.com/blog/2021/04/a-beginners-guide-to-multi-processing-in-python/&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://www.analyticsvidhya.com/blog/2021/04/a-beginners-guide-to-multi-processing-in-python/&lt;/a&gt;&lt;/p&gt;&lt;/section&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Making use of BLAST, example on the COVID-19 genome</title>
		<link>https://www.steletch.org/spip.php?page=article&amp;id_article=1</link>
		<guid isPermaLink="true">https://www.steletch.org/spip.php?page=article&amp;id_article=1</guid>
		<dc:date>2023-06-28T15:50:20Z</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;BLAST is a very powerful and widely used method for querying large sequence databases for sequence proximity with a sequence of interest. This difficult problem requires a fast algorithm designed for nucleic and protein sequences only since their alphabet is limited (5 bases for nucleotides, 21 amino acids for protein), but sequence length can be very long (more than 40000 amino). An example of BLAST installation and usage is provided below. &lt;br class='autobr' /&gt;
BLAST Installation &lt;br class='autobr' /&gt;
Basic Local Alignment (&#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;nav69c8a36c70fe98.52825412&#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-BLAST-Installation&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#BLAST-Installation&#034; class=&#034;spip_ancre&#034;&gt;BLAST Installation&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Data-retrieval-Sars-Cov-2-genome-Sars-Cov-1-Hemaglutinin-Esterase&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Data-retrieval-Sars-Cov-2-genome-Sars-Cov-1-Hemaglutinin-Esterase&#034; class=&#034;spip_ancre&#034;&gt;Data retrieval : Sars-Cov-2 genome, Sars-Cov-1 Hemaglutinin-Esterase&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-SARS-Cov-2-complete-genome&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#SARS-Cov-2-complete-genome&#034; class=&#034;spip_ancre&#034;&gt;SARS-Cov-2 complete genome&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Preparing-the-genome-for-BLAST&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Preparing-the-genome-for-BLAST&#034; class=&#034;spip_ancre&#034;&gt;Preparing the genome for BLAST&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Analyzing-the-Results&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Analyzing-the-Results&#034; class=&#034;spip_ancre&#034;&gt;Analyzing the Results&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-What-happens&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#What-happens&#034; class=&#034;spip_ancre&#034;&gt;What happens ?&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a id=&#034;s-Going-Further&#034;&gt;&lt;/a&gt;&lt;a href=&#034;#Going-Further&#034; class=&#034;spip_ancre&#034;&gt;Going Further&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;!--/sommaire--&gt;&lt;p&gt;BLAST is a very powerful and widely used method for querying large sequence databases for sequence proximity with a sequence of interest. This difficult problem requires a fast algorithm designed for nucleic and protein sequences only since their alphabet is limited (5 bases for nucleotides, 21 amino acids for protein), but sequence length can be very long (more than 40000 amino). An example of BLAST installation and usage is provided below.&lt;/p&gt;
&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;BLAST-Installation&#034;&gt;&lt;h3 class=&#034;spip&#034; id='BLAST-Installation'&gt;BLAST Installation&lt;a class='sommaire-back sommaire-back-7' href='#s-BLAST-Installation' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Basic Local Alignment Search Tool executables can be found online from the NCBI server : &lt;a class=&#034;spip_url spip_out auto&#034; href='https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/' rel=&#034;nofollow external&#034;&gt;https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/&lt;/a&gt; but if you are using a Linux-based system, it is often as easy as&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt;sudo apt install ncbi-blast+&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Once downloaded and installed, you'll get a list of software for performing your sequence queries.&lt;/p&gt;
&lt;ul class=&#034;spip&#034;&gt; &lt;li&gt;blastn : searching in a nucleotide database from a nucleotide query&lt;/li&gt; &lt;li&gt;blastp : searching in a protein database from an amino acids query&lt;/li&gt; &lt;li&gt;blastx : searching in a protein database from a translated nucleic sequence&lt;/li&gt; &lt;li&gt;tblastn : searing in a nucleotide database from a translated amino acids query&lt;/li&gt; &lt;li&gt;When possible, I use protein queries on protein databases, since this is more efficient :&lt;/li&gt;
&lt;/ul&gt;&lt;ul class=&#034;spip&#034;&gt; &lt;li&gt;three nucleotides define a codon, and thus one amino acid&lt;/li&gt; &lt;li&gt;some mutation are synonymous, i.e. they do not change the amino acid&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Data-retrieval-Sars-Cov-2-genome-Sars-Cov-1-Hemaglutinin-Esterase&#034;&gt;&lt;h3 class=&#034;spip&#034; id='Data-retrieval-Sars-Cov-2-genome-Sars-Cov-1-Hemaglutinin-Esterase'&gt;Data retrieval : Sars-Cov-2 genome, Sars-Cov-1 Hemaglutinin-Esterase&lt;a class='sommaire-back sommaire-back-7' href='#s-Data-retrieval-Sars-Cov-2-genome-Sars-Cov-1-Hemaglutinin-Esterase' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;All SARS-Cov-2 sequences are regrouped on the COVID-19 NCBI dedicated portal, and more specifically, the initial SARS-Cov-2 genome deposited on January, 13th, 2020 is accessible under the reference NC_045512.&lt;/p&gt;
&lt;p&gt;This sequence is coming from the discovery of SARS-Cov-2 published in Nature in February : Wu, F., Zhao, S., Yu, B. et al. A new coronavirus associated with human respiratory disease in China. Nature 579, 265&#8211;269 (2020). &lt;a class=&#034;spip_url spip_out auto&#034; href='https://doi.org/10.1038/s41586-020-2008-3' rel=&#034;nofollow external&#034;&gt;https://doi.org/10.1038/s41586-020-2008-3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As of writing the genome has been revised on July, 18th, 2020. The reference SARS-Cov-2 reference Genome is thus NC_045512.2. The core sequence has not been modified, only the virus name.&lt;br class=&#034;autobr&#034; /&gt;
The complete nucleotide sequence of the virus is provided below in zip format for convenience :&lt;/p&gt;
&lt;p&gt;&lt;a class=&#034;spip_url spip_out auto&#034; href='https://web.archive.org/web/20230325065144/http://www.steletch.org/IMG/zip/sars-cov-2-nc_045512.2.fasta.zip' rel=&#034;nofollow external&#034;&gt;https://web.archive.org/web/20230325065144/http://www.steletch.org/IMG/zip/sars-cov-2-nc_045512.2.fasta.zip&lt;/a&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;SARS-Cov-2-complete-genome&#034;&gt;&lt;h3 class=&#034;spip&#034; id='SARS-Cov-2-complete-genome'&gt;SARS-Cov-2 complete genome&lt;a class='sommaire-back sommaire-back-7' href='#s-SARS-Cov-2-complete-genome' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Since we want to search for the presence (or absence) of and Hemalutinin-Esterase gene, as found in other SARS-Cov genomes (or in other viral genomes), we take the reference protein sequence of this protein from the Human coronavirus OC43 (HCoV-OC43) strain, entry A0A482K8Y4.&lt;br class=&#034;autobr&#034; /&gt;
The sequence (in fasta format) of the protein is easily accessible under the &#034;Sequence&#034; tab in Uniprot, but we also provide the link here for convenience (again as a zipped file).&lt;/p&gt;
&lt;p&gt;&lt;a class=&#034;spip_url spip_out auto&#034; href='https://web.archive.org/web/20230325065144/http://www.steletch.org/IMG/zip/a0a482k8y4.fasta.zip' rel=&#034;nofollow external&#034;&gt;https://web.archive.org/web/20230325065144/http://www.steletch.org/IMG/zip/a0a482k8y4.fasta.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hemagglutinin-esterase of Human coronavirus OC43 &lt;/strong&gt;&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Preparing-the-genome-for-BLAST&#034;&gt;&lt;h3 class=&#034;spip&#034; id='Preparing-the-genome-for-BLAST'&gt;Preparing the genome for BLAST&lt;a class='sommaire-back sommaire-back-7' href='#s-Preparing-the-genome-for-BLAST' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To execute the search in a reasonable time, BLAST needs to have the database sequence mostly in fasta format (text) pre-processed into 3 binary files :&lt;/p&gt;
&lt;ul class=&#034;spip&#034;&gt; &lt;li&gt;nsq : sequence data&lt;/li&gt; &lt;li&gt;pin : sequence indices&lt;/li&gt; &lt;li&gt;phr : complete identifiers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The command to execute is :&lt;/p&gt;
&lt;p&gt;&lt;code class=&#034;spip_code spip_code_inline&#034; dir='ltr'&gt;makeblastdb -in sars-cov-2-NC_045512.2.fasta -out sars2Genome -dbtype nucl&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The result of this command is :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt;Building a new DB, current time: 11/20/2020 13:41:28 New DB name: /home/stephane/Nextcloud/Enseignement/Bioinformatique/BLAST/sars2Genmoe New DB title: sars-cov-2-NC_045512.2.fasta Sequence type: Nucleotide Keep MBits: T Maximum file size: 1000000000B Adding sequences from FASTA; added 1 sequences in 0.000279903 seconds.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Since we took the raw nucleotide genome, there is only one (big !) sequence found and indexed.&lt;br class=&#034;autobr&#034; /&gt;
Please note that we have very restricted use of the makeblastdb command, more options are available in the online documentation.&lt;br class=&#034;autobr&#034; /&gt;
To search for protein results from a protein query into a nucleotide query we use tblastn (as indicated above) :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt;blast -query A0A482K8Y4.fasta -db sars2Genome&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Analyzing-the-Results&#034;&gt;&lt;h3 class=&#034;spip&#034; id='Analyzing-the-Results'&gt;Analyzing the Results&lt;a class='sommaire-back sommaire-back-7' href='#s-Analyzing-the-Results' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The BLAST output by default is quite verbose. The complete log is available on the following file :&lt;/p&gt;
&lt;p&gt;&lt;a class=&#034;spip_url spip_out auto&#034; href='https://web.archive.org/web/20230325065144/http://www.steletch.org/IMG/zip/hequery.blast.zip' rel=&#034;nofollow external&#034;&gt;https://web.archive.org/web/20230325065144/http://www.steletch.org/IMG/zip/hequery.blast.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;BLAST result on SARS-Cov-2, query from Hemaglutinin-Esterase of HCoV-OH43&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;An extract of the results are presented below :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt;&gt; NC_045512.2 Severe acute respiratory syndrome coronavirus 2 isolate Wuhan-Hu-1, complete genome Length=29903 Score = 21.6 bits (44), Expect = 1.3, Method: Compositional matrix adjust. Identities = 9/24 (38%), Positives = 14/24 (58%), Gaps = 6/24 (25%) Frame = -2 Query 27 VSHVNGDWFL------FGDSRSDC 44 +SH++ W+L G +RSDC Sbjct 24274 ISHLHSKWYL*CSTCTKGPTRSDC 24203&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The first line indicates the identifier found for the identified positions. Since we did not process the genome, we only have the entire genome and not the annotated one (containing ORFs, transcripts, and proteins).&lt;/p&gt;
&lt;p&gt;The line starting with &#034;Score&#034; contains BLAST information concerning the reliability of the search, If you are not familiar with these scores, you can have a look at the NCBI YouTube channel.&lt;/p&gt;
&lt;p&gt;Important information to consider is the Expect value (1.3, which is not good), but also the Frame, -2, indicative that an offset is required from the initial genome translation site to find the open reading frame.&lt;br class=&#034;autobr&#034; /&gt;
The lines starting with Query and Sbject (Subject) indicate where a match between the query sequence (the Hemaglutinin-Esterase from HCov-OC43) and the reference genome is found.&lt;/p&gt;
&lt;p&gt;This shows that in the HE sequence, from position 27 to position 44, a match is found in the SARS-CoV-2 genome at positions between 24274 and 24203. Please remark that the numbering is reversed in the output, this is indicative of the putative presence os this sequence on the reverse-complement strand of the RNA.&lt;/p&gt;
&lt;p&gt;The rest of the BLAST output is shown below.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;
&lt;pre&gt; &lt;code&gt;Score = 21.6 bits (44), Expect = 1.4, Method: Compositional matrix adjust. Identities = 7/18 (39%), Positives = 11/18 (61%), Gaps = 0/18 (0%) Frame = -2 Query 271 TKAICFNKRKDFTPVQVV 288 +K IC N +DF V ++ Sbjct 23452 SKLICMNSNRDFCAVNIL 23399 Score = 21.2 bits (43), Expect = 1.9, Method: Compositional matrix adjust. Identities = 12/46 (26%), Positives = 22/46 (48%), Gaps = 3/46 (7%) Frame = -3 Query 140 YRSLTFVNVPYVYNGSAQ---ATAFCKSGSLVLNNPVYIAPQANSG 182 Y +L + V +YN + CKS V++ +++ PQA + Sbjct 19686 YFTLLSIKVSLIYNIKSHIF*TLKSCKSVPEVISIKLFVNPQAKAS 19549 Score = 21.2 bits (43), Expect = 1.9, Method: Compositional matrix adjust. Identities = 10/27 (37%), Positives = 14/27 (52%), Gaps = 6/27 (22%) Frame = +1 Query 13 IIGSLGFHNPPTNVVSHVNGDWFLFGD 39 I+G L N +NG+W+ FGD Sbjct 14041 IVGVLTLDN------QDLNGNWYDFGD 14103 Score = 19.2 bits (38), Expect = 7.1, Method: Compositional matrix adjust. Identities = 8/27 (30%), Positives = 13/27 (48%), Gaps = 0/27 (0%) Frame = +2 Query 288 VDSRWNNARQSDNMTAVACQPPYCYFR 314 +D RWN R + Q +C+F+ Sbjct 26744 LDHRWNCYRNGLSCRLDVAQLLHCFFQ 26824&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;In short, it is possible to find very tiny portions of the HE protein at the genomic level of SARS-Cov-2 (although barely significantly). If you still want to go deeper into BLAST interpretation, here is a nice video on it !&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;What-happens&#034;&gt;&lt;h3 class=&#034;spip&#034; id='What-happens'&gt;What happens ?&lt;a class='sommaire-back sommaire-back-7' href='#s-What-happens' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If we glue up the results, this means that we can find some matches in the SARS-Cov-2 genome, respectively on 24 amino acids + 18 + 46 +27 + 27, for a total of 142, or about one-third of the total protein length. But this difficult to imagine. This would require the virus polymerase to do multiple back-and-forth movements between frames (-2, then -3, then +1 and +2).&lt;/p&gt;
&lt;p&gt;This seems very unlikely...&lt;/p&gt;
&lt;p&gt;On a side note, there have been examples of Quality Control RNA Replication or Transcription &#034;slippery&#034; of coronaviruses, but if you want to know more about the story, please see the wonderful video of Pr. Britt Glaunsinger from Berkeley about that and coronaviruses, in general.&lt;/p&gt;
&lt;/section&gt;&lt;section class=&#034;sommaire-section sommaire-section_niveau1 sommaire-section_h3&#034; aria-labelledby=&#034;Going-Further&#034;&gt;&lt;h3 class=&#034;spip&#034; id='Going-Further'&gt;Going Further&lt;a class='sommaire-back sommaire-back-7' href='#s-Going-Further' title='Retour au sommaire'&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To sum up, we discovered how to install and use BLAST, then applied it to an existing question and answered it. There is no Hemaglutinin-Esterase in SARS-CoV-2, contrary to some other beta coronaviruses.&lt;br class=&#034;autobr&#034; /&gt;
If you still want to know more about BLAST but also about SARS-CoV-2 ongoing research efforts, you can visit the following links :&lt;/p&gt;
&lt;ul class=&#034;spip&#034;&gt; &lt;li&gt;23 new ORFs detected by ribosome profiling. Finkel, Y., Mizrahi, O., Nachshon, A. et al. The coding capacity of SARS-CoV-2. Nature (2020).&lt;/li&gt; &lt;li&gt;Mutations : D614G (and more ?)&lt;/li&gt; &lt;li&gt;Other mutations and large virus follow-up&lt;/li&gt; &lt;li&gt;Deep docking protocol for large screening of potential inhibitors (1.3 billion compounds !)&lt;/li&gt; &lt;li&gt;Become a JEDI and participate in the 1 billion COVID challenge&lt;/li&gt; &lt;li&gt;Join the ongoing fight against COVID-19 research efforts in Europe &lt;a class=&#034;spip_url spip_out auto&#034; href='https://www.exscalate4cov.eu/' rel=&#034;nofollow external&#034;&gt;https://www.exscalate4cov.eu/&lt;/a&gt; or worldwide &lt;a class=&#034;spip_url spip_out auto&#034; href='https://covid.postera.ai/' rel=&#034;nofollow external&#034;&gt;https://covid.postera.ai/&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Structure information listed by the NCBI : &lt;a class=&#034;spip_url spip_out auto&#034; href='https://www.ncbi.nlm.nih.gov/Structure/SARS-CoV-2.html' rel=&#034;nofollow external&#034;&gt;https://www.ncbi.nlm.nih.gov/Structure/SARS-CoV-2.html&lt;/a&gt;&lt;/li&gt; &lt;li&gt;All SARS-CoV-2 proteins with an atomic structure (and more) : &lt;a class=&#034;spip_url spip_out auto&#034; href='https://www.rcsb.org/news?year=2020&amp;article=5e74d55d2d410731e9944f52&amp;feature=true' rel=&#034;nofollow external&#034;&gt;https://www.rcsb.org/news?year=2020&amp;article=5e74d55d2d410731e9944f52&amp;feature=true&lt;/a&gt;&lt;/li&gt; &lt;li&gt;The dedicated Uniprot Portal for COVID-19 : &lt;a class=&#034;spip_url spip_out auto&#034; href='https://covid-19.uniprot.org/' rel=&#034;nofollow external&#034;&gt;https://covid-19.uniprot.org/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/section&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
