def fit(self,): """ call the fitter """ x = self.spectrum.wavelength y = self.spectrum.flux err = self.spectrum.fluxerr # build initial parameter value list p0 = [] pinfo = [] for x in self.fit_parameters: par = x["parinfo"] for pv in par: p0.append(pv['value']) pinfo.append(pv) # build argument list fkw={'x':x,'y':y,'err':err} # call L-M fitter Z = mpfit.mpfit(fit_function,p0,functkw=fkw,parinfo=pinfo,quiet=True) if (Z.status <= 0): print 'fit_spectrum.mpfit error message = ', Z.errmsg # update the fit (parinfo...?), return results self.result = Z return Z
def execute(self, stack_time, stack_flux, stack_er): p0 = [ 0.2640, 1.392, -0.1398, 2.54017, 0.001593, 0.9994, 0.000455, 3.52, 0.13, 5.61, 0.78, 0.76, 0.001 ] parinfo = self.getParamInfo() fa = {"x": stack_time, "y": stack_flux, "err": stack_er} self.m = mpfit(self.lightcurveFunc, p0, functkw=fa, parinfo=parinfo)
def chi2colorfit(datfile, clobber=False, Nsim=20000): """do chi2 fitting to a supernova light curve using SNANA simulations. Keep color as a free parameter""" sn = snana.SuperNova(SNDATA_ROOT + '/SIM/' + datfile) sn.getClassSim(Nsim=Nsim, clobber=clobber) #Type Ia chi-squared mIa = zeros([len(sn.ClassSim.Ia.PTROBS_MIN), len(sn.MJD)]) for MJD, FLT, i in zip(sn.MJD, sn.FLT, range(len(sn.MJD))): sn.ClassSim.Ia.samplephot(MJD) mIa[:, i] = sn.ClassSim.Ia.__dict__['%s%i' % (FLT, int(MJD))] chisqIa = [] Iaparams = [] for i in range(len(sn.ClassSim.Ia.PTROBS_MIN)): if not len(where(mIa[i, :] == 99)[0]): fa = { 'x': sn.MJD, 'y': sn.FLUXCAL, 'err': zeros(len(sn.MJD)), 'model_mag': mIa[i, :], 'flt': sn.FLT } mvals = mpfit.mpfit(lsfunc_color, ones(len(unique(sn.FLT))), functkw=fa) Iaparams = Iaparams + [mvals.params] scale = ones(len(sn.FLT)) for f, j in zip(unique(sn.FLT), range(len(unique(sn.FLT)))): row = where(sn.FLT == f)[0] scale[row] = mvals.params[j] model = array(scale) * 10**(-0.4 * (mIa[i, :] - 27.5)) chisqIa = chisqIa + [ sum((model - sn.FLUXCAL)**2 / sn.FLUXCALERR**2) ] #Type Ib/c chi-squared mIbc = zeros([len(sn.ClassSim.Ibc.PTROBS_MIN), len(sn.MJD)]) for MJD, FLT, i in zip(sn.MJD, sn.FLT, range(len(sn.MJD))): sn.ClassSim.Ibc.samplephot(MJD) mIbc[:, i] = sn.ClassSim.Ibc.__dict__['%s%i' % (FLT, int(MJD))] chisqIbc = [] Ibcparams = [] count = 0 for i in range(len(sn.ClassSim.Ibc.PTROBS_MIN)): if not len(where(mIbc[i, :] == 99)[0]): count = count + 1 fa = { 'x': sn.MJD, 'y': sn.FLUXCAL, 'err': zeros(len(sn.MJD)), 'model_mag': mIbc[i, :], 'flt': sn.FLT } mvals = mpfit.mpfit(lsfunc_color, ones(len(unique(sn.FLT))), functkw=fa) Ibcparams = Ibcparams + [mvals.params] scale = ones(len(sn.FLT)) for f, j in zip(unique(sn.FLT), range(len(unique(sn.FLT)))): row = where(sn.FLT == f)[0] scale[row] = mvals.params[j] model = array(scale) * 10**(-0.4 * (mIbc[i, :] - 27.5)) chisqIbc = chisqIbc + [ sum((model - sn.FLUXCAL)**2 / sn.FLUXCALERR**2) ] #Type II chi-squared mII = zeros([len(sn.ClassSim.II.PTROBS_MIN), len(sn.MJD)]) for MJD, FLT, i in zip(sn.MJD, sn.FLT, range(len(sn.MJD))): sn.ClassSim.II.samplephot(MJD) mII[:, i] = sn.ClassSim.II.__dict__['%s%i' % (FLT, int(MJD))] chisqII = [] IIparams = [] for i in range(len(sn.ClassSim.II.PTROBS_MIN)): if not len(where(mII[i, :] == 99)[0]): fa = { 'x': sn.MJD, 'y': sn.FLUXCAL, 'err': zeros(len(sn.MJD)), 'model_mag': mII[i, :], 'flt': sn.FLT } mvals = mpfit.mpfit(lsfunc_color, ones(len(unique(sn.FLT))), functkw=fa) IIparams = IIparams + [mvals.params] scale = ones(len(sn.FLT)) for f, j in zip(unique(sn.FLT), range(len(unique(sn.FLT)))): row = where(sn.FLT == f)[0] scale[row] = mvals.params[j] model = array(scale) * 10**(-0.4 * (mII[i, :] - 27.5)) chisqII = chisqII + [ sum((model - sn.FLUXCAL)**2 / sn.FLUXCALERR**2) ] print """Type Ia SNe have minimum chi squared: %.2f computed from %.f SNe""" % (min(chisqIa), len(chisqIa)) print """Type Ibc SNe have minimum chi squared: %.2f computed from %.f SNe""" % (min(chisqIbc), len(chisqIbc)) print """Type II SNe have minimum chi squared: %.2f computed from %.f SNe""" % (min(chisqII), len(chisqII)) #now compute the likelihoods eIa = exp(-array(chisqIa) / 2.) eIbc = exp(-array(chisqIbc) / 2.) eII = exp(-array(chisqII) / 2.) chiIa = sum(exp(-array(chisqIa) / 2.)) chiIbc = sum(exp(-array(chisqIbc) / 2.)) chiII = sum(exp(-array(chisqII) / 2.)) p_Ia = chiIa / (chiIa + chiIbc + chiII) p_Ibc = chiIbc / (chiIa + chiIbc + chiII) p_II = chiII / (chiIa + chiIbc + chiII) print """likelihoods: Type Ia Type Ib/c Type II %.4f %.4f %.4f""" % (p_Ia, p_Ibc, p_II) print """odds ratios: Type Ia/Ib/c Type Ia/II %.4f %.4f""" % (chiIa / chiIbc, chiIa / chiII) Iarow = where(chisqIa == min(chisqIa))[0][0] Ibcrow = where(chisqIbc == min(chisqIbc))[0][0] IIrow = where(chisqII == min(chisqII))[0][0] return mIa, mIbc, mII, eIa / chiIa, eIbc / chiIbc, eII / chiII, Iarow, Ibcrow, IIrow, Iaparams, Ibcparams, IIparams
def annealFit(session, spinwave_domain, spinwave_range, spinwave_range_Err, size=3, k = 100, tMin = .001, tMax = 15, tFactor = .95, MCeveryTime = True, recordKeeperCallback = None): # Create fitter fitter = PM.Fitter(session, spinwave_domain, size, k, tMin, tMax, tFactor, MCeveryTime) #testFile = open("/home/tom/Desktop/annealOutput1.txt", 'w') #testFile = open("C:\\annealOutput1.txt", 'w') # Helper function for GetResult def myfunc(p, y=None, err=None, callback = None): """returns Chi Squared to be minimized.""" if callback: callback(p) #testFile.write('\np: ' + str(p)) #testFile.flush() fitter.fit_list = p model = fitter.GetResult() #print 'y:\n', y, '\n\nmodel:\n', model #for i in range(len(y)): # testFile.write(" p: p %3.5f y %3.5f model %3.5f err %3.5f"%(p,y[i],model[i],err[i]) ) result = (y-model)/err chi_sq = 0 for entry in result: #print "entry: ", entry chi_sq += math.pow(entry, 2) #print '\n\nresult:\n', result #print "\nchi_sq: " + str(chi_sq) #testFile.write("\nchi_sq: " + str(chi_sq)) #testFile.flush() return chi_sq # Function Keywords y = spinwave_range err = spinwave_range_Err p0 = fitter.fit_list #testFile.write("initial p: " + str(p0)) #_______________________ Testing _____________________________ #START = -10 #STOP = 10 #step = .01 #FILE = "C:\\CHISQ_points3.txt" ##plot #handle = open(FILE, 'w') ##handle.write("data: "+ str(y)) ##handle.flush() #for i in range((STOP-START)/step): #x = START + i*step #val = myfunc([x], y, err) #if i != 0: #handle.write("\n") #handle.write(str(x) + " " + str(val)) #handle.close() #sys.exit() #_____________________________________________________________________ result=anneal(myfunc,p0,args=(y,err, recordKeeperCallback), schedule='simple',lower=fitter.min_range_list,upper=fitter.max_range_list, maxeval=None, maxaccept=None,dwell=50, maxiter=2000, full_output=1) print "annealing result: ", result p = result[0] myfunc(p, y, err)#To propogate final value #----Now Localy optimize with mpfit to fine tune the answer ----------- def mpfitfunc(p, fjac=None, y=None, err=None, callback = None): if callback: callback(p) #testFile.write("mpfit: " + str(p)) fitter.fit_list = p model = fitter.GetResult() status = 0 print 'y:\n', y, '\n\nmodel:\n', model #print '\n\ny-model:\n', (y-model) #print '\n\nerr:\n', err result = (y-model)/err print '\n\nresult:\n', result return [status, result] fa = {'y':y, 'err':err, 'callback':recordKeeperCallback} # Set parinfo with the limits and such. Probably don't need parbase={'value':0., 'limited':[0,0], 'limits':[0.,0.]} parinfo=[] p0 = fitter.fit_list for i in range(len(p0)): parinfo.append(copy.deepcopy(parbase)) for i in range(len(p0)): parinfo[i]['value']=p0[i] if(fitter.min_range_list[i] != np.NINF): parinfo[i]['limits'][0]=fitter.min_range_list[i] parinfo[i]['limited'][0] = 1 else: parinfo[i]['limited'][0] = 0 if fitter.max_range_list[i] != np.PINF: parinfo[i]['limits'][1] = fitter.max_range_list[i] parinfo[i]['limited'][1] = 1 else: parinfo[i]['limited'][1] = 0 # Run mpfit on fitlist with all the jazz. print "params: ", p0 print "parinfo: ", parinfo m = mpfit(mpfitfunc, p0, parinfo=parinfo, functkw = fa) #testFile.write("\nresult: " + str(result)) #testFile.write("\nm: " + str(m)) #testFile.close() return (m.status, m.params, m.perror)
def fitting(session, spinwave_domain, spinwave_range, spinwave_range_Err, size=3, k = 100, tMin = .001, tMax = 15, tFactor = .95, MCeveryTime = True, recordKeeperCallback = None): # Create fitter fitter = PM.Fitter(session, spinwave_domain, size, k, tMin, tMax, tFactor, MCeveryTime) # Helper function for GetResult def myfunc(p, fjac=None, y=None, err=None, callback = None): if callback: callback(p) fitter.fit_list = p model = fitter.GetResult() status = 0 print 'y:\n', y, '\n\nmodel:\n', model #print '\n\ny-model:\n', (y-model) #print '\n\nerr:\n', err result = (y-model)/err print '\n\nresult:\n', result return [status, result] # Function Keywords #spinwave_domain is a list of 3D lists: #-[(x1,y1,z1),(x2,y2,z2),...] #x must be a 1D numpy array: #[x1,y1,z1,x2,t2,z2,...] #xList = [] #for point in fit.spinwave_domain: # xList.append(point[0]) # yList.append(point[1]) # zList.append(point[2]) #x = np.array(xList) #y = myfunc(fit) y = spinwave_range #errVal = .001 #err = [errVal]*len(y) err = spinwave_range_Err #fa = {'x':x, 'y':y, 'err':err} fa = {'y':y, 'err':err, 'callback':recordKeeperCallback} # Set parinfo with the limits and such. Probably don't need parbase={'value':0., 'limited':[0,0], 'limits':[0.,0.]} parinfo=[] p0 = fitter.fit_list for i in range(len(p0)): parinfo.append(copy.deepcopy(parbase)) for i in range(len(p0)): parinfo[i]['value']=p0[i] if(fitter.min_range_list[i] != np.NINF): parinfo[i]['limits'][0]=fitter.min_range_list[i] parinfo[i]['limited'][0] = 1 else: parinfo[i]['limited'][0] = 0 if fitter.max_range_list[i] != np.PINF: parinfo[i]['limits'][1] = fitter.max_range_list[i] parinfo[i]['limited'][1] = 1 else: parinfo[i]['limited'][1] = 0 # Run mpfit on fitlist with all the jazz. print "params: ", p0 print "parinfo: ", parinfo m = mpfit(myfunc, p0, parinfo=parinfo, functkw = fa) # Bare Bones Run for when the above (especially keywords x) breaks instantly #m = mpfit(myfunc, fit.fitlist) #Return the parameters return (m.status, m.params, m.perror)
def plot_planet(obj=None,caltype=None,nobs=None): sectdatapath='../data/FTS/sect_planets/' ftsdatapath='../data/FTS/' modelfile=None mc=False if obj == 'saturn': datapath=sectdatapath nobs=nobs d_plt_ini=16. obsid=['1342198279','1342224754','1342247750'] dobs=[17.7,16.7,17.4] suffix='' modelfile='spire_JanskyGHz.dat' ftspsfile='./v11/Saturn/'+obsid[nobs]+ \ '_spectrum_point_HR_unapod_18Apr2013' \ +suffix+'.fits' dtrue=dobs[nobs] scale=(dtrue/dobs[0])**2. nskip=3 munit=1. uplot=1e-3 unit='kJy' yrange=[3.,40.] sim_func=sim_planet psuf='_v11_'+str(nobs) if obj == 'mars': datapath=sectdatapath d_plt_ini=6. nobs=nobs modelfile='MarsModel_OD176.txt' obsid=['1342193675', '1342197462', '1342198930', \ '1342231056', '1342231059', '1342231062', \ '1342231064', '1342231070', '1342231076', \ '1342231079', '1342231085', '1342245848', \ '1342247563', '1342247571'] dobs=[8.8,6.0,5.4,5.5,5.5,5.5, \ 5.5,5.5,5.5,5.5,5.5,8.8,6.6,6.6] ftspsfile='./v11/Mars/'+obsid[nobs]+'_spectrum_' \ 'point_HR_unapod_18Apr2013.fits' dtrue=dobs[nobs] scale=(dtrue/5.5)**2. nskip=2 munit=1e3 uplot=1e-3 unit='kJy' yrange=[0.5,20.] sim_func=sim_planet psuf='_v11_'+str(nobs) if obj == 'neptune': datapath=sectdatapath d_plt_ini=2. dtrue=2.28 modelfile='0x5000AD87_model_HR.fits' obsid='1342221703' ftspsfile='./v10/'+obsid+'_spectrum_' \ 'point_HR_unapod_v10.fits' scale=1. uplot=1. unit='Jy' yrange=[20.,300.] sim_func=sim_planet psuf='' if obj == 'uranus': datapath=sectdatapath d_plt_ini=3. dtrue=3.55 modelfile='5001389B_model_HR.fits' obsid='1342257307' ftspsfile='./v10/'+obsid+'_spectrum_' \ 'point_HR_unapod_v10.fits' scale=1. uplot=1. unit='Jy' yrange=[90.,600.] sim_func=sim_planet psuf='' if obj == 'm83' or obj == 'M83': datapath=ftsdatapath modelfile='' d_plt_ini=18. ftspsfile='M83/HIPE.9.0.2742/unapodize/' \ '1342212345_avgspectrum_HR_unapod_0_6.fits' ftsexfile='M83/HIPE.9.0.2742/unapodize/' \ '1342212345_avgspectrum_HR_unapod_0_6.fits' yrange=[0.1,300.] uplot=1. unit='Jy' sim_func=sim_gauss psuf='' if obj == 'm82' or obj == 'M82': datapath=ftsdatapath modelfile='' d_plt_ini=22. ftspsfile='M82/HIPE.8.0.3384/unapodize/' \ '1342208388_avgspectrum_HR_unapod_0_6.fits' ftsexfile='M82/HIPE.8.0.3384/unapodize/' \ '1342208388_avgspectrum_HR_unapod_0_6.fits' yrange=[1.,2000.] uplot=1. unit='Jy' sim_func=sim_gauss psuf='' if obj == 'ngc4214' or obj == 'NGC4214': datapath=ftsdatapath modelfile='' d_plt_ini=18. ftspsfile=obj.upper()+'/HIPE.11.0.2785/unapodize/' \ '1342256082_spectrum_point_HR_unapod.fits' ftsexfile='M83/HIPE.11.0.2785/unapodize/' \ '1342256082_spectrum_extended_HR_unapod.fits' yrange=[0.01,20.] uplot=1. unit='Jy' sim_func=sim_gauss psuf='' if caltype == 'point': ftsfile=pyfits.open(datapath+ftspsfile) if caltype == 'extended': ftsfile=pyfits.open(datapath+ftsexfile) ftsfile.verify('silentfix') ctrxy=array([128,128]) # ======= Read model spectrum of the planet ========= if bool(modelfile): if modelfile[-4:] != 'fits': spec_mod=open('../data/FTS/sect_planets/'+modelfile) modline=spec_mod.readlines() smfreq=[] smkjy=[] for i in range(len(modline)/10-nskip): ii=i*10+nskip temp=None temp=modline[ii].split() smfreq.append(double(temp[0])) smkjy.append(double(temp[len(temp)-1])) mfreq=array(smfreq) mkjy=array(smkjy).copy()/munit if obj == 'mars': mfreq=3e5/array(smfreq) scalem=0. for np in range(len(modelwn)): anp=abs(mfreq-modelwn[np]*30.) idxnp=where(anp == min(anp)) scalem=scalem+(1e-3*(fluxLellouch[np]+fluxRudy[np])/2.)/ \ mkjy[idxnp[0][0]] scalem=scalem/float(len(modelwn)) mkjy=scalem*mkjy.copy() else: model=pyfits.open('../data/FTS/sect_planets/'+modelfile) model.verify('silentfix') nover=len((where(model['SSWD4'].data['wave'] <= \ model['SLWC3'].data['wave'].max()))[0]) mslw=model['SLWC3'].data mssw=model['SSWD4'].data nmod=len(mslw['flux'])+len(mssw['flux'])-nover mfreq=zeros(nmod) mkjy=zeros(nmod) mfreq[0:len(mslw['flux'])]= \ mslw['wave'][0:len(mslw['flux'])] mfreq[len(mslw['flux']):]=mssw['wave'][nover:] mkjy[0:(len(mslw['flux'])-nover)]= \ mslw['flux'][0:(len(mslw['flux'])-nover)] mkjy[(len(mslw['flux'])-nover):len(mslw['flux'])]= \ 0.5*(mslw['flux'][(len(mslw['flux'])-nover):]+ \ mssw['flux'][0:nover]) mkjy[len(mslw['flux']):]=mssw['flux'][nover:] # ======== Construct planet light distribution image ========= [chiparam,chierr,dplt]=find_best_d(ftsfile,d_plt_ini, \ caltype=caltype,obj=obj) prob=exp(-(chiparam-chiparam.min())/chiparam.min()) mindx=where(chiparam == chiparam.min()) mindx=mindx[0][0] proberr=zeros(len(prob))+1. # proberr=sqrt((chierr**2.+chiparam[mindx]**2.)) #\ # +(chiparam*chierr[mindx]/chiparam[mindx]**2.)**2.) figure(10) plot(dplt,prob,marker='*') fa={'x':dplt,'y':prob,'err':proberr} p_info=[{'value':d_plt_ini,'fixed':0, \ 'limited':[1,1],'limits':[0.,100.]}, \ {'value':2.,'fixed':0, \ 'limited':[1,1],'limits':[0.,100.]}] params=mpfit.mpfit(fit_likelihood,functkw=fa,maxiter=1000,parinfo=p_info) dplt_g=dplt[0]+arange(101)*(dplt[-1]-dplt[0])/100. yy=fit_gaussian(dplt_g,params.params[0],params.params[1]) plot(dplt_g,yy) xlim([dplt[0],dplt[-1]]) ylim([0.,1.2]) xlabel('Diameter (arcsec)') ylabel('exp(chi-param)') annotate('$\mu$ = {:.2f} (arcsec)'.format(params.params[0]), \ [dplt_g[0],1.1]) annotate('$\sigma$ = {:.2f} (arcsec)'.format(params.params[1]), \ [dplt_g[0],1.0]) savefig(plotdir+obj+'_d_fit'+psuf+'.png',format='PNG') close(10) # dplanet=params.params[0] dplanet=params.params[0] planet_mod=sim_func(dplanet,ctrxy) planet_area=sum(planet_mod) if obj == 'saturn': mod1=sim_gauss(12.,ctrxy) mod1_area=sum(mod1) mod2=sim_exp(4.,ctrxy) mod2_area=sum(mod2) # ======== Correcting the FTS Spectra ========== figure(0,figsize=[8.,8.]) subplot(111) title('Correction on the '+obj.capitalize()+' FTS Spectrum',fontsize='large') # suptitle('$\\theta_{D}=$'+'{:.2f}'.format(params.params[0]) \ # +' $\\theta_{obs}=$'+'{:.2f}'.format(dtrue)) out=pyfits.HDUList() for i in range(2): if i == 0: wn=wn_ssw beam=beam_ssw fwhm=fwhm_ssw rtel=telrsrf[1] iro='blue' ni='SSW' deti='SSWD4' if i == 1: wn=wn_slw beam=beam_slw fwhm=fwhm_slw rtel=telrsrf[2] iro='red' ni='SLW' deti='SLWC3' fts=ftsfile[deti] if (obj == 'm83' or obj == 'M83') or \ (obj == 'm82' or obj == 'M82'): fts.data['flux'][:]= \ fts.data['flux'].copy()*cps[deti].data['pointConv'] beam_area=[] beam_planet=[] if obj == 'saturn': beam_mod1=[] beam_mod2=[] for j in range(len(wn[0].data)): beam_area.append(sum(beam[0].data[j,:,:])) beam_planet.append(sum(beam[0].data[j,:,:]*planet_mod)) if obj == 'saturn': beam_mod1.append(sum(beam[0].data[j,:,:]*mod1)) beam_mod2.append(sum(beam[0].data[j,:,:]*mod2)) a_beam=None ps_coup=None eta_mb=None a_beam=array(beam_area) if i == 0: assw=a_beam.copy() if i == 1: aslw=a_beam.copy() ps_coup=array(beam_planet) if obj == 'saturn': pmod1_coup=array(beam_mod1) pmod2_coup=array(beam_mod2) x=wn[0].data*30. # change the wave number to GHz fab=interpolate.interp1d(x,a_beam, \ bounds_error=False,fill_value=a_beam[0]) fps=interpolate.interp1d(x,ps_coup, \ bounds_error=False,fill_value=ps_coup[0]) if obj == 'saturn': fmod1=interpolate.interp1d(x,pmod1_coup, \ bounds_error=False,fill_value=pmod1_coup[0]) fmod2=interpolate.interp1d(x,pmod2_coup, \ bounds_error=False,fill_value=pmod2_coup[0]) xp=ftsfile[deti].data['wave'] ypa=ftsfile[deti].data['flux']*uplot rs=rtel.data['rsrf']/cps[deti].data['pointConv']* \ fps(xp)/planet_area if caltype == 'point': correction=rtel.data['rsrf']/(rs*cps[deti].data['pointConv']) if caltype == 'extended': correction=rtel.data['rsrf']/rs ypb=ypa.copy()*correction if obj == 'saturn': ypb1=ypb/(planet_area/fps(xp)*fmod1(xp)/mod1_area) ypb2=ypb/(planet_area/fps(xp)*fmod2(xp)/mod2_area) fill_between(xp,ypb1,ypb2,color='gray',alpha=0.5) exec('foo'+str(i)+'=ypb1') exec('bar'+str(i)+'=ypb2') plot(xp,ypa,'--',color=iro,label=ni+' '+caltype,linewidth=1.) plot(xp,ypb,'-',color=iro,linewidth=1.,label=ni+' corrected') fts.data['flux'][:]=ypb[:] fts.data['error'][:]=fts.data['error']*correction out.append(fts) tempfts=fts.copy() if bool(modelfile): if modelfile[-4:] != 'fits': idx=(mfreq >=xp[0]-5.) & (mfreq <= xp[-1]+5.) fmod=interpolate.interp1d(mfreq[idx],mkjy[idx], \ bounds_error=False, \ fill_value=mkjy[-1]) tempfts.data['flux'][:]=fmod(xp)*scale/ypb else: idx=(mfreq >= xp[0]) & (mfreq <= xp[-1]) tempfts.data['flux'][:]=scale*mkjy[idx]/ypb tempfts.data['error'][:]=0. tempfts.data['mask'][:]=0. tempfts.name='GAMMA'+deti out.append(tempfts) if bool(modelfile): plot(mfreq,scale*mkjy,color='black',label='Model') if obj == 'mars': plot(modelwn*30.,scale*fluxLellouch*1e-3,linewidth=0.,marker='+', \ markersize=10.,color='black',markeredgewidth=2., \ label='Lellouch') plot(modelwn*30.,scale*fluxRudy*1e-3,linewidth=0.,marker='+', \ markersize=10.,color='red',markeredgewidth=2., \ label='Rudy') xlabel('Frequency (GHz)',fontsize='x-large') ylabel('Flux Density('+unit+')',fontsize='x-large') xlim([400.,1600.]) ylim(yrange) # annotate('{:.2f}'.format(params.params[0]),[450.,0.95*yrange[0]]) axvline(linewidth=3.,color='black') axhline(linewidth=3.,color='black') yscale('log') legend(loc=2) savefig(filename=plotdir+obj+psuf+'.png',format='PNG') close(0) os.system('open %s%s%s.png &'%(plotdir,obj,psuf)) out.writeto(plotdir+obj+'_correct'+psuf+'.fits',clobber=True, \ output_verify='ignore') return