def interpirr(re,ta): "interpolate over irradiance to get the spectrum at ta and re" sp = np.zeros(lut.wvl.size) print re,ta for w in xrange(lut.wvl.size): irrdnfx = interpolate.RectBivariateSpline(lut.refsp[lut.refsp>5],lut.tausp,lut.sp_irrdn[1,w,0,lut.refsp>5,:],kx=1,ky=1) sp[w] = irrdnfx(re,ta) return smooth(sp,20)
def param(sp,wvlin): " Calculates the parameters from a spectrum." from linfit import linfit from Sp_parameters import nanmasked, norm2max, smooth, deriv, find_closest npar = 16 spc, mask = nanmasked(sp) wvl = wvlin[mask] try: norm = norm2max(spc) except ValueError: par = np.zeros(npar)*np.nan return par [i1000,i1077,i1493,i1600,i1200,i1300,i530,i610, i1565,i1634,i1193,i1198,i1236,i1248,i1270,i1644, i1050,i1040,i1065,i600,i870,i515] = find_closest(wvl,np.array([1000,1077,1493,1600,1200,1300,530, 610,1565,1634,1193,1198,1236,1248, 1270,1644,1050,1040,1065,600,870,515])) if np.isnan(spc[i1000]) or not spc[i1000]: par = np.zeros(npar)*np.nan return par norm2 = spc/spc[i1000] dsp = smooth(deriv(norm2,wvl/1000),2,nan=False) imaxwvl = np.argmax(spc) maxwvl = wvl[mask[imaxwvl]] # now calculate each parameter fit0 = np.polyfit(np.array([wvl[i1000],wvl[i1077]]),np.array([norm2[i1000],norm2[i1077]]),1) fit0_fn = np.poly1d(fit0) fit7 = np.polyfit(np.array([wvl[i1493],wvl[i1600]]),np.array([norm2[i1493],norm2[i1600]]),1) fit7_fn = np.poly1d(fit7) fit8,z = linfit(wvl[i1000:i1077],dsp[i1000:i1077]) fit9,z = linfit(wvl[i1200:i1300],dsp[i1200:i1300]) fit10,z = linfit(wvl[i530:i610]/1000,norm[i530:i610]) fit14,z = linfit(wvl[i1565:i1634],spc[i1565:i1634]/norm[i1565]) par = [sum(norm2[i1000:i1077]-fit0_fn(wvl[i1000:i1077])), # 1 curvature of rad normed to 1000 nm for 1000 nm - 1077 nm dsp[i1198], # 2 deriv of rad normed to 1000 nm at 1198 nm (!=IDL version) dsp[i1493], # 3 deriv of rad normed to 1000 nm at 1493 nm norm[i1198]/norm[i1236], # 4 ratio of normalized rad of 1198 nm / 1236 nm np.nanmean(norm[i1248:i1270]), # 5 mean of normalized rad between 1248 nm - 1270 nm np.nanmean(norm[i1565:i1644]), # 6 mean of normalized rad between 1565 nm - 1644 nm np.nanmean(norm[i1000:i1050]), # 7 mean of normalized rad between 1000 nm - 1050 nm sum(norm2[i1493:i1600]-fit7_fn(wvl[i1493:i1600])), # 8 curvature of rad normed to 1000 nm for 1493 nm - 1600 nm fit8[0], # 9 slope of deriv of rad normed to 1000 nm, 1000 nm - 1077 nm fit9[0], # 10 slope of deriv of rad normed to 1000 nm, 1200 nm - 1300 nm fit10[0], # 11 slope of normalized radiance between 530 nm - 610 nm norm[i1040], # 12 normalized radiance at 1040 nm norm[i1000]/norm[i1065], # 13 ratio of normalized radiance at 1000 nm / 1065 nm norm[i600]/norm[i870], # 14 ratio of normalized radiance at 600 nm / 870 nm np.nanmin([0.003,fit14[0]]), # 15 slope of radiance / rad at 1565 between 1565 nm - 1634 nm spc[i515]] # 16 radiance at 515 nm # do a check for bad points if np.all(np.isnan(par[0:13])): par[14] = np.nan par[15] = np.nan return par
from Sp_parameters import smooth # In[98]: for i,daystr in enumerate(dds): plt.figure() ax1 = plt.subplot(211) ax2 = plt.subplot(212,sharex=ax1) ax1.plot(rts[i]['utc'],rts[i]['tau'],'b.') ax1.plot(rts[i]['utc'][rts[i]['fl']],rts[i]['tau'][rts[i]['fl']],'g+') try: ax1.plot(rts[i]['utc'][rts[i]['fl']],smooth(rts[i]['tau'][rts[i]['fl']],6),'kx') except: pass ax1.set_ylabel('tau') ax2.plot(rts[i]['utc'],rts[i]['ref'],'b.') ax2.plot(rts[i]['utc'][rts[i]['fl']],rts[i]['ref'][rts[i]['fl']],'g+') try: ax2.plot(rts[i]['utc'][rts[i]['fl']],smooth(rts[i]['ref'][rts[i]['fl']],6),'kx') except: pass ax2.set_ylabel('ref') ax2.set_xlabel('UTC') ax1.set_title(daystr)
# <codecell> print meas.utc.shape print len(meas.good), max(meas.good) # <codecell> reload(Sp) from Sp_parameters import smooth # <codecell> fig,ax = plt.subplots(4,sharex=True) ax[0].set_title('Retrieval results time trace') ax[0].plot(meas.utc,tau,'rx') ax[0].plot(meas.utc[meas.good[:,0]],smooth(tau[meas.good[:,0],0],20),'k') ax[0].set_ylabel('$\\tau$') ax[1].plot(meas.utc,ref,'g+') ax[1].set_ylabel('R$_{ef}$ [$\\mu$m]') ax[1].plot(meas.utc[meas.good[:,0]],smooth(ref[meas.good[:,0],0],20),'k') ax[2].plot(meas.utc,phase,'k.') ax[2].set_ylabel('Phase') ax[2].set_ylim([-0.5,1.5]) ax[2].set_yticks([0,1]) ax[2].set_yticklabels(['liq','ice']) ax[3].plot(meas.utc,ki) ax[3].set_ylabel('$\\chi^{2}$') ax[3].set_xlabel('UTC [Hours]') ax[3].set_xlim([17,19.05]) plt.savefig(fp+'plots/TCAP_retri_results.png',dpi=600) #plt.savefig(fp+'plots/TCAP_retri_results.eps')
# In[36]: dc8_header # # Ploting of the combine effective radius # ## Now make a plot of the time series for easier referencing # In[39]: plt.figure(figsize=(9,7)) ax1 = plt.subplot(211) ax1.plot(star_utc,smooth(modis_tau,6),'m->',label='MODIS',markeredgecolor='none') ax1.plot(emas_utc_full,smooth(emas_tau_full,60),'ko',label='eMAS',markeredgecolor='none') ax1.plot(ssfr_utc,smooth(ssfr_tau,2),'g-x',label='SSFR') ax1.plot(rsp_utc,smooth(rsp_tau,70),'c-+',label='RSP') ax1.plot(goes_utc,smooth(goes_tau,2),'b-*',label='GOES',markeredgecolor='none') ax1.plot(star_utc,smooth(star_tau,40),'r-s',label='4STAR',markeredgecolor='none') ax1.errorbar(star_utc,smooth(modis_tau,6),yerr=modis_tau_std*2.0,color='m') ax1.errorbar(ssfr_utc,smooth(ssfr_tau,2),yerr=ssfr_tau_std*2.0,color='g') ax1.errorbar(rsp_utc,smooth(rsp_tau,70),yerr=rsp_tau_std*2.0,color='c') ax1.errorbar(goes_utc,smooth(goes_tau,2),yerr=goes_tau_std*2.0,color='b') ax1.errorbar(star_utc,smooth(star_tau,40),yerr=star_tau_std*2.0,color='r') ax1.legend(frameon=False,numpoints=1) ax1.grid() #ax1.set_xlabel('UTC [H]')
from Sp_parameters import deriv,smooth # In[82]: s['ext'] = np.zeros_like(s['tau_aero']) # In[161]: for l,w in enumerate(s['w'][0]): s['ext'][it,l] = smooth(deriv(smooth(s['tau_aero'][it,l],3,nan=False,old=True), s['Alt'][it][:,0])*-1000000.0,5,nan=False,old=True) # In[162]: plt.figure() plt.plot(s['ext'][it,400],s['Alt'][it]) # In[170]: fig = plt.figure(figsize=(11,8)) ax = plt.subplot2grid((4,4),(0,0),colspan=3,rowspan=3) cb = ax.pcolorfast(s['w'].flatten()*1000.0,s['Alt'][it].flatten(),s['ext'][it,:][:-1,:-1],
emas_tau_full = m_dict['emas'][1]; emas_ref_full = m_dict['emas'][3]; emas_utc_full = m_dict['emas'][5] modis_tau = m_dict['modis'][1]; modis_ref = m_dict['modis'][3] ssfr_tau = m_dict['ssfr'][1]; ssfr_ref = m_dict['ssfr'][3]; ssfr_utc = m_dict['ssfr'][5] rsp_tau = m_dict['rsp'][1]; rsp_ref = m_dict['rsp'][3]; rsp_utc = m_dict['rsp'][5] star_tau = m_dict['star'][1]; star_ref = m_dict['star'][3] goes_tau = m_dict['goes'][1]; goes_ref = m_dict['goes'][3] goes_utc = m_dict['goes'][5]; star_utc = m_dict['star'][5] # # Now make a plot of the time series for easier referencing # In[7]: plt.figure(figsize=(9,7)) ax1 = plt.subplot(211) ax1.plot(star_utc,smooth(modis_tau,6),'m->',label='MODIS',markeredgecolor='none') ax1.plot(emas_utc_full,smooth(emas_tau_full,60),'ko',label='eMAS',markeredgecolor='none') ax1.plot(ssfr_utc,smooth(ssfr_tau,2),'g-x',label='SSFR') ax1.plot(rsp_utc,smooth(rsp_tau,70),'c-+',label='RSP') ax1.plot(goes_utc,smooth(goes_tau,2),'b-*',label='GOES',markeredgecolor='none') ax1.plot(star_utc,smooth(star_tau,40),'r-s',label='4STAR',markeredgecolor='none') ax1.errorbar(star_utc,smooth(modis_tau,6),yerr=modis_tau_std*2.0,color='m') ax1.errorbar(ssfr_utc,smooth(ssfr_tau,2),yerr=ssfr_tau_std*2.0,color='g') ax1.errorbar(rsp_utc,smooth(rsp_tau,70),yerr=rsp_tau_std*2.0,color='c') ax1.errorbar(goes_utc,smooth(goes_tau,2),yerr=goes_tau_std*2.0,color='b') ax1.errorbar(star_utc,smooth(star_tau,40),yerr=star_tau_std*2.0,color='r') ax1.legend(frameon=False,numpoints=1) ax1.grid() #ax1.set_xlabel('UTC [H]')
# <markdowncell> # Create the desired arrays which are used in creating the parameters # <codecell> s_0_5_6 = lut.sp[0,:,0,5,6] s,n = nanmasked(s_0_5_6) snorm = norm2max(s_0_5_6) [i1000,i1077,i1493,i1600,i1200,i1300,i530,i610, i1565,i1634,i1193,i1198,i1236,i1248,i1270,i1644, i1050,i1040,i1065,i600,i870,i515] = find_closest(lut.wvl,np.array([1000,1077,1493,1600,1200,1300,530, 610,1565,1634,1193,1198,1236,1248, 1270,1644,1050,1040,1065,600,870,515])) norm2 = s_0_5_6/s_0_5_6[i1000] dsp = smooth(np.gradient(norm2,lut.wvl/1000.),2) # <codecell> norm2_uni = UnivariateSpline(lut.wvl/1000.0,norm2,k=5) norm2_uni.set_smoothing_factor(1) dnorm2 = norm2_uni.derivative() # <codecell> norm2_bspline = splrep(lut.wvl/1000.0,norm2,k=5) norm2_b = splev(lut.wvl/1000.0,norm2_bspline,der=0) dbnorm2 = splev(lut.wvl/1000.0,norm2_bspline,der=1) # <codecell>
# ## Do the combined plot # In[519]: profiles[k]['point'] # In[520]: len(profiles) # In[407]: smooth(profiles[k]['ams'],4) # In[463]: k['so2'] # In[464]: k['alt_so2'] # In[534]: fig = plt.figure(figsize=(8,10))
# <codecell> (meas.tau,meas.ref,meas.phase,meas.ki) = rk.run_retrieval(meas,lut) # <codecell> print meas.utc.shape print len(meas.good), max(meas.good) # <codecell> from Sp_parameters import smooth fig,ax = plt.subplots(4,sharex=True) ax[0].set_title('Retrieval results time trace') ax[0].plot(meas.utc,meas.tau,'rx') ax[0].plot(meas.utc[meas.good],smooth(meas.tau[meas.good],20),'k') ax[0].set_ylabel('$\\tau$') ax[1].plot(meas.utc,meas.ref,'g+') ax[1].set_ylabel('R$_{ef}$ [$\\mu$m]') ax[1].plot(meas.utc[meas.good],smooth(meas.ref[meas.good],20),'k') ax[2].plot(meas.utc,meas.phase,'k.') ax[2].set_ylabel('Phase') ax[2].set_ylim([-0.5,1.5]) ax[2].set_yticks([0,1]) ax[2].set_yticklabels(['liq','ice']) ax[3].plot(meas.utc,meas.ki) ax[3].set_ylabel('$\\chi^{2}$') ax[3].set_xlabel('UTC [Hours]') ax[3].set_xlim([18.5,19.05]) plt.savefig(fp+'plots\\SEAC4RS_20130913_retri_results.png',dpi=600) plt.savefig(fp+'plots\\SEAC4RS_20130913_retri_results.pdf',bbox='tight')
plt.figure(figsize=(11,6)) plt.plot(m2.variables['LONGITUDE'].data[0,:],m2.variables['RE_CLIMOMEAN'].data[0,:], '*-',color='r',label='MODIS climatology',zorder=50,lw=2.5) plt.plot(m2.variables['LONGITUDE'].data[0,:],m2.variables['RE_YRMEAN'].data[0,:,0], 'x-',color='grey',alpha=0.1,zorder=10,label='MODIS yearly means') plt.plot(m2.variables['LONGITUDE'].data[0,:],m2.variables['RE_YRMEAN'].data[0,:,:],'x-',color='grey',alpha=0.1,zorder=10) means = [] cls = ['green','blue','yellow','cyan','magenta','orange'] for j,d in enumerate(d_irtn): m = make_boxplot(s['REF'][s['days']==d],s['LON'][s['days']==d],lims3,pos3,color=cls[j], label='{}/{} 4STAR'.format(d_rtn[j][4:6],d_rtn[j][6:8]),alpha=0.3) means.append(m) plt.plot(pos3,np.nanmean(np.array(means),axis=0),'s-k',lw=3.5,label='4STAR mean',zorder=180) plt.plot(pos3,smooth(np.nanmean(np.array(means),axis=0),6),'s--',color='grey',lw=2.5,label='4STAR smoothed mean',zorder=200) plt.ylabel('R$_{{eff}}$ [$\\mu$m]') plt.ylim(0,25) plt.xlabel('Longitude [$^\\circ$]') plt.title('Effective radius for clouds along routine flight path') box = plt.gca().get_position() plt.gca().set_position([box.x0, box.y0, box.width * 0.78, box.height]) prelim() plt.legend(numpoints=1,bbox_to_anchor=(1.45,1.0)) plt.savefig(fp+'plot\\MODIS_Climatology_vs_4STAR_cld_ref_days.png',transparent=True,dpi=600)
vert_speed_ft = np.diff(arctas['GPS_ALT']) arctas['GPS_ALT'] # In[45]: vert_speed = vert_speed_ft*0.3084 # In[55]: plt.plot(smooth(vert_speed,10),smooth(arctas['GPS_ALT'][1:]*0.3084,10),'b.') plt.xlabel('Vertical speed [m/s]') plt.ylabel('Altitude [m]') plt.title('P-3 vertical speed for ARCTAS') # ## P3 during DISCOVER-AQ Denver # In[58]: discover = lm.load_ict(fp+'discoveraq-pds_p3b_20140807_r1.ict') # In[59]: