Exemple #1
0
def pair_f(f, rtimes, std_sizes, similarity, deviation=False):
    """ match rtimes to std_sizes

        return: [ (rtime, size), ... ] or
                [ (rtime, size, f(rtime), dev), ... ]

    """

    rtimes = list(reversed(rtimes))
    std_sizes = list(reversed(std_sizes))
    similarity = list(reversed(similarity))

    S = generate_scores(std_sizes, rtimes, similarity, f)

    result = dp(S, -5e-3)

    matches = result['matches']
    aligned_peaks = [(rtimes[j], std_sizes[i]) for i, j in matches]

    if not deviation:
        return aligned_peaks

    peak_pairs = []
    for (rtime, size) in aligned_peaks:
        rtime_size = f(rtime)
        peak_pairs.append((rtime, size, rtime_size, (size - rtime_size)**2))

    return peak_pairs
Exemple #2
0
def align_dp(rtimes, sizes, similarity, z, rss, order=3):
    """ align ladders with peaks using dynamic programming (global alignment)
        return (dpscore, RSS, Z, ladder_aligned_peaks)
    """

    sizes = list(sorted(sizes, reverse=True))
    rtimes = list(sorted(rtimes, reverse=True))

    dpscore = -1

    while True:

        S = generate_scores(sizes, rtimes, similarity, np.poly1d(z))

        result = dp(S, -5e-3)

        cur_dpscore = result['D'][-1][-1]
        matches = result['matches']

        aligned_peaks = [(sizes[i], rtimes[j]) for i, j in matches]

        # realign

        std_size, peak_sizes = zip(*aligned_peaks)
        cur_zres = estimate_z(peak_sizes, std_size, order)

        if cur_dpscore < dpscore:
            if is_verbosity(4):
                cerr('W: dynamic programming did not converge!!')
            break

        if cur_dpscore == dpscore:
            break

        z = cur_zres.z
        rss = cur_zres.rss
        dpscore = cur_dpscore
        sized_peaks = aligned_peaks

    return DPResult(dpscore, rss, z, sized_peaks)