def load_cell_contigs_from_json(json_file, reference_path, group_key, require_high_conf=True):
"""Returns a list of CellContig objects based on annotations in a json.
The json is assumed to contain a list of AnnotatedContigs (in dict form).
The contigs are sorted and grouped by group_key and each such group is put
into a CellContig object.
group_key must be 'barcode' or 'clonotype'
"""
assert group_key in set(['barcode', 'clonotype'])
annotations = load_contig_list_from_json(open(json_file), reference_path)
cell_contigs = []
key_func = lambda x: x.__getattribute__(group_key)
anno_iter = itertools.groupby(sorted(annotations, key=key_func), key=key_func)
for clonotype_name, contig_annotations in anno_iter:
contigs = []
for new_contig in contig_annotations:
# Note, for consensus contigs is_cell=None
if new_contig.is_cell is not False \
and (new_contig.high_confidence or not require_high_conf):
contigs.append(new_contig)
if len(contigs) > 0:
cell_contigs.append(CellContigs(clonotype_name, contigs))
return cell_contigs
评论列表
文章目录