pro rbsp_efw_cal_waveform, probe = probe, datatype = datatype, $
trange = trange, get_support_data = get_support_data, $
coord = coord, no_adc = no_adc, no_deconvol = no_deconvol, $
tper = tper, tphase = tphase, noclean = noclean
compile_opt idl2
dprint,verbose=verbose,dlevel=4,'$Id: rbsp_efw_cal_waveform.pro 12569 2013-06-21 20:31:17Z jianbao_tao $'
if ~keyword_set(trange) then trange = timerange()
if size(coord, /type) ne 7 then coord = 'dsc'
cp0 = rbsp_efw_get_cal_params(trange[0])
case strlowcase(probe) of
'a': cp = cp0.a
'b': cp = cp0.b
else: dprint, 'Invalid probe name. Calibration aborted.'
endcase
boom_length = cp.boom_length
boom_shorting_factor = cp.boom_shorting_factor
rbspx = 'rbsp' + probe[0]
tvar = rbspx + '_efw_' + datatype[0]
get_data, tvar, data = data, dlim = dlim
new_y = double(data.y)
case strlowcase(datatype[0]) of
'vsvy': begin
gain = cp.ADC_gain_VDC
offset = cp.ADC_offset_VDC
for i = 0, 5 do new_y[*,i] = (data.y[*,i] - offset[i]) * gain[i]
new_data = {x:data.x, y:new_y[*,0:5]}
dlim.data_att.units = 'V'
labels = ['V1', 'V2', 'V3', 'V4', 'V5', 'V6']
colors = [1, 2, 3, 4, 5, 6]
ysubtitle = '[V]'
end
'vb1': begin
gain = cp.ADC_gain_VDC
offset = cp.ADC_offset_VDC
for i = 0, 5 do new_y[*,i] = (data.y[*,i] - offset[i]) * gain[i]
new_data = {x:data.x, y:new_y[*,0:5]}
dlim.data_att.units = 'V'
labels = ['V1', 'V2', 'V3', 'V4', 'V5', 'V6']
colors = [1, 2, 3, 4, 5, 6]
ysubtitle = '[V]'
end
'vb2': begin
gain = cp.ADC_gain_VAC
offset = cp.ADC_offset_VAC
for i = 0, 5 do new_y[*,i] = (data.y[*,i] - offset[i]) * gain[i]
new_data = {x:data.x, y:new_y[*,0:5]}
dlim.data_att.units = 'V'
labels = ['V1', 'V2', 'V3', 'V4', 'V5', 'V6']
colors = [1, 2, 3, 4, 5, 6]
ysubtitle = '[V]'
end
'esvy': begin
gain = cp.ADC_gain_EDC
offset = cp.ADC_offset_EDC
for i = 0, 2 do new_y[*,i] = (data.y[*,i] - offset[i]) * gain[i] $
/ (boom_length[i] * boom_shorting_factor[i]) * 1000d
new_data = {x:data.x, y:new_y[*,0:2]}
dlim.data_att.units = 'mV/m'
str_element, dlim, 'data_att.boom_shorting_factor', $
boom_shorting_factor, /add
str_element, dlim, 'data_att.boom_length', $
boom_length, /add
labels = ['E12 (U)', 'E34 (V)', 'E56 (W)']
colors = [2, 4, 6]
ysubtitle = '[mV/m]'
end
'eb1': begin
gain = cp.ADC_gain_EDC
offset = cp.ADC_offset_EDC
for i = 0, 2 do new_y[*,i] = (data.y[*,i] - offset[i]) * gain[i] $
/ (boom_length[i] * boom_shorting_factor[i]) * 1000d
new_data = {x:data.x, y:new_y[*,0:2]}
if ~keyword_set(no_deconvol) then $
new_data = rbsp_efw_deconvol_inst_resp(new_data, probe[0], 'eb1')
dlim.data_att.units = 'mV/m'
str_element, dlim, 'data_att.boom_shorting_factor', $
boom_shorting_factor, /add
str_element, dlim, 'data_att.boom_length', $
boom_length, /add
labels = ['E12 (U)', 'E34 (V)', 'E56 (W)']
colors = [2, 4, 6]
ysubtitle = '[mV/m]'
end
'eb2': begin
gain = cp.ADC_gain_EAC
offset = cp.ADC_offset_EAC
for i = 0, 2 do new_y[*,i] = (data.y[*,i] - offset[i]) * gain[i] $
/ (boom_length[i] * boom_shorting_factor[i]) * 1000d
new_data = {x:data.x, y:new_y[*,0:2]}
if ~keyword_set(no_deconvol) then $
new_data = rbsp_efw_deconvol_inst_resp(new_data, probe[0], 'eb2')
dlim.data_att.units = 'mV/m'
str_element, dlim, 'data_att.boom_shorting_factor', $
boom_shorting_factor, /add
str_element, dlim, 'data_att.boom_length', $
boom_length, /add
labels = ['E12 (U)', 'E34 (V)', 'E56 (W)']
colors = [2, 4, 6]
ysubtitle = '[mV/m]'
end
'magsvy': begin
data = {x:data.x, y:double(data.y)}
rangetvar = tvar + '_magsvy_mag_range'
validtvar = tvar + '_magsvy_mag_valid'
get_data, rangetvar, data = rdata
get_data, validtvar, data = vdata
t_cadence = median(rdata.x[1:*] - rdata.x)
ind = where(vdata.y ne 1, nind)
if nind gt 0 then begin
for ii = 0L, nind - 1L do begin
itmp = ind[ii]
tsta = vdata.x[itmp]
tend = tsta + t_cadence
ind_tmp = where(data.x ge tsta and data.x lt tend, nind_tmp)
if nind_tmp gt 0 then data.y[ind_tmp,*] = !values.f_nan
endfor
endif
i_last = uniq(rdata.y)
if n_elements(i_last) eq 1 then begin
i_range = rdata.y[0]
gain = cp.ADC_gain_MAG[i_range, *]
offset = cp.ADC_offset_MAG[i_range, *]
for i = 0, 2 do new_y[*,i] = (data.y[*,i] - offset[i]) * gain[i]
endif else begin
for ii = 0L, n_elements(i_last)-1 do begin
if ii eq 0 then tsta = rdata.x[0] $
else tsta = tend
tend = rdata.x[i_last[ii]] + t_cadence
ind_tmp = where(data.x ge tsta and data.x lt tend, nind_tmp)
if nind_tmp gt 0 then begin
i_range = rdata.y[i_last[ii]]
gain = cp.ADC_gain_MAG[i_range, *]
offset = cp.ADC_offset_MAG[i_range, *]
for i = 0, 2 do $
new_y[ind_tmp,i] = (data.y[ind_tmp,i] - offset[i]) * gain[i]
endif
endfor
endelse
new_data = {x:data.x, y:new_y[*,0:2]}
dlim.data_att.units = 'nT'
labels = ['Bu', 'Bv', 'Bw']
colors = [2, 4, 6]
ysubtitle = '[nT]'
end
'mscb1': begin
gain = cp.ADC_gain_MSC
offset = cp.ADC_offset_MSC
for i = 0, 2 do new_y[*,i] = (data.y[*,i] - offset[i]) * gain[i]
new_data = {x:data.x, y:new_y[*,0:2]}
if ~keyword_set(no_deconvol) then $
new_data = rbsp_efw_deconvol_inst_resp(new_data, probe[0], 'mscb1')
dlim.data_att.units = 'nT'
labels = ['Bu', 'Bv', 'Bw']
colors = [2, 4, 6]
ysubtitle = '[nT]'
end
'mscb2': begin
gain = cp.ADC_gain_MSC
offset = cp.ADC_offset_MSC
for i = 0, 2 do new_y[*,i] = (data.y[*,i] - offset[i]) * gain[i]
new_data = {x:data.x, y:new_y[*,0:2]}
if ~keyword_set(no_deconvol) then $
new_data = rbsp_efw_deconvol_inst_resp(new_data, probe[0], 'mscb2')
dlim.data_att.units = 'nT'
labels = ['Bu', 'Bv', 'Bw']
colors = [2, 4, 6]
ysubtitle = '[nT]'
end
else: begin
print, ''
dprint, 'Invalid datatype. Calibration aborted.'
print, ''
return
end
endcase
newname = tvar
options, newname, labels = labels, colors = colors, $
ysubtitle = ysubtitle, labflag = 1
if ~keyword_set(no_adc) then begin
tspan = timerange()
ind = where(new_data.x ge tspan[0] and new_data.x le tspan[1])
new_data = {x:new_data.x[ind], y:new_data.y[ind,*]}
store_data, newname, data = new_data, dlim = dlim
endif
dtype = strlowcase(datatype[0])
sc = probe[0]
rbx = 'rbsp' + strlowcase(sc) + '_'
if strcmp(coord, 'uvw', /fold) then begin
dprint, 'No despinning. '
return
endif
case dtype of
'esvy': begin
tvar = newname
offset_name = rbx + dtype + '_uvw_offset'
rbsp_despin, sc, tvar, /uvw, newname = tvar, no_axial = 1, $
tper = tper, tphase = tphase, $
offset_name = offset_name
if ~keyword_set(get_support_data) then begin
store_data, offset_name, /del
endif
options, tvar, labels = ['Ex DSC', 'Ey DSC', 'Ez DSC']
end
'eb1': begin
tvar = newname
offset_name = rbx + dtype + '_uvw_offset'
rbsp_despin, sc, tvar, /uvw, newname = tvar, no_axial = 1, $
tper = tper, tphase = tphase, $
offset_name = offset_name
if ~keyword_set(get_support_data) then begin
store_data, offset_name, /del
endif
end
'eb2': begin
tvar = newname
offset_name = rbx + dtype + '_uvw_offset'
rbsp_despin, sc, tvar, /uvw, newname = tvar, no_axial = 1, $
tper = tper, tphase = tphase, $
offset_name = offset_name, /no_offset_remove
if ~keyword_set(get_support_data) then begin
store_data, offset_name, /del
endif
end
'mscb1': begin
tvar = newname
offset_name = rbx + dtype + '_uvw_offset'
rbsp_despin, sc, tvar, /uvw, newname = tvar, no_axial = 1, $
tper = tper, tphase = tphase, $
offset_name = offset_name, /no_offset_remove
if ~keyword_set(get_support_data) then begin
store_data, offset_name, /del
endif
end
'mscb2': begin
tvar = newname
offset_name = rbx + dtype + '_uvw_offset'
rbsp_despin, sc, tvar, /uvw, newname = tvar, no_axial = 1, $
tper = tper, tphase = tphase, $
offset_name = offset_name, /no_offset_remove
if ~keyword_set(get_support_data) then begin
store_data, offset_name, /del
endif
end
else: begin
dprint, 'Not vector data. No despinning...'
end
endcase
if ~keyword_set(noclean) then begin
if strcmp(dtype, 'esvy', /fold) then rbsp_efw_clean_esvy, rbx + 'efw_esvy'
if strcmp(dtype, 'vsvy', /fold) then rbsp_efw_clean_vsvy, rbx + 'efw_vsvy'
endif
end