Example #1
0
def exprl2alignment(exprl):

    """
    @summary: Converts experiments into alignments

    @param exprl: The list of experiments to be converted into an alignment
        objects
    @type exprl: ListType

    @author: Vladimir Likic
    """

    if not is_list(exprl):
        error("the argument is not a list")

    algts = []

    for item in exprl:
        if not isinstance(item, Experiment):
            error("list items must be 'Experiment' instances")
        else:
            algt = Class.Alignment(item)
        algts.append(algt)

    return algts
Example #2
0
def merge_alignments(A1, A2, traces):

    """
    @summary: Merges two alignments with gaps added in from DP traceback

    @param A1: First alignment
    @param A2: Second alignment
    @param traces: DP traceback

    @return: A single alignment from A1 and A2
    @author: Woon Wai Keen
    @author: Vladimir Likic
    @author: Qiao Wang
    """

    # Create object to hold new merged alignment and fill in its expr_codes
    ma = Class.Alignment(None)
    ma.expr_code = A1.expr_code + A2.expr_code

    # create empty lists of dimension |A1| + |A2|
    dimension = len(A1.peakpos) + len(A2.peakpos)
    merged = [ [] for _ in range(dimension) ]
    A1 = A1.peakpos
    A2 = A2.peakpos

    idx1 = idx2 = 0

    # trace can either be 0, 1, or 2
    # if it is 0, there are no gaps. otherwise, if it is 1 or 2,
    # there is a gap in A2 or A1 respectively.

    for trace in traces:

        if trace == 0:
            for i in range(len(A1)):
                merged[i].append(A1[i][idx1])

            for j in range(len(A2)):
                merged[1+i+j].append(A2[j][idx2])

            idx1 = idx1 + 1
            idx2 = idx2 + 1

        elif trace == 1:
            for i in range(len(A1)):
                merged[i].append(A1[i][idx1])

            for j in range(len(A2)):
                merged[1+i+j].append(None)

            idx1 = idx1 + 1

        elif trace == 2:
            for i in range(len(A1)):
                merged[i].append(None)

            for j in range(len(A2)):
                merged[1+i+j].append(A2[j][idx2])

            idx2 = idx2 + 1

    ma.peakalgt = numpy.transpose(merged)
    # sort according to average peak
    ma.peakalgt = list(ma.peakalgt)
    ma.peakalgt.sort(Utils.alignment_compare)
    ma.peakpos = numpy.transpose(ma.peakalgt)

    return ma