def test_onsager(self): size = 900 dbeta = 0.001 beta = _np.arange(0., 2., dbeta) pf = logpf_ising_onsager(size, beta) dpf = _np.diff(pf) / dbeta d1beta = beta[1:] d2pf = _np.diff(dpf) / dbeta d2beta = beta[2:] if self.plot: import matplotlib.pyplot as plt plt.figure() plt.plot(beta, pf / size, label='logZ') plt.plot(beta[1:], dpf / size, label='dlogZ') plt.plot(beta[2:], d2pf / size, label='d2logZ') plt.xlabel('beta') plt.legend(loc='upper left') plt.title('Log partition function per site and its derivatives' '.\nObtained with Onsager equations') figFn = os.path.join(self.outDir, figfn('logPF_onsager')) plt.savefig(figFn) # plt.show() # critical value: logger.info('critical beta: %f', d2beta[_np.argmax(d2pf)]) logger.info('beta grid precision: %f', dbeta) assert _np.abs(d2beta[_np.argmax(d2pf)] - 0.88) <= 0.005
def test_extrapolation(self): size = 900 shape = (int(size ** .5), int(size ** .5)) mask = _np.ones(shape, dtype=int) # full mask g = graph_from_lattice(mask, kerMask=kerMask2D_4n) pf, beta = Cpt_Vec_Estim_lnZ_Graph_fast(g, 2) dbeta = beta[1] - beta[0] dpf = _np.diff(pf) / dbeta d1beta = beta[1:] d2pf = _np.diff(dpf) / dbeta d2beta = beta[2:] if self.plot: import matplotlib.pyplot as plt plt.figure() plt.plot(beta, pf / size, label='logZ') plt.plot(beta[1:], dpf / size, label='dlogZ') plt.plot(beta[2:], d2pf / size, label='d2logZ') plt.xlabel('beta') plt.legend(loc='upper left') plt.title('Log partition function per site and its derivatives' '.\nDiscretized using the Extrapolation Scheme.') figFn = os.path.join(self.outDir, figfn('logPF_ES')) plt.savefig(figFn) # plt.show() # critical value: logger.info('critical beta: %f', d2beta[_np.argmax(d2pf)]) logger.info('beta grid precision: %f', dbeta) assert _np.abs(d2beta[_np.argmax(d2pf)] - 0.88) <= 2 * dbeta
def test_extrapolation(self): size = 900 shape = (int(size**.5), int(size**.5)) mask = _np.ones(shape, dtype=int) # full mask g = graph_from_lattice(mask, kerMask=kerMask2D_4n) pf, beta = Cpt_Vec_Estim_lnZ_Graph_fast(g, 2) dbeta = beta[1] - beta[0] dpf = _np.diff(pf) / dbeta d1beta = beta[1:] d2pf = _np.diff(dpf) / dbeta d2beta = beta[2:] if self.plot: import matplotlib.pyplot as plt plt.figure() plt.plot(beta, pf / size, label='logZ') plt.plot(beta[1:], dpf / size, label='dlogZ') plt.plot(beta[2:], d2pf / size, label='d2logZ') plt.xlabel('beta') plt.legend(loc='upper left') plt.title('Log partition function per site and its derivatives' '.\nDiscretized using the Extrapolation Scheme.') figFn = os.path.join(self.outDir, figfn('logPF_ES')) plt.savefig(figFn) # plt.show() # critical value: logger.info('critical beta: %f', d2beta[_np.argmax(d2pf)]) logger.info('beta grid precision: %f', dbeta) assert _np.abs(d2beta[_np.argmax(d2pf)] - 0.88) <= 2 * dbeta
def test_path_sampling(self): size = 900 shape = (int(size**.5), int(size**.5)) mask = _np.ones(shape, dtype=int) #full mask g = graph_from_lattice(mask, kerMask=kerMask2D_4n) pf, beta = Cpt_Vec_Estim_lnZ_Graph(g,2) dbeta = beta[1]-beta[0] dpf = _np.diff(pf)/dbeta d1beta = beta[1:] d2pf = _np.diff(dpf)/dbeta d2beta = beta[2:] if self.plot: import matplotlib.pyplot as plt plt.figure() plt.plot(beta, pf/size, label='logZ') plt.plot(beta[1:], dpf/size, label='dlogZ') plt.plot(beta[2:], d2pf/size, label='d2logZ') plt.xlabel('beta') plt.legend(loc='upper left') plt.title('Log partition function per site and its derivatives' \ '.\nDiscretized using Path Sampling') #print '##### ', figFn = os.path.join(self.outDir, figfn('logPF_PS')) plt.savefig(figFn) #plt.show() #critical value: if self.verbose: print 'critical beta:', d2beta[_np.argmax(d2pf)] print 'beta grid precision:', dbeta assert _np.abs(d2beta[_np.argmax(d2pf)] - 0.88) <= dbeta
def MC_comp_pfmethods_ML(self, shape): mask = np.ones(shape, dtype=int) #full mask g = graph_from_lattice(mask, kerMask=kerMask2D_4n, toroidal=True) # Betas to iterate over ... betaMax = 1.4 dbeta = .1 betas = np.arange(0., betaMax, dbeta) # nb of monte carlo iterations mcit = 40#100 # nb of classes nbc = 2 # Path sampling: mBePS, stdBePS, stdBeMCPS = cached_eval(test_beta_estim_obs_fields, ([g], betas, nbc, 'PS', mcit), path=config.cacheDir, prefix='pyhrf_', new=False) # Extrapolation scheme: mBeES, stdBeES, stdBeMCES = cached_eval(test_beta_estim_obs_fields, ([g], betas, nbc, 'ES', mcit), path=config.cacheDir, prefix='pyhrf_', new=False) # Onsager: #mBeON, stdBeON, stdBeMCON = cached_eval(test_beta_estim_obs_fields, # ([g], betas, nbc, 'ONSAGER', # mcit), path=config.cacheDir, # prefix='pyhrf_', # new=True) if self.plot: import matplotlib.pyplot as plt plt.figure() plt.errorbar(betas, mBeES, stdBeMCES, fmt='r', label='ES') plt.errorbar(betas, mBePS, stdBeMCPS, fmt='b', label='PS') #plt.errorbar(betas, mBeON, stdBeMCON, fmt='g', label='Onsager') plt.plot(betas, betas, 'k', label='true') #plt.xlabel('simulated beta') #plt.ylabel('beta MAP') plt.legend(loc='upper left') plt.ylim((0.0,1.45)) #plt.title('MC validation (%d it) for beta estimation on '\ # ' observed fields.' %mcit) #fn = 'comp_obs_field_MC_PS_ES_Onsager_%dx%d' %shape fn = 'comp_obs_field_MC_PS_%dx%d' %shape figFn = os.path.join(self.outDir, figfn(fn)) plt.savefig(figFn)
def test_SW_nrj_2C_3C(self): size = 400 shape = (int(size**.5), int(size**.5)) mask = _np.ones(shape, dtype=int) # full mask g = graph_from_lattice(mask, kerMask=kerMask2D_4n) betas = _np.arange(0, 2.7, .2) nitMC = 100 mU2C = _np.zeros(len(betas)) vU2C = _np.zeros(len(betas)) mU3C = _np.zeros(len(betas)) vU3C = _np.zeros(len(betas)) nrjCalc = field_energy_calculator(g) # print "nbClasses = 2" for ib, b in enumerate(betas): # print ' MC for beta ', b pottsGen = potts_generator(graph=g, beta=b, nbLabels=2, method='SW') mU2C[ib], vU2C[ib] = montecarlo(pottsGen, nrjCalc, nbit=nitMC) # print ' mu2C=',mU2C # print ' vU2C=',vU2C # print "nbClasses = 3" for ib, b in enumerate(betas): # print ' MC for beta ', b pottsGen = potts_generator(graph=g, beta=b, nbLabels=3, method='SW') mU3C[ib], vU3C[ib] = montecarlo(pottsGen, nrjCalc, nbit=nitMC) # print ' mu3C=',mU3C # print ' vU3C=',vU3C if config.savePlots: import matplotlib.pyplot as plt plt.plot(betas, mU2C, 'b-', label="2C") plt.errorbar(betas, mU2C, vU2C**.5, fmt=None, ecolor='b') plt.plot(betas, mU3C, 'r-', label="3C") plt.errorbar(betas, mU3C, vU3C**.5, fmt=None, ecolor='r') plt.legend(loc='upper right') plt.title( 'Mean energy in terms of beta \n for 2-color and 3-color Potts (SW sampling)' ) plt.xlabel('beta') plt.ylabel('mean U per site') plt.xlim(betas[0] - .1, betas[-1] * 1.05) figFn = os.path.join(self.outDir, figfn('potts_energy_2C_3C')) # print figFn plt.savefig(figFn)
def test_SW_nrj_2C_3C(self): size = 400 shape = (int(size ** .5), int(size ** .5)) mask = _np.ones(shape, dtype=int) # full mask g = graph_from_lattice(mask, kerMask=kerMask2D_4n) betas = _np.arange(0, 2.7, .2) nitMC = 100 mU2C = _np.zeros(len(betas)) vU2C = _np.zeros(len(betas)) mU3C = _np.zeros(len(betas)) vU3C = _np.zeros(len(betas)) nrjCalc = field_energy_calculator(g) # print "nbClasses = 2" for ib, b in enumerate(betas): # print ' MC for beta ', b pottsGen = potts_generator(graph=g, beta=b, nbLabels=2, method='SW') mU2C[ib], vU2C[ib] = montecarlo(pottsGen, nrjCalc, nbit=nitMC) # print ' mu2C=',mU2C # print ' vU2C=',vU2C # print "nbClasses = 3" for ib, b in enumerate(betas): # print ' MC for beta ', b pottsGen = potts_generator(graph=g, beta=b, nbLabels=3, method='SW') mU3C[ib], vU3C[ib] = montecarlo(pottsGen, nrjCalc, nbit=nitMC) # print ' mu3C=',mU3C # print ' vU3C=',vU3C if config.savePlots: import matplotlib.pyplot as plt plt.plot(betas, mU2C, 'b-', label="2C") plt.errorbar(betas, mU2C, vU2C ** .5, fmt=None, ecolor='b') plt.plot(betas, mU3C, 'r-', label="3C") plt.errorbar(betas, mU3C, vU3C ** .5, fmt=None, ecolor='r') plt.legend(loc='upper right') plt.title( 'Mean energy in terms of beta \n for 2-color and 3-color Potts (SW sampling)') plt.xlabel('beta') plt.ylabel('mean U per site') plt.xlim(betas[0] - .1, betas[-1] * 1.05) figFn = os.path.join(self.outDir, figfn('potts_energy_2C_3C')) # print figFn plt.savefig(figFn)
def test_comparison(self): size = 1000 shape = (int(size ** .5), int(size ** .5)) mask = _np.ones(shape, dtype=int) # full mask g = graph_from_lattice(mask, kerMask=kerMask2D_4n, toroidal=True) dbeta = 0.05 # ES pfES, betaES = Cpt_Vec_Estim_lnZ_Graph_fast3(g, 2, BetaStep=dbeta) logger.info('betaES: %f', betaES) pfES = pfES[:-1] logger.info('pfES %d:', len(pfES)) dpfES = _np.diff(pfES) / dbeta d2pfES = _np.diff(dpfES) / dbeta # Path Sampling pfPS, beta = Cpt_Vec_Estim_lnZ_Graph( g, 2, BetaStep=dbeta, SamplesNb=30) logger.info('beta grid from PS: %f', beta) dpfPS = _np.diff(pfPS) / dbeta d1beta = beta[1:] d2pfPS = _np.diff(dpfPS) / dbeta d2beta = beta[2:] # Onsager logger.info('Onsager ...') pfOns = logpf_ising_onsager(size, beta) * .96 dpfOns = _np.diff(pfOns) / dbeta d2pfOns = _np.diff(dpfOns) / dbeta if self.plot: logger.info('Plots ...') import matplotlib.pyplot as plt # PF plots plt.figure() plt.plot(beta, pfES, 'r-+', label='logZ-ES') plt.plot(beta, pfPS, 'b', label='logZ-PS') plt.plot(beta, pfOns, 'g', label='logZ-Onsager') # plt.xlabel('beta') #plt.legend(loc='upper left') #plt.title('Log partition function per site - comparison') figFn = os.path.join(self.outDir, figfn('logPF_ES_PS_Ons')) print 'saved:', figFn plt.savefig(figFn) plt.figure() plt.plot(d1beta, dpfES / size, 'r-+', label='dlogZ-ES') plt.plot(d1beta, dpfPS / size, 'b', label='dlogZ-PS') plt.plot(d1beta, dpfOns / size, 'g', label='dlogZ-Onsager') plt.xlabel('beta') plt.legend(loc='upper left') plt.title('dLog partition function per site - comparison') figFn = os.path.join(self.outDir, figfn('dlogPF_ES_PS_Ons')) print 'saved:', figFn plt.savefig(figFn) plt.figure() plt.plot(d2beta, d2pfES / size, 'r-+', label='d2logZ-ES') plt.plot(d2beta, d2pfPS / size, 'b', label='d2logZ-PS') plt.plot(d2beta, d2pfOns / size, 'g', label='d2logZ-Onsager') plt.xlabel('beta') plt.legend(loc='upper left') plt.title('d2Log partition function per site - comparison') figFn = os.path.join(self.outDir, figfn('d2logPF_ES_PS_Ons')) print 'saved:', figFn plt.savefig(figFn) plt.figure() plt.plot(beta, _np.abs(pfES - pfOns) / size, 'r-+', label='|logZ_ES-logZ-Ons|') plt.plot(beta, _np.abs(pfPS - pfOns) / size, 'b', label='|logZ_PS-logZ-Ons|') plt.xlabel('beta') plt.legend(loc='upper left') plt.title('Error of Log partition function per site') figFn = os.path.join(self.outDir, figfn('logPF_error_ES_PS')) print 'saved:', figFn plt.savefig(figFn)
def test_onsager(self): size = 900 dbeta = 0.001 beta = _np.arange(0., 2., dbeta) pf = logpf_ising_onsager(size, beta) dpf = _np.diff(pf)/dbeta d1beta = beta[1:] d2pf = _np.diff(dpf)/dbeta d2beta = beta[2:] if self.plot: import matplotlib.pyplot as plt plt.figure() plt.plot(beta, pf/size, label='logZ') plt.plot(beta[1:], dpf/size, label='dlogZ') plt.plot(beta[2:], d2pf/size, label='d2logZ') plt.xlabel('beta') plt.legend(loc='upper left') plt.title('Log partition function per site and its derivatives' \ '.\nObtained with Onsager equations') figFn = os.path.join(self.outDir, figfn('logPF_onsager')) plt.savefig(figFn) #plt.show() #critical value: if self.verbose: #print 'critical beta:', d2beta[_np.argmax(d2pf)] #print 'beta grid precision:', dbeta assert _np.abs(d2beta[_np.argmax(d2pf)] - 0.88) <= 0.005 def test_path_sampling(self): size = 900 shape = (int(size**.5), int(size**.5)) mask = _np.ones(shape, dtype=int) #full mask g = graph_from_lattice(mask, kerMask=kerMask2D_4n) pf, beta = Cpt_Vec_Estim_lnZ_Graph(g,2) dbeta = beta[1]-beta[0] dpf = _np.diff(pf)/dbeta d1beta = beta[1:] d2pf = _np.diff(dpf)/dbeta d2beta = beta[2:] if self.plot: import matplotlib.pyplot as plt plt.figure() plt.plot(beta, pf/size, label='logZ') plt.plot(beta[1:], dpf/size, label='dlogZ') plt.plot(beta[2:], d2pf/size, label='d2logZ') plt.xlabel('beta') plt.legend(loc='upper left') plt.title('Log partition function per site and its derivatives' \ '.\nDiscretized using Path Sampling') #print '##### ', figFn = os.path.join(self.outDir, figfn('logPF_PS')) plt.savefig(figFn) #plt.show() #critical value: if self.verbose: print 'critical beta:', d2beta[_np.argmax(d2pf)] print 'beta grid precision:', dbeta assert _np.abs(d2beta[_np.argmax(d2pf)] - 0.88) <= dbeta def test_extrapolation(self): size = 900 shape = (int(size**.5), int(size**.5)) mask = _np.ones(shape, dtype=int) #full mask g = graph_from_lattice(mask, kerMask=kerMask2D_4n) pf, beta = Cpt_Vec_Estim_lnZ_Graph_fast(g,2) dbeta = beta[1]-beta[0] dpf = _np.diff(pf)/dbeta d1beta = beta[1:] d2pf = _np.diff(dpf)/dbeta d2beta = beta[2:] if self.plot: import matplotlib.pyplot as plt plt.figure() plt.plot(beta, pf/size, label='logZ') plt.plot(beta[1:], dpf/size, label='dlogZ') plt.plot(beta[2:], d2pf/size, label='d2logZ') plt.xlabel('beta') plt.legend(loc='upper left') plt.title('Log partition function per site and its derivatives' \ '.\nDiscretized using the Extrapolation Scheme.') figFn = os.path.join(self.outDir, figfn('logPF_ES')) plt.savefig(figFn) #plt.show() #critical value: if self.verbose: print 'critical beta:', d2beta[_np.argmax(d2pf)] print 'beta grid precision:', dbeta assert _np.abs(d2beta[_np.argmax(d2pf)] - 0.88) <= dbeta def test_comparison(self): size = 1000 shape = (int(size**.5), int(size**.5)) mask = _np.ones(shape, dtype=int) #full mask g = graph_from_lattice(mask, kerMask=kerMask2D_4n,toroidal=True) dbeta = 0.05 # ES pfES, betaES = Cpt_Vec_Estim_lnZ_Graph_fast3(g,2,BetaStep=dbeta) if self.verbose: print 'betaES:', betaES pfES = pfES[:-1] if self.verbose: print 'pfES:', len(pfES) #print pfES dpfES = _np.diff(pfES)/dbeta #print 'dpfES:' #print _np.diff(pfES) d2pfES = _np.diff(dpfES)/dbeta # Path Sampling pfPS, beta = Cpt_Vec_Estim_lnZ_Graph(g,2,BetaStep=dbeta,SamplesNb=30) if self.verbose: print 'beta grid from PS:', beta dpfPS = _np.diff(pfPS)/dbeta d1beta = beta[1:] d2pfPS = _np.diff(dpfPS)/dbeta d2beta = beta[2:] # Onsager if self.verbose: print 'Onsager ...' pfOns = logpf_ising_onsager(size, beta)*.96 dpfOns = _np.diff(pfOns)/dbeta d2pfOns = _np.diff(dpfOns)/dbeta if self.plot: if self.verbose: print 'Plots ...' import matplotlib.pyplot as plt # PF plots plt.figure() plt.plot(beta, pfES, 'r-+', label='logZ-ES') plt.plot(beta, pfPS, 'b', label='logZ-PS') plt.plot(beta, pfOns,'g', label='logZ-Onsager') #plt.xlabel('beta') #plt.legend(loc='upper left') #plt.title('Log partition function per site - comparison') figFn = os.path.join(self.outDir, figfn('logPF_ES_PS_Ons')) print 'saved:', figFn plt.savefig(figFn) plt.figure() plt.plot(d1beta, dpfES/size, 'r-+', label='dlogZ-ES') plt.plot(d1beta, dpfPS/size, 'b', label='dlogZ-PS') plt.plot(d1beta, dpfOns/size,'g', label='dlogZ-Onsager') plt.xlabel('beta') plt.legend(loc='upper left') plt.title('dLog partition function per site - comparison') figFn = os.path.join(self.outDir, figfn('dlogPF_ES_PS_Ons')) print 'saved:', figFn plt.savefig(figFn) plt.figure() plt.plot(d2beta, d2pfES/size, 'r-+', label='d2logZ-ES') plt.plot(d2beta, d2pfPS/size, 'b', label='d2logZ-PS') plt.plot(d2beta, d2pfOns/size,'g', label='d2logZ-Onsager') plt.xlabel('beta') plt.legend(loc='upper left') plt.title('d2Log partition function per site - comparison') figFn = os.path.join(self.outDir, figfn('d2logPF_ES_PS_Ons')) print 'saved:', figFn plt.savefig(figFn) plt.figure() plt.plot(beta, _np.abs(pfES-pfOns)/size, 'r-+', label='|logZ_ES-logZ-Ons|') plt.plot(beta, _np.abs(pfPS-pfOns)/size, 'b', label='|logZ_PS-logZ-Ons|') plt.xlabel('beta') plt.legend(loc='upper left') plt.title('Error of Log partition function per site') figFn = os.path.join(self.outDir, figfn('logPF_error_ES_PS')) print 'saved:', figFn plt.savefig(figFn)
def MC_comp_pfmethods_ML_3C(self, shape): newEval = config.updateCache mask = np.ones(shape, dtype=int) #full mask g = graph_from_lattice(mask, kerMask=kerMask2D_4n, toroidal=True) # Betas to iterate over ... betaMax = 1.4 dbeta = .1 betas = np.arange(0., betaMax, dbeta) # nb of monte carlo iterations mcit = 100#100 # nb of classes nbc = 3 # Path sampling: mBePS, stdBePS, stdBeMCPS = cached_eval(test_beta_estim_obs_fields, ([g], betas, nbc, 'PS', mcit), path=config.cacheDir, prefix=pyhrf.tmpPrefix, new=False) # Extrapolation scheme: mBeES, stdBeES, stdBeMCES = cached_eval(test_beta_estim_obs_fields, ([g], betas, nbc, 'ES', mcit), path=config.cacheDir, prefix=pyhrf.tmpPrefix, new=False) # Onsager: #mBeON, stdBeON, stdBeMCON = cached_eval(test_beta_estim_obs_fields, # ([g], betas, nbc, 'ONSAGER', # mcit), path=config.cacheDir, # prefix=pyhrf.tmpPrefix, # new=True) if self.plot: import plt plt.figure() plt.errorbar(betas, mBeES, stdBeMCES, fmt='r', label='ES') plt.errorbar(betas, mBePS, stdBeMCPS, fmt='b', label='PS') #plt.errorbar(betas, mBeON, stdBeMCON, fmt='g', label='Onsager') plt.plot(betas, betas, 'k', label='true') #plt.xlabel('simulated beta') #plt.ylabel('beta MAP') plt.legend(loc='upper left') #plt.title('MC validation (%d it) for beta estimation on '\ # ' observed fields.' %mcit) fn = 'comp_obs_field_3class_MC_PS_ES_%dx%d' %shape figFn = os.path.join(self.outDir, figfn(fn)) plt.savefig(figFn) plt.figure() grid = cached_eval(Cpt_Vec_Estim_lnZ_Graph_fast3, (g,nbc), path=config.cacheDir, prefix=pyhrf.tmpPrefix) lnzES, betas = (grid[0][:-1], grid[1][:-1]) lnzPS, betas = cached_eval(Cpt_Vec_Estim_lnZ_Graph, (g,nbc), path=config.cacheDir, new=False, prefix=pyhrf.tmpPrefix) plt.plot(betas, lnzES, 'r', label='ES') plt.plot(betas, lnzPS, 'b', label='PS') fn = 'comp_PF_3class_PS_ES_%dx%d' %shape figFn = os.path.join(self.outDir, figfn(fn)) plt.savefig(figFn)
def test_comparison(self): size = 1000 shape = (int(size**.5), int(size**.5)) mask = _np.ones(shape, dtype=int) # full mask g = graph_from_lattice(mask, kerMask=kerMask2D_4n, toroidal=True) dbeta = 0.05 # ES pfES, betaES = Cpt_Vec_Estim_lnZ_Graph_fast3(g, 2, BetaStep=dbeta) logger.info('betaES: %f', betaES) pfES = pfES[:-1] logger.info('pfES %d:', len(pfES)) dpfES = _np.diff(pfES) / dbeta d2pfES = _np.diff(dpfES) / dbeta # Path Sampling pfPS, beta = Cpt_Vec_Estim_lnZ_Graph(g, 2, BetaStep=dbeta, SamplesNb=30) logger.info('beta grid from PS: %f', beta) dpfPS = _np.diff(pfPS) / dbeta d1beta = beta[1:] d2pfPS = _np.diff(dpfPS) / dbeta d2beta = beta[2:] # Onsager logger.info('Onsager ...') pfOns = logpf_ising_onsager(size, beta) * .96 dpfOns = _np.diff(pfOns) / dbeta d2pfOns = _np.diff(dpfOns) / dbeta if self.plot: logger.info('Plots ...') import matplotlib.pyplot as plt # PF plots plt.figure() plt.plot(beta, pfES, 'r-+', label='logZ-ES') plt.plot(beta, pfPS, 'b', label='logZ-PS') plt.plot(beta, pfOns, 'g', label='logZ-Onsager') # plt.xlabel('beta') #plt.legend(loc='upper left') #plt.title('Log partition function per site - comparison') figFn = os.path.join(self.outDir, figfn('logPF_ES_PS_Ons')) print 'saved:', figFn plt.savefig(figFn) plt.figure() plt.plot(d1beta, dpfES / size, 'r-+', label='dlogZ-ES') plt.plot(d1beta, dpfPS / size, 'b', label='dlogZ-PS') plt.plot(d1beta, dpfOns / size, 'g', label='dlogZ-Onsager') plt.xlabel('beta') plt.legend(loc='upper left') plt.title('dLog partition function per site - comparison') figFn = os.path.join(self.outDir, figfn('dlogPF_ES_PS_Ons')) print 'saved:', figFn plt.savefig(figFn) plt.figure() plt.plot(d2beta, d2pfES / size, 'r-+', label='d2logZ-ES') plt.plot(d2beta, d2pfPS / size, 'b', label='d2logZ-PS') plt.plot(d2beta, d2pfOns / size, 'g', label='d2logZ-Onsager') plt.xlabel('beta') plt.legend(loc='upper left') plt.title('d2Log partition function per site - comparison') figFn = os.path.join(self.outDir, figfn('d2logPF_ES_PS_Ons')) print 'saved:', figFn plt.savefig(figFn) plt.figure() plt.plot(beta, _np.abs(pfES - pfOns) / size, 'r-+', label='|logZ_ES-logZ-Ons|') plt.plot(beta, _np.abs(pfPS - pfOns) / size, 'b', label='|logZ_PS-logZ-Ons|') plt.xlabel('beta') plt.legend(loc='upper left') plt.title('Error of Log partition function per site') figFn = os.path.join(self.outDir, figfn('logPF_error_ES_PS')) print 'saved:', figFn plt.savefig(figFn)