Пример #1
0
def get_contributions(ctc, dall, dctc, ltemp):
    if ctc not in dctc.keys(): return None
    # Only one conformer?
    if len(dctc[ctc]._itcs) == 1:
        itc, weight = dctc[ctc]._itcs[0]
        dchi = {itc: [1.0 for T in ltemp]}
        return dchi
    # Get total partition function
    V0, V1, PFN = dall["pfn"]["%s.msho" % ctc]
    # Get ratios
    dchi = {}
    for itc, weight in dctc[ctc]._itcs:
        # Get individual partition functions
        try:
            V0i, V1i, PFNi = dall["pfn"][PN.struckey(ctc, itc)]
            # Calculate contribution
            dE = (V1i - V1)
            exp_arg = [-dE / pc.KB / T for T in ltemp]
            ratio_pfn = [weight * pfi / pftot for pfi, pftot in zip(PFNi, PFN)]
            chi_i = [
                aa * fncs.exp128(bb) for aa, bb in zip(ratio_pfn, exp_arg)
            ]
            dchi[itc] = np.array(chi_i)
        except:
            exception = Exc.LostConformer(Exception)
            exception._var = PN.struckey(ctc, itc)
            raise exception
    # Return data
    return dchi
Пример #2
0
def get_TSratios(ctc, itcs, V1TS, QTS, ltemp, dall):
    '''
    ratio = QTS(i)/QTS * exp(-dE(i) * beta)
    '''
    exception = Exc.LostConformer(Exception)
    tst_ratios = {}
    for itc, weight in itcs:
        key = PN.struckey(ctc, itc)
        if key not in dall["pfn"].keys():
            exception._var = key
            raise exception
        V0_i, V1_i, Q_i = dall["pfn"][key]
        ratio = [0.0 for T in ltemp]
        dE = (V1_i - V1TS)
        for idx, T in enumerate(ltemp):
            ratio[idx] = weight * Q_i[idx] / QTS[idx] * np.exp(-dE / KB / T)
        tst_ratios[itc] = ratio
    # get individual data
    return tst_ratios