コード例 #1
0
ファイル: align.py プロジェクト: mr-c/cogent3
    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
コード例 #2
0
    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
コード例 #3
0
ファイル: align.py プロジェクト: cogent3/cogent3
    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)