Différences
Ci-dessous, les différences entre deux révisions de la page.
| 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/14 13:33] – [Protocole - Pour commencer] foisys | fr:impilopedia:genex:rnaseq:airway_project:fetching_raw_data [2026/06/15 09:41] (Version actuelle) – [Protocole - Téléchargement simple] foisys | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== Mise en pratique des méthodes d' | + | ====== Mise en pratique des méthodes d' |
| ===== Introduction ===== | ===== Introduction ===== | ||
| Ligne 13: | Ligne 13: | ||
| 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' | 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' | ||
| - | 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' | + | 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' |
| + | |||
| + | * La suite: plus à venir... | ||
| ===== Protocole - Pour commencer ===== | ===== Protocole - Pour commencer ===== | ||
| - | * Une idée sur la marche à suivre: nous avons construit les fichiers index sous ''/ | + | * Une idée sur la marche à suivre: nous avons construit les fichiers index sous ''/ |
| <sxh bash> | <sxh bash> | ||
| % mkdir / | % mkdir / | ||
| Ligne 32: | Ligne 34: | ||
| * 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' | * 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' | ||
| - | * On y reviendra lors du processus de téléchargement via le scrip de démonstration. | ||
| * Dans le cas de l' | * Dans le cas de l' | ||
| Ligne 70: | Ligne 71: | ||
| # 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 | ||
| Ligne 126: | Ligne 124: | ||
| # Téléchargement | # Téléchargement | ||
| # | # | ||
| - | # Ça ne fonctionnera que si l' | + | # Ça ne fonctionnera que si les applications |
| # L' | # L' | ||
| # effectuée une à la fois. | # effectuée une à la fois. | ||
| Ligne 169: | Ligne 167: | ||
| # 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), | ||
| Ligne 177: | Ligne 178: | ||
| for k in range(2): | for k in range(2): | ||
| k = k+1 | k = k+1 | ||
| - | with open(f" | ||
| - | with gzip.open(f" | ||
| - | | ||
| - | | ||
| - | | ||
| # | # | ||
| - | # | + | # |
| - | # | + | # |
| - | os.remove(f" | + | # |
| + | | ||
| </ | </ | ||
| - | * À la fin de l' | + | * À la fin de l' |
| + | |||
| + | * De plus, vous devriez avoir pour certains échantillons un autre fichier se terminant simplement par '' | ||
| + | |||
| + | ===== Protocole - Téléchargement sur serveur et traitement sur grappe de calcul ===== | ||
| + | |||
| + | * Comme nous avons une liste de tâches répétitives, | ||
| + | |||
| + | * Le script qui suit devrait fonctionner sur une grappe comme Rorqual ou bien sur une grappe Super-Clafoutis. | ||
| + | <sxh python> | ||
| + | # | ||
| + | # fetch_fastq_from_csv_slurm_1.py - Un programme simple pour télécharger des | ||
| + | # fichiers FASTQ directement du Sequence Read Archive du NCBI en | ||
| + | # utilisant les outils de la suite SRA Toolkit et une gappe de calcul | ||
| + | # via SLURM. | ||
| + | # | ||
| + | # Un point important à considérer quand on fait ce travail, c'est la | ||
| + | # structure des données contenues dans le fichier. Dans notre cas | ||
| + | # particulier, | ||
| + | # au long: Untreated, Albuterol, Dexamethasone, | ||
| + | # donc différents de notre structure proposé, alors on devra composer | ||
| + | # avec ça. | ||
| + | # | ||
| + | # Le code de ce script est hyper-documenté pour la formation ;-) | ||
| + | # | ||
| + | # NOTE: ce script prendra tout de même un certain temps pour rouler | ||
| + | # vu la quantité de données à télécharger. Si nécessaire, | ||
| + | # la commande nohup devant pour éviter de se faire déconnecter... | ||
| + | # | ||
| + | # La vitesse de réalisation du script dépendra du nombre de noeuds | ||
| + | # de traitement: plus il y en a, plus ça sera rapide :-) | ||
| + | # | ||
| + | # Inclure les libraries qui seront nécessaires... | ||
| + | import csv | ||
| + | import subprocess | ||
| + | # | ||
| + | # Pointer cette variable vers la source de votre | ||
| + | # fichier SraRunTable.csv | ||
| + | # | ||
| + | csvFile = " | ||
| + | with open(csvFile, | ||
| + | # | ||
| + | # Lire le fichier pour retourner son contenu sous la forme | ||
| + | # d'une collection de dictionnaires via la méthode DictReader. | ||
| + | # C'est important car avec un dictionnaire, | ||
| + | # aux clés, c.-à-d., aux noms de colonnes :-) | ||
| + | # | ||
| + | # Il faut ensuite transformer le contenu en une liste utilisable | ||
| + | # car la méthode csv.DicReader retourne en fait un objet au contenu | ||
| + | # inaccessible... | ||
| + | # | ||
| + | sampleList = list(csv.DictReader(file)) | ||
| + | # | ||
| + | # Imprimons simplement le premier item de la liste pour voir les noms de | ||
| + | # colonne pour faire notre filtration et téléchargement. | ||
| + | # | ||
| + | # Retirez le dièse pour voir le resultat: | ||
| + | # | ||
| + | # | ||
| + | # Vous devriez y trouver des items dans la liste suivante: | ||
| + | # Run: ID unique dans SRA | ||
| + | # cell_line: la source du matériel séquencé | ||
| + | # treatment: quel traitement a été appliqué sur ce matériel | ||
| + | # | ||
| + | # Avec ces champs, on pourra faire le travail :-) | ||
| + | # | ||
| + | # Chemin pour la sauvegarde; adapter selon votre environnement | ||
| + | dlPath = "/ | ||
| + | # | ||
| + | # Liste des répertoires en relation avec les traitements | ||
| + | # | ||
| + | treatment = [{" | ||
| + | # | ||
| + | # Parcourons la liste des échantillons du projet | ||
| + | # | ||
| + | for i in sampleList: | ||
| + | for j in treatment: | ||
| + | if i[" | ||
| + | treat = j.get(i[" | ||
| + | saveF = dlPath+"/" | ||
| + | uid = i[" | ||
| + | cell = i[" | ||
| + | nameF = treat+" | ||
| + | # | ||
| + | # Téléchargement | ||
| + | # | ||
| + | # Ça ne fonctionnera que si l' | ||
| + | # L' | ||
| + | # effectuée une à la fois. | ||
| + | # | ||
| + | # On utilise la procédure suggérée par le NCBI: passer par la | ||
| + | # commande prefetch pour télécharger le fichier binaire compact | ||
| + | # pour l' | ||
| + | # pour en extraire les fichiers FASTQ. | ||
| + | # | ||
| + | # C'est un méthode plus rapide car prefetch vérifie si le | ||
| + | # téléchargement à échouer: il le continue s'il a été arrêté et | ||
| + | # passe par dessus s'il a été complété. | ||
| + | # | ||
| + | # À partir de ce point, l' | ||
| + | # beaucoup de temps... On parle de 16 fichiers à ~1-2Gb chacun; utiliser | ||
| + | # SLURM si possible ;-) | ||
| + | # | ||
| + | | ||
| + | # | ||
| + | # Si nécessaire, | ||
| + | # graces du NCBI ;-) | ||
| + | # | ||
| + | # Retirez le dièse pour mettre un délai dans vos requetes de | ||
| + | # téléchargements. Pas forcément nécessaire si le script est exécuté | ||
| + | # sur un seul ordi car les étapes qui suivront vont prendre du temps. | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # Extraction des fichiers FASTQ - Utilisation de SLURM | ||
| + | # | ||
| + | # | ||
| + | # Le reste du script ne demande pas d' | ||
| + | # on passe à SLURM. Il ne faut pas oublier que sbatch demande | ||
| + | # un script bash et non Python, alors on devra créer un fichier | ||
| + | # pour ensuite le soumettre via sbatch. | ||
| + | # | ||
| + | # Création de l' | ||
| + | # | ||
| + | batch = "# | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | # | ||
| + | # On assume que les applications du SRA Toolkit sont sur le $PATH | ||
| + | # | ||
| + | # Sur Rorqual, il faut charger l' | ||
| + | # dièse des deux lignes suivantes pour que le script fonctionne | ||
| + | # | ||
| + | # | ||
| + | |||
| + | # L' | ||
| + | # 4 fils à la fois sur une grappe Super-Clafoutis. Si votre serveur | ||
| + | # dispose de plus, pourquoi pas en mettre plus ;-) | ||
| + | # | ||
| + | # Remarquer le " | ||
| + | # ligne pour que bash sache que la commande continue sur l' | ||
| + | # ligne :-) | ||
| + | # | ||
| + | | ||
| + | # | ||
| + | # Compressons maintenant les fichiers sur notre stockage | ||
| + | # Les outils à venir sont tous capables de lire les fichiers | ||
| + | # comprimés. | ||
| + | # | ||
| + | # On utilisera bgzip car le programme est multithread par défaut | ||
| + | # donc une accélération de la compression. | ||
| + | # | ||
| + | # Comme on fait deux fois la même procédure (sur chaque fichier), | ||
| + | # on utilise une boucle. La commande range() part à 0 alors il faut | ||
| + | # ajouter 1 pour avoir le nom réel du fichier final. | ||
| + | # | ||
| + | for k in range(2): | ||
| + | k = k+1 | ||
| + | if k==2: | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | | ||
| + | |||
| + | with open(scriptB, | ||
| + | | ||
| + | # | ||
| + | # Envoyer le script à sbatch | ||
| + | # | ||
| + | | ||
| + | </ | ||
| + | |||
| + | * Vous devriez voir apparaître vos fichiers SRA dans votre espace de stockage et un ensemble de fichiers en attente d' | ||
| + | |||
| + | * Il faut faire le ménage ensuite: vérifier que tout s'est bien passé en regardant les fichiers '' | ||