Optimisation/evolution code TODOLIST
Formatage code
Gestion des fichiers:
Remplacement
-
utiliser pathlib pour la gestion des fichiers/dossiers et creation répertoire ... (au lieu de subprocess mkdir) -
lire les fichiers compresser ou non (transparant pour l'utilisateur)
Test:
-
check if segments.txt and walks.txt exist ! people may delete them..? also check that all the seg_coord.bed needed are there. -
check that files and dir to create dont exist already, and dont rewrite them. maybe change output files/dict names if necessary -
read input files line by line, do not load the entire file (memory crash)
GFF
-
check that the input gff is in the right order (gene then mrna then exons,cds,utr) => lib GFF -
sort the output gff (gene, then mrna1; then 5'utr, then exon, then cds, then 3'utr, the mrna2, etc) => lib GFF -
fct get_parent l69 graph_gff.py : changer pour rendre plus universel la détection du champ parent. => lib GFF -
pareil pour fct set_note, graph_gff.py line119. emplacement de la note n'est pas universel... pour ces deux cas, chercher "NOTE=" ou "PARENT=" dans les champs séparés par ';' -
encore dans graph_gff.py l 175, ajouter un check si le parent n'est pas trouvé. message d'erreur explicite s'il n'existe pas dans le dict features (pcq gff input pas bon par ex).
Amélioration code:
Global:
-
messages d'erreur explicites ! check formats des input, validité du gfa, etc -
message utilisateur plus verbeux sur les étapes -
ajout des docstrings (IA seb peux le faire facilement) -
paralleliser le transfert quand on traite plusieurs genomes -
Restructuration des classes/fonctions -
utilisation de pickle pour sauvegarder la premiere étape? (dépendra du code) -
store the seg info in one dict
Modification
-
pas faire var et aln si cov et id trop bas; ajouter id et cov dans output var -
améliorer ou supprimer fct count_variations -
mettre des objets plutôt que des listes dans les dictionnaires -
les dict seg_len et seg_seq pourraient etre réunis pour gagner de la place : S1 - [ ] > [len, seq] -
modifier count_variations : je l'ai pas adapté aux doublons dans seg_on_target_genome. l'appeler avec en paramètre le chemin de l'occurence du gène, et pas le gene_id ? -
deux dictionnaires ont la même info, seg_size et seg_len (un dans main, l'autre dans graph_gff)
Relecture
-
check if i clear the dicitonnary for the walks between each loop (for genome in target_genomes) -
regrouper les fct print_var, get_id_cov, et create_line_aln qui ont le même squelette; mettre le meme algo que print_var aux deux autres fct, pour avoir des output cohérents
Remplacement
-
Remplacer argparse par click (choix option actif default ou pas) -
changer stats. ce code ne fonctionne plus, je n'ai pas mis à jour avec les changement dans segments_on_target_genome. tout reprendre. (plus tard ++)
Gestion de l'execution
-
faire get_seg_coord seulement si nécessaire (que le génome source si on veut que le gaf du graphe). -
lancer transfer_on_target seulement si nécessaire (donc pas si on veut que le gaf du graphe). -
Restructuration de code en sous commande?
New features:
-
sortir un gff du génome cible avec les variations (cf notes carnet) -
fct check gfa pour vérifier le format (lignes S, P/W, overlap P, tous les segments des walks sont bien présents dans les lignes S, ...) -
mettre en option de donner un fichier avec la liste des gènes pour lesquels on veut un alignement, et éventuellement le sous graphe ? entre génome ref et les génomes cibles -
accepter graphe avec paths; que les paths sans overlap (le vérifier en amont) -
ajouter les gènes dans des lignes W du gfa ? -
dans variation.txt, ajouter les gènes pour lesquels il y a aucune variation.
Divers
-
reflechir aux id des features dans le gff. il faut changer les id, car ils sont liés à leur assemblage (mais liftoff ne le fait pas je crois) -
pour le graph.gaf : vérifier comment je sors les genes sur le brin - [ ] : "<" ou juste "- [ ] " -
refuser un transfer si le premier exon est absent ??? -
detect_copies, à la fin de la fct : # if the strand changes, it is possible that it is an inversion inside the gene. treat this case later -
output the "unmapped" features, that were not transfered (bad_size,bud_cov_id,not_found) -
output the variation details only for the genes ? and show where the childs are on this. same for alignment???
Documentation
-
update readme -
dépendance outils (bedtools, ....) -
génération docs avec sphinx -
faire un diagramme uml du code, des relations entre les fct (il existe des outils pour faire ça sur du code python)
Bonus
-
message avec le nombre et liste des génommes dans le graph -
barre d'avancement du nombre de génome traité/restant -
detection auto du préprocessing (--coord) -
traitement des génomes en parallele plutot que dans une boucle for? -
tester si deja effectuer pour ne pas relancer tout le processus