def simgrid(): fig = plt.figure() ax = fig.add_subplot(111) plot_curve('tiESO_z05_MgI.slay.fits',flip=True,ax=ax) for v in [0,tau/8.,tau/4.,3*tau/8.,tau/2.]: _,_,_ = simcurve(1001,0.965*0.43,222.57,5.45,0.8,6,0.378,v,ax=ax,kappa_0=0.8,scale=0.0799,label=str(v/tau),rot_label=False,p=True) ax.legend(loc=0,title='Viewing angle/$\\tau$') fig.show()
def dosims(filename,fitfix): '''to be run in /d/monk/eigenbrot/SALT/2011-3-UW_002/rotation''' pp = PDF(filename) print "Getting UrPars..." fig09 = plt.figure() ax09 = fig09.add_subplot(111) plot_curve('tiESO_z05_MgI.slay.fits',flip=True,ax=ax09) urpars = fit_curve('tiESO_z05_MgI.slay.fits',flip=True,ax=ax09,pars=[0.965*0.43,242.992,5.45,1.0,5,0.5,tau/4.,1.358],fixed=fitfix,p=True,rot_label='Ur-rotation curve',label='Urfit')[0] ax09.legend(loc=0) # fig09.show() fig19 = plt.figure() ax19 = fig19.add_subplot(111) plot_curve('tiESO_z1_MgI.slay.fits',ax=ax19,flip=True) print "Running z=1.93 step 1...", fit_curve('tiESO_z1_MgI.slay.fits',ax=ax19,flip=True,pars=[1.93*0.43] + urpars[1:],fixed=[0,1,2,3,4,5,6,7],label='Urfit extrapolation',rot_label='Ur-rotation curve') print "2..." pars19 = fit_curve('tiESO_z1_MgI.slay.fits',ax=ax19,flip=True,pars=[1.93*0.43,238.512] + urpars[2:7] + [1.374],fixed=fitfix,label='Rotation curve fit to data',p=True,rot_label='Fit rotation curve')[0] ax19.legend(loc=0) # fig19.show() fig38 = plt.figure() ax38 = fig38.add_subplot(111) plot_curve('tiESO_z2_MgI.slay.fits',ax=ax38,flip=True) print "Running z=3.98 step 1...", fit_curve('tiESO_z2_MgI.slay.fits',ax=ax38,flip=True,pars=[3.86*0.43] + urpars[1:],fixed=[0,1,2,3,4,5,6,7],label='Urfit extrapolation',rot_label='Ur-rotation curve') print "2..." pars38 = fit_curve('tiESO_z2_MgI.slay.fits',ax=ax38,flip=True,pars=[3.86*0.43,286.819] + urpars[2:7] + [11.240],fixed=fitfix,label='Rotation curve fit to data',p=True,rot_label='Fit rotation curve')[0] ax38.legend(loc=0) # fig38.show() fig0 = plt.figure() ax0 = fig0.add_subplot(111) plot_curve('tiESO_z0_MgI.slay.fits',ax=ax0) print "Running z=3.86 step 1...", fit_curve('tiESO_z0_MgI.slay.fits',ax=ax0,pars=[0] + urpars[1:],fixed=[0,1,2,3,4,5,6,7],label='Urfit extrapolation',rot_label='Ur-rotation curve') print "2..." pars0 = fit_curve('tiESO_z0_MgI.slay.fits',ax=ax0,pars=[0,256.641] + urpars[2:7] + [1.731],fixed=fitfix,label='Rotation curve fit to data',p=True,rot_label='Fit rotation curve')[0] ax0.legend(loc=0) # fig0.show() pp.savefig(fig0) pp.savefig(fig09) pp.savefig(fig19) pp.savefig(fig38) pp.close() return (pars0,urpars,pars19,pars38)
def uberfit(filename,pars=[0.000,256.292,5.45, 0.965*0.43,244.636,5.45, 1.930*0.43,241.189,5.45, 3.860*0.43,237.407,5.45, 0.0,5,0.5,tau/4, 1.62,0.1225],fixed=[]): r0, v0, e0 = openslay('tiESO_z0_MgI.slay.gg.fits') r09, v09, e09 = openslay('tiESO_z05_MgI.slay.fits',flip=True) r19, v19, e19 = openslay('tiESO_z1_MgI.slay.fits',flip=True) r38, v38, e38 = openslay('tiESO_z2_MgI.slay.fits',flip=True) data = dict((('r0',r0),('v0',v0),('e0',e0), ('r09',r09),('v09',v09),('e09',e09), ('r19',r19),('v19',v19),('e19',e19), ('r38',r38),('v38',v38),('e38',e38))) x0 = [pars[i] for i in range(len(pars)) if i not in fixed] print x0 print "fitting" t1 = time.time() xf = spo.fmin(uberfunc,x0,args=(data,fixed,pars))#,epsfcn=1)[0] t2 = time.time() print "fitting took {} seconds".format(t2-t1) print "pre-plot" pid = [i for i in range(len(pars)) if i not in fixed] k = 0 for j in pid: pars[j] = xf[k] k += 1 pp=PDF(filename) pf0 = [0,1,2,12,13,14,15,16,17] pf09 = [3,4,5,12,13,14,15,16,17] pf19 = [6,7,8,12,13,14,15,16,17] pf38 = [9,10,11,12,13,14,15,16,17] print "plotting" ########### fig0 = plt.figure() ax0 = fig0.add_subplot(111) rw0 = r0.max() - r0.min() f0 = [i for i in fixed if i in pf0] plot_curve('tiESO_z0_MgI.slay.gg.fits',ax=ax0) mr0, mv0, _ = simcurve(1001,pars[0],pars[1],pars[2],pars[12],pars[13],pars[14],pars[15],kappa_0=pars[16],\ z_d=pars[17],scale=rw0/1001.,ax=ax0,p=True,label='Global fit',rot_label='Rotation curve') ax0.text(12,-30,('{}\n'*9).format(*['$*$' if i in f0 else '' for i in pf0]),color='r', horizontalalignment='left',va='top',fontsize=12) ax0.text(15,-450,'$*$ = fixed',color='r') ax0.legend(loc=0) iv0 = np.interp(r0, mr0, mv0) ########### # fig0_1 = plt.figure() # ax0_1 = fig0_1.add_subplot(111) # rw0_1 = r0_1.max() - r0_1.min() # f0_1 = [i for i in fixed if i in pf0_1] # plot_curve('tiESO_z0_MgI.slay.2_16.fits',ax=ax0_1) # _, _, _ = simcurve(1001,pars[3],pars[4],pars[5],pars[12],pars[13],pars[14],pars[15],kappa_0=pars[16],\ # z_d=pars[20],scale=rw0_1/1001.,ax=ax0_1,p=True,label='Global fit',rot_label='Rotation curve') # ax0_1.text(12,-30,('{}\n'*9).format(*['$*$' if i in f0_1 else '' for i in pf0_1]),color='r', # horizontalalignment='left',va='top',fontsize=12) # ax0_1.text(15,-450,'$*$ = fixed',color='r') # ax0_1.legend(loc=0) ########### fig09 = plt.figure() rw09 = r09.max() - r09.min() f09 = [i for i in fixed if i in pf09] ax09 = fig09.add_subplot(111) plot_curve('tiESO_z05_MgI.slay.fits',ax=ax09,flip=True) mr09, mv09, _ = simcurve(1001,pars[3],pars[4],pars[5],pars[12],pars[13],pars[14],pars[15],kappa_0=pars[16],\ scale=rw09/1001.,z_d=pars[17],ax=ax09,p=True,label='Global fit',rot_label='Rotation curve') ax09.text(12,-30,('{}\n'*9).format(*['$*$' if i in f09 else '' for i in pf09]),color='r', horizontalalignment='left',va='top',fontsize=12) ax09.text(15,-450,'$*$ = fixed',color='r') ax09.legend(loc=0) iv09 = np.interp(r09, mr09, mv09) ########### fig19 = plt.figure() rw19 = r19.max() - r19.min() f19 = [i for i in fixed if i in pf19] ax19 = fig19.add_subplot(111) plot_curve('tiESO_z1_MgI.slay.fits',flip=True,ax=ax19) mr19, mv19, _ = simcurve(1001,pars[6],pars[7],pars[8],pars[12],pars[13],pars[14],pars[15],kappa_0=pars[16],\ scale=rw19/1001.,z_d=pars[17],ax=ax19,p=True,label='Global fit',rot_label='Rotation curve') ax19.text(12,-30,('{}\n'*9).format(*['$*$' if i in f19 else '' for i in pf19]),color='r', horizontalalignment='left',va='top',fontsize=12) ax19.text(15,-450,'$*$ = fixed',color='r') ax19.legend(loc=0) iv19 = np.interp(r19, mr19, mv19) ############ fig38 = plt.figure() rw38 = r38.max() - r38.min() f38 = [i for i in fixed if i in pf38] ax38 = fig38.add_subplot(111) plot_curve('tiESO_z2_MgI.slay.fits',flip=True,ax=ax38) mr38, mv38, _ = simcurve(1001,pars[9],pars[10],pars[11],pars[12],pars[13],pars[14],pars[15],kappa_0=pars[16],\ scale=rw38/1001.,z_d=pars[17],ax=ax38,p=True,label='Global fit',rot_label='Rotation curve') ax38.text(12,-30,('{}\n'*9).format(*['$*$' if i in f38 else '' for i in pf38]),color='r', horizontalalignment='left',va='top',fontsize=12) ax38.text(15,-450,'$*$ = fixed',color='r') ax38.legend(loc=0) iv38 = np.interp(r38, mr38, mv38) ############# bigr = np.concatenate((r0,r09,r19,r38)) bigiv = np.concatenate((iv0,iv09,iv19,iv38)) bigv = np.concatenate((v0,v09,v19,v38)) bige = np.concatenate((e0,e09,e19,e38)) chisq = np.sum((bigv - bigiv)**2/bige**2)/(bigr.size - xf.size - 1) ax0.text(-40,200,'Red. $\chi^2$: {:4.3f}'.format(chisq)) ax09.text(-40,200,'Red. $\chi^2$: {:4.3f}'.format(chisq)) ax19.text(-40,200,'Red. $\chi^2$: {:4.3f}'.format(chisq)) ax38.text(-40,200,'Red. $\chi^2$: {:4.3f}'.format(chisq)) pp.savefig(fig0) pp.savefig(fig09) pp.savefig(fig19) pp.savefig(fig38) pp.close() return pars