Project

General

Profile

Stage refonte python

Sujet de Stage M1, printemps 2026

Titre : Traduction de perl vers python du code d'identification des CRISPR-arrays

La base de données CRISPR-Cas++[1] recense 2 types d'éléments particuliers des génomes procaryotes leur conférant une immunité adaptative contre des éléments génétiques mobiles exogènes (phages ou plasmides), d'une part les CRISPR-arrays (Clustered Regularly Interspaced Short Palindromic Repeats) et d'autre part les gènes codants pour les protéines qui leurs sont associées, les Cas (CRISPR associated proteins).

Cette base de données présente une audience internationale. Ainsi la maintenance des codes informatiques supportant la mise à jour des données (suivant le séquençage de nouveaux génomes) et leur mise à disposition par un serveur web est donc primordiale.
Le code d’identification des CRIPSR-arrays, "CRISPRCasFinder"[2], a été initialement développé en 2001 en langage Perl puis amélioré successivement, toujours en Perl.

Les possibilités apportées par l'IA aujourd'hui permettent d'envisager une refonte de ce code perl dans un langage plus actuel tel que python pour en faciliter sa maintenance.
Le sujet de stage proposé est de mener à bien cette traduction perl vers python et pour cela :
  1. vous disposerez d'un jeu de 400 exemples des CRIPSR-arrays identifiés dans des séquences génomiques (Sup_Dataset5.xls [2]). Vous y sélectionnerez un jeu minimal de séquences reflétant les différentes réponses possibles du logiciel CRISPRCasFinder.
  2. vous lancerez le logiciel sur ce jeu de données réduit pour observer les fichiers produits.
  3. à l'aide d'un processus de profilage de code, vous séparerez les parties "mortes" des parties actives du code.
  4. vous transposerez en langage python ces parties actives. L'utilisation d'une IA générative est fortement conseillée pour cette étape et vous identifierez le (ou les) meilleur(s) outil(s) disponibles pour ce faire.
  5. vous vous attacherez à décrire la configuration de l'environnement logiciel.
  6. enfin, vérifierez la concordance des résultats de la refonte et de la version initiale sur le jeu initial des 400 séquences.
  7. au cas où il resterait du temps, vous inclurez les fonctions python du code dans un gestionnaire de workflow snakemake (ou nextflow)

Des détails supplémentaires concernant les objets biologiques sont proposés en [3] et le code de CRISPRCasFinder est accessible en [4].

Bibliographie-Webographie :
[1] CRISPR-Cas++ : https://crisprcas.i2bc.paris-saclay.fr/
[2] CRISPRCasFinder, an update of CRISRFinder, includes a portable version, enhanced performance and integrates search for Cas proteins 2018 https://doi.org/10.1093/nar/gky425
[3] Eléments génétiques CRISPR et Cas : https://crisprcas.i2bc.paris-saclay.fr/Home/About
[4] code de CRISPRCasFinder : https://crisprcas.i2bc.paris-saclay.fr/Home/Download

Précisions supplémentaires

Données disponibles :
- https://pmc.ncbi.nlm.nih.gov/articles/PMC6030898/ : Sup-Dataset1.xlsx (128 CRISPR start,end, length, etc avec expertise : 103 classe 4 ok + 25 classe 2 faux), Sup-Dataset2.xlsx (140 archaea et 260 bacteria refseqID), Sup-Dataset2.xls (120 profils cas), Sup-Dataset4.xlsx (1263 CRISPR start, end, etc, sans expertise), Sup_Dataset5.xls (400 chr avec evidence level), Sup-Dataset6.xlsx (30 genomes refseqID)

Profilage de code :
- python, scalene : https://anaconda.org/channels/conda-forge/packages/scalene/overview
- perl : https://stackoverflow.com/questions/4371714/how-do-i-profile-my-perl-programs

Qq précisions :
- quid de l'install des outils tiers ? est-ce que l'utilisation du docker permet de modifier le code ?
- travail à partir de la version standalone plutôt que celle directement liée au cluster (dans un docker je crois ?) ? => partir du docker plutôt mais il faudra en demander l'accès à SICS ou BioI2
- établir la liste des génomes du test fonctionnel => choisir un cas de chaque réponse différente dans la liste des 400 génomes => à faire faire par le stagiaire
- est-ce que seulement la refonte de CRISPRCasFinder suffit ou il faut aussi penser aux interactions avec la maj de la DB ? ou encore toutes les options proposées dans la page d'accueil : CrisprCasMeta CRISPRCasdb CRISPRCasdb-Taxo CRISPRCasdb-Blast => seulement CRISPRCas-finder pour l'instant

Quid de l'utilité de la maj ?

dl du code
mais le README du .zip obtenu n'est pas à jour, une version + à jour est sur le github de David Couvin.

pwd:/DATA/CRIPSR_testInstall/
unzip => CRISPRCasFinder-release-4.2.21

test d'install avec le container => erreur fuse2fs

Les liens de dl ne sont pas bons dans le README du dl mais ok dans le github de David.
apptainer par pixi (/DATA/pixi_envs/pix_apptainer)
apptainer="==1.4.5" => ok mais syngularity exec ... ne fonctionne pas, manque fuse2fs (du package e2fsprogs).
ajout du package e2fsprogs dans le toml : ne fonctionne toujours pas

cd /DATA/pixi_envs/pix_apptainer
pixi shell
cd /DATA/CRIPSR_testInstall/CRISPRCasFinder-release-4.2.21
singularity exec -B $PWD CrisprCasFinder.simg perl /usr/local/CRISPRCasFinder/CRISPRCasFinder.pl -so /usr/local/CRISPRCasFinder/sel392v2.so -cf /usr/local/CRISPRCasFinder/CasFinder-2.0.3 -drpt /usr/local/CRISPRCasFinder/supplementary_files/repeatDirection.tsv -rpts /usr/local/CRISPRCasFinder/supplementary_files/Repeat_List.csv -cas -def G -out RES21092020_2 -in install_test/sequence.fasta
INFO:    fuse2fs not found, will not be able to mount EXT3 filesystems
ERROR  : Could not write info to setgroups: Permission denied
ERROR  : Error while waiting event for user namespace mappings: no event received

test d'install sh dans un container ubuntu

idée Chloé: ouvrir un docker ubuntu et y lancer le installer_UBUNTU.sh

doc apptainer sympas (en fr)
doc docker hub

cd /DATA/pixi_envs/pix_apptainer/ ; pixi shell
cd /DATA/CRIPSR_testInstall/CRISPRCasFinder-release-4.2.21
apptainer pull docker://ubuntu:noble-20260113

apptainer inspect ubuntu_noble-20260113.sif 
# org.label-schema.build-arch: amd64
# org.label-schema.build-date: Thursday_12_February_2026_9:0:1_CET
# org.label-schema.schema-version: 1.0
# org.label-schema.usage.apptainer.version: 1.4.5
# org.label-schema.usage.singularity.deffile.bootstrap: docker
# org.label-schema.usage.singularity.deffile.from: ubuntu:noble-20260113
# org.opencontainers.image.ref.name: ubuntu
# org.opencontainers.image.version: 24.04

apptainer run ubuntu_noble-20260113.sif
# INFO:    fuse2fs not found, will not be able to mount EXT3 filesystems
# ERROR  : Could not write info to setgroups: Permission denied
# ERROR  : Error while waiting event for user namespace mappings: no event received

apptainer buildcfg
# pas grand chose de bon !!! (ex. DATAROOTDIR=/home/conda/feedstock_root/build_artifacts/apptainer_1761826444459/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_p/share )

After v1.4.3: apptainer appears to require SIF files be writable for unprivileged users (FUSE2FS (3): Permission denied) => test avec apptainer 1.4.2 mais ne change pas la réponse du buildcfg.

apptainer exec --cleanenv ubuntu_noble-20260113.sif env => erreur fs2fuse Environment and Metadata doc
Build Environment doc
The cache is created at $HOME/.apptainer/cache by default => ok

$ echo ${CONDA_PREFIX} => ligne vide
(appt_1.4.2)$ echo ${CONDA_PREFIX} => /DATA/pixi_envs/pix_apptainer/.pixi/envs/default

Pixi caches all previously downloaded packages in a cache folder. Linux: $HOME/.cache/rattler => ok https://pixi.prefix.dev/dev/workspace/environment/#caching-packages

transfert installer_UBUNTU en pixi

liste des install du installer_UBUNTU.sh (tar et gcc par défaut mais compilation probablement plus utile si install avec conda/pixi):
accès pixi au 11 février 2026:
"wget" v1.25.0
"curl"? utile pour MACOS, pas forcemant pour ubuntu si wget
"git"? ssi récup de code github mais je ne vois pas cela dans l'installeur
"default-jre"? quel outil a besoin d'une machine virtuelle java ?
"python"? par défaut avec conda, pas avec pixi ?
"parallel" v20260122
"cpanminus" v1.7048 "Comprehensive Perl Archive Network"
"hmmer" v3.4
"emboss" v.6.6.0
"emboss-lib" ne serait pas inclus avec emboss depuis conda ?
"ncbi-blast+" v2.17.0
"bioperl" v1.7.8
"bioperl-run"? 1.007003 (avec perl-bioperl-core v1.007002 ?)
"libdatetime-perl" v1.66
"libxml-simple-perl" perl-xml-simple v2.25 ou perl-libxml-perl v0.08
"libdigest-md5-perl" v2.59
cpanm Unix::Sysexits cpanm ce sont des packages perl ... unix sysexits
cpanm Try::Tiny
cpanm Test::Most
cpanm JSON::Parse
cpanm Class::Struct
cpanm Bio::DB::Fasta
cpanm File::Copy
cpanm Bio::Seq Bio::SeqIO
cpanm Bio::Tools::Run::Alignment::Muscle
"vmatch 3.2.0" v3.2.1
"muscle" muscle v5.3
"prodigal" v2.6.3
"macSyFinder 1.0.5" github pasteur v1.0.5 ou v2.1.6
je ne sais pas comment chercher les package du cpanm dans conda. Qq pistes:
  1. créer un dépôt conda d'un cpanm pour chacun des packages ? probablement trop coûteux + inclus dans un channel perso et non générique (bioconda ou autre)
  2. you can also install most Perl packages via conda. Replace the ':' by '-', lower-case everything, and add 'perl-' to the beginning. (cf. bioinformaticsonline blog) perl-bio-db-hts existe mais pas perl-bio-db-fasta ...
  3. ou faire comme pour les packages R mais avec cpanm : 1) inclure cpanm dans le pixi, 2) pixi shell 3) lancer cpanm 4) installer un par un les modules 5) fermer et relancer le pixi shell.
  4. using-cpanm-to-install-perl-modules-in-a-conda-environment