| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| fr:impilopedia:genex:rnaseq:airway_project:fetching_raw_data [2026/06/15 06:54] – [Protocole - Téléchargement sur serveur et traitement sur grappe de calcul] foisys | fr:impilopedia:genex:rnaseq:airway_project:fetching_raw_data [2026/06/15 09:41] (Version actuelle) – [Protocole - Téléchargement simple] foisys |
|---|
| ====== Mise en pratique des méthodes d'analyse de l'expression génique grâce aux données utilisées par le package airway: obtenir les fichiers de séquence bruts du projet (1) ====== | ====== Mise en pratique des méthodes d'analyse de l'expression génique grâce aux données utilisées par le package airway: obtenir les fichiers de séquence bruts du projet ====== |
| |
| ===== Introduction ===== | ===== Introduction ===== |
| Est-ce que vos fichiers proviennent d'une plateforme de séquençage ou bien d'un entrepôt de données comme Séquence Read Archives? La plupart du temps, ça importe peu car il faudra qu'ils arrivent à votre plateforme via l'Internet. De plus, il faudra télécharger beaucoup de fichiers, jusqu'à 2 par échantillon si il a été séquencé //paired-end// donc ça fait beaucoup de tâches distinctes de téléchargement... C'est ici que l'automatisation des tâches via un script Python, seul ou en exécution sur une grappe de calcul, sera d'un usage fort utile ;-) Nous présenterons deux méthodes: un script pour l'ensemble des tâches de téléchargement ou bien un script qui créera autant de tâches que d'échantillons pour soumettre à une. grappe de calcul. | Est-ce que vos fichiers proviennent d'une plateforme de séquençage ou bien d'un entrepôt de données comme Séquence Read Archives? La plupart du temps, ça importe peu car il faudra qu'ils arrivent à votre plateforme via l'Internet. De plus, il faudra télécharger beaucoup de fichiers, jusqu'à 2 par échantillon si il a été séquencé //paired-end// donc ça fait beaucoup de tâches distinctes de téléchargement... C'est ici que l'automatisation des tâches via un script Python, seul ou en exécution sur une grappe de calcul, sera d'un usage fort utile ;-) Nous présenterons deux méthodes: un script pour l'ensemble des tâches de téléchargement ou bien un script qui créera autant de tâches que d'échantillons pour soumettre à une. grappe de calcul. |
| |
| Pour commencer, il nous faut une liste des fichiers à télécharger à partir d'un serveur distant. Pour notre projet, les auteurs nous disent que les infos se trouvent sur //Gene Expression Omnibus// sous l'identificateur GSE52778. En inspectant cette page, on voit que les données de séquences brutes se trouvent dans le site //Sequence Read Archive// avec l'identificateur SRP033351. On y est presque! En allant sur le [[https://www.ncbi.nlm.nih.gov/Traces/study|site de la page de sélection des données du SRA]], on fait une recherche avec cet identificateur et on tombe sur la page contenant l'information que nous cherchons!! Dans le panneau //Select//, on voit deux boutons: Metadata ou bien Accession List; cliquer sur Metadata pour obtenir un fichier CSV plus informatif, ''SraRunTable.csv'', qui nous servira pour la suite. Allez mettre ce fichier dans l'arborescence de votre serveur; par ex., créer un répertoire appelé ''z.misc.files'' sous ''/shares/data/rnaseq/airways'' | Pour commencer, il nous faut une liste des fichiers à télécharger à partir d'un serveur distant. Pour notre projet, les auteurs nous disent que les infos se trouvent sur //Gene Expression Omnibus// sous l'identificateur GSE52778. En inspectant cette page, on voit que les données de séquences brutes se trouvent dans le site //Sequence Read Archive// avec l'identificateur SRP033351. On y est presque! En allant sur le [[https://www.ncbi.nlm.nih.gov/Traces/study|site de la page de sélection des données du SRA]], on fait une recherche avec cet identificateur et on tombe sur la page contenant l'information que nous cherchons!! Dans le panneau //Select//, on voit deux boutons: Metadata ou bien Accession List; cliquer sur Metadata pour obtenir un fichier CSV plus informatif, ''SraRunTable.csv'', qui nous servira pour la suite. Allez mettre ce fichier dans l'arborescence de votre serveur; par ex., créer un répertoire appelé ''z.misc.files'' sous ''/shares/data/rnaseq/airways''. |
| | |
| | * La suite: plus à venir... |
| ===== Protocole - Pour commencer ===== | ===== Protocole - Pour commencer ===== |
| |
| * Une idée sur la marche à suivre: nous avons construit les fichiers index sous ''/shares/data'', un répertoire accessible pour tous dans le système de fichiers. alors construisons un nouveau répertoire pour y mettre tous les projets de transcriptomique basés sur le séquençage ài haut débit: | * Une idée sur la marche à suivre: nous avons construit les fichiers index sous ''/shares/data'', un répertoire accessible pour tous dans le système de fichiers. alors construisons un nouveau répertoire pour y mettre tous les projets de transcriptomique basés sur le séquençage à haut débit: |
| <sxh bash> | <sxh bash> |
| % mkdir /shares/data/rnaseq | % mkdir /shares/data/rnaseq |
| |
| * Après les opérations de téléchargement des fichiers, on reviendra retoucher les permissions. En principe, on veut pouvoir voir le contenu des répertoires et lire leur contenu ainsi que lire les fichiers qui s'y trouvent. Comme l'usager est le propriétaire des fichiers, il peut se retirer des permissions d'écriture des répertoires et fichiers pour éviter d'en écraser le contenu et d'y mettre des fichiers pas rapport. Évidemment, il faut voir comment les usagers du groupe d'usagers auquel appartient l'usager créateur et le reste des usagers du système peuvent accéder aux données. | * Après les opérations de téléchargement des fichiers, on reviendra retoucher les permissions. En principe, on veut pouvoir voir le contenu des répertoires et lire leur contenu ainsi que lire les fichiers qui s'y trouvent. Comme l'usager est le propriétaire des fichiers, il peut se retirer des permissions d'écriture des répertoires et fichiers pour éviter d'en écraser le contenu et d'y mettre des fichiers pas rapport. Évidemment, il faut voir comment les usagers du groupe d'usagers auquel appartient l'usager créateur et le reste des usagers du système peuvent accéder aux données. |
| * On y reviendra lors du processus de téléchargement via le scrip de démonstration. | |
| |
| * Dans le cas de l'analyse, le simple fait que chacun peut la faire selon ses propres hypothèses, on va plutôt mettre le tout dans notre répertoire ''$HOME'': | * Dans le cas de l'analyse, le simple fait que chacun peut la faire selon ses propres hypothèses, on va plutôt mettre le tout dans notre répertoire ''$HOME'': |
| # Inclure les libraries qui seront nécessaires... | # Inclure les libraries qui seront nécessaires... |
| import csv | import csv |
| import gzip | |
| import os | |
| import shutil | |
| import subprocess | import subprocess |
| import time | import time |
| # Téléchargement | # Téléchargement |
| #********************* | #********************* |
| # Ça ne fonctionnera que si l'application est sur $PATH | # Ça ne fonctionnera que si les applications est sur $PATH |
| # L'utilisation de la méthode run assure que les commandes seront | # L'utilisation de la méthode run assure que les commandes seront |
| # effectuée une à la fois. | # effectuée une à la fois. |
| # Compressons maintenant les fichiers sur notre stockage | # Compressons maintenant les fichiers sur notre stockage |
| # Les outils à venir sont tous capables de lire les fichiers | # Les outils à venir sont tous capables de lire les fichiers |
| # comprimés | # comprimés. |
| | # |
| | # On utilise le progamme bgzip, installé sur Impilo, pour faire |
| | # une compression multi-fils et accélérer le processus. |
| # | # |
| # Comme on fait deux fois la même procédure (sur chaque fichier), | # Comme on fait deux fois la même procédure (sur chaque fichier), |
| for k in range(2): | for k in range(2): |
| k = k+1 | k = k+1 |
| with open(f"{saveF}/{nameF}_{k}.fastq", 'rb') as z_in: | |
| with gzip.open(f"{saveF}/{nameF}_{k}.fastq.gz", 'wb') as z_out: | |
| shutil.copyfileobj(z_in, z_out) | |
| z_out.close() | |
| z_in.close() | |
| # | # |
| # Le fichier non compressé n'est plus utile... | # Pas besoin d'effacer le fichier .fastq; bgzip le fera après la |
| # | # compression |
| os.remove(f"{saveF}/{nameF}_{k}.fastq") | # |
| | subprocess.run(["bgzip","--threads","4",f"{saveF}/{nameF}_{k}.fastq"]) |
| </sxh> | </sxh> |
| |
| * À la fin de l'exécution, vous devriez avoir 32 fichiers dont l'extension se termine par ''_x.fastq.gz'' avec x=1 ou x=2. Les fichiers devraient se trouver dans le bons répertoire avec un nom sous la forme ''traitement_ligneeCellulaire_SRAuid'', ce qui nous facilitera la vie pour la suite :-) | * À la fin de l'exécution, vous devriez avoir 32 fichiers dont l'extension se termine par ''_x.fastq.gz'' avec x=1 ou x=2. Les fichiers devraient se trouver dans le bons répertoire avec un nom sous la forme ''traitement_ligneeCellulaire_SRRxyz'', ce qui nous facilitera la vie pour la suite :-) |
| |
| * De plus, vous devriez avoir pour certains échantillons un autre fichier se terminant simplement par ''.fastq''; ce fichier existe car certains échantillons ont généré plusieurs lectures qui n'ont pas d'équivalent entre les deux fichiers pour toute sorte de raison: séquences techniques comme les codes barres ou bien des séquences d'amorces ou autres séquences sans correspondance . On ne veut pas utiliser ces fichiers donc le paramètre ''--split-3'' nous permet de les retirer en amont plutôt que de devoir le faire post-alignement. | * De plus, vous devriez avoir pour certains échantillons un autre fichier se terminant simplement par ''.fastq'' ou sans extension mais avec le même nom; ce fichier existe car certains échantillons ont généré plusieurs lectures qui n'ont pas d'équivalent entre les deux fichiers pour toute sorte de raison: séquences techniques comme les codes barres ou bien des séquences d'amorces ou autres séquences sans correspondance . On ne veut pas utiliser ces fichiers donc le paramètre ''--split-3'' nous permet de les retirer en amont plutôt que de devoir le faire post-alignement. |
| |
| ===== Protocole - Téléchargement sur serveur et traitement sur grappe de calcul ===== | ===== Protocole - Téléchargement sur serveur et traitement sur grappe de calcul ===== |
| # Le code de ce script est hyper-documenté pour la formation ;-) | # Le code de ce script est hyper-documenté pour la formation ;-) |
| # | # |
| # NOTE: ce script prendra beaucoup de temps pour rouler vu la quantité de | # NOTE: ce script prendra tout de même un certain temps pour rouler |
| # données à récolter. Si nécessaire, utiliser la commande nohup devant | # vu la quantité de données à télécharger. Si nécessaire, utiliser |
| # pour éviter de se faire déconnecter... Ou bien utiliser SLURM si | # la commande nohup devant pour éviter de se faire déconnecter... |
| # vous avez une grappe Super-Clafoutis ou bien votre grappe permet | # |
| # l'accès à l'Internet pour les noeuds de traitement. Les grappes | # La vitesse de réalisation du script dépendra du nombre de noeuds |
| # de Calcul-Québec ne permettent pas l'accès à leurs noeuds de travail... | # de traitement: plus il y en a, plus ça sera rapide :-) |
| # | # |
| # Inclure les libraries qui seront nécessaires... | # Inclure les libraries qui seront nécessaires... |
| import csv | import csv |
| import gzip | |
| import os | |
| import shutil | |
| import subprocess | import subprocess |
| import time | |
| # | # |
| # Pointer cette variable vers la source de votre | # Pointer cette variable vers la source de votre |
| with open(scriptB, "w", encoding="utf-8") as scriptL: | with open(scriptB, "w", encoding="utf-8") as scriptL: |
| scriptL.write(batch) | scriptL.write(batch) |
| |
| # | # |
| # Envoyer le script à sbatch | # Envoyer le script à sbatch |
| </sxh> | </sxh> |
| |
| * Vous devriez voir apparaître vos fichiers SRA dans votre espace de stockage et un ensemble de fichiers en attente d'exécution via la commande ''squeue''. Comme on utilise la méthode ''run()'', on sait que le fichier SRA sera téléchargé avant de mettre en exécution l'extraction/compression des fichiers FASTQ. Une fois les fichiers SRA téléchargés, il ne reste plus qu'à attendre que les scripts bash créés par le script Python s'exécutent :-) | * Vous devriez voir apparaître vos fichiers SRA dans votre espace de stockage et un ensemble de fichiers en attente d'exécution via la commande ''squeue''. Comme on utilise la méthode ''run()'', on sait que le fichier SRA sera téléchargé avant de mettre en exécution l'extraction/compression des fichiers FASTQ. Une fois les fichiers SRA téléchargés, il ne reste plus qu'à attendre que les scripts bash créés par le script Python s'exécutent :-). |
| | |
| | * Il faut faire le ménage ensuite: vérifier que tout s'est bien passé en regardant les fichiers ''.out'', effacer les fichiers de séquences non-appariés dans certains cas et qui ne se terminent pas par ''.fastq.gz'' et effacer les fichiers ''*.sh'' car ils ne sont plus nécessaires. On peut toujours garder les répertoires dont le nom commence par ''SRR'': si nécessaire, on peut y retourner pour récupérer les séquences sous de nouveaux paramètres. |