;+ ; NAME: ; thm_fgm_fit_correlate_tplot.pro ; ; Purpose: ; Uses ssl_correlation_shift.pro to do a correlation shift ; analysis on the vector lengths(math not cs vectors) of a ; selected fgm mnemonic and fit data ; ; ; CATEGORY: ; THEMIS-SOC ; CALLING SEQUENCE: ; pro thm_fgm_fit_correlate_tplot,fit_name, fgm_name, store_name, correlation_floor = correlation_floor, point_number = point_number, lag_step_number = lag_step_number, time_step_size = time_step_size, bin_size = bin_size ; ; INPUTS: ; ; fit_name: the tplot name of the fit data to be compared. RAW ; LEVEL 1 FIT DATA IS REQUIRED, E.G., 'tha_fit' ; ; fgm_name: the tplot name of the fgm_data to be ; compared ; ; store_name: the name of a tplot variable in which to store the result ; ; correlation_floor: optional, if set filters all results where ; the correlation between functions is too poor(default:0.0) ; ; point_number: optional, the minimum number of points of ; overlap necessary to try correlating a bin(default:10) ; ; lag_step_number: optional, checks plus or minus lag_steps * time steps ; to correlate the vectors (default:5) ; ; time_step_size: optional, the size of the time step to use when ; interpolating and correlating the vectors, in ; seconds(default:1/8 seconds) ; ; bin_size: optional, the size of each bin in seconds ; (default:60 seconds) ; ; ; OUTPUTS: ; ; stores the time and the shift values in the selected tplot_var ; ; KEYWORDS: ; ; COMMENTS: This function will probably die horribly if time ; values are not monotonic. ; ; ; PROCEDURE: ; ; EXAMPLE: ; ; MODIFICATION HISTORY: ; Written by: Patrick Cruce(pcruce@gmail.com) ; 2007-06-06 V1.0 ; ; KNOWN BUGS: tcs_vector_length doesn't filter NANs so it may output ; arithmetic warnings ;- ;tests if argument is array, 1L on success 0L on failure ;function tcs_is_array, a ; ; if 0 eq (size(a))(0) then return, 0L ; ; return, 1L ; ;end ;array based vector length of time series data ;works for any number of physical dimensions ;ie 3-d input = 3xn array ; output= 1xn array of vector lengths at each n ; ;has bug, doesn't filter nan's so it will output arithmetic warnings function tcs_vector_length, x return,sqrt(total(x*x, 1)) end pro thm_fgm_fit_correlate_tplot, fit_mnem, fgm_mnem, store_name, correlation_floor = correlation_floor, point_number = point_number, lag_step_number = lag_step_number, time_step_size = time_step_size, bin_size = bin_size if(not keyword_set(lag_step_number)) then lag_step_number = 5 if(not keyword_set(time_step_size)) then time_step_size = 1.0/8.0 if(not keyword_set(point_number)) then point_number = 10 if(not keyword_set(correlation_floor)) then correlation_floor = 0.0 get_data, fit_mnem, data = d times = d.X ;get the proper 3 dimensions out of the fit mnem values = transpose([[d.Y[*, 1, 1]], [d.Y[*, 2, 1]], [d.Y[*, 4, 1]]]) ;calculate length and concatenate into time series (2xn array) ts1 = transpose([[times], [tcs_vector_length(values)]]) ;ts1 = transpose([[times], [d.Y[*, 4, 1]]]) get_data, fgm_mnem, data = d times = d.X values = transpose(d.Y) ts2 = transpose([[times], [tcs_vector_length(values)]]) ;ts2 = transpose([[times], [d.Y[*, 0]]]) x_cor = ssl_correlation_shift(ts1, ts2, n_pts = point_number, lag_steps = lag_step_number, time_step = time_step_size, bin_size = bin_size) if not tcs_is_array(x_cor) then begin print, 'error calculating correlation shift, probable 0 overlap between variables' return endif ; print, x_cor ;filter all values that do not correlate better than correlation_floor ;this line prevent arithmetic error messages index = where(finite(x_cor[2, *])) ;tcs_is array is a utility function that just makes sure the indices ;returned aren't -1L ;find the values that have acceptable correlation if(tcs_is_array(index)) then index = where(x_cor[2, index] ge correlation_floor) ;make proper assignments if(tcs_is_array(index)) then x_cor[2, index] = !VALUES.F_NAN $ else x_cor[*] = !VALUES.F_NAN ;store the data store_data, store_name, DATA = {X:transpose(x_cor[0, *]), Y:transpose(x_cor[1, *])} end