def main(): # parse the command line options args = docopt(__doc__) fileNames = args['<file>'] skip = int(args['--skip']) period = int(args['--period']) estimator = args['--estimator'] leglabel = args['--legend'] and args['--legend'] error = args['--error'] and float(args['--error']) val = args['--hline'] and float(args['--hline']) # if labels are not assigned, we default to the PIMCID if not leglabel: leglabel = [] for n,fileName in enumerate(fileNames): leglabel.append(fileName[-13:-4]) # We count the number of lines in the estimator file to make sure we have # some data and grab the headers headers = pimchelp.getHeadersDict(fileNames[0]) # If we don't choose an estimator, provide a list of possible ones if estimator not in headers: errorString = "Need to specify one of:\n" for head,index in headers.iteritems(): errorString += "\"%s\"" % head + " " parser.error(errorString) numFiles = len(fileNames) col = list([headers[estimator]]) # Attempt to find a 'pretty name' for the label, otherwise just default to # the column heading label = pimchelp.Description() try: yLong = label.estimatorLongName[estimator] except: yLong = estimator try: yShort = label.estimatorShortName[estimator] except: yShort = estimator # get a label for a possible horizontal line if args['--hline']: if args['--hlabel']: hlabel = args['--hlabel'] else: hlabel = yShort.split()[0] + ' = ' + args['--hline'] # First we load and store all the data data = [] for fileName in fileNames: dataFile = open(fileName,'r'); dataLines = dataFile.readlines(); dataFile.close() if len(dataLines) > 2: data.append(loadtxt(fileName,usecols=col,unpack=True)) # ============================================================================ # Figure 1 : column vs. MC Steps # ============================================================================ figure(1) connect('key_press_event',kevent.press) colors = loadgmt.getColorList('cw/1','cw1-029',max(numFiles,2)) #colors = loadgmt.getColorList('cw/1','cw1-013',max(numFiles,2)) #colors = loadgmt.getColorList('oc','rainbow',max(numFiles,2)) #colors = loadgmt.getColorList('grass','bgyr',max(numFiles,2)) colors = ["#70D44A", "#BE5AD4", "#D04537", "#81D0D5", "#393A2E", "#C49ECA", "#C5CB7A", "#523767", "#D39139", "#C8488C", "#CB817A", "#73D999", "#6F2836", "#6978CF", "#588569", "#CDC3AD", "#5C7890", "#7F5327", "#D0D33D", "#5B7D2E"] colors = ["#53B0AD", "#D74C20", "#CD53DA", "#58C038", "#5F4B7A", "#49622A", "#CE4379", "#D2912E", "#7970D2", "#749AC9", "#7D5121", "#5EAC72", "#CB85AA", "#853B46", "#396465", "#A5A33E", "#D47F5B", "#BA4EA5", "#C93F44", "#5D9937"] colors =["#CAC5E8", "#E1D273", "#82DFCE", "#F1AF92", "#E1E7CF", "#92C798", "#CDF197", "#DDD199", "#ECB1D1", "#91C7DE", "#E3AF6E", "#ECAAAC", "#CEB29C", "#B2BCA9", "#B0C778", "#DBCDD7", "#B5DEE0", "#A5ECB4", "#C5E6C0", "#E5CCC0"] colors = ["#688EAF", "#FC991D", "#7DEB74", "#FA6781", "#8B981D", "#BB7548", "#AD8FE4", "#96E4AA", "#D669B0", "#E1C947", "#A78200", "#7C9FE4", "#957DA6", "#75BF38", "#C3B059", "#51C17A", "#79AEBB", "#2790AC", "#688ECE", "#749DB7"] colors += colors colors += colors colors += colors print len(colors) for n,cdata in enumerate(data): plot(cdata[skip:],marker='s',color=colors[n],markeredgecolor=colors[n],\ markersize=4,linestyle='-',linewidth=1.0) ylabel(yLong) xlabel("MC Bin Number") # ============================================================================ # Figure 2 : running average of column vs. MC Bins # ============================================================================ figure(2) connect('key_press_event',kevent.press) n = 0 for n,cdata in enumerate(data): if size(cdata) > 1: # Get the cumulative moving average if args['--error']: cma = cumulativeMovingAverage(cdata[skip:]) sem = error*ones_like(cma) elif args['--nobin']: cma,sem = cumulativeMovingAverageWithError(cdata[skip:]) else: cma = cumulativeMovingAverage(cdata[skip:]) ave,err = getStats(cdata[skip:]) sem = err*ones_like(cma) print '%s: %s = %8.4E +- %8.4E' % (leglabel[n],yShort, ave,err) sma = simpleMovingAverage(50,cdata[skip:]) x = range(int(0.10*len(cma)),len(cma)) plot(x,cma[x],color=colors[n],linewidth=1.0,marker='None',linestyle='-', label=leglabel[n]) fill_between(x, cma[x]-sem[x], cma[x]+sem[x],color=colors[n], alpha=0.1) n += 1 # Add a possible horizontal line indicating some value if args['--hline']: axhline(y=val,color='gray',linewidth=2.5, label=hlabel) ylabel(yLong) xlabel("MC Bin Number") tight_layout() leg = legend(loc='best', frameon=False, prop={'size':16},markerscale=2, ncol=2) for l in leg.get_lines(): l.set_linewidth(4.0) # Perform a Welch's t-test if args['--ttest']: # We only perform the Welch's t test if we have multiple samples we are # comparing N = len(data) if N > 1: tval = zeros([N,N]) p = zeros([N,N]) for i in range(N): for j in range(i+1,N): tval[i,j],p[i,j] = stats.ttest_ind(data[i][skip:], data[j][skip:], equal_var=False) # ============================================================================ # Figure 3 : plot the estimator histogram along with t-test values # ============================================================================ fig = figure(3) connect('key_press_event',kevent.press) for i in range(N): n, bins, patches = hist(data[i], 100, normed=True, facecolor=colors[i], alpha=0.75, label=leglabel[i], edgecolor='w') # Add the p-values from the t-test y = 0.92 if N > 1: figtext(0.78, y, 't-test p values', horizontalalignment='center', verticalalignment='top', fontsize=15, backgroundcolor='white') for i in range(N): for j in range(i+1,N): y -= 0.03 lab = 'p(' + leglabel[i] + ' - ' + leglabel[j] + ') = ' + '%4.2f'%p[i,j] figtext(0.78, y, lab, horizontalalignment='center', verticalalignment='top', fontsize=12, backgroundcolor='white') legend(loc='upper left', fontsize=15, frameon=False) xlabel(yLong) ylabel(r'$P($' + estimator + r'$)$') show()
def main(): # setup the command line parser options parser = argparse.ArgumentParser(description='Plot binning analysis for \ MC Data for Scalar Estimators.') parser.add_argument('fileNames', help='Scalar estimator files', nargs='+') parser.add_argument('--estimator', '-e', help='A list of estimator names \ that are to be plotted.', type=str) parser.add_argument('--skip', '-s', help='Number of measurements to be \ skipped in the binning analysis.', type=int, default=0) parser.add_argument('--scale', help='Option to compare binning results \ for different parameters', action='store_true') args = parser.parse_args() fileNames = args.fileNames scale = args.scale if len(fileNames) < 1: parser.error("Need to specify at least one scalar estimator file") # We count the number of lines in the estimator file to make sure we have # some data and grab the headers headers = pimchelp.getHeadersDict(fileNames[0]) # If we don't choose an estimator, provide a list of possible ones if not args.estimator or args.estimator not in headers: errorString = "Need to specify one of:\n" for head, index in headers.iteritems(): errorString += "\"%s\"" % head + " " parser.error(errorString) numFiles = len(fileNames) col = list([headers[args.estimator]]) # Attempt to find a 'pretty name' for the label, otherwise just default to # the column heading label = pimchelp.Description() try: yLong = label.estimatorLongName[args.estimator] except: yLong = args.estimator try: yShort = label.estimatorShortName[args.estimator] except: yShort = args.estimator # ============================================================================ # Figure 1 : Error vs. bin level # ============================================================================ figure(1) connect('key_press_event', kevent.press) colors = loadgmt.getColorList('cw/1', 'cw1-029', max(numFiles, 2)) n = 0 for fileName in fileNames: dataFile = open(fileName, 'r') dataLines = dataFile.readlines() dataFile.close() if len(dataLines) > 2: data = loadtxt(fileName, usecols=col) if not pyutils.isList(data): data = list([data]) delta = MCstat.bin(data[args.skip:]) if n == 0: delta_ar = np.zeros((numFiles, delta.shape[0])) delta_ar[n, :] = delta.T #delta_ar[n,:len(delta)] = delta.T n += 1 if n > 1: if scale: for m in range(n): plot(np.arange(len(delta_ar)),delta_ar[m],marker='s',markersize=4,\ linestyle='-',linewidth=1.0,color=colors[m],\ markeredgecolor=colors[m]) else: Delta = np.average(delta_ar, 0) dDelta = np.std(delta_ar, 0) / np.sqrt(n) errorbar(np.arange(len(Delta)),Delta,dDelta,marker='s',markersize=4,\ linestyle='-',linewidth=1.0,color=colors[0],\ markeredgecolor=colors[0]) bin_ac = MCstat.bin_ac(Delta, dDelta) bin_conv = MCstat.bin_conv(Delta, dDelta) print 'Convergence Ratio: %1.2f+/-%1.2f' % (bin_conv['CF'], bin_conv['dCF']) print 'autocorrlelation time: %2.1f+/-%2.1f' % \ (bin_ac['tau'],bin_ac['dtau']) else: plot(delta,marker='s',markersize=4,linestyle='-',linewidth=1.0,\ color=colors[0],markeredgecolor=colors[0]) print 'Convergence Ratio: %1.3f' % MCstat.bin_conv(delta)['CF'] print 'autocorrlelation time: %3.3f' % MCstat.bin_ac(delta)['tau'] ylabel(r"$\Delta_l$") xlabel("$l$") title("Bin scaling: " + yLong) show()
def main(): # Read in the command line arguments args = docopt(__doc__) fileName = args['<input-file>'] estName = args['--estimator'] # Open up the tensor file, and determine the number of grid boxes in each # dimension and the column headers with open(fileName,'r') as inFile: N = int(inFile.readline().split()[1]) # Get the spatial dimensions, otherwise just use N L = [N,N,N] for n,l in enumerate(['--Lx','--Ly','--Lz']): if args[l]: L[n] = float(args[l]) gridSize = [] for cL in L: gridSize.append(cL/(1.0*N)) dV = pl.product(gridSize) # Get the column headers from the data file headers = pimchelp.getHeadersDict(fileName,skipLines=1) # determine which column we will plot plotColumn = headers.get(estName,0) # Assuming a 3d data set, load the data data = pl.loadtxt(fileName,ndmin=2)[:,plotColumn].reshape([N,N,N]) # assuming translational symmetry in the z-axis rhoxy = pl.average(data,axis=2) # For the particular case of A^2 we need to num_rad_sep = int(N/2) dr = 0.5*L[0]/num_rad_sep rho = pl.zeros(num_rad_sep) counts = pl.zeros_like(rho) l = range(N) for i,j in itertools.product(l,l): x = -0.5*L[0] + (i+0.5)*gridSize[0] y = -0.5*L[1] + (j+0.5)*gridSize[1] r = pl.sqrt(x*x + y*y) n = int(r/dr) if n < num_rad_sep: if abs(rho[n]) < 1000.0: if 'A^2' in estName: rho[n] += rhoxy[i,j]/(r*r) else: rho[n] += rhoxy[i,j] counts[n] += 1 if 'A^2' in estName and r > 0.8: rhoxy[i,j] /= r*r elif 'A^2' in estName and r < 0.8: rhoxy[i,j] = 0.0 elif 'A:rho_s' in estName and r < 1.0: rhoxy[i,j] = 0.0 for n in range(num_rad_sep): if counts[n] > 0: rho[n] /= counts[n] # plot histograms in all three projections pl.figure(1) pl.imshow(rhoxy, cmap=cmap, extent=[-0.5*L[0],0.5*L[0],-0.5*L[1],0.5*L[1]], interpolation='None') pl.xlabel(r'$y\ [\AA]$') pl.ylabel(r'$x\ [\AA]$') pl.title('Particle Density Projection (X-Y)') pl.colorbar(shrink=0.4) r = pl.linspace(0,0.5*L[0],num_rad_sep) # ar = pl.loadtxt('r.dat') pl.figure(2) pl.plot(r,rho,'ro-', markersize=8) # pl.plot(ar[:,0],ar[:,1],'r-', linewidth=2) for i,cr in enumerate(r): print '%16.8E%16.8E' % (cr,rho[i]) # Now we locally average the results loc_ave_data = pl.zeros_like(rhoxy) for i,j in itertools.product(l,l): x = -0.5*L[0] + i*gridSize[0] y = -0.5*L[1] + j*gridSize[1] r = pl.sqrt(x*x + y*y) if r < 0.5*L[0]: count = 0 for k,l in itertools.product(range(-1,2),range(-1,2)): if i+k < N and j+l < N: loc_ave_data[i,j] += rhoxy[i+k,j+l] count += 1 if count > 0: loc_ave_data[i,j] /= count else: loc_ave_data[i,j] = rhoxy[i,j] pl.figure(3) pl.imshow(loc_ave_data, cmap=cmap, extent=[-0.5*L[0],0.5*L[0],-0.5*L[1],0.5*L[1]]) pl.xlabel(r'$y\ [\AA]$') pl.ylabel(r'$x\ [\AA]$') pl.title('Particle Density Projection (X-Y)') pl.colorbar(shrink=0.4) # pl.figure(2) # pl.imshow(I, cmap=cmap, extent=[-0.5*L[0],0.5*L[0],-0.5*L[1],0.5*L[1]]) # pl.xlabel(r'$y\ [\AA]$') # pl.ylabel(r'$x\ [\AA]$') # pl.title('Particle Density Projection (X-Y)') # pl.colorbar(shrink=0.4) # pl.figure(3) # # pl.imshow(R2, cmap=cmap, # # extent=[-0.5*L[0],0.5*L[0],-0.5*L[1],0.5*L[1]]) # pl.imshow(pl.sum(data,axis=1), cmap=cmap, # extent=[-0.5*L[2],0.5*L[2],-0.5*L[0],0.5*L[0]]) # pl.xlabel(r'$z\ [\AA]$') # pl.ylabel(r'$x\ [\AA]$') # pl.title('Particle Density Projection (X-Z)') # pl.colorbar(shrink=0.4) # # pl.figure(4) # pl.imshow(pl.sum(data,axis=0), cmap=cmap, # extent=[-0.5*L[2],0.5*L[2],-0.5*L[1],0.5*L[1]]) # pl.xlabel(r'$z\ [\AA]$') # pl.ylabel(r'$y\ [\AA]$') # pl.title('Particle Density Projection (Y-Z)') # pl.colorbar(shrink=0.4) # pl.savefig('plot.svg') pl.show()
def main(): # parse the command line options args = docopt(__doc__) fileNames = args['<file>'] skip = int(args['--skip']) period = int(args['--period']) estimator = args['--estimator'] leglabel = args['--legend'] and args['--legend'] error = args['--error'] and float(args['--error']) val = args['--hline'] and float(args['--hline']) # if labels are not assigned, we default to the PIMCID if not leglabel: leglabel = [] for n, fileName in enumerate(fileNames): leglabel.append(fileName[-13:-4]) # We count the number of lines in the estimator file to make sure we have # some data and grab the headers headers = pimchelp.getHeadersDict(fileNames[0]) # If we don't choose an estimator, provide a list of possible ones if estimator not in headers: errorString = "Need to specify one of:\n" for head, index in headers.iteritems(): errorString += "\"%s\"" % head + " " parser.error(errorString) numFiles = len(fileNames) col = list([headers[estimator]]) # Attempt to find a 'pretty name' for the label, otherwise just default to # the column heading label = pimchelp.Description() try: yLong = label.estimatorLongName[estimator] except: yLong = estimator try: yShort = label.estimatorShortName[estimator] except: yShort = estimator # get a label for a possible horizontal line if args['--hline']: if args['--hlabel']: hlabel = args['--hlabel'] else: hlabel = yShort.split()[0] + ' = ' + args['--hline'] # First we load and store all the data data = [] for fileName in fileNames: dataFile = open(fileName, 'r') dataLines = dataFile.readlines() dataFile.close() if len(dataLines) > 2: data.append(loadtxt(fileName, usecols=col, unpack=True)) # ============================================================================ # Figure 1 : column vs. MC Steps # ============================================================================ figure(1) connect('key_press_event', kevent.press) colors = loadgmt.getColorList('cw/1', 'cw1-029', max(numFiles, 2)) #colors = loadgmt.getColorList('cw/1','cw1-013',max(numFiles,2)) #colors = loadgmt.getColorList('oc','rainbow',max(numFiles,2)) #colors = loadgmt.getColorList('grass','bgyr',max(numFiles,2)) colors = [ "#70D44A", "#BE5AD4", "#D04537", "#81D0D5", "#393A2E", "#C49ECA", "#C5CB7A", "#523767", "#D39139", "#C8488C", "#CB817A", "#73D999", "#6F2836", "#6978CF", "#588569", "#CDC3AD", "#5C7890", "#7F5327", "#D0D33D", "#5B7D2E" ] colors = [ "#53B0AD", "#D74C20", "#CD53DA", "#58C038", "#5F4B7A", "#49622A", "#CE4379", "#D2912E", "#7970D2", "#749AC9", "#7D5121", "#5EAC72", "#CB85AA", "#853B46", "#396465", "#A5A33E", "#D47F5B", "#BA4EA5", "#C93F44", "#5D9937" ] colors = [ "#CAC5E8", "#E1D273", "#82DFCE", "#F1AF92", "#E1E7CF", "#92C798", "#CDF197", "#DDD199", "#ECB1D1", "#91C7DE", "#E3AF6E", "#ECAAAC", "#CEB29C", "#B2BCA9", "#B0C778", "#DBCDD7", "#B5DEE0", "#A5ECB4", "#C5E6C0", "#E5CCC0" ] colors = [ "#688EAF", "#FC991D", "#7DEB74", "#FA6781", "#8B981D", "#BB7548", "#AD8FE4", "#96E4AA", "#D669B0", "#E1C947", "#A78200", "#7C9FE4", "#957DA6", "#75BF38", "#C3B059", "#51C17A", "#79AEBB", "#2790AC", "#688ECE", "#749DB7" ] colors += colors colors += colors colors += colors print len(colors) for n, cdata in enumerate(data): plot(cdata[skip:],marker='s',color=colors[n],markeredgecolor=colors[n],\ markersize=4,linestyle='-',linewidth=1.0) ylabel(yLong) xlabel("MC Bin Number") # ============================================================================ # Figure 2 : running average of column vs. MC Bins # ============================================================================ figure(2) connect('key_press_event', kevent.press) n = 0 for n, cdata in enumerate(data): if size(cdata) > 1: # Get the cumulative moving average if args['--error']: cma = cumulativeMovingAverage(cdata[skip:]) sem = error * ones_like(cma) elif args['--nobin']: cma, sem = cumulativeMovingAverageWithError(cdata[skip:]) else: cma = cumulativeMovingAverage(cdata[skip:]) ave, err = getStats(cdata[skip:]) sem = err * ones_like(cma) print '%s: %s = %8.4E +- %8.4E' % (leglabel[n], yShort, ave, err) sma = simpleMovingAverage(50, cdata[skip:]) x = range(int(0.10 * len(cma)), len(cma)) plot(x, cma[x], color=colors[n], linewidth=1.0, marker='None', linestyle='-', label=leglabel[n]) fill_between(x, cma[x] - sem[x], cma[x] + sem[x], color=colors[n], alpha=0.1) n += 1 # Add a possible horizontal line indicating some value if args['--hline']: axhline(y=val, color='gray', linewidth=2.5, label=hlabel) ylabel(yLong) xlabel("MC Bin Number") tight_layout() leg = legend(loc='best', frameon=False, prop={'size': 16}, markerscale=2, ncol=2) for l in leg.get_lines(): l.set_linewidth(4.0) # Perform a Welch's t-test if args['--ttest']: # We only perform the Welch's t test if we have multiple samples we are # comparing N = len(data) if N > 1: tval = zeros([N, N]) p = zeros([N, N]) for i in range(N): for j in range(i + 1, N): tval[i, j], p[i, j] = stats.ttest_ind(data[i][skip:], data[j][skip:], equal_var=False) # ============================================================================ # Figure 3 : plot the estimator histogram along with t-test values # ============================================================================ fig = figure(3) connect('key_press_event', kevent.press) for i in range(N): n, bins, patches = hist(data[i], 100, normed=True, facecolor=colors[i], alpha=0.75, label=leglabel[i], edgecolor='w') # Add the p-values from the t-test y = 0.92 if N > 1: figtext(0.78, y, 't-test p values', horizontalalignment='center', verticalalignment='top', fontsize=15, backgroundcolor='white') for i in range(N): for j in range(i + 1, N): y -= 0.03 lab = 'p(' + leglabel[i] + ' - ' + leglabel[ j] + ') = ' + '%4.2f' % p[i, j] figtext(0.78, y, lab, horizontalalignment='center', verticalalignment='top', fontsize=12, backgroundcolor='white') legend(loc='upper left', fontsize=15, frameon=False) xlabel(yLong) ylabel(r'$P($' + estimator + r'$)$') show()
def main(): # setup the command line parser options parser = argparse.ArgumentParser(description='Plot binning analysis for \ MC Data for Scalar Estimators.') parser.add_argument('fileNames', help='Scalar estimator files', nargs='+') parser.add_argument('--estimator','-e', help='A list of estimator names \ that are to be plotted.', type=str) parser.add_argument('--skip','-s', help='Number of measurements to be \ skipped in the binning analysis.', type=int, default=0) parser.add_argument('--scale', help='Option to compare binning results \ for different parameters', action='store_true') args = parser.parse_args() fileNames = args.fileNames scale = args.scale if len(fileNames) < 1: parser.error("Need to specify at least one scalar estimator file") # We count the number of lines in the estimator file to make sure we have # some data and grab the headers headers = pimchelp.getHeadersDict(fileNames[0]) # If we don't choose an estimator, provide a list of possible ones if not args.estimator or args.estimator not in headers: errorString = "Need to specify one of:\n" for head,index in headers.iteritems(): errorString += "\"%s\"" % head + " " parser.error(errorString) numFiles = len(fileNames) col = list([headers[args.estimator]]) # Attempt to find a 'pretty name' for the label, otherwise just default to # the column heading label = pimchelp.Description() try: yLong = label.estimatorLongName[args.estimator] except: yLong = args.estimator try: yShort = label.estimatorShortName[args.estimator] except: yShort = args.estimator # ============================================================================ # Figure 1 : Error vs. bin level # ============================================================================ figure(1) connect('key_press_event',kevent.press) colors = loadgmt.getColorList('cw/1','cw1-029',max(numFiles,2)) n = 0 for fileName in fileNames: dataFile = open(fileName,'r'); dataLines = dataFile.readlines(); dataFile.close() if len(dataLines) > 2: data = loadtxt(fileName,usecols=col) if not pyutils.isList(data): data = list([data]) delta = MCstat.bin(data[args.skip:]) if n == 0: delta_ar = np.zeros((numFiles,delta.shape[0])) delta_ar[n,:] = delta.T #delta_ar[n,:len(delta)] = delta.T n += 1 if n > 1: if scale: for m in range(n): plot(np.arange(len(delta_ar)),delta_ar[m],marker='s',markersize=4,\ linestyle='-',linewidth=1.0,color=colors[m],\ markeredgecolor=colors[m]) else: Delta = np.average(delta_ar,0) dDelta = np.std(delta_ar,0)/np.sqrt(n) errorbar(np.arange(len(Delta)),Delta,dDelta,marker='s',markersize=4,\ linestyle='-',linewidth=1.0,color=colors[0],\ markeredgecolor=colors[0]) bin_ac = MCstat.bin_ac(Delta,dDelta) bin_conv = MCstat.bin_conv(Delta,dDelta) print 'Convergence Ratio: %1.2f+/-%1.2f'%(bin_conv['CF'],bin_conv['dCF']) print 'autocorrlelation time: %2.1f+/-%2.1f' % \ (bin_ac['tau'],bin_ac['dtau']) else: plot(delta,marker='s',markersize=4,linestyle='-',linewidth=1.0,\ color=colors[0],markeredgecolor=colors[0]) print 'Convergence Ratio: %1.3f' % MCstat.bin_conv(delta)['CF'] print 'autocorrlelation time: %3.3f' % MCstat.bin_ac(delta)['tau'] ylabel(r"$\Delta_l$") xlabel("$l$") title("Bin scaling: "+yLong) show()
def main(): # parse the command line options args = docopt(__doc__) fileNames = args['<file>'] skip = int(args['--skip']) period = int(args['--period']) estimators = args['--estimator'] leglabel = args['--legend'] and args['--legend'] error = args['--error'] and float(args['--error']) # number of estimators must equal number of filenames given if len(fileNames) != len(estimators): print "\nNumber of estimators must equal number of filenames supplied." print "Note that these must be in the same order!\n" sys.exit() # if labels are not assigned, we default to the PIMCID if not leglabel: leglabel = [] for n,fileName in enumerate(fileNames): leglabel.append(fileName[-13:-4]) numFiles = len(fileNames) # first load all of data from all files into a list col = [] data = [] for numEst in range(len(estimators)): headers = pimchelp.getHeadersDict(fileNames[numEst]) col = list([headers[estimators[numEst]]]) dataFile = open(fileNames[numEst],'r'); dataLines = dataFile.readlines(); dataFile.close() if len(dataLines) > 2: data.append(loadtxt(fileNames[numEst],usecols=col,unpack=True)) # loop over files, loading them and plotting all data wanted. for numEst in range(len(estimators)): # We count the number of lines in the estimator file to make sure we have # some data and grab the headers headers = pimchelp.getHeadersDict(fileNames[numEst]) # If we don't choose an estimator, provide a list of possible ones if estimators[numEst] not in headers: errorString = "Need to specify one of:\n" for head,index in headers.iteritems(): errorString += "\"%s\"" % head + " " parser.error(errorString) # Attempt to find a 'pretty name' for the label, otherwise just default to # the column heading label = pimchelp.Description() try: yLong = label.estimatorLongName[estimators[numEst]] except: yLong = estimators[numEst] try: yShort = label.estimatorShortName[estimators[numEst]] except: yShort = estimators[numEst] # ============================================================================ # Figure 1 : column vs. MC Steps # ============================================================================ figNum = 1 if args['--pdf']: figure(figNum, dpi=40, figsize=(6,3.8)) else: figure(figNum) connect('key_press_event',kevent.press) colors = loadgmt.getColorList('oc','rainbow',max(numFiles,2)) for n,cdata in enumerate(data): plot(cdata[skip:],marker='s',color=colors[n],markeredgecolor=colors[n],\ markersize=4,linestyle='-',linewidth=1.0, label=leglabel[n]) ylabel(yLong) xlabel("MC Bin Number") if numEst == 0: legend(loc=3, frameon=False, ncol=2) if args['--pdf']: savefig('col_vs_MCSteps.pdf', format='pdf', bbox_inches='tight') savefig('col_vs_MCSteps_trans.pdf', format='pdf', bbox_inches='tight', transparent=True, dpi=40) else: savefig('col_vs_MCSteps_trans.png', format='png', bbox_inches='tight', transparent=True) # ============================================================================ # Figure 2 : running average of column vs. MC Bins # ============================================================================ figNum += 1 if args['--pdf']: figure(figNum, dpi=40, figsize=(6,3.8)) else: figure(figNum, figsize=(6,3.8)) connect('key_press_event',kevent.press) n = 0 for n,cdata in enumerate(data): if size(cdata) > 1: # Get the cumulative moving average if args['--error']: cma = cumulativeMovingAverage(cdata[skip:]) sem = error*ones_like(cma) elif args['--bin']: cma = cumulativeMovingAverage(cdata[skip:]) ave,err = getStats(cdata[skip:]) sem = err*ones_like(cma) print '%s: %s = %8.4E +- %8.4E' % (leglabel[n],yShort, ave,err) else: cma,sem = cumulativeMovingAverageWithError(cdata[skip:]) sma = simpleMovingAverage(50,cdata[skip:]) x = range(int(0.10*len(cma)),len(cma)) plot(x,cma[x],color=colors[n],linewidth=1.0,marker='None',linestyle='-', label=leglabel[n]) fill_between(x, cma[x]-sem[x], cma[x]+sem[x],color=colors[n], alpha=0.1) #n += 1 ylabel(yLong) xlabel("MC Bin Number") if numEst == 0: leg = legend(loc='best', frameon=False, prop={'size':12},markerscale=2, ncol=2) for l in leg.get_lines(): l.set_linewidth(4.0) if args['--pdf']: savefig('runAve_vs_MCSteps.pdf', format='pdf', bbox_inches='tight') savefig('runAve_vs_MCSteps_trans.pdf', format='pdf', bbox_inches='tight',transparent=True, dpi=40) else: savefig('runAve_vs_MCSteps_trans.png', format='png', bbox_inches='tight',transparent=True) # Perform a Welch's t-test if args['--ttest']: # We only perform the Welch's t test if we have multiple samples we are # comparing N = len(data) if N > 1: tval = zeros([N,N]) p = zeros([N,N]) for i in range(N): for j in range(i+1,N): tval[i,j],p[i,j] = stats.ttest_ind(data[i][skip:], data[j][skip:], equal_var=False) figNum += 1 # ============================================================================ # Figure 3 : plot the estimator histogram along with t-test values # ============================================================================ if args['--pdf']: fig = figure(figNum, dpi=40, figsize=(6,3.8)) else: fig = figure(figNum) connect('key_press_event',kevent.press) for i in range(N): n, bins, patches = hist(data[i], 100, normed=True, facecolor=colors[i], alpha=0.75, label=leglabel[i], edgecolor='w') '''# Add the p-values from the t-test y = 0.92 if N > 1: figtext(0.78, y, 't-test p values', horizontalalignment='center', verticalalignment='top', fontsize=15, backgroundcolor='white') for i in range(N): for j in range(i+1,N): y -= 0.03 lab = 'p(' + leglabel[i] + ' - ' + leglabel[j] + ') = ' + '%4.2f'%p[i,j] figtext(0.78, y, lab, horizontalalignment='center', verticalalignment='top', fontsize=12, backgroundcolor='white')''' #legend(loc='upper left', fontsize=15, frameon=False) if numEst == 0: legend(loc='upper left', frameon=False) xlabel(yLong) yLabb = estimators[numEst] if yLabb == 'Ecv/N': yLabb = 'E/N' ylabel(r'$P($' + yLabb + r'$)$') if args['--pdf']: savefig('ttest_histogram.pdf', format='pdf', bbox_inches='tight') savefig('ttest_histogram_trans.pdf', format='pdf', bbox_inches='tight', transparent=True, dpi=40) else: savefig('ttest_histogram_trans.png', format='png', bbox_inches='tight', transparent=True) # ============================================================================ # Figure 4 : autocorrelation # ============================================================================ figNum += 1 if args['--pdf']: figure(figNum, dpi=40, figsize=(6,3.8)) else: figure(figNum) connect('key_press_event',kevent.press) colors = loadgmt.getColorList('oc','rainbow',max(numFiles,2)) mcTime = arange(0,len(cdata[skip:]),1) for n,cdata in enumerate(data): plot(mcTime,estimated_autocorrelation(cdata[skip:]), marker='s',color=colors[n],markeredgecolor=colors[n], markersize=4,linestyle='-',linewidth=1.0, label=leglabel[n]) ylabel("Autocorrelation") xlabel("Data") if numEst == 0: legend(loc=3, frameon=False, ncol=2) '''if args['--pdf']: savefig('autocorrelation.pdf', format='pdf', bbox_inches='tight') savefig('autocorrelation_trans.pdf', format='pdf', bbox_inches='tight', transparent=True, dpi=40) else: savefig('autocorrelation_trans.png', format='png', bbox_inches='tight', transparent=True) ''' show()