Notebook for generation of Figure 3(b)


In [2]:
%load_ext autoreload
%autoreload 2
from extremefill2D.tools import getSMTRecords, smt_ipy_table
records = getSMTRecords(tags=['fig3b_nx200'], path='../extremefill2D')


Created Django record store using PostgreSQL

In [3]:
from extremefill2D.multiViewer import MultiViewer
from extremefill2D.tools import getRecord

kPluses = np.logspace(0, 4, 20)[[10, 12, 14, 16]][::-1]
kMinuses = np.logspace(6, 9, 20)[[9, 10, 14, 19]]

reorderedRecords = [[getRecord(records=records, kPlus=kPlus, kMinus=kMinus) for kMinus in kMinuses] for kPlus in kPluses]

def me(n):
    s = '%1.1e' % n
    m, e = s.split('e')
    return float(m), int(e)

def rowlabel(r):
    m, e = me(r.parameters['kPlus'])
    return '${0:1.1f}\\times 10^{{{1}}}$'.format(m, e)

def columnlabel(r):
#    m, e = me(r.parameters['kMinus'] * 10**6)
    return '${0:1.1f}$'.format(r.parameters['kMinus'] / 10**6)
#    return '${0:1.1f}\\times 10^{{{1}}}$'.format(m, e)

viewer = MultiViewer(reorderedRecords,
                     rowtitle=rowlabel,
                     columntitle=columnlabel,
                     xlabel='$k_-$ ($10^{{{6}}}\per\meter$)',
                     ylabel='$k_+$ ($\power{\meter}{3}\per\mole\cdot\second$)',
                     figsize=(1.15, 5.),
                     axislabelfontsize=24)

viewer.plot(times=np.arange(40) * 5000. / 39, filename='../figures/fig3b.png')

smt_ipy_table([j for i in reorderedRecords for j in i if j],
              fields=['label', 'timestamp', 'parameters', 'duration', 'version', 'tags'],
              parameters=['kPlus', 'kMinus', 'appliedPotential', 'bulkSuppressor', 'Nx'])


Out[3]:
LabelTimestampParametersDurationVersionTags
c2b370072013-11-01 19:18kPlus: 2335.72146909, kMinus: 26366508.9873, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2001h 1m 24.04s92057ea38efdfig3b_nx200
8f89ebaf2013-11-01 19:19kPlus: 2335.72146909, kMinus: 37926901.9073, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2001h 27m 39.57s92057ea38efdfig3b_nx200
157b7ea72013-11-01 19:19kPlus: 2335.72146909, kMinus: 162377673.919, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2004h 47m 34.99s92057ea38efdfig3b_nx200
a3d8855c2013-11-01 19:19kPlus: 2335.72146909, kMinus: 1000000000.0, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2004h 5m 7.08s92057ea38efdfig3b_nx200
6ec5c4a82013-11-01 19:19kPlus: 885.86679041, kMinus: 26366508.9873, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2001h 43m 52.03s92057ea38efdfig3b_nx200
a021167b2013-11-01 19:19kPlus: 885.86679041, kMinus: 37926901.9073, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 20012h 34.49s92057ea38efdfig3b_nx200
f9944a372013-11-01 19:19kPlus: 885.86679041, kMinus: 162377673.919, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2003h 57m 2.79s92057ea38efdfig3b_nx200
8429c0722013-11-01 19:19kPlus: 885.86679041, kMinus: 1000000000.0, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2003h 53m 31.51s92057ea38efdfig3b_nx200
04909ea72013-11-01 19:19kPlus: 335.981828628, kMinus: 26366508.9873, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 20010h 19m 50.35s92057ea38efdfig3b_nx200
4f83f4e52013-11-01 19:19kPlus: 335.981828628, kMinus: 37926901.9073, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2006h 21m 40.82s92057ea38efdfig3b_nx200
1da440352013-11-01 19:19kPlus: 335.981828628, kMinus: 162377673.919, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2003h 46m 24.38s92057ea38efdfig3b_nx200
b0d74c782013-11-01 19:18kPlus: 335.981828628, kMinus: 1000000000.0, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2002h 36m 9.08s92057ea38efdfig3b_nx200
b3dd5bb62013-11-01 19:19kPlus: 127.42749857, kMinus: 26366508.9873, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2005h 22m 12.03s92057ea38efdfig3b_nx200
10585a462013-11-01 19:19kPlus: 127.42749857, kMinus: 37926901.9073, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2004h 16m 5.15s92057ea38efdfig3b_nx200
efddeefd2013-11-01 19:19kPlus: 127.42749857, kMinus: 162377673.919, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2003h 44m 13.56s92057ea38efdfig3b_nx200
f10334562013-11-01 19:19kPlus: 127.42749857, kMinus: 1000000000.0, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2003h 42m 28.48s92057ea38efdfig3b_nx200

In [3]:
from multiViewer import MultiViewer
from tools import getRecord

kPluses = np.logspace(0, 4, 20)[[10, 12, 14, 16]][::-1]
kMinuses = np.logspace(6, 9, 20)[[9, 10, 14, 19]]

reorderedRecords = [[getRecord(records=records, kPlus=kPlus, kMinus=kMinus) for kMinus in kMinuses] for kPlus in kPluses]

def me(n):
    s = '%1.1e' % n
    m, e = s.split('e')
    return float(m), int(e)

def rowlabel(r):
    m, e = me(r.parameters['kPlus'])
    return '${0:1.1f}\\times 10^{{{1}}}$'.format(m, e)

def columnlabel(r):
    m, e = me(r.parameters['kMinus'])
    return '${0:1.1f}\\times 10^{{{1}}}$'.format(m, e)

viewer = MultiViewer(reorderedRecords,
                     rowtitle=rowlabel,
                     columntitle=columnlabel,
                     figsize=(1.15, 5.))

viewer.plot(times=np.arange(40) * 5000. / 39, labels=True)

smt_ipy_table([j for i in reorderedRecords for j in i if j],
              fields=['label', 'timestamp', 'parameters', 'duration', 'version', 'tags'],
              parameters=['kPlus', 'kMinus', 'appliedPotential', 'bulkSuppressor', 'Nx'])


Out[3]:
LabelTimestampParametersDurationVersionTags
c2b370072013-11-01 19:18kPlus: 2335.72146909, kMinus: 26366508.9873, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2001h 1m 24.04s92057ea38efdfig3b_nx200
8f89ebaf2013-11-01 19:19kPlus: 2335.72146909, kMinus: 37926901.9073, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2001h 27m 39.57s92057ea38efdfig3b_nx200
157b7ea72013-11-01 19:19kPlus: 2335.72146909, kMinus: 162377673.919, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2004h 47m 34.99s92057ea38efdfig3b_nx200
a3d8855c2013-11-01 19:19kPlus: 2335.72146909, kMinus: 1000000000.0, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2004h 5m 7.08s92057ea38efdfig3b_nx200
6ec5c4a82013-11-01 19:19kPlus: 885.86679041, kMinus: 26366508.9873, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2001h 43m 52.03s92057ea38efdfig3b_nx200
a021167b2013-11-01 19:19kPlus: 885.86679041, kMinus: 37926901.9073, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 20012h 34.49s92057ea38efdfig3b_nx200
f9944a372013-11-01 19:19kPlus: 885.86679041, kMinus: 162377673.919, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2003h 57m 2.79s92057ea38efdfig3b_nx200
8429c0722013-11-01 19:19kPlus: 885.86679041, kMinus: 1000000000.0, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2003h 53m 31.51s92057ea38efdfig3b_nx200
04909ea72013-11-01 19:19kPlus: 335.981828628, kMinus: 26366508.9873, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 20010h 19m 50.35s92057ea38efdfig3b_nx200
4f83f4e52013-11-01 19:19kPlus: 335.981828628, kMinus: 37926901.9073, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2006h 21m 40.82s92057ea38efdfig3b_nx200
1da440352013-11-01 19:19kPlus: 335.981828628, kMinus: 162377673.919, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2003h 46m 24.38s92057ea38efdfig3b_nx200
b0d74c782013-11-01 19:18kPlus: 335.981828628, kMinus: 1000000000.0, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2002h 36m 9.08s92057ea38efdfig3b_nx200
b3dd5bb62013-11-01 19:19kPlus: 127.42749857, kMinus: 26366508.9873, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2005h 22m 12.03s92057ea38efdfig3b_nx200
10585a462013-11-01 19:19kPlus: 127.42749857, kMinus: 37926901.9073, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2004h 16m 5.15s92057ea38efdfig3b_nx200
efddeefd2013-11-01 19:19kPlus: 127.42749857, kMinus: 162377673.919, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2003h 44m 13.56s92057ea38efdfig3b_nx200
f10334562013-11-01 19:19kPlus: 127.42749857, kMinus: 1000000000.0, appliedPotential: -0.45, bulkSuppressor: 0.06, Nx: 2003h 42m 28.48s92057ea38efdfig3b_nx200

In [4]:
import pandas as pd
from featureProperty import FeatureProperty
import itertools

flatRecords = []
for l in reorderedRecords:
    for r in l:
        flatRecords.append(r)
        
fps = [FeatureProperty(r) for r in flatRecords]

latestIndex = max([fp.getLatestIndex() for fp in fps])

columns = zip(*list(itertools.product(flatRecords, ('times', 'heights'))))
columns = pd.MultiIndex.from_arrays(columns)

height_df = pd.DataFrame(columns=columns, index=np.arange(0, latestIndex + 1, 100))

for fp in fps:
    latestIndex = fp.getLatestIndex()
    for i in np.arange(0, latestIndex + 1, 100):
        height_df[(fp.record, 'times')][i] = fp.getTime(i)
        height_df[(fp.record, 'heights')][i] = fp.getHeight(i)
    fp.close()

In [5]:
from matplotlib.ticker import MultipleLocator
ml = MultipleLocator(100)

for r in flatRecords:
    x, y = np.array(height_df[(r, 'times')].dropna()[1:]), np.array(height_df[(r, 'heights')].dropna()[1:])
    plt.figure()
    ax = plt.subplot(111)
    plt.title(r.label[:8])
    if x[-1] < 500:
        ml = MultipleLocator(10)
    else:
        ml = MultipleLocator(100)
    ax.xaxis.set_minor_locator(ml)
    
    plt.grid(b=True, which='major', linestyle='solid')
    plt.grid(b=True, which='minor', linestyle='dashed') 
    plt.plot(x, y)



In [ ]: