def generate_consensus(session, clone_ids): """Generates consensus CDR3s for clones. :param Session session: The database session :param list clone_ids: The list of clone IDs to assign to groups """ if len(clone_ids) == 0: return for clone in funcs.periodic_commit( session, session.query(Clone).filter(Clone.id.in_(clone_ids)), interval=1000): seqs = session.query( Sequence ).join(SequenceCollapse).filter( Sequence.clone_id == clone.id, SequenceCollapse.copy_number_in_subject > 0 ).all() clone.cdr3_nt = funcs.consensus([s.cdr3_nt for s in seqs]) clone.cdr3_aa = lookups.aas_from_nts(clone.cdr3_nt) clone.germline = generate_germline(session, seqs, clone) session.commit()
def generate_consensus(session, clone_ids): """Generates consensus CDR3s for clones. :param Session session: The database session :param list clone_ids: The list of clone IDs to assign to groups """ if not clone_ids: return for clone in funcs.periodic_commit(session, session.query(Clone).filter( Clone.id.in_(clone_ids)), interval=1000): seqs = session.query(Sequence).join(SequenceCollapse).filter( Sequence.clone_id == clone.id, SequenceCollapse.copy_number_in_subject > 0).all() clone.cdr3_nt = funcs.consensus([s.cdr3_nt for s in seqs]) clone.cdr3_aa = lookups.aas_from_nts(clone.cdr3_nt) clone.germline = generate_germline(session, seqs, clone) clone.overall_total_cnt = sum([s.copy_number for s in seqs]) clone.functional = (clone.cdr3_num_nts % 3 == 0 and '*' not in clone.cdr3_aa and not lookups.has_stop(clone.germline)) session.commit()
def get_ties(self, genes): length = len(self[genes[0]]) key = tuple(sorted(genes)) if key in self.ties: return self.ties[key] step = 1 if self.gene == 'v' else -1 seqs = [self[v].ljust(length, 'N')[::step] for v in genes] cons = funcs.consensus(seqs)[::step] return self.ties.setdefault(key, cons)