Le calcul de la e-valeur devrait prendre en compte le -t
Si on ne garde que x nucléotides pour les germlines V ou J, le calcul de la e-valeur ne doit se faire que sur une longueur inférieure ou égale à x, même si la séquence est beaucoup plus longue : il est impossible d'avoir plus de x k-mers V (et même x - s + 1) par exemple.
ok
Tout doit se faire dans kmerstore.h
- en entrée, les insert() reçoivent et utilisent keep_only : à stocker
- en sortie, getProbabilityAtLeastOrAbove()
68fef14b. Quitte à prendre en compte le -t, autant être plus générique : si on n'a inséré que des choses de 200 ou moins, le calcul devrait prendre en compte ces 200.
Pour faire le changement souhaité, il faut maintenant faire quelque chose du type : int n_max = atMostMaxSizeIndexing(length) - getS() + 1; dans getProbabilityAtLeastOrAbove() Mais j'ai maintenant des doutes : veut-on remplacer vraiment n par n_max dans toute cette fonction ? Est-ce que le index_load n'a pas déjà pris cela en compte ?
Bref, je te laisse voir :-)
Dans une séquence de longueur 200, même si on n'a inséré que des séquences de longueur 100 :
- la proba d'avoir exactement 18 k-mers est toujours la même ?
- et celle d'avoir 150 k-mers ? Elle est faible... mais pas nulle (et d'ailleurs, on trouvera des séquences chimériques avec cela). Est-ce que le but est de mettre cela à zéro ? ou bien est-ce que cela doit être fait finalement dans affectanalyser.cpp:160 ? Qu'est-ce que cela signifie ?
La proba d'avoir 18 k-mers par hasard est plus élevée dans une séquence de longueur 200 que de longueur 100. De manière générale, il existe au moins une valeur t pour laquelle t k-mers dans 100nt est significatif mais pas t dans 200nt.
ok pour la longueur de la séquence observée, mais est-ce que cela dépend de la longueur de la séquence insérée ? (Cette dépendence ne serait-elle pas déjà dans le index_load ?)
En tout cas, si tu penses avoir la formule, vas-y :-)
Je pense que je ne comprends pas ce que tu veux dire :)
Par exemple pour l'instant on calcule la probabilité à gauche sur toute la longueur jusqu'à first_pos_max. Ce qui est très bien puisque cela évite de prendre en compte le N (dans lequel on ne s'attend pas à avoir de k-mers). Là c'est la même chose : on ne veut pas prendre en compte le début du V puisqu'on ne s'attend pas à avoir de k-mers dedans.
Autrement dit, entre un read qui contient 100nt de V et un read qui contient 300nt du même V, on ne devrait pas avoir une e-valeur différente (avec -t 100).
Après réflexion collective, un segment de 200, même avec -t 100, contient aussi un certain nb de kmers "aléatoires" dans les 100 premiers nt, qui fait que le calcul de la e-valeur serait tout de même bon (à peu près).