Ejemplo n.º 1
0
def fve_gun(exp, nom, plt):
    from fit import Opt
    from gun import magic
    from gun import Gun
    
    fig = plt.figure('fve_gun',figsize=fig_y_size(9))    
    p2f = magic.newton2dyne*magic.area/1e11
    opt = Opt(
        nom.eos,
        {'gun':nom.gun,'stick':nom.stick},
        {'gun':exp.vt,'stick':exp.stick_data})
    cs,costs = opt.fit(max_iter=5)
    print('costs={0}'.format(costs))
    opt_gun = Gun(opt.eos)
    nom.gun.eos = nom.eos # Restore nominal eos after optimization
    t2vs = [Gun(eos).fit_t2v() for eos in [opt.eos.new_c(c) for c in cs]]
    e = [exp.v - t2v(exp.t) for t2v in t2vs[1:]]

    data = {'nominal':(
        (exp.x, nom.eos(exp.x)*p2f, 'f'),
        (exp.x, nom.gun.x_dot(exp.x)/magic.cm2km, 'v'))}
    data['experimental']=(
        (exp.x, exp.eos(exp.x)*p2f, 'f'),
        (exp.x, exp.gun.x_dot(exp.x)/magic.cm2km, 'v'))
    data['fit']=(
        (exp.x, opt.eos(exp.x)*p2f, 'f'),
        (exp.x, opt_gun.x_dot(exp.x)/magic.cm2km, 'v'))
    
    cm = r'$x/(\rm{cm})$'
    mu_sec = r'$t/(\mu\rm{sec})$'
    f_key = r'$f/({\rm dyn}\cdot 10^{11})$'
    v_key = r'$v/(\rm{km/s})$'
    e_key = r'$\epsilon_k/(\rm{m/s})$'
    ax_d = {
        'f':{'ax':fig.add_subplot(3,1,1), 'l_x':cm,
             'l_y':f_key, 'loc':'upper right'},
        'v':{'ax':fig.add_subplot(3,1,2), 'l_x':cm,
            'l_y':v_key, 'loc':'lower right'},
        'e':{'ax':fig.add_subplot(3,1,3), 'l_x':mu_sec,
             'l_y':e_key, 'loc':'upper right'}
    }
    for mod,xyn in data.items():
        for x,y,name in xyn:
            if mod == 'experimental':
                ax_d[name]['ax'].plot(x,y,'r-.',label=r'$\rm %s$'%mod)
            else:
                ax_d[name]['ax'].plot(x,y,label=r'$\rm %s$'%mod)
    for i in range(len(e)):
        ax_d['e']['ax'].plot(exp.t*1e6,e[i]/100,label=r'$\epsilon_%d$'%(i+1))
    for name,d in ax_d.items():
        d['ax'].legend(loc=ax_d[name]['loc'])
        d['ax'].set_xlabel(d['l_x'])
        d['ax'].set_ylabel(r'$%s$'%name)
        if 'l_y' in d:
            d['ax'].set_ylabel(d['l_y'])
    
    return fig
Ejemplo n.º 2
0
def work():
    ''' This code for debugging stuff will change often
    '''
    import matplotlib.pyplot as plt
    from eos import Nominal, Spline_eos
    from fit import Opt
    vt = data()
    nom = Spline_eos(Nominal(),precondition=True)
    stick = Stick(nom)
    opt = Opt(
        nom,
        {'stick':stick},
        {'stick':vt})
    cs,costs = opt.fit(max_iter=10)
    D, ep, Sigma_inv = stick.compare(vt, cs[-1])
    info = np.dot(D.T, np.dot(Sigma_inv, D))
    _vals,_vecs = np.linalg.eigh(info)
    _vals = np.maximum(_vals, 0)
    i = np.argsort(_vals)[-1::-1]
    vals = _vals[i]
    vecs = _vecs[i]
    n_vals = len(np.where(vals > vals[0]*1e-20)[0])
    n_vecs = len(np.where(vals > vals[0]*1e-2)[0])
    fig = plt.figure()
    ax = fig.add_subplot(2,2,1)
    costs = np.array(costs)
    x = range(len(costs))
    c_min = costs.min()
    c_max = costs.max()
    if c_min > 0:
        y = costs
        ylabel = r'$\log_{e}(p(y|c_i))$'
    else:
        offset = (c_max-c_min)*1e-5 -c_min
        y = costs + offset
        ylabel = r'$\log_{e}(p(y|\hat c_i)) + {0:.3e}$'.format(offset)
    ax.semilogy(x,y)
    ax.semilogy(x,y, 'kx')
    ax.set_ylabel(ylabel)
    ax.set_xlabel(r'$i$')
    ax.set_xticks(x)
    v = np.linspace(.2,50,500)
    ax = fig.add_subplot(2,2,2)
    ax.loglog(v,nom(v))
    ax = fig.add_subplot(2,2,3)
    ax.semilogy(range(n_vals), vals[:n_vals])
    ax = fig.add_subplot(2,2,4)
    for vec in vecs[:n_vecs]:
        f = nom.new_c(vec)
        ax.semilogx(v,f(v))
    plt.show()
    vecs = _vecs[i]
#    for j,v in enumerate(vals):
#        print('v[{0:2d}] = {1:.3e}'.format(j,v))
    return 0
Ejemplo n.º 3
0
def work():
    ''' This code for debugging stuff will change often
    '''
    import matplotlib.pyplot as plt
    from eos import Nominal, Spline_eos
    from fit import Opt
    vt = data()
    nom = Spline_eos(Nominal(), precondition=True)
    stick = Stick(nom)
    opt = Opt(nom, {'stick': stick}, {'stick': vt})
    cs, costs = opt.fit(max_iter=10)
    D, ep, Sigma_inv = stick.compare(vt, cs[-1])
    info = np.dot(D.T, np.dot(Sigma_inv, D))
    _vals, _vecs = np.linalg.eigh(info)
    _vals = np.maximum(_vals, 0)
    i = np.argsort(_vals)[-1::-1]
    vals = _vals[i]
    vecs = _vecs[i]
    n_vals = len(np.where(vals > vals[0] * 1e-20)[0])
    n_vecs = len(np.where(vals > vals[0] * 1e-2)[0])
    fig = plt.figure()
    ax = fig.add_subplot(2, 2, 1)
    costs = np.array(costs)
    x = range(len(costs))
    c_min = costs.min()
    c_max = costs.max()
    if c_min > 0:
        y = costs
        ylabel = r'$\log_{e}(p(y|c_i))$'
    else:
        offset = (c_max - c_min) * 1e-5 - c_min
        y = costs + offset
        ylabel = r'$\log_{e}(p(y|\hat c_i)) + {0:.3e}$'.format(offset)
    ax.semilogy(x, y)
    ax.semilogy(x, y, 'kx')
    ax.set_ylabel(ylabel)
    ax.set_xlabel(r'$i$')
    ax.set_xticks(x)
    v = np.linspace(.2, 50, 500)
    ax = fig.add_subplot(2, 2, 2)
    ax.loglog(v, nom(v))
    ax = fig.add_subplot(2, 2, 3)
    ax.semilogy(range(n_vals), vals[:n_vals])
    ax = fig.add_subplot(2, 2, 4)
    for vec in vecs[:n_vecs]:
        f = nom.new_c(vec)
        ax.semilogx(v, f(v))
    plt.show()
    vecs = _vecs[i]
    #    for j,v in enumerate(vals):
    #        print('v[{0:2d}] = {1:.3e}'.format(j,v))
    return 0
Ejemplo n.º 4
0
def tx_stick(exp, nom, plt):
    import stick
    from fit import Opt
    fig = plt.figure('tx_stick', figsize=fig_y_size(5.0))
    opt = Opt(
        nom.eos,
        {'stick':nom.stick},
        {'stick':exp.stick_data})
    cs,costs = opt.fit(max_iter=10)
    print('stick costs={0}'.format(costs))
    opt_t = stick.data(opt.eos)
    x = nom.stick.x / 10 #cm
    ax = fig.add_subplot(1,1,1)
    ax.plot(x, nom.stick_data*1e6, label='nom')
    ax.plot(x, exp.stick_data*1e6, 'r+', label='exp')
    ax.plot(x, opt_t*1e6, label='fit')
    ax.set_xlabel(r'$x/{\rm cm}$')
    ax.set_ylabel(r'$t/\mu{\rm sec}$')
    ax.legend(loc='lower right')
    fig.subplots_adjust(bottom=0.15) # Make more space for label

    return fig
Ejemplo n.º 5
0
def opt_result(exp, nom, plt):
    from fit import Opt
    from gun import magic
    
    fig = plt.figure('opt_result', figsize=fig_y_size(6))    
    p2f = magic.newton2dyne*magic.area/1e11
    opt = Opt(
        nom.eos,
        {'gun':nom.gun,'stick':nom.stick},
        {'gun':exp.vt,'stick':exp.stick_data})
    eos_0 = opt.eos
    opt.fit(max_iter=1)
    eos_1 = opt.eos
    nom.gun.eos = nom.eos # Restore after optimization
    
    ax = fig.add_subplot(1,1,1)
    ax.plot(exp.x,eos_0(exp.x)*p2f,label=r'$f_0$')
    ax.plot(exp.x,eos_1(exp.x)*p2f,label=r'$f_1$')
    ax.legend()
    ax.set_xlabel(r'$x/{\rm cm}$')
    ax.set_ylabel(r'$f/({\rm dyn}\cdot 10^{11})$')
    return fig