vidjil issueshttps://gitlab.inria.fr/vidjil/vidjil/-/issues2021-04-15T18:38:01+02:00https://gitlab.inria.fr/vidjil/vidjil/-/issues/2043Avoir la longueur d'un clone relative à un jeu de primers / ou une/deux featu...2021-04-15T18:38:01+02:00Thonier FlorianAvoir la longueur d'un clone relative à un jeu de primers / ou une/deux features quelconquesDemande d'Elizabeth : Elle souhaite avoir la visualisation des genescan mais que les longeurs indiquées soit celles par rapport aux primers biomed utilisés.
J'ai pris le temps de réfléchir un peu à la demande d'Elizabeth. L'idée serait...Demande d'Elizabeth : Elle souhaite avoir la visualisation des genescan mais que les longeurs indiquées soit celles par rapport aux primers biomed utilisés.
J'ai pris le temps de réfléchir un peu à la demande d'Elizabeth. L'idée serait de replacer les positions des primers relative pour chaque segment, et donc de faire un nouveau calcul a peu près similaire à celui de la longueur des CDR3.
Pour ça il faut lister les primers pour chaque locus et leur positions relatives. Soit il y a la possibilité de faire ça dans l'algo directement (pas flexible du tout), soit il est possible de faire ça dans le browser.
L'avantage du browser repose sur la non redondance de l’information, et la possibilité de switcher à la volée entre les différents type de primers (biomed2, bientôt biomed3), et pourquoi pas imaginer des primers en dev ou tiers aussi (fourni dans ce cas par l'utilisateur dans un format adapté).
@magiraud @mikael-sWeb 2021.05Thonier FlorianThonier Florian2021-03-09https://gitlab.inria.fr/vidjil/vidjil/-/issues/2003Le résultat de la segmentation change selon le contexte2019-11-23T05:29:48+01:00Vidjil TeamLe résultat de la segmentation change selon le contexteExemple : http://rbx.vidjil.org/browser/index.html?patient=3837&config=2
On prend le gros clone et les petits clones autour. La moitié a un D trouvé, pas l'autre moitié. Le D fait 22bp il n'est pas trouvé dès qu'il y a une erreur/mutati...Exemple : http://rbx.vidjil.org/browser/index.html?patient=3837&config=2
On prend le gros clone et les petits clones autour. La moitié a un D trouvé, pas l'autre moitié. Le D fait 22bp il n'est pas trouvé dès qu'il y a une erreur/mutation. Or si on exporte ces séquences et qu'on fait tourner le -c segment ou, même, Vidjil avec les mêmes options que sur le serveur (et même avec le vidjil présent sur le serveur)... on ne trouve pas la même segmentation.
Voir le test 88c6e92
***
N'y aurait-il pas un test de e-valeur pour le D qui dépende du nombre de reads ? (dans le test on passe de 2D trouvés avec un seul read, contre 0 D trouvé avec 11 reads)
***
> N'y aurait-il pas un test de e-valeur pour le D qui dépende du nombre de reads ?
Oui... et je pense bien que ce n'est pas un bug, mais une feature (introduite par e6ffb91). C'est précisément pour cela qu'est fait la E-value, non ? On fait strictement la même chose pour la FineSegmentation V/J ("multiplier" dans FineSegmenter()).
Le multiplier est
- nb_reads_for_evalue pour -c segment (pour V/J comme pour D)
- sort_clones.size() pour -c clones (Aïe, je me rends compte qu'il n'y est pas pour V/J, vidjil.cpp:1413 !!!)
Ce multiplier dit bien le nombre de segmentation que l'on fait, bref ce qu'il faut pour transformer la p-valeur en e-valeur.
Après, peut-être que le calcul des p-valeurs du D est trop stringent (voir tâche réouverte).
***
Et on a même une dépendance encore plus vicieuse que celle au nombre de reads : passer de -z 100 à -z 1000 peut faire dé-segmenter une séquence... C'est la vie. Voir si IgBlast a aussi ce type de comportement.
***
Pourquoi le multiplier devrait-il être le nombre de clones plutôt que le nombre de séquences réellement segmentées ?
***
Qu'on n'ait pas les mêmes résultats entre 10M de reads (fine segmentés) et 10 reads, je comprends bien : on change de plusieurs ordres de grandeur. Mais qu'on n'ait pas les mêmes résultats entre 1 read, 6 reads et 11 reads, j'ai plus de mal. Peut-être est-ce juste un problème de seuil de E-valeur
***
> Mais qu'on n'ait pas les mêmes résultats entre 1 read, 6 reads et 11 reads, j'ai plus de mal
Tout à fait, il faut comprendre ce qu'il se passe, et il y a peut-être des bugs
> Pourquoi le multiplier devrait-il être le nombre de clones plutôt que le nombre de séquences réellement segmentées ?
Oui, l'estimation actuelle est trop stricte. Est-ce que cela devrait être un max entre sort_clones.size() et max_clones ?
***
>Oui, l'estimation actuelle est trop stricte. Est-ce que cela devrait être un max entre sort_clones.size() et max_clones ?
J'aurais dit un min ;) Ce qui importe c'est le nombre de séquences qu'on va réellement segmenter.
***
Oui, tout à fait, un min !
J'étais plus en forme hier soir (cela m'a étonné d'ailleurs, c'était après 3 verres, ce a quoi je ne suis pas habitué :-)
***
@magiraud @mikael-sAlgo -- Importanthttps://gitlab.inria.fr/vidjil/vidjil/-/issues/3405Choses sur lesquelles il y a eu du travail et qui seraient à boucler2018-07-20T19:06:11+02:00Mathieu GiraudChoses sur lesquelles il y a eu du travail et qui seraient à bouclerun tag ?
cc @mikael\-sun tag ?
cc @mikael\-shttps://gitlab.inria.fr/vidjil/vidjil/-/issues/2475Réduire le nombre de requêtes pour la requête Sample_Set2024-02-06T11:57:18+01:00Ryan HerbertRéduire le nombre de requêtes pour la requête Sample_SetDans la même veine que #2439 il serait bien de réduire la charge de la BDD, et d'essayer de rendre l'application plus rapide.
Voici ce qu'il se passe du point de vue de la BDD pour une requête de 4 patients (découpée en plusieurs blocks...Dans la même veine que #2439 il serait bien de réduire la charge de la BDD, et d'essayer de rendre l'application plus rapide.
Voici ce qu'il se passe du point de vue de la BDD pour une requête de 4 patients (découpée en plusieurs blocks à mesure que j'identifie les requêtes) :
``` SQL
SELECT 1
SET FOREIGN_KEY_CHECKS=1
SET sql_mode='NO_BACKSLASH_ESCAPES'
SELECT auth_membership.id, auth_membership.user_id, auth_membership.group_id FROM auth_membership WHERE (auth_membership.user_id = 1)
SELECT auth_group.id, auth_group.role, auth_group.description FROM auth_group WHERE (auth_group.id = 1)
SELECT auth_group.id, auth_group.role, auth_group.description FROM auth_group WHERE (auth_group.id = 2)
SELECT auth_group.id, auth_group.role, auth_group.description FROM auth_group WHERE (auth_group.id = 3)
commit
```
Ces requêtes sont de `self.has_permission()` dans `vidjil_accessible_query()`. Le but étant de vérifier si l'utilisateur a les accès "admin" pour cette table et cette action:
``` SQL
SELECT auth_membership.group_id FROM auth_membership WHERE (auth_membership.user_id = 1)
SELECT auth_permission.group_id FROM auth_permission WHERE (((auth_permission.name = 'read') AND (auth_permission.table_name = 'patient')) AND (auth_permission.record_id = 0))
```
Je suis admin, donc on renvoi tous les patients:
``` SQL
SELECT patient.id, patient.first_name, patient.last_name, patient.birth, patient.info, patient.id_label, patient.creator, patient.sample_set_id FROM patient WHERE (patient.id > 0) ORDER BY patient.id DESC LIMIT 51 OFFSET 0
```
Ici c'est un appel à `load_permissions()`, qui fait appel à `vidjil_accessible_query()` deux fois (pour charger tous les patients/runs/sets en mémoire et stocker la permission):
``` SQL
SELECT auth_membership.group_id FROM auth_membership WHERE (auth_membership.user_id = 1)
SELECT auth_permission.group_id FROM auth_permission WHERE (((auth_permission.name = 'read') AND (auth_permission.table_name = 'patient')) AND (auth_permission.record_id = 0))
SELECT patient.id FROM patient WHERE (patient.id > 0)
SELECT auth_membership.group_id FROM auth_membership WHERE (auth_membership.user_id = 1)
SELECT auth_permission.group_id FROM auth_permission WHERE (((auth_permission.name = 'admin') AND (auth_permission.table_name = 'patient')) AND (auth_permission.record_id = 0))
SELECT patient.id FROM patient WHERE (patient.id > 0)
```
Encore un appel à `load_permissions()` cette fois-ci pour les permissions anon. On n'est pas "admin" car les admins doivent voir les vrais noms de leurs patients :) :
``` SQL
SELECT auth_membership.group_id FROM auth_membership WHERE (auth_membership.user_id = 1)
SELECT auth_permission.group_id FROM auth_permission WHERE (((auth_permission.name = 'read') AND (auth_permission.table_name = 'patient')) AND (auth_permission.record_id = 0))
SELECT patient.id FROM patient WHERE (patient.id > 0)
SELECT auth_membership.group_id FROM auth_membership WHERE (auth_membership.user_id = 1)
SELECT auth_permission.group_id FROM auth_permission WHERE (((auth_permission.name = 'anon') AND (auth_permission.table_name = 'patient')) AND (auth_permission.record_id = 0))
SELECT auth_membership.group_id FROM auth_permission, auth_membership WHERE ((((auth_membership.user_id = 1) AND (auth_membership.group_id = auth_permission.group_id)) AND (auth_permission.record_id = 0)) AND (auth_permission.name = 'anon'))
SELECT patient.id FROM patient WHERE ((patient.id IN (SELECT auth_permission.record_id FROM auth_permission, auth_membership WHERE (((((auth_membership.user_id = 1) AND (auth_membership.group_id IN (1))) AND (auth_membership.group_id = auth_permission.group_id)) AND (auth_permission.name = 'access')) AND (auth_permission.table_name = 'patient')))) OR (patient.id IN (SELECT auth_permission.record_id FROM auth_permission, group_assoc, auth_membership WHERE ((((((auth_membership.user_id = 1) AND (auth_membership.group_id IN (1))) AND (auth_membership.group_id = group_assoc.second_group_id)) AND (group_assoc.first_group_id = auth_permission.group_id)) AND (auth_permission.name = 'access')) AND (auth_permission.table_name = 'patient')))))
```
Ici on a des vérifications d'existence effectuées dans les fonctions `can_view_info()`:
``` SQL
SELECT patient.id, patient.first_name, patient.last_name, patient.birth, patient.info, patient.id_label, patient.creator, patient.sample_set_id FROM patient WHERE (patient.id = 11) LIMIT 1 OFFSET 0
SELECT patient.id, patient.first_name, patient.last_name, patient.birth, patient.info, patient.id_label, patient.creator, patient.sample_set_id FROM patient WHERE (patient.id = 10) LIMIT 1 OFFSET 0
SELECT patient.id, patient.first_name, patient.last_name, patient.birth, patient.info, patient.id_label, patient.creator, patient.sample_set_id FROM patient WHERE (patient.id = 9) LIMIT 1 OFFSET 0
SELECT patient.id, patient.first_name, patient.last_name, patient.birth, patient.info, patient.id_label, patient.creator, patient.sample_set_id FROM patient WHERE (patient.id = 8) LIMIT 1 OFFSET 0
```
Ces requêtes sont relativement raisonnables. Récupèrent les noms des créateurs et les tailles des sample sets:
``` SQL
SELECT patient.id, auth_user.last_name FROM auth_user, patient WHERE ((patient.creator = auth_user.id) AND (patient.id IN (8,9,10,11)))
SELECT patient.id, sequence_file.size_file FROM sample_set_membership, patient, sequence_file WHERE (((sample_set_membership.sample_set_id = patient.sample_set_id) AND (sequence_file.id = sample_set_membership.sequence_file_id)) AND (patient.id IN (8,9,10,11)))
```
`load_config_information` contient deux `vidjil_accessible_query`:
``` SQL
SELECT auth_membership.group_id FROM auth_membership WHERE (auth_membership.user_id = 1)
SELECT auth_permission.group_id FROM auth_permission WHERE (((auth_permission.name = 'read') AND (auth_permission.table_name = 'config')) AND (auth_permission.record_id = 0))
SELECT auth_membership.group_id FROM auth_membership WHERE (auth_membership.user_id = 1)
SELECT auth_permission.group_id FROM auth_permission WHERE (((auth_permission.name = 'admin') AND (auth_permission.table_name = 'config')) AND (auth_permission.record_id = 0))
SELECT patient.id, config.name, config.id, fused_file.fused_file FROM patient, config, fused_file WHERE ((((patient.sample_set_id = fused_file.sample_set_id) AND (fused_file.config_id = config.id)) AND ((config.id >
0) OR (config.id > 0))) AND (patient.id IN (8,9,10,11)))
```
`load_permitted_groups()`:
``` SQL
SELECT patient.id, auth_group.role FROM auth_group, auth_permission, patient WHERE ((((((patient.id = auth_permission.record_id) OR (auth_permission.record_id = 0)) AND (auth_permission.table_name = 'patient')) AND (auth_permission.name = 'access')) AND (auth_group.id = auth_permission.group_id)) AND (patient.id IN (8,9,10,11)))
```
`load_anon_permissions()`... On n'avait pas fait ça plus haut ??? :
``` SQL
SELECT patient.id FROM auth_group, auth_permission, patient, auth_membership WHERE (((((((auth_permission.name = 'anon') AND (auth_permission.table_name = 'patient')) AND (patient.id = auth_permission.record_id)) AND (auth_group.id = auth_permission.group_id)) AND (auth_membership.user_id = 1)) AND (auth_membership.group_id = auth_group.id)) AND (patient.id IN (8,9,10,11)))
```
On charge tous les utilisateurs ? Pas trouvé dans le code... :
``` SQL
SELECT auth_user.id, auth_user.first_name, auth_user.last_name, auth_user.email, auth_user.password, auth_user.registration_key, auth_user.reset_password_key, auth_user.registration_id FROM auth_user WHERE (auth_user.id > 1)
```
Encore des vérifications d'existence... Pas trouvé l'endroit dans le code:
``` SQL
SELECT patient.id, patient.first_name, patient.last_name, patient.birth, patient.info, patient.id_label, patient.creator, patient.sample_set_id FROM patient WHERE (patient.id = 11) LIMIT 1 OFFSET 0
SELECT patient.id, patient.first_name, patient.last_name, patient.birth, patient.info, patient.id_label, patient.creator, patient.sample_set_id FROM patient WHERE (patient.id = 10) LIMIT 1 OFFSET 0
SELECT patient.id, patient.first_name, patient.last_name, patient.birth, patient.info, patient.id_label, patient.creator, patient.sample_set_id FROM patient WHERE (patient.id = 9) LIMIT 1 OFFSET 0
SELECT patient.id, patient.first_name, patient.last_name, patient.birth, patient.info, patient.id_label, patient.creator, patient.sample_set_id FROM patient WHERE (patient.id = 8) LIMIT 1 OFFSET 0
```
Vérifie si l'utilisateur a le droit de créer des patients/runs/sets :
``` SQL
SELECT auth_membership.group_id FROM auth_permission, auth_membership WHERE ((((auth_membership.user_id = 1) AND (auth_membership.group_id = auth_permission.group_id)) AND (auth_permission.record_id = 0)) AND (auth_permission.name = 'create'))
commit
```
A identifier:
``` SQL
SELECT 1
SET FOREIGN_KEY_CHECKS=1
SET sql_mode='NO_BACKSLASH_ESCAPES'
SELECT auth_membership.id, auth_membership.user_id, auth_membership.group_id FROM auth_membership WHERE (auth_membership.user_id = 1)
SELECT auth_group.id, auth_group.role, auth_group.description FROM auth_group WHERE (auth_group.id = 1)
SELECT auth_group.id, auth_group.role, auth_group.description FROM auth_group WHERE (auth_group.id = 2)
SELECT auth_group.id, auth_group.role, auth_group.description FROM auth_group WHERE (auth_group.id = 3)
commit
```Ryan HerbertRyan Herberthttps://gitlab.inria.fr/vidjil/vidjil/-/issues/2326Export csv avec clusters2018-07-20T19:02:36+02:00Mathieu GiraudExport csv avec clustersMichael Svaton ~"PRA-Prague" se sert régulièrement de l'export csv (et fait du R ensuite).
L'export ne tient pas compte des clusters/merges : il aimerait avoir une colonne de plus pour les clusters.
cc @mikael-s @RyanHerbMichael Svaton ~"PRA-Prague" se sert régulièrement de l'export csv (et fait du R ensuite).
L'export ne tient pas compte des clusters/merges : il aimerait avoir une colonne de plus pour les clusters.
cc @mikael-s @RyanHerbhttps://gitlab.inria.fr/vidjil/vidjil/-/issues/2153Supprimer GERMLINES_REGULAR / _INCOMPLETE suite à -i ?2019-02-12T13:57:51+01:00Mathieu GiraudSupprimer GERMLINES_REGULAR / _INCOMPLETE suite à -i ?Dans ce qui arrive bientôt :
```
-c clones -g germline/homo-sapiens.g -i -2 -3 data/Stanford_S22.fasta # (basic usage, detect the locus for each read, including unusual/unexpected recombinations)
-c clones -g germline/hom...Dans ce qui arrive bientôt :
```
-c clones -g germline/homo-sapiens.g -i -2 -3 data/Stanford_S22.fasta # (basic usage, detect the locus for each read, including unusual/unexpected recombinations)
-c clones -g germline/homo-sapiens.g:IGH -3 data/Stanford_S22.fasta # (restrict to IGH complete locus)
```
J'aimerais supprimer `-i` (le mettre par défaut) : le mécanisme de filter est plus générique (`:IGH` ou `:IGH,IGH+`) , et l'interaction entre `-i` et le filter est confuse (actuellement `:IGH,IGH+` ne sélectionne pas `IGH+` si on ne met pas `-i`...)
Dans mes rêves les plus fous, je voudrais même supprimer `-2` et le mettre par défaut, mais non, ce n'est pas raisonnable et c'est une porte-dans-le-nez. @mikael-shttps://gitlab.inria.fr/vidjil/vidjil/-/issues/1847Afficher le SHA1 du git browser et server quelque part depuis le web2019-11-22T18:19:15+01:00Vidjil TeamAfficher le SHA1 du git browser et server quelque part depuis le webCe serait utile pour la prod, pour beta, pour test...
***
@nobodyCe serait utile pour la prod, pour beta, pour test...
***
@nobodyMathieu GiraudMathieu Giraud