def align_to_named_seq(self, seqs): """returns alignment to named seq""" if self._moltype and self._moltype != seqs.moltype: seqs = seqs.to_moltype(self._moltype) ref_seq = seqs.get_seq(self._ref_name) aligned = None kwargs = self._kwargs.copy() no_ref_gap = None for i in range(seqs.num_seqs): seq = seqs.seqs[i] if seq.name == self._ref_name: continue result = global_pairwise(ref_seq, seq, **kwargs) if no_ref_gap is None: no_ref_gap = _GapInRef(result.moltype, seqs.moltype.gap) # as we're going to be using a pairwise distance that excludes gaps # eliminating positions with deletions in the reference result = result.filtered(no_ref_gap) aligned = result if aligned is None else aligned.add_from_ref_aln(result) # default to ArrayAlign new = aligned.to_type(array_align=True, moltype=self._moltype) return new
def align_to_named_seq(self, seqs): """returns alignment to named seq""" seqs = seqs.to_moltype(self._moltype) ref_seq = seqs.get_seq(self._ref_name) aligned = None kwargs = self._kwargs.copy() def gap_in_ref(gap_char): gap_char = gap_char[0] def array_ref_gap(x): r = x.flatten()[0] != gap_char return r def standard_ref_gap(x): r = x[0] != gap_char return r func = {"-": standard_ref_gap}.get(gap_char, array_ref_gap) return func no_ref_gap = None for i in range(seqs.num_seqs): seq = seqs.seqs[i] if seq.name == self._ref_name: continue result = global_pairwise(ref_seq, seq, **kwargs) if no_ref_gap is None: gap = result.moltype.alphabet.to_indices(seqs.moltype.gap) no_ref_gap = gap_in_ref(gap) # as we're going to be using a pairwise distance that excludes gaps # eliminating positions with deletions in the reference result = result.filtered(no_ref_gap) if aligned is None: aligned = result.to_type(array_align=False) continue aligned = aligned.add_from_ref_aln( result.to_type(array_align=False)) new = ArrayAlignment(aligned.to_dict(), moltype=seqs.moltype, info=seqs.info) return new
def align_to_named_seq(self, seqs): """returns alignment to named seq""" if self._moltype and self._moltype != seqs.moltype: seqs = seqs.to_moltype(self._moltype) ref_seq = seqs.get_seq(self._ref_name) kwargs = self._kwargs.copy() pwise = [] for seq in seqs.seqs: if seq.name == self._ref_name: continue aln = global_pairwise(ref_seq, seq, **kwargs).to_type(array_align=False) pwise.append(((seq.name, aln))) return pairwise_to_multiple(pwise, ref_seq, self._moltype, info=seqs.info)