pro correlate_wavelet,b,v,width,time,yscale,thresh_mask=thresh_mask, $
prefix=prefix,resolution=resolution
jv1 = n_elements(width)
dimb = size(/dimen,b)
r = keyword_set(resolution) ? resolution : 0
rdtime = reduce_tres(time,r)
bcorr = make_array(/float,/nozer,dim=dimb)
rcorr = make_array(/float,/nozer,dim=dimb)
for j=0,jv1-1 do begin
correlate_vect,double(b[*,j]),double(v[*,j]),width[j],a=ac,b=bc,c=cc,r=rr
bcorr[*,j] = bc
rcorr[*,j] = abs(rr)^2
endfor
if not keyword_set(prefix) then prefix=''
opts = {spec:1,ylog:1,yrange:minmax(yscale),ystyle:1,zrange:[-1.1,1.1]}
store_data,prefix+'_bc',data={x:rdtime,y:reduce_tres(bcorr,r),v:yscale},dlim=opts
opts.zrange=[0,1]
store_data,prefix+'_rc',data={x:rdtime,y:reduce_tres(rcorr,r),v:yscale},dlim=opts
if keyword_set(thresh_mask) then begin
w = where(rcorr lt thresh_mask,count)
if count gt 0 then bcorr[w]=!values.f_nan
opts.zrange=[-1,1]
store_data,prefix+'_bcm',data={x:rdtime,y:reduce_tres(bcorr,r),v:yscale},dlim=opts
endif
end
pro tplot_alfven_data,time,wb,wv,period,wid,mask=mask, $
resolution=resolution,prefix=prefix,verbose=verbose, $
kolom=kolom, $
gamthresh=gamthresh, $
allcross=allcross, $
crosshel=crosshel, cor1=correlate1, cor2=correlate2, vxb=vxb, stop = stop
dprint,'Computing power and polarization for TPLOT'
r = keyword_set(resolution) ? resolution : 0
rdtime = reduce_tres(time,r)
yax = keyword_set(per_axis) ? period : 1/period
ytitle = keyword_set(per_axis) ? 'Period (Sec)' : 'f (Hz)'
mm = minmax(yax)
ztitle=''
polopts = {spec:1,yrange:mm,ylog:1,ystyle:1,no_interp:1,zrange:[-1,1],zlog:0,zstyle:1,ytitle:ytitle,ztitle:ztitle}
powopts = {spec:1,yrange:mm,ylog:1,ystyle:1,no_interp:1,zrange:10.^[-1,1],zlog:1,zstyle:1,ytitle:ytitle,ztitle:ztitle}
ratopts = polopts & ratopts.zrange=[0,1]
if keyword_set(kolom) then tsfx='/P!dk!n'
if not keyword_set(tsfx) then tsfx=''
if not keyword_set(mask) then mask=1.
dim = size(/dimen,wv)
jv1 = dim[1]
nt = dim[0]
if keyword_set(stop) then stop
if keyword_set(crosshel) or keyword_set(allcross) then begin
w_p = (wb - wv )/2
w_a = (wb + wv )/2
apow = (abs(w_a[*,*,0])^2 + abs(w_a[*,*,1])^2)/2
ppow = (abs(w_p[*,*,0])^2 + abs(w_p[*,*,1])^2)/2
if keyword_set(allcross) then begin
powopts.ztitle='P!dA+!n'+tsfx
store_data,prefix+'_xwv_pow_p',data={x:rdtime,y:reduce_tres(ppow*mask,r),v:yax},dlim=powopts
powopts.ztitle='P!dA-!n'+tsfx
store_data,prefix+'_xwv_pow_a',data={x:rdtime,y:reduce_tres(apow*mask,r),v:yax},dlim=powopts
endif
pow = apow+ppow
pol = (apow-ppow)/pow
polopts.ztitle='<!19s!x!dc!n>'
store_data,prefix+'_xwv_d_p-a',data={x:rdtime,y:reduce_tres(pol*mask,r),v:yax},dlim=polopts
if keyword_set(allcross) then begin
polopts.ztitle='<!19s!x!dp+!n>'
pol = imaginary(w_p[*,*,0]*conj(w_p[*,*,1]))/ppow
for j=0,jv1-1 do if wid[j] gt 1 then pol[*,j] = smooth(pol[*,j],wid[j],/nan,/edge)
store_data,prefix+'_xwvp(p)',data={x:rdtime,y:reduce_tres(pol*mask,r),v:yax},dlim=polopts
polopts.ztitle='<!19s!x!dp-!n>'
pol = imaginary(w_a[*,*,0]*conj(w_a[*,*,1]))/apow
for j=0,jv1-1 do if wid[j] gt 1 then pol[*,j] = smooth(pol[*,j],wid[j],/nan,/edge)
store_data,prefix+'_xwvp(a)',data={x:rdtime,y:reduce_tres(pol*mask,r),v:yax},dlim=polopts
endif
endif
if keyword_set(vxb) then begin
wvxb = crossp3(reform(wv,nt*jv1,3),reform(conj(wb),nt*jv1,3))
wvxb = reform(wvxb,nt,jv1,3)
apow = total(abs(wv)^2,3)
ppow = total(abs(wb)^2,3)
wvxb = total(abs(wvxb),3)/(apow+ppow)
store_data,prefix+'_vxb',data={x:rdtime,y:reduce_tres(wvxb*mask,r),v:yax},dlim=ratopts
endif
if keyword_set(correlate1) then begin
i =complex(0,1)
correlate_wavelet,wb[*,*,0]+i*wb[*,*,1],wv[*,*,0]+i*wv[*,*,1], $
wid,time,1/period,prefix=prefix+'_r',thresh_mask=gamthresh,resolution=resolution
correlate_wavelet,wb[*,*,0]-i*wb[*,*,1],wv[*,*,0]-i*wv[*,*,1], $
wid,time,1/period,prefix=prefix+'_l',thresh_mask=gamthresh,resolution=resolution
endif
if keyword_set(correlate2) then begin
i =complex(0,1)
cross_corr_wavelet,wv[*,*,0]+i*wv[*,*,1],wb[*,*,0]+i*wb[*,*,1],wid, pol,pow,powb ,crat
ratopts.ztitle='!19g!x!dr!n'
store_data,prefix+'_r_wv_gam_lin',data={x:rdtime,y:reduce_tres(pol*mask,r),v:yax},dlim=ratopts
polopts.ztitle='C!dr!n'
store_data,prefix+'_r_wv_coin_lin',data={x:rdtime,y:reduce_tres(pow*mask,r),v:yax},dlim=polopts
polopts.ztitle='Q!dr!n'
store_data,prefix+'_r_wv_quad_lin',data={x:rdtime,y:reduce_tres(powb*mask,r),v:yax},dlim=polopts
polopts.ztitle='Crat!dr!n'
if keyword_set(gamthresh) then tmask= ([!values.f_nan,1.])[pol gt gamthresh] else tmask = 1.
store_data,prefix+'_r_wv_crat_lin',data={x:rdtime,y:reduce_tres(crat*tmask,r),v:yax},dlim=polopts
cross_corr_wavelet,wv[*,*,0]-i*wv[*,*,1],wb[*,*,0]-i*wb[*,*,1],wid, pol,pow,powb ,crat
ratopts.ztitle='!19g!x!dl!n'
store_data,prefix+'_l_wv_gam_lin',data={x:rdtime,y:reduce_tres(pol*mask,r),v:yax},dlim=ratopts
polopts.ztitle='C!dl!n'
store_data,prefix+'_l_wv_coin_lin',data={x:rdtime,y:reduce_tres(pow*mask,r),v:yax},dlim=polopts
polopts.ztitle='Q!dl!n'
store_data,prefix+'_l_wv_quad_lin',data={x:rdtime,y:reduce_tres(powb*mask,r),v:yax},dlim=polopts
polopts.ztitle='Crat!dl!n'
if keyword_set(gamthresh) then tmask= ([!values.f_nan,1.])[pol gt gamthresh] else tmask = 1.
store_data,prefix+'_l_wv_crat_lin',data={x:rdtime,y:reduce_tres(crat*tmask,r),v:yax},dlim=polopts
endif
end
pro tplot_quick_alfven,save,_extra=ex
printdat,ex,'_extra'
if not keyword_set(prefix) then prefix='vb'
if save.interp_wv then begin
message,'not working yet!'
wv = *save.wb
dim = dimen(wv)
printdat,dim
dprint,'Interpolating wavelet'
for j=0,dim[1]-1 do $
for k=0,dim[2]-1 do $
wv = interpol(*save.wv[*,j,k],*save.timev,*save.timeb)
mask = interpol( ([1,!values.f_nan])[*save.v_msk] ,*save.timev,*save.timeb)
mask = ([1,!values.f_nan])[*save.b_msk or mask]
tplot_alfven_data,*save.timeb,*save.wb,wv,*save.period,*save.width, $
mask=mask,prefix=prefix,_extra=ex
endif else begin
mask = ([1,!values.f_nan])[*save.b_msk or *save.v_msk]
tplot_alfven_data,*save.timeb,*save.wb,*save.wv,*save.period,*save.width, $
mask=mask,prefix=prefix,_extra=ex
endelse
end
pro alfven_data,Bname=bname,Vname=vname,Nname=nname,verbose=verbose, $
prange=prange,save=save,avg_periods=avg_period,maxpoint=maxp,trange=trange, $
resolution=resolution,recomp=recomp,interp_wv=interp_wv,_extra=ex
if not keyword_set(Bname) then bname = (tnames('wi_B3 magf',/all))[0]
if not keyword_set(vname) then Vname = 'Vp'
if not keyword_set(nname) then Nname = 'Np'
if not keyword_set(prange) then prange = [6,1000.]
kolom = .01
mu0 = 4*!pi*1.609/100
mass = .0104
wav_data,bname,data=b,wavelet=wb,time=timeb,mask=b_msk,avg_period=avg_period, $
normconst= 1./mu0/2, $
period=period,/rotate,/magrat, $
prange=prange,verbose=verbose,kolom=kolom,resolution=resolution, $
maxpoint=maxp,trange=trange, $
rotmat=rotmat,get_rotmat=not keyword_set(recomp),wid=wid
interp_wv = keyword_set(interp_wv)
if interp_wv then begin
get_data,Vname,timev,v
n = data_cut(Nname,timev)
endif else begin
timev = timeb
n = data_cut(Nname,timev)
v = data_cut(vname,timev)
endelse
wav_data,interp_wv ? vname :0,data=v,wavelet=wv,time=timev,mask=v_msk,avg_period=avg_period, $
normval = n, normconst= mass/2 , $
period=period,/rotate, $
prange=prange,verbose=verbose,kolom=kolom,resolution=resolution, $
rotmat=rotmat,wid=wid,tplot_prefix=vname
help,temporary(rotmat)
prefix = bname+'_'+vname
s ={wb:ptr_new(wb,/no_copy), $
timeb:ptr_new(timeb,/no_copy), $
wv:ptr_new(wv,/no_copy), $
n:ptr_new(n,/no_copy), $
timev:ptr_new(timev,/no_copy), $
period:ptr_new(period,/no_copy), $
width:ptr_new(wid), $
b_msk:ptr_new(b_msk,/no_copy), $
v_msk:ptr_new(v_msk,/no_copy), $
kolom:kolom , $
interp_wv:interp_wv }
tplot_quick_alfven,s,/crosshel,verbose=verbose,resolution=resolution, $
prefix=prefix
if arg_present(save) then save=s else begin
ptr_free,s.wb,s.timeb,s.wv,s.n,s.timev,s.period,s.width,s.b_msk,s.v_msk
endelse
end