Commit 61e9b25e authored by Thonier Florian's avatar Thonier Florian

fuse.py; add a function to compute distributions for smaller clones

link to #3902
parent ce69f30b
Pipeline #81573 passed with stages
in 5 minutes and 49 seconds
......@@ -436,9 +436,9 @@ class ListWindows(VidjilJson):
["clones", "links", "germlines",
"vidjil_json_version"])
obj.d["clones"]=self.fuseWindows(self.d["clones"], other.d["clones"], l1, l2)
obj.d["samples"] = self.d["samples"] + other.d["samples"]
obj.d["reads"] = self.d["reads"] + other.d["reads"]
obj.d["clones"] = self.fuseWindows(self.d["clones"], other.d["clones"], l1, l2)
obj.d["samples"] = self.d["samples"] + other.d["samples"]
obj.d["reads"] = self.d["reads"] + other.d["reads"]
obj.d["diversity"] = self.d["diversity"] + other.d["diversity"]
return obj
......@@ -638,6 +638,32 @@ class ListWindows(VidjilJson):
return obj_dict
def get_distribution(self, top, list_jfile):
""" Compute distributions of clone sequence length on smaller clones """
distributions = []
for jlist in list_jfile:
data = jlist.d
# Make a loop on each timepoint
for t in range(data["samples"].d["number"]):
distrib = defaultdict(lambda:0)
Please register or sign in to reply
for clone in data["clones"]:
if clone.d["top"] <= top:
  • justement, pas de top ici, on veut la distribution sur tous les clones :)

  • Oui , on peut. Cependant, on aura une redondance si on affiche les clones dnas le genescan... Il faudra la prendre en compte pour reduire les diverses valeurs d'autant.

  • Ah oui... tu as raison ! Je voyais l'inégalité dans l'autre sens. Autant laisser cela pour l'instant donc, on réfléchira voir ce qui est le mieux pour le client.

    Edited by Mathieu Giraud
Please register or sign in to reply
continue
# If data haven't been proceed with -y all; sequence will be 0
try:
lenNt = len(clone.d["sequence"])
except:
lenNt = 0
nb_reads = clone.d["reads"][t]
distrib[lenNt] += nb_reads
distributions.append( dict(distrib) )
Please register or sign in to reply
self.d["distributions"] = distributions
return
### some data used for test
......@@ -758,6 +784,7 @@ def main():
#filtre
f = []
list_jfile = [] # Keep for distributions computing
if args.ijson:
from vidjilparser import VidjilParser
......@@ -773,8 +800,8 @@ def main():
else:
jlist = ListWindows()
jlist.load(path_name, args.pipeline)
list_jfile.append(jlist)
f += jlist.getTop(args.top)
  • Mmm... on souhaite justemement ne pas conserver une liste avec tous les json, cela peut être trop gros quand il y a beaucoup de clones. C'est pour cela qu'il y a ici un += .getTop().

    Pourrais-tu faire quelque chose de similaire, sans list_jfile, comme append_distribution(distribution, jlist) ?

  • C'est ce que je précisais dans le commentaire précédent. Je vais décaler le caclul de la distrib au chargement de chaque json, comme ça on peux ensuite les supprimer sans souci.

Please register or sign in to reply
f = sorted(set(f))
if args.ijson:
......@@ -860,6 +887,7 @@ def main():
else :
jlist_fused.d["similarity"] = [];
jlist_fused.get_distribution(args.top, list_jfile)
print("### Save merged file")
jlist_fused.save_json(args.output)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment