Exemplo n.º 1
0
def opt_drate_fix_drate_times_b(multiAlign, dRate, tree, qMat, piProb, cList, qRates=[1.]):
    """
    optimization function for rate = (iRate, dRate) based on PIP
    """
    dRateTimesTreeTotalBranchLength = dRate * tree.length()
    res = minimize_scalar(nllk_drate_fix_drate_times_b, args=(multiAlign, dRateTimesTreeTotalBranchLength, tree, qMat, piProb, cList, qRates))
    dRate = res.x
    treeNew = copy.deepcopy(tree)
    treeNew.scale_edges(dRateTimesTreeTotalBranchLength / (dRate * treeNew.length()))
    seqNames = multiAlign.keys()
    nLeaf = len(seqNames)
    cPhi = '-' * nLeaf
    tau = tree.length()
    cListExt = cList + ['-']
    piProbExt = np.append(piProb, 0)
    pc0 = 0
    for qRate in qRates:
        qMatExt = q_to_qext(qMat*qRate, dRate)
        pc0 += prob_msa_one_site(cPhi, seqNames, tree, qMatExt, piProbExt, dRate, cListExt)
    pc0 = pc0 / len(qRates)
    mlen = len(multiAlign.values()[0])
    nu = mlen / (1. - pc0)
    # logPsi = -np.sum(np.log(np.arange(1, mlen+1))) + mlen * np.log(nu) + (pc0 - 1) * nu
    # nu = iRate * (tau + 1. / dRate)
    iRate = nu / (tau + 1. / dRate)
    rate = (iRate, dRate)
    return rate, treeNew
Exemplo n.º 2
0
def opt_drate(multiAlign, tree, qMat, piProb, cList, qRates=[1.]):
    """
    optimization function for rate = (iRate, dRate) based on PIP
    """
    res = minimize_scalar(nllk_drate,
                          args=(multiAlign, tree, qMat, piProb, cList, qRates))
    dRate = res.x
    seqNames = multiAlign.keys()
    nLeaf = len(seqNames)
    cPhi = '-' * nLeaf
    tau = tree.length()
    cListExt = cList + ['-']
    piProbExt = np.append(piProb, 0)
    pc0 = 0
    for qRate in qRates:
        qMatExt = q_to_qext(qMat * qRate, dRate)
        pc0 += prob_msa_one_site(cPhi, seqNames, tree, qMatExt, piProbExt,
                                 dRate, cListExt)
    pc0 = pc0 / len(qRates)
    mlen = len(multiAlign.values()[0])
    nu = mlen / (1. - pc0)
    # logPsi = -np.sum(np.log(np.arange(1, mlen+1))) + mlen * np.log(nu) + (pc0 - 1) * nu
    # nu = iRate * (tau + 1. / dRate)
    iRate = nu / (tau + 1. / dRate)
    rate = (iRate, dRate)
    return rate
Exemplo n.º 3
0
def pc0_from_dRate_and_tree(dRate, seqNames, tree, qMat, piProb, cList, qRates=[1.]):
    """
    calculate P(cPhi) under PIP
    """
    nLeaf = len(seqNames)
    cPhi = '-' * nLeaf
    cListExt = cList + ['-']
    pc0 = 0
    for qRate in qRates:
        qMatExt = q_to_qext(qMat*qRate, dRate)
        piProbExt = np.append(piProb, 0)
        pc0 += prob_msa_one_site(cPhi, seqNames, tree, qMatExt, piProbExt, dRate, cListExt)
    pc0 = pc0 / len(qRates)
    return pc0
Exemplo n.º 4
0
def pc0_from_dRate_and_tree(dRate,
                            seqNames,
                            tree,
                            qMat,
                            piProb,
                            cList,
                            qRates=[1.]):
    """
    calculate P(cPhi) under PIP
    """
    nLeaf = len(seqNames)
    cPhi = '-' * nLeaf
    cListExt = cList + ['-']
    pc0 = 0
    for qRate in qRates:
        qMatExt = q_to_qext(qMat * qRate, dRate)
        piProbExt = np.append(piProb, 0)
        pc0 += prob_msa_one_site(cPhi, seqNames, tree, qMatExt, piProbExt,
                                 dRate, cListExt)
    pc0 = pc0 / len(qRates)
    return pc0