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
def smooth(x, window,nan=True): """ Moving average of 'x' with window size 'window'. If the nan keyword is set to True (default), the array is returned with the nans removed and substituted by an interpolated value """ if nan: from Sp_parameters import nanmasked from scipy import interpolate ix = np.arange(len(x)) xmasked, mask = nanmasked(x) fx = interpolate.interp1d(ix[mask],xmasked) xinterp = fx(ix) xout = np.convolve(xinterp, np.ones(window)/window, 'same') else: xout = np.convolve(x, np.ones(window)/window, 'same') return xout
# In[104]: dddjf = djf_dif.flatten() # In[109]: from Sp_parameters import nanmasked # In[110]: dddjf,idjf = nanmasked(djf_dif.flatten()) # In[126]: dddjf.shape # In[150]: plt.plot(djf_fu['SW_irr_up_avg'][2,:,:].flatten()) # In[147]:
print np.nanmax(sm.rad[sm.good[100],:]) sm.good[100] print sm.good.shape, sm.good.max() # <headingcell level=4> # Next section loads a few functions that can be used for typical analysis # <codecell> from Sp_parameters import nanmasked, closestindex, norm2max time_ref=17.22 ii = closestindex(sm.utc,time_ref) rad,mask = nanmasked(sm.rad[sm.good[ii],:]) # <headingcell level=4> # Plotting functions defined # <codecell> # set up plotting of a few of the zenith radiance spectra def pltzen(fig=None,ax=None, tit='Zenith spectra'): "Plotting of zenith measurements in radiance units" if ax is None: fig,ax = plt.subplots() doaxes = True else: doaxes = False
ax4[0].legend() ax4[1].plot(np.arange(16),lut.par[1,10,10,:],label='python') ax4[1].plot(np.arange(16),p_1_10_10,label='idl') ax4[1].set_title('difference in parameters - ice example') ax4[1].set_xlabel('Parameters') ax4[1].legend() # <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()
# get the distance between two points for RSP from load_modis import spherical_dist print rsp['Lat'][rsp_good[0][-1]], rsp['Lon'][rsp_good[0][-1]] print rsp['Lat'][rsp_good[0][-2]], rsp['Lon'][rsp_good[0][-2]] print spherical_dist(np.array(rsp['Lat'][rsp_good[0][-1]],rsp['Lon'][rsp_good[0][-1]]), np.array(rsp['Lat'][rsp_good[0][-2]],rsp['Lon'][rsp_good[0][-2]])) # <headingcell level=2> # Calculate the histogram for each comparisons # <codecell> from Sp_parameters import nanmasked modis_tau,im = nanmasked(modis['tau'][dc8_ind_modis[0,:],dc8_ind_modis[1,:]]) emas_tau,ie = nanmasked(emas['tau'][dc8_ind[0,:],dc8_ind[1,:]]) emas_tau_v1,ie1 = nanmasked(emas_v1['tau'][dc8_ind[0,:],dc8_ind[1,:]]) modis_ref,im = nanmasked(modis['ref'][dc8_ind_modis[0,:],dc8_ind_modis[1,:]]) emas_ref,ie = nanmasked(emas['ref'][dc8_ind[0,:],dc8_ind[1,:]]) emas_ref_v1,ie1 = nanmasked(emas_v1['ref'][dc8_ind[0,:],dc8_ind[1,:]]) star_tau,ist = nanmasked(meas.tau[meas.good]) star_ref,ist = nanmasked(meas.ref[meas.good]) ssfr.good = np.where((ssfr.utc>17.8)&(ssfr.utc<19.2)) ssfr_tau,iss = nanmasked(ssfr.tau[ssfr.good[0],1]) ssfr_ref,iss = nanmasked(ssfr.ref[ssfr.good[0],1]) rsp_tau,irs = nanmasked(rsp['COT'][rsp_good[0]]) rsp_ref,irs = nanmasked(rsp['R_eff159'][rsp_good[0]]) # <codecell>