def test_mbar_computeEntropyAndEnthalpy(): """Can MBAR calculate f_k, <u_k> and s_k ??""" for system_generator in system_generators: name, test = system_generator() x_n, u_kn, N_k_output, s_n = test.sample(N_k, mode='u_kn') eq(N_k, N_k_output) mbar = MBAR(u_kn, N_k) results = mbar.computeEntropyAndEnthalpy(u_kn) f_ij = results['Delta_f'] df_ij = results['dDelta_f'] u_ij = results['Delta_u'] du_ij = results['dDelta_u'] s_ij = results['Delta_s'] ds_ij = results['dDelta_s'] fa = test.analytical_free_energies() ua = test.analytical_observable('potential energy') sa = test.analytical_entropies() fa_ij = np.array(np.matrix(fa) - np.matrix(fa).transpose()) ua_ij = np.array(np.matrix(ua) - np.matrix(ua).transpose()) sa_ij = np.array(np.matrix(sa) - np.matrix(sa).transpose()) z = convert_to_differences(f_ij, df_ij, fa) eq(z / z_scale_factor, np.zeros(np.shape(z)), decimal=0) z = convert_to_differences(u_ij, du_ij, ua) eq(z / z_scale_factor, np.zeros(np.shape(z)), decimal=0) z = convert_to_differences(s_ij, ds_ij, sa) eq(z / z_scale_factor, np.zeros(np.shape(z)), decimal=0)
def test_mbar_computeEntropyAndEnthalpy(): """Can MBAR calculate f_k, <u_k> and s_k ??""" for system_generator in system_generators: name, test = system_generator() x_n, u_kn, N_k_output, s_n = test.sample(N_k, mode='u_kn') eq(N_k, N_k_output) mbar = MBAR(u_kn, N_k) f_ij, df_ij, u_ij, du_ij, s_ij, ds_ij = mbar.computeEntropyAndEnthalpy(u_kn) fa = test.analytical_free_energies() ua = test.analytical_observable('potential energy') sa = test.analytical_entropies() fa_ij = np.array(np.matrix(fa) - np.matrix(fa).transpose()) ua_ij = np.array(np.matrix(ua) - np.matrix(ua).transpose()) sa_ij = np.array(np.matrix(sa) - np.matrix(sa).transpose()) z = convert_to_differences(f_ij,df_ij,fa) eq(z / z_scale_factor, np.zeros(np.shape(z)), decimal=0) z = convert_to_differences(u_ij,du_ij,ua) eq(z / z_scale_factor, np.zeros(np.shape(z)), decimal=0) z = convert_to_differences(s_ij,ds_ij,sa) eq(z / z_scale_factor, np.zeros(np.shape(z)), decimal=0)
compute_covariance=True) A_i = results['mu'] dA_ij = results['sigma'] Ca_ij = results['covariances'] print("Averages for state %d" % (i)) print(A_i) print("Uncertainties for state %d" % (i)) print(dA_ij) print("Correlation matrix between observables for state %d" % (i)) print(Ca_ij) print("============================================") print(" Testing computeEntropyAndEnthalpy") print("============================================") results = mbar.computeEntropyAndEnthalpy(u_kn=u_kln, verbose=True) Delta_f_ij = results['Delta_f'] dDelta_f_ij = results['dDelta_f'] Delta_u_ij = results['Delta_u'] dDelta_u_ij = results['dDelta_u'] Delta_s_ij = results['Delta_s'] dDelta_s_ij = results['dDelta_s'] print("Free energies") print(Delta_f_ij) print(dDelta_f_ij) diffs1 = Delta_f_ij - Delta_f_ij_estimated print( "maximum difference between values computed here and in computeFreeEnergies is %g" % (numpy.max(diffs1))) if (numpy.max(numpy.abs(diffs1)) > 1.0e-10):
A_ikn = numpy.zeros([len(observables_single), K, N_k.max()], numpy.float64) for i,observe in enumerate(observables_single): A_ikn[i,:,:] = A_kn_all[observe] for i in range(K): [A_i,d2A_ij] = mbar.computeMultipleExpectations(A_ikn, u_kln[:,i,:]) print "Averages for state %d" % (i) print A_i print "Correlation matrix between observables for state %d" % (i) print d2A_ij print "============================================" print " Testing computeEntropyAndEnthalpy" print "============================================" (Delta_f_ij, dDelta_f_ij, Delta_u_ij, dDelta_u_ij, Delta_s_ij, dDelta_s_ij) = mbar.computeEntropyAndEnthalpy(verbose = True) print "Free energies" print Delta_f_ij print dDelta_f_ij diffs1 = Delta_f_ij - Delta_f_ij_estimated print "maximum difference between values computed here and in computeFreeEnergies is %g" % (numpy.max(diffs1)) if (numpy.max(numpy.abs(diffs1)) > 1.0e-10): print "Difference in values from computeFreeEnergies" print diffs1 diffs2 = dDelta_f_ij - dDelta_f_ij_estimated print "maximum difference between uncertainties computed here and in computeFreeEnergies is %g" % (numpy.max(diffs2)) if (numpy.max(numpy.abs(diffs2)) > 1.0e-10): print "Difference in expectations from computeFreeEnergies" print diffs2 print "Energies"
A_ikn = numpy.zeros([len(observables_single), K, N_k.max()], numpy.float64) for i, observe in enumerate(observables_single): A_ikn[i, :, :] = A_kn_all[observe] for i in range(K): [A_i, d2A_ij] = mbar.computeMultipleExpectations(A_ikn, u_kln[:, i, :]) print "Averages for state %d" % (i) print A_i print "Correlation matrix between observables for state %d" % (i) print d2A_ij print "============================================" print " Testing computeEntropyAndEnthalpy" print "============================================" (Delta_f_ij, dDelta_f_ij, Delta_u_ij, dDelta_u_ij, Delta_s_ij, dDelta_s_ij) = mbar.computeEntropyAndEnthalpy(verbose=True) print "Free energies" print Delta_f_ij print dDelta_f_ij diffs1 = Delta_f_ij - Delta_f_ij_estimated print "maximum difference between values computed here and in computeFreeEnergies is %g" % ( numpy.max(diffs1)) if (numpy.max(numpy.abs(diffs1)) > 1.0e-10): print "Difference in values from computeFreeEnergies" print diffs1 diffs2 = dDelta_f_ij - dDelta_f_ij_estimated print "maximum difference between uncertainties computed here and in computeFreeEnergies is %g" % ( numpy.max(diffs2)) if (numpy.max(numpy.abs(diffs2)) > 1.0e-10): print "Difference in expectations from computeFreeEnergies" print diffs2
results = mbar.computeMultipleExpectations(A_ikn, u_kln[:,i,:], compute_covariance=True) A_i = results['mu'] dA_ij = results['sigma'] Ca_ij = results['covariances'] print("Averages for state %d" % (i)) print(A_i) print("Uncertainties for state %d" % (i)) print(dA_ij) print("Correlation matrix between observables for state %d" % (i)) print(Ca_ij) print("============================================") print(" Testing computeEntropyAndEnthalpy") print("============================================") results = mbar.computeEntropyAndEnthalpy(u_kn = u_kln, verbose = True) Delta_f_ij = results['Delta_f'] dDelta_f_ij = results['dDelta_f'] Delta_u_ij = results['Delta_u'] dDelta_u_ij = results['dDelta_u'] Delta_s_ij = results['Delta_s'] dDelta_s_ij = results['dDelta_s'] print("Free energies") print(Delta_f_ij) print(dDelta_f_ij) diffs1 = Delta_f_ij - Delta_f_ij_estimated print("maximum difference between values computed here and in computeFreeEnergies is %g" % (numpy.max(diffs1))) if (numpy.max(numpy.abs(diffs1)) > 1.0e-10): print("Difference in values from computeFreeEnergies") print(diffs1)
for i,observe in enumerate(observables_single): A_ikn[i,:,:] = A_kn_all[observe] for i in range(K): [A_i,dA_ij,Ca_ij] = mbar.computeMultipleExpectations(A_ikn, u_kln[:,i,:], compute_covariance=True) print "Averages for state %d" % (i) print A_i print "Uncertainties for state %d" % (i) print dA_ij print "Correlation matrix between observables for state %d" % (i) print Ca_ij print "============================================" print " Testing computeEntropyAndEnthalpy" print "============================================" (Delta_f_ij, dDelta_f_ij, Delta_u_ij, dDelta_u_ij, Delta_s_ij, dDelta_s_ij) = mbar.computeEntropyAndEnthalpy(u_kn = u_kln, verbose = True) print "Free energies" print Delta_f_ij print dDelta_f_ij diffs1 = Delta_f_ij - Delta_f_ij_estimated print "maximum difference between values computed here and in computeFreeEnergies is %g" % (numpy.max(diffs1)) if (numpy.max(numpy.abs(diffs1)) > 1.0e-10): print "Difference in values from computeFreeEnergies" print diffs1 diffs2 = dDelta_f_ij - dDelta_f_ij_estimated print "maximum difference between uncertainties computed here and in computeFreeEnergies is %g" % (numpy.max(diffs2)) if (numpy.max(numpy.abs(diffs2)) > 1.0e-10): print "Difference in expectations from computeFreeEnergies" print diffs2 print "Energies"