pro thm_part_merge_dists, esa_dist, sst_dist, out_dist=out_dist, probe=probe, esa_datatype=esa_datatype, sst_datatype=sst_datatype,only_sst=only_sst
compile_opt idl2, hidden
error = 1
if n_elements(esa_dist) ne n_elements(sst_dist) then begin
message, 'Incorrect mode matching'
return
endif
out_dist = replicate(ptr_new(),n_elements(esa_dist))
species = strmid(esa_datatype,2,1)
esa_type = strmid(esa_datatype,3,1)
sst_type = strmid(sst_datatype,3,1)
if ~keyword_set(only_sst) then begin
data_name = 'pt' + species + esa_type + sst_type
endif else begin
data_name = 'ps' + species + sst_type
endelse
for i=0, n_elements(out_dist)-1 do begin
esa_str = temporary(*esa_dist[i])
sst_str = temporary(*sst_dist[i])
dim_esa = size(esa_str.data,/dim)
dim_sst = size(sst_str.data,/dim)
if ~array_equal(dim_esa[1:*],dim_sst[1:*]) then begin
message, 'Incorrect dimensions for current mode'
return
endif
if n_elements(dim_esa) eq 2 then begin
dim_esa = [dim_esa,1]
dim_sst = [dim_sst,1]
endif
if ~keyword_set(only_sst) then begin
dim_out = [dim_esa[0] + dim_sst[0], dim_esa[1], dim_esa[2]]
endif else begin
dim_out = dim_sst
endelse
comb_arr = fltarr(dim_out[0:1])
template = { $
project_name: 'THEMIS', $
spacecraft: probe, $
data_name: data_name, $
units_name: 'flux', $
units_procedure: 'thm_convert_cmb_units', $
apid: 0, $
valid: 1b, $
charge: esa_str[0].charge, $
mass: esa_str[0].mass, $
sc_pot: 0., $
magf: replicate(!values.f_nan,3), $
velocity: replicate(!values.f_nan,3), $
time: 0d, $
start_time: 0d, $
end_time: 0d, $
data: comb_arr, $
scaling: comb_arr, $
bins: comb_arr, $
energy: comb_arr, $
denergy: comb_arr, $
phi: comb_arr, $
dphi: comb_arr, $
theta: comb_arr, $
dtheta: comb_arr $
}
out_str = replicate(template,dim_out[2])
if ~keyword_set(only_sst) then begin
out_str.data = [esa_str.data, sst_str.data]
out_str.bins = [esa_str.bins, sst_str.bins]
out_str.energy = [esa_str.energy, sst_str.energy]
out_str.denergy = [esa_str.denergy, sst_str.denergy]
out_str.phi = [esa_str.phi, sst_str.phi]
out_str.dphi = [esa_str.dphi, sst_str.dphi]
out_str.theta = [esa_str.theta, sst_str.theta]
out_str.dtheta = [esa_str.dtheta, sst_str.dtheta]
endif else begin
out_str.data = sst_str.data
out_str.bins = sst_str.bins
out_str.energy = sst_str.energy
out_str.denergy = sst_str.denergy
out_str.phi = sst_str.phi
out_str.dphi = sst_str.dphi
out_str.theta = sst_str.theta
out_str.dtheta = sst_str.dtheta
endelse
out_str.time = esa_str.start_time
out_str.start_time = esa_str.start_time
out_str.end_time = esa_str.end_time
out_dist[i] = ptr_new(out_str, /no_copy)
endfor
error = 0
return
end