;+ ;Purpose: Takes a bunch of intervals from different data sources and ;collates all intervals of the same source into a single vector(may be multidimensional) ; ;keywords: ; r: an array of data with dimensions [time,samples,sources] ; s: an array of source s[i] indices should have the source index of [*,*,i] ; ; returns: an array with dimensions [time,samples,sources] but ; all sources will be unique(ie the size of the output sources ; will be <= the input sources) ; ;Notes: --Used by thm_cal_fft,thm_cal_fbk ; --The returned data will be sorted according to source index in ; ascending order ;- ;used to stick individual intervals together ;i2 clobbers i1 on collisions function thm_compose_intervals, i1, i2 idx = where(finite(i2)) r = i1 r[idx] = i2[idx] return, r end ;r = the array of results ;s = the sel list function thm_collate_intervals, r, s1 if(n_elements(s1) eq 0) then return, r ;sort by source idx = sort(s1) s = s1[idx] d_arr = r[*, *, idx] idx = where(s ne shift(s, 1L), cnt) ;output array if(cnt gt 0) then $ o_arr = d_arr[*, *, idx] $ else $ o_arr = d_arr[*, *, 0] o_arr_cnt = 0 ;collate the intervals for i = 1, n_elements(s)-1L do begin if(s[i] eq s[i-1]) then $ o_arr[*,*,o_arr_cnt] = thm_compose_intervals(o_arr[*, *, o_arr_cnt], d_arr[*, *, i]) $ else $ o_arr_cnt += 1 endfor return, o_arr end