--- /dev/null
+#!/usr/bin/env python
+
+from pylab import *
+
+import os
+from glob import glob
+from random import sample as rand_sample
+
+
+
+infiles1 = sorted(glob('chip01/*.npz'))
+infiles2 = sorted(glob('chip02/*.npz'))
+
+#N_RUNS = min(len(infiles), 8)
+N_RUNS = 0
+#sample_runs = sorted(rand_sample(range(len(infiles)), N_RUNS))
+N_PLOTS = 2
+#N_PLOTS = 0
+#sample_channels = sorted(rand_sample(range(48), N_PLOTS))
+sample_channels = (0, 2)
+N_COLS = 4
+#N_COLS = 0
+nrun = 0
+
+
+# chip01
+#
+def loadrun(infiles):
+ cal_values = []
+ cal_outs = []
+ cal_nevals = []
+ cal_means = []
+ cal_stds = []
+
+ cal_guesses = []
+ cal_results = []
+
+ nrun = 0
+
+ for infile in infiles:
+ #for infile in sorted(glob('*.npz')):
+ #for infile in sorted(glob('2012-09-03_1*.npz')):
+ d = np.load(infile)
+
+ #print infile, d.keys()
+
+ guesses = d['guesses']
+ results = d['results']
+ nevals = d['nevals']
+
+ d.close() # close file descriptor
+
+ cal_values.append(guesses[-1, :, :])
+
+ # results are zeros after [nevals:]
+ # pick off the last real measurement
+ r = zeros_like(results[-1, :, :])
+ for i in range(r.shape[0]):
+ for j in range(r.shape[1]):
+ r[i, j] = results[nevals[i,j]-1, i, j]
+ cal_outs.append(r)
+
+ #map(cal_nevals.append, nevals.flat)
+
+ cal_guesses.append(guesses)
+ cal_results.append(results)
+ cal_nevals.append(nevals)
+
+
+ #cal_outs.append(results[-1, :, :])
+ nrun += 1
+
+ cv = array(cal_values)
+ co = array(cal_outs)
+ cn = array(cal_nevals)
+ cg = array(cal_guesses)
+ cr = array(cal_results)
+
+ out = {'cv': cv,
+ 'co': co,
+ 'cn': cn,
+ 'cg': cg,
+ 'cr': cr,
+ }
+ return out
+
+
+class s:
+ pass
+
+
+out1 = loadrun(infiles1)
+out2 = loadrun(infiles2)
+
+
+#sample_channels = (0, 2)
+
+sample_guesses = [
+ out1['cg'][-1][:, 0, 0],
+ out1['cg'][-1][:, 0, 2],
+ out2['cg'][-1][:, 0, 0],
+ out2['cg'][-1][:, 0, 2],
+]
+
+sample_results = [
+ out1['cr'][-1][:, 0, 0],
+ out1['cr'][-1][:, 0, 2],
+ out2['cr'][-1][:, 0, 0],
+ out2['cr'][-1][:, 0, 2],
+]
+
+sample_nevals = [
+ out1['cn'][-1][0, 0],
+ out1['cn'][-1][0, 2],
+ out2['cn'][-1][0, 0],
+ out2['cn'][-1][0, 2],
+]
+
+
+names = ['#1-00A',
+ '#1-02A',
+ '#2-00A',
+ '#2-02A'
+ ]
+
+if 1:
+ figure(figsize=(6.0, 3.5))
+ subplots_adjust(top=0.93, bottom=0.12, left=0.10, right=0.98)
+
+ #guesses = out1['cg'][-1]
+ #results = out1['cr'][-1]
+ #nevals = out1['cn'][-1]
+ #cv = out1['cv']
+ #co = out1['co']
+
+ for i,k in enumerate(sample_channels):
+ g = guesses[:, 0, k]
+ r = 1e3*(2.5/2/2**13)*results[:, 0, k]
+
+ subplot(N_PLOTS, N_COLS, i+1)
+ plot(g[:nevals[0,k]+1], '.-')
+ ylim((0, 127))
+ ylabel('Channel %02i-A' % k)
+ xlim((-1, 13))
+
+ subplot(N_PLOTS, N_COLS, N_COLS+i+1)
+ plot(1e-3*r[:nevals[0,k]+1], '.-')
+ hlines(0, -1, 15, linewidth=0.5, color='0.40')
+ xlim((-1, 13))
+
+ title('%s' % name[i], fontsize='medium')
+ ax.set_xticks(range(0, 15, 4))
+
+ #subplot(N_PLOTS, N_COLS, N_COLS*i+3)
+ #data = cv[:, 0, k]
+ #hist(data, bins=range(128), align='left')
+ #xlim((data.min()-1, data.max()+1))
+ #xlim((0, 127))
+
+ #ax = subplot(N_PLOTS, N_COLS, N_COLS*i+4)
+ #data = 1e3*(2.5/2/2**13)*co[:, 0, k]
+ #dm = max((abs(data.min()), abs(data.max())))
+ #print dm
+ #dm = max(dm, 50)
+ #hist(data, bins=100, range=(-dm, dm), align='left')
+ #xlim((-dm, dm))
+ #ylim((0, 50))
+ #dmean = data.mean()
+ #dstd = data.std()
+ #print nrun, dmean, dstd
+
+ #text(0.97, 0.95, r'$\sigma\!=\!%4.1f$mV' % dstd,
+ #horizontalalignment='right',
+ #verticalalignment='top',
+ #bbox=dict(facecolor='r', alpha=0.5, boxstyle="round"),
+ #transform = ax.transAxes)
+
+ subplot(N_PLOTS, N_COLS, 1)
+ ax = plt.gca()
+ title('Offset code', fontsize='medium')
+ ax.set_xticks(range(0, 15, 4))
+
+ subplot(N_PLOTS, N_COLS, (N_PLOTS-1)*N_COLS+1)
+ ax = plt.gca()
+ ax.set_xticks(range(0, 15, 4))
+ xlabel('Step')
+
+
+ subplot(N_PLOTS, N_COLS, 2)
+ ax = plt.gca()
+ title('$V_{out}$', fontsize='medium')
+ ax.set_xticks(range(0, 15, 4))
+ ax.set_yticklabels([''] * len(ax.get_yticks()))
+
+ subplot(N_PLOTS, N_COLS, (N_PLOTS-1)*N_COLS+2)
+ ax = plt.gca()
+ ax.set_xticks(range(0, 15, 4))
+ ax.set_yticklabels([''] * len(ax.get_yticks()))
+ xlabel('Step')
+
+
+ subplot(N_PLOTS, N_COLS, 3)
+ ax = plt.gca()
+ title('Code hist.', fontsize='medium')
+ ax.set_xticks(range(0, 129, 64))
+ ax.set_xticklabels([''] * len(ax.get_xticks()))
+ ax.set_yticklabels([''] * len(ax.get_yticks()))
+
+ subplot(N_PLOTS, N_COLS, (N_PLOTS-1)*N_COLS+3)
+ ax = plt.gca()
+ ax.set_xticks(range(0, 129, 64))
+ #ax.set_xticklabels([''] * len(ax.get_xticks()))
+ ax.set_yticklabels([''] * len(ax.get_yticks()))
+ xlabel('OTA tuning DAC')
+
+
+ subplot(N_PLOTS, N_COLS, 4)
+ ax = plt.gca()
+ ax.set_xticks(range(-80, 81, 40))
+ ax.set_xticklabels([''] * len(ax.get_xticks()))
+ ax.set_yticklabels([''] * len(ax.get_yticks()))
+ title('$V_{out}$ hist.', fontsize='medium')
+
+ subplot(N_PLOTS, N_COLS, (N_PLOTS-1)*N_COLS+4)
+ ax = plt.gca()
+ ax.set_xticks(range(-80, 81, 40))
+ #ax.set_xticklabels([''] * len(ax.get_xticks()))
+ ax.set_yticklabels([''] * len(ax.get_yticks()))
+ xlabel('V_{oos}$ (mV)')
+
+ #suptitle('Calibration data from %s\nNruns = %i' %
+ #(os.path.basename(os.getcwd()),
+ #len(infiles)))
+
+ #savefig(os.path.basename(os.getcwd()) + '-cal-raw.pdf')
+ savefig('cal-trajectories.pdf')
+
+#interactive(False)
+interactive(True)
+
+#if 0:
+ #figure()
+ #data = cv.flatten()
+ #hist(data, bins=range(128), align='left')
+ #xlabel('OTA tuning DAC value')
+ #title('Channel offset tuning histogram\n48x2 channels x %i runs' %
+ #(len(infiles),))
+ #savefig('caldac-hist.pdf')
+
+
+ #figure()
+ #data = co.flatten()
+ #hist(data, bins=range(-1500, 1500, 10), align='left')
+ #xlabel('Tuned channel output offset voltage (mV)')
+ #title('Channel offset tuning histogram\n48x2 channels x %i runs' %
+ #(len(infiles),))
+ #savefig('calout-hist.pdf')
+
+#print sample_runs
+#print [infiles1[s] for s in sample_runs]
+