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