def test_mbar_computePerturbedFreeEnergeies(): """ testing computePerturbedFreeEnergies """ 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') numN = np.sum(N_k[:2]) mbar = MBAR(u_kn[:2, :numN], N_k[:2]) # only do MBAR with the first and last set results = mbar.computePerturbedFreeEnergies(u_kn[2:, :numN], return_dict=True) f_t, df_t = mbar.computePerturbedFreeEnergies(u_kn[2:, :numN], return_dict=False) fe = results['Delta_f'] fe_sigma = results['dDelta_f'] eq(fe, f_t) eq(fe_sigma, df_t) fe, fe_sigma = fe[0, 1:], fe_sigma[0, 1:] print(fe, fe_sigma) fe0 = test.analytical_free_energies()[2:] fe0 = fe0[1:] - fe0[0] z = (fe - fe0) / fe_sigma eq(z / z_scale_factor, np.zeros(len(z)), decimal=0)
def test_mbar_computePerturbedFreeEnergeies(): """ testing computePerturbedFreeEnergies """ 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') numN = np.sum(N_k[:2]) mbar = MBAR(u_kn[:2,:numN], N_k[:2]) # only do MBAR with the first and last set fe, fe_sigma = mbar.computePerturbedFreeEnergies(u_kn[2:,:numN]) fe, fe_sigma = fe[0,1:], fe_sigma[0,1:] print(fe, fe_sigma) fe0 = test.analytical_free_energies()[2:] fe0 = fe0[1:] - fe0[0] z = (fe - fe0) / fe_sigma eq(z / z_scale_factor, np.zeros(len(z)), decimal=0)
L = numpy.size(K_extra) (f_k_analytical, Delta_f_ij_analytical, A_k_analytical, A_ij_analytical) = GetAnalytical(beta, K_extra, O_extra, observables) if numpy.size(O_extra) != numpy.size(K_extra): raise ParameterError( "O_extra (%d) and K_extra (%d) must have the same dimensions." % (numpy.shape(K_k), numpy.shape(N_k))) unew_kln = numpy.zeros([K, L, numpy.max(N_k)], numpy.float64) for k in range(K): for l in range(L): unew_kln[k, l, 0:N_k[k]] = (K_extra[l] / 2.0) * (x_kn[k, 0:N_k[k]] - O_extra[l])**2 results = mbar.computePerturbedFreeEnergies(unew_kln) Delta_f_ij_estimated = results['Delta_f'] dDelta_f_ij_estimated = results['dDelta_f'] Delta_f_ij_error = Delta_f_ij_estimated - Delta_f_ij_analytical print("Error in free energies is:") print(Delta_f_ij_error) print("Standard deviations away is:") # mathematical manipulation to avoid dividing by zero errors; we don't care # about the diagnonals, since they are identically zero. df_ij_mod = dDelta_f_ij_estimated + numpy.identity(L) stdevs = numpy.abs(Delta_f_ij_error / df_ij_mod) for l in range(L): stdevs[l, l] = 0
print "============================================" print " Testing computePerturbedFreeEnergies" print "============================================" L = numpy.size(K_extra) (f_k_analytical, Delta_f_ij_analytical, A_k_analytical, A_ij_analytical) = GetAnalytical(beta,K_extra,O_extra,observables) if numpy.size(O_extra) != numpy.size(K_extra): raise "O_extra and K_extra mut have the same dimensions." unew_kln = numpy.zeros([K,L,numpy.max(N_k)],numpy.float64) for k in range(K): for l in range(L): unew_kln[k,l,0:N_k[k]] = (K_extra[l]/2.0) * (x_kn[k,0:N_k[k]]-O_extra[l])**2 (Delta_f_ij_estimated, dDelta_f_ij_estimated) = mbar.computePerturbedFreeEnergies(unew_kln) Delta_f_ij_error = Delta_f_ij_estimated - Delta_f_ij_analytical print "Error in free energies is:" print Delta_f_ij_error print "Standard deviations away is:" # mathematical manipulation to avoid dividing by zero errors; we don't care # about the diagnonals, since they are identically zero. df_ij_mod = dDelta_f_ij_estimated + numpy.identity(L) stdevs = numpy.abs(Delta_f_ij_error/df_ij_mod) for l in range(L): stdevs[l,l] = 0; print stdevs
L = numpy.size(K_extra) (f_k_analytical, Delta_f_ij_analytical, A_k_analytical, A_ij_analytical) = GetAnalytical(beta, K_extra, O_extra, observables) if numpy.size(O_extra) != numpy.size(K_extra): raise "O_extra and K_extra mut have the same dimensions." unew_kln = numpy.zeros([K, L, numpy.max(N_k)], numpy.float64) for k in range(K): for l in range(L): unew_kln[k, l, 0:N_k[k]] = (K_extra[l] / 2.0) * (x_kn[k, 0:N_k[k]] - O_extra[l])**2 (Delta_f_ij_estimated, dDelta_f_ij_estimated) = mbar.computePerturbedFreeEnergies(unew_kln) Delta_f_ij_error = Delta_f_ij_estimated - Delta_f_ij_analytical print "Error in free energies is:" print Delta_f_ij_error print "Standard deviations away is:" # mathematical manipulation to avoid dividing by zero errors; we don't care # about the diagnonals, since they are identically zero. df_ij_mod = dDelta_f_ij_estimated + numpy.identity(L) stdevs = numpy.abs(Delta_f_ij_error / df_ij_mod) for l in range(L): stdevs[l, l] = 0 print stdevs
print("============================================") print(" Testing computePerturbedFreeEnergies") print("============================================") L = numpy.size(K_extra) (f_k_analytical, Delta_f_ij_analytical, A_k_analytical, A_ij_analytical) = GetAnalytical(beta,K_extra,O_extra,observables) if numpy.size(O_extra) != numpy.size(K_extra): raise ParameterError("O_extra (%d) and K_extra (%d) must have the same dimensions." % (numpy.shape(K_k), numpy.shape(N_k))) unew_kln = numpy.zeros([K,L,numpy.max(N_k)],numpy.float64) for k in range(K): for l in range(L): unew_kln[k,l,0:N_k[k]] = (K_extra[l]/2.0) * (x_kn[k,0:N_k[k]]-O_extra[l])**2 results = mbar.computePerturbedFreeEnergies(unew_kln) Delta_f_ij_estimated = results['Delta_f'] dDelta_f_ij_estimated = results['dDelta_f'] Delta_f_ij_error = Delta_f_ij_estimated - Delta_f_ij_analytical print("Error in free energies is:") print(Delta_f_ij_error) print("Standard deviations away is:") # mathematical manipulation to avoid dividing by zero errors; we don't care # about the diagnonals, since they are identically zero. df_ij_mod = dDelta_f_ij_estimated + numpy.identity(L) stdevs = numpy.abs(Delta_f_ij_error/df_ij_mod) for l in range(L): stdevs[l,l] = 0
print("============================================") print(" Testing computePerturbedFreeEnergies") print("============================================") L = numpy.size(K_extra) (f_k_analytical, Delta_f_ij_analytical, A_k_analytical, A_ij_analytical) = GetAnalytical(beta,K_extra,O_extra,observables) if numpy.size(O_extra) != numpy.size(K_extra): raise ParameterError("O_extra (%d) and K_extra (%d) must have the same dimensions." % (numpy.shape(K_k), numpy.shape(N_k))) unew_kln = numpy.zeros([K,L,numpy.max(N_k)],numpy.float64) for k in range(K): for l in range(L): unew_kln[k,l,0:N_k[k]] = (K_extra[l]/2.0) * (x_kn[k,0:N_k[k]]-O_extra[l])**2 results = mbar.computePerturbedFreeEnergies(unew_kln, return_dict=True) Delta_f_ij_estimated = results['Delta_f'] dDelta_f_ij_estimated = results['dDelta_f'] Delta_f_ij_error = Delta_f_ij_estimated - Delta_f_ij_analytical print("Error in free energies is:") print(Delta_f_ij_error) print("Standard deviations away is:") # mathematical manipulation to avoid dividing by zero errors; we don't care # about the diagnonals, since they are identically zero. df_ij_mod = dDelta_f_ij_estimated + numpy.identity(L) stdevs = numpy.abs(Delta_f_ij_error/df_ij_mod) for l in range(L): stdevs[l,l] = 0