This page was created by the IDL library routine
mk_html_help2
.
Last modified: Tue Oct 23 09:41:30 2018.
NAME: aen_ns_model PURPOSE: This program is to find the AEN(Analytical Equatorial Neutral) sheet in the magnetopause in different time and position INPUT: time - string or double format double(s) seconds since 1970 string(s) format: YYYY-MM-DD/hh:mm:ss gsm_pos - position vector in GSM coordinates in re (pos[*,3]) OUTPUT: returns Z displacement of the neutral sheet above or below the XY plane in Re (zgsm of the NS) Value is positive if NS is above z=0 gsm plane, negative if below KEYWORDS sc2NS - if set returns Z displacement from the spacecraft to the neutral sheet Value is positive if the NS is northward of the SC location, and negative if below NOTES: References: (1) AEN(Analytical Equatorial Neutral): Zhu, M. and R.-L. Xu, 1994, A continuous neutral sheet model and a normal curved coordinate system in the magnetotail, Chinese J. Space Science, 14, (4)269, (in Chinese). Wang, Z.-D. and R.-L. Xu, Neutral Sheet Observed on ISEE Satellite, Geophysical Research Letter, 21, (19)2087, 1994. (2) Magnetopause model: Sibeck, D. G., R. E. Lopez, and E. C. Roelof, Solar wind control of the magnetopause shape, location, and motion, J. Grophys. Res., 96, 5489, 1991 HISTORY:
(See general/misc/neutral_sheet.pro)
PROCEDURE: append_array, a0, a1 PURPOSE: Append an array to another array. Can also copy an array into a subset of another. It is equivalent to : a0 = [a0,a1]; but it doesn't fail if a0 is undefined (or 0) INPUT: a0: Array to be enlarged. a1: Array (or single value) to be appended to a0. KEYWORDS: INDEX: an input variable that will VASTLY improve performance when repeatedly appending a small array onto the end of a large array. When using this keyword, the array a0 is enlarged a little bit more than needed so that subsequent appends of a1 will be written into a0 instead of creating a new array each time. The INDEX value represents the number of valid elements. If INDEX is a named variable then it will be auto incremented. If INDEX is not a named variable then the calling routine should set it using the NEW_INDEX output, After all appending is completed, make the call: append_array,a0,index=index to truncate to the proper size. NEW_INDEX: Output, size of new array. This can be used if index is NOT a named variable. Don't use if INDEX is a NAMED variable FILLNAN: Set this keyword to fill padded values with NANs. DONE: Equivalent to calling without the a1 argument. CREATED BY: Davin Larson $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/append_array.pro $ LAST MODIFIED: @(#)append_array.pro 1.6 98/08/13
(See general/misc/append_array.pro)
FUNCTION: array_concat PURPOSE: Performs array concatenation in a way that handles an empty list. Simple code that gets duplicated everywhere. Inputs: arg: The argument to be concatenated array: The array to which it should be concatenated, or nothing no_copy: Flag to effectively call array_concat( x, temporary(y) ), which throws an exception in IDL versions without the null variable. Output: [ array , arg ] $LastChangedBy: aaflores $ $LastChangedDate: 2015-09-10 18:58:16 -0700 (Thu, 10 Sep 2015) $ $LastChangedRevision: 18766 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/array_concat.pro $
(See general/misc/array_concat.pro)
FUNCTION: array_concat_wrapper PURPOSE: Wrapper for the array_concat function -- correctly handles the case when the input array is an empty string Inputs: arg: The argument to be concatenated array: The array to which it should be concatenated, or nothing Output: array + arg $LastChangedBy: egrimes $ $LastChangedDate: 2013-10-22 12:49:25 -0700 (Tue, 22 Oct 2013) $ $LastChangedRevision: 13372 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/array_concat_wrapper.pro $
(See general/misc/array_concat_wrapper.pro)
PROCEDURE: array_contains PURPOSE: Boolean check for a value inside an array; returns 1 if str_to_check exists inside array_input INPUT: array_input: the array to be searched str_to_check: value to search for KEYWORDS: allow_wildcards: allow wild cards ([], *, ?) to be used in the input string EXAMPLE: IDL> print, array_contains(['hello', 'world'], 'hello') 1 Note that this also works on other types: IDL> print, array_contains([1, 4, 66], 66) 1 IDL> print, array_contains([1, 4, 66], 65) 0 HISTORY: created by egrimes@igpp $LastChangedBy: egrimes $ $LastChangedDate: 2017-11-20 16:04:09 -0800 (Mon, 20 Nov 2017) $ $LastChangedRevision: 24327 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/array_contains.pro $
(See general/misc/array_contains.pro)
FUNCTION array_cross(l1,l2) Purpose: returns a 2*n array, where n = n_elements(l1)*n_elements(l2) each pair is a combination of l1 and l2 the total list represents all possible pairings of l1 and l2 Written by Patrick Cruce $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/array_cross.pro $
(See general/misc/array_cross.pro)
FUNCTION: average_str(data, res) PURPOSE: Average data in res second time segments. INPUTS: DATA: array of structures. One element of structure must be TIME. RES: resolution in seconds. KEYWORDS: NAN: If set, treat the IEEE NAN value as missing data. CREATED BY: Davin Larson LAST MODIFIED: %W% %E%
(See general/misc/average_str.pro)
NAME: avsig PURPOSE: Average and dispersion of an array, zeros can be not included, handles NaN values correctly CALLING SEQUENCE: xbar = Avsig(x, sigma = sigma, no_zeros = no_zeros, $ sig_mean = sig_mean, dimension = dimension, $ fractional = fractional, median = median, $ _extra = _extra) INPUT: x = an array OUTPUT: xbar = mean, total(x)/n_elements(x) KEYWORDS: no_zeros= if set, strip out zeros get_sigma = if set, calculate the standard deviation sigma = standard deviation, sqrt(total((x-xbar)^2/(nx-1))) sig_mean = if set return sigma/sqrt(nx), the standard deviation of the mean of the array, dimension = the dimension of the array to find the mean in, passed into the total command, it must be a scalar. fractional = if set, the fractional error is passed out as sigma, don't use this if zero is a valid value of xbar... median = if set, use the median instead of the mean for xbar, it is not recommended fo sigma calculations HISTORY: 12-9-94, jmm, jimm@ssl.berkeley.edu 2-13-95, jmm, added dimension keyword, switched from ok_zeros to no_zeros 5-sep-1996, jmm, switched to double precision 7-oct-2008, jmm, ignores NaN values, added median keyword
(See general/misc/tsub_average.pro)
Procedure: bin1d Purpose: Uses histogram to bin data according to array binarr. The elements in binarr that are in a specific bin correspond to elements in other arrays (like density, temperature etc) and the averages of those are computed within each bin. The arrays to be averaged within each bin are passed in arrs2bin(NXM) where N is the number of elements of the binarr and M is the number of quantities. Output: kinbin is K-array of elements (K=number of bins) containing number of points within each bin, bincenters a K-array with center of bins, averages is KXM array with averages (zero if no points) stdevs an KXM array with stdevs about the mean and medians is KXM array of medians within each bin If any of the keywords maxvarvec or minvarvec is set to a name then it is assumed that the first two elements of the array "arrs2bin" correspond to the X,Y coordinates of a "flow" field. The corresponding data in each cell will be rotated in a max/min variance direction. The maxvariance direction will be in 2D vector maxvarvec for each cell. The minvariance direction will be in 2D vector minvarvec for each cell. The vector norm is the variance in the max/min direction, i.e., lambda_i=sqrt(maxvarvec(*,0)^2+maxvarvec(*,1)^2). if keyword flag4nodata is set, then points with no data are flags set equal to the value passed in, not zeros. Usage: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; bin1D,Ygse,[[Ni],[Ti],[Vx],[fx],[Qx],[Eylep]],-15.,15.,1.,kinbin,Ycntrs,avrg,std,med Niavg=avrg(*,0)&Tiavg=avrg(*,1)&Vxavg=avrg(*,2)&fxavg=avrg(*,3)&Qxavg=avrg(*,4)&Eylepavg=avrg(*,5) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/bin1d.pro $
(See general/misc/bin1d.pro)
Procedure: bin2d Purpose: A slightly simpler wrapper for vassilis's routine for 2-d binning NOTE: despite the fact that they are keywords either binsize or binnum must be set for the proceedure to function Inputs: x: the x components for the bins. Should be an N length array. y: the y components for the bins. Should be an N length array. arrs2bin: the arrays to be binned should be an NxM sized array or an N sized array (Note: Interpolation to match the N component of input arrays is the responsibility of the user.) Keywords: binsize: a number or a 2 element array. If a single number it will be treated as size of the bins for the x dimension and the y dimension. If it is a two element array, the first element will be the size of the bins on the x axis and the second element will be the size of the bins on the y axis. Warning: Either Binsize or binum must always be set. binum: a number of 2 element array. If a single number it will be treated as the number of bins on for both axes. If a 2 element array, the first element is number of bins on the x-axis and the second element is the number of bins on the y-axis. (Note: The number of bins actually produced may vary by +- 1) Bins will be evenly spaced over xrange and yrange if provided, and over the range of the data if not. Warning: Either Binsize or binum must always be set. xrange,yrange(optional): a 2 element array specifying the min and the max over which binning will occur for the respective axis(default: all data) flagnodata(optional): set this keyword to a flag to replace output values with if there is no data. (default: 0) averages(output): outputs 2-d array in which the bin averages are stored medians(output): outputs 2-d array in which the bin medians are stored stdevs(output): outputs 2-d array in which the bin stdevs are stored. binhistogram(output): a 2-d histogram of the number of elements used for constructing each cell xcenters,ycenters(output): 1-d array of the centers for the bins on each axis. minvarvec,maxvarvec(output): Either of these are set arrs2bin will must have dimension M >= 2. The first 2 arrays of the M dimension(ie arrs2bin[*,0] and arrs2bin[*,1] will be treated as corresponding elements of an X,Y flow field. The maxvariance direction will be a 2D vector in maxvarvec for each cell. The minvariance direction will be a 2D vector in minvarvec for each cell. The vector norm is the variance in the max/min direction, i.e., lambda_i=sqrt(maxvarvec(*,0)^2+maxvarvec(*,1)^2). Notes and Warnings: 1. Interpolation to match the N component of input arrays is the responsibility of the user. 2. The number of bins actually produced may vary by +- 1 from the number requested by binum 3. Either binsize or binum must always be set. 4. If both binsize and binum, binsize will take precedent. SEE ALSO: bin1d.pro,plotxyz.pro,thm_crib_plotxyz.pro $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/bin2d.pro $
(See general/misc/bin2d.pro)
FUNCTION: bytescale(array) PURPOSE: Takes an array or image and scales it to bytes INPUT: array of numeric values. KEYWORDS: RANGE: Two element vector specifying the range of array to be used. Defaults to the min and max values in the array. ZERO: Forces range(0) to zero TOP: Maximum byte value (default is !d.table_size-2) BOTTOM: Minimum byte value (default is 1) MIN_VALUE: autoranging ignores all numbers below this value MAX_VALUE: autoranging ignores all numbers above this value MISSING: Byte value for missing data. (values outside of MIN_VALUE, MAX_VALUE range) If the value is less than 0 then !p.background is used. LOG: sets logrithmic scaling CREATED BY: Davin Larson LAST MODIFICATION: @(#)bytescale.pro 1.22 02/04/17
(See general/misc/bytescale.pro)
***************************************************************************************** FUNCTION : cart_to_sphere.pro PURPOSE : Transforms from cartesian to spherical coordinates. CALLED BY: xyz_to_polar.pro add_df2dp.pro add_df2d_to_ph.pro CALLS: NA REQUIRES: NA INPUT: X : N-Element array of cartesian X-component data points Y : N-Element array of cartesian Y-component data points Z : N-Element array of cartesian Z-component data points R : Named variable to return the radial magnitudes in spherical coordinates THETA : Named variable to return the poloidal angles (deg) PHI : Named variable to return the azimuthal angles (deg) EXAMPLES: KEYWORDS: PH_0_360 : IF > 0, 0 <= PHI <= 360 IF = 0, -180 <= PHI <= 180 IF < 0, ***if negative, best guess phi range returned*** PH_HIST : 2-Element array of max and min values for PHI [e.g. IF PH_0_360 NOT set and PH_HIST=[-220,220] THEN if d(PHI)/dt is positive near 180, then PHI => PHI+360 when PHI passes the 180/-180 discontinuity until phi reaches 220.] CO_LATITUDE : If set, THETA returned between 0.0 and 180.0 degrees MIN_VALUE : Deprecated keyword, maintained for backwards compatibility MAX_VALUE : Deprecated keyword, maintained for backwards compatibility CREATED BY: Davin Larson LAST MODIFIED: 06/21/2009 v1.1.0 MODIFIED BY: Lynn B. Wilson III $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/cart_to_sphere.pro $ *****************************************************************************************
(See general/misc/cart_to_sphere.pro)
FUNCTION: cdf_file_names PURPOSE: Returns an array of filenames within a timerange. USAGE: files=cdf_file_names(FORMAT,trange=trange,/verbose) INPUT: FORMAT is a string that will be interpreted as one of two things: CASE 1: e.g. FORMAT = '/home/wind/dat/wi/3dp/k0/????/wi_k0_3dp*.cdf' if FORMAT contains * or ? then filenames are returned that match that pattern and for which YYYYMMDD falls within the specified timerange. for example: (UNIX only) CASE 2: e.g. FORMAT = 'fa_k0_ees_files' The name of an indexfile that associates filenames with start and end times. If his file is not found, then the environment variable getenv('CDF_INDEX_DIR') is prepended and searched for. See "make_cdf_index" for information on producing this file. SPECIAL NOTE: If strupcase(FORMAT) is the name of an environment varible. Then the value of that environment variable is used instead. KEYWORDS: TRANGE: Two element array specifying the time range for which data files should be returned. If not provided then "timerange" is called to provide the time range. See also "timespan". NFILES: Named variable that returns the number of files found. VERBOSE: Set to print some useful info. FILEINFO: OBSOLETE! Set to a named variable that will return a table of file info. NOTES: UNIX only!
(See general/misc/cdf_file_names.pro)
NAME: code_fragment PURPOSE: takes a string, where input variables are defined as array_elements 'qq' and creates a set of tplot commands using those data CALLING SEQUENCE: code_fragment, inp_string, otp_string HISTORY: 13-jun-2007, jmm, jimm@ssl.berkeley.edu
(See general/misc/tuserdef.pro)
COMMON BLOCK colors_com WARNING! Don't rely on this file to remain stable! USE "get_colors" to get color information. SEE ALSO: "get_colors","bytescale","loadct2" CREATED BY: Davin Larson File: 96/08/30 Version: 1.2 Last Mod: colors_com.pro
(See general/misc/colors_com.pro)
FUNCTION: crossp2(a,b) INPUT: a,b: real(n,3) vector arrays dimension (n,3) or (3) PURPOSE: performs cross product on arrays CREATED BY: J.McFadden 97-3-14 Modifications J.McFadden 05-2-7 changed first if to "if ndimen(a) eq 1 and ndimen(b) eq 1"
(See general/misc/crossp2.pro)
Function: csvector Purpose: This procedure implements the create,add, and read methods for a traditional computer science data structure: the vector.The vector list of elements of any type and of any length. Advantages over array: 1. store heterogenous elements of any type in a list. 2. Lists can grow as large as memory and you don't need to know how big it will be in advance 3. You don't need to worry about how the data is stored Disadvantages over array: 1. You can't directly apply operations to the data structure 2. You are forced to use abstraction Inputs: arg1:the meaning of the argument varies with syntax arg2:the meaning of the argument varies with syntax Keywords: read(optional): set this if you want to read an element length(optional): set this if you want to read the length free(optional): set this if you want to free the vector's memory without creating a leak, it will return the number of elements free'd Outputs: a vector, the internal representation is abstracted, use the methods to access this data structure Syntax(each method is followed by examples): create: v = csvector(some_element) v = csvector(1) v = csvector([1,2]) v = csvector({a:1,b:2}) add: vector = csvector(some_element,vector) v = csvector(1,v) v = csvector('a',v) v = csvector([1,2],v) read: element = csvector(element_index,vector,/read) e = csvector(0,v,/read) ;first element e = csvector(csvector(v,/L)-1,v,/r) ;last element length: length = csvector(vector,/length) l = csvector(v,/l) l = csvector(v,/length) free: num = csvector(vector,/free) temp = csvector(v,/free) NOTES: in the event of overflow during add the vector.a component will double in size Add/Create stores a copy of the element not the element itself If you want to do manual lengths and reads you can look at the code, but I would recommend against cause you are violating abstraction which means the internal representation could change and invalidate your code. This might be worth writing in O.O. idl as well To get type flexibility it uses a pointer for every object Thus if you aren't careful this function will eat your system memory for breakfast. Use heap_gc to clean up if you are running out of memory.
(See general/misc/csvector.pro)
NAME: den_fairfield_ns_model PURPOSE: This routine calculates the position along the zaxis at a specific x and y location. INPUT: time - string or double format double(s) seconds since 1970 string(s) format: YYYY-MM-DD/hh:mm:ss gsm_pos - position vector in GSM coordinates in re (pos[*,3]) OUTPUT: returns Z displacement of the neutral sheet above or below the XY plane in Re (zgsm of the NS) Value is positive if NS is above z=0 gsm plane, negative if below KEYWORDS sc2NS - if set returns Z displacement from the spacecraft to the neutral sheet Value is positive if the NS is northward of the SC location, and negative if below HISTORY:
(See general/misc/neutral_sheet.pro)
NAME: den_ns_model PURPOSE: This program finds the DEN(Displaced Equatorial Neutral) sheet inside the magnetopause in different tine and positions. The routine calculates the position along the zaxis at a specific location. INPUT: time - string or double format double(s) seconds since 1970 string(s) format: YYYY-MM-DD/hh:mm:ss gsm_pos - position vector in GSM coordinates in re (pos[*,3]) OUTPUT: returns Z displacement of the neutral sheet above or below the XY plane in Re (zgsm of the NS) Value is positive if NS is above z=0 gsm plane, negative if below KEYWORDS sc2NS - if set returns Z displacement from the spacecraft to the neutral sheet Value is positive if the NS is northward of the SC location, and negative if below NOTES: References: (1) DEN(Displaced Equatorial Neutral): Xu, R.-L., A Displaced Equatorial Neutral Sheet Surface Observed on ISEE-2 Satellite, J. Atmospheric and Terrestrial Phys., 58, 1085, 1991 (2) Magnetopause model: Sibeck, D. G., R. E. Lopez, and R. C. Roelof, Solar wind control of the magnetopause shape, location, and motion, J. Grophys. Res., 96, 5489, 1991 Original Authors of the FORTRAN source code: Ronglan XU and Lei LI, Center for Space Sci. and Applied Res., Chinese Academy of Sciences, PO Box 8701, Beijing 100080, China E-mail: XURL@SUN.IHEP.AC.CN, XURL@SUN20.CSSAR.AC.CN This source code was ported from the original FORTRAN source code into IDL The original source code only calculated to 10.05 RE. In this IDL version that restriction was increased to 25. HISTORY:
(See general/misc/neutral_sheet.pro)
FUNCTION: dimen(x) PURPOSE: Returns the dimensions of an array as an array of integers. INPUT: matrix RETURNS: vector of dimensions of matrix. If the input is undefined then 0 is returned. if the input is a scaler then 1 is returned. SEE ALSO: "dimen", "data_type", "dimen1", "dimen2" CREATED BY: Davin Larson LAST MODIFICATION: @(#)dimen.pro 1.6 96/12/16
(See general/misc/dimen.pro)
FUNCTION: dimen1 INPUT: matrix RETURNS: scaler int: size of first dimension (1 if dimension doesn't exist) CREATED BY: Davin Larson LAST MODIFICATION; @(#)dimen1.pro 1.3 95/08/24
(See general/misc/dimen1.pro)
FUNCTION: dimen2 INPUT: matrix RETURNS: scaler int: size of second dimension (1 if dimension doesn't exist) CREATED BY: Davin Larson LAST MODIFICATION; @(#)dimen2.pro 1.3 95/08/24
(See general/misc/dimen2.pro)
FUNCTION: dimen_shift(x,shift) NAME: dimen_shift PURPOSE: Rotate dimensions of a multidimensional array. This function is very similar to transpose but works on multi-dimensional arrays to shift the dimensions around. It has no effect on scalars and one dimensional arrays. INPUT: x multi-dimensional array of any type shift: 1 or -1 direction of shift. CREATED BY: Davin Larson LAST MODIFICATION: @(#)dimen_shift.pro 1.4 98/07/09
(See general/misc/dimen_shift.pro)
PROCEDURE: divide_data PURPOSE: Divides successive channels of SST data by powers of 'factor', to separate the traces. Also, optionally, multiplies data by an overall factor, 'conv_factor', to convert units. INPUT: in_name (string), the name of the input TPLOT variable structure. out_name (string), the name of the output TPLOT variable structure. KEYWORDS: factor (float), by which fluxes in successive channels are divided. conv_factor (optional float), by which fluxes in all channels are multiplied. CREATED BY: Ted Freeman FILE: divide_data.pro LAST MODIFIED: @(#)divide_data.pro 1.2 99/09/01 NOTES: "LOAD_3DP_DATA" and "GET_SPEC" must be called first.
(See general/misc/divide_data.pro)
NAME: dpwrspc PURPOSE: Called with times time and data quantity, dpwrspc returns a dps spectrum at frequencies fdps. A Hanning window is applied to the input data, and its power is divided out of the returned spectrum. A straight line is subtracted from the data to reduce spurious power due to sawtooth behavior of a background. UNITS ARE (UNITS)^2 WHERE UNITS ARE THE UNITS OF time. fdps is in Hz. THUS THE OUTPUT REPRESENTS THE MEAN SQUARED AMPLITUDE OF THE SIGNAL AT EACH SPECIFIC FREQUENCY. THE TOTAL (SUM) POWER UNDER THE CURVE IS EQUAL TO THE MEAN (OVER TIME) POWER OF THE OSCILLATION IN TIME DOMAIN. NOTE: IF KEYWORD notperhz IS SET, THEN POWER IS IN UNITS OF NT^2 ELSE IT IS IN UNITS OF NT^2/HZ. CALLING SEQUENCE: dpwrspc, time, quantity, tdps, fdps, dps, nboxpoints = nboxpoints, $ nshiftpoints = nshiftpoints, bin = bin, tbegin = tbegin,$ tend = tend, noline = noline, nohanning = nohanning, $ notperhz = notperhz INPUT: time = the time array quantity = the function for which you want to obtain a power spectrum OUTPUT: tps = the time array for the dynamic power spectrum, the center time of the interval used for the spectrum fdps = the frequency array (units =1/time units) dps = the power spectrum, (units of quantity)^2/frequency_units KEYWORDS: nboxpoints = the number of points to use for the hanning window, the default is 256 nshiftpoints = this is the number of points to shift for each spectrum, the first spectrum will cover the range from 0 to nboxpoints, then next will cover the range from nshiftpoints to nshiftpoints+nboxpoints, etc.. the default is 128. bin = a binsize for binning of the data along the frequency domain, the default is 3 tbegin = a start time, the default is time[0] tend = an end time, the default is time[n_elements(time)-1] noline = if set, no straight line is subtracted nohanning = if set, then no hanning window is applied to the input notperhz = if set, the output units are simply the square of the input units noTmVariance = if set replaces output spectrum for any windows that have variable cadence with NaNs tm_sensitivity = If noTmVariance is set, this number controls how much of a dt anomaly is accepted. The program will flag a time resolution discontinuity if the time resolution dt changes by a value greater than dt/dt_sensitivity; the default is 100.0; i.e. If, for a given spectrum, if there are points with abs(dt[i]-median(dt) Gt median(dt)/100.0, then this will be set to NaN. A larger value means more sensitivity. If you want to flag round-off errors then try a value of 1.0e8. fail = if set to a named variable, returns 1 if an error occurs, 0 otherwise $LastChangedBy: jimm $ $LastChangedDate: 2018-06-20 11:26:03 -0700 (Wed, 20 Jun 2018) $ $LastChangedRevision: 25373 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/dpwrspc.pro $
(See general/misc/dpwrspc.pro)
NAME: dydt_spike_test PURPOSE: This function checks an array for spikes based on its time derivative. This is designed mostly for THEMIS GMAG spikes that persist over multiple data points, but should work on single data point spikes too. CALLING SEQUENCE: flag = dydt_spike_test(t0, y0, dydt_lim = dydt_lim, $ sigma_y = sigma_y, nsig = nsig, $ no_degap = no_degap, pad=pad, $ degap_margin = degap_margin, $ degap_dt = degap_dt, _extra = _extra) INPUT: t0 = a time array y0 = a data aray, same number of elements as t0 OUTPUT: flag = a bytarr(n_elements(t0)), set to 1 for spikes, 0 for ok data, note that NaN values are automatically set to 1 KEYWORDS: dydt_lim = a value for the max. allowed derivative, the default is to calculate a limiting value from the uncertainty in the data. sigma_y = if known, an estimate of the standard deviation in y0 values. The default is to use sqrt(y), as if you have a photon count for data. If you do not know this uncertainty in Y, it might be a good idea to use dydt_lim. nsig = the number of uncertainties in dydt that will be used to obtain the limit value at each data point. pad = pad the spike flag on either side by this many data points. no_degap = By default, the program calls xdegap and xdeflag routines to deal with gaps in the data. Set this keyword to avoid this. DEGAP KEYWORDS: nowarning = if set, suppresses warnings maxgap = the maximum gap size filled, in seconds degap_dt = a time_interval for the degap process, the default is to use the minimum of the time resolutions in the data, i.e., min(t0[1:*]-t0) degap_margin = a margin value for the degap call, the default is to use the minimum of the time resolutions in the data, i.e., min(t0[1:*]-t0) HISTORY: 7-apr-2008, jmm, jimm@ssl.berkeley.edu $LastChangedBy: jimm $ $LastChangedDate: 2013-03-13 12:57:13 -0700 (Wed, 13 Mar 2013) $ $LastChangedRevision: 11796 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/dydt_spike_test.pro $
(See general/misc/dydt_spike_test.pro)
function: escape_string purpose: adds \ to escape a list of characters inputs: s: The string to be escaped list=list: an array of characters to be escaped. If not set, defaults to the regex set ['[',']','{','}','\','^','$','.','|','?','*','+','(',')'] $LastChangedBy: pcruce $ $LastChangedDate: 2013-06-11 21:39:46 -0700 (Tue, 11 Jun 2013) $ $LastChangedRevision: 12513 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/escape_string.pro $
(See general/misc/escape_string.pro)
FUNCTION: euler_ang_rot_matrix,eulerang [parameters=par] PURPOSE: returns rotation matrix given the euler angles (This function may be used with the "fit" curve fitting procedure.) KEYWORDS: PARAMETERS: a structure that contain the parameters that define the gaussians If this parameter is not a structure then it will be created. Written by: Davin Larson $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/euler_ang_rot_matrix.pro $
(See general/misc/euler_ang_rot_matrix.pro)
PROCEDURE: extract_tags, newstruct, oldstruct PURPOSE: takes the named tag elements from oldstruct and puts them into newstruct. This procedure is very useful for creating a structure that can be passed onto the PLOT or OPLOT subroutines using the _EXTRA keyword. If no tag keywords are included then all tag elements of oldstruct are added to newstruct. The mode keyword PRESERVE is used to prevent the overwritting of an existing keyword. INPUTS: newstruct: new structure to be created or added to. oldstruct: old structure from which elements are extracted. KEYWORDS: Only one of the following should be given:; (TAG KEYWORDS) TAGS: array of strings. (tag names) to be taken from oldstruct and put in newstruct EXCEPT: array of strings. Tag names not to be copied from old to new. OPLOT: (flag) If set, then TAGS is set to an array of valid keywords for the OPLOT subroutine. PLOT: (flag) If set, then TAGS is set to an array of valid keywords for the PLOT subroutine. CONTOUR: (flag) If set, then TAGS is set to an array of valid keywords for the CONTOUR procedure. (might not be complete) If no KEYWORDS are set then all elements of oldstruct are put into newstruct (MODE KEYWORDS) PRESERVE: (flag) Prevents the overwritting of an existing, non-null keyword. Adds tags to newstruct that were not already there, or if they were there and their values were either "" or 0. CREATED BY: Davin Larson FILE: extract_tags.pro VERSION 1.21 LAST MODIFICATION: 02/04/17
(See general/misc/extract_tags.pro)
NAME: fairfield_NS_model PURPOSE: This routine calculates the position along the zaxis at a specific x and y location. The Fairfield model is used to this calculation. INPUT: time - string or double format double(s) seconds since 1970 string(s) format: YYYY-MM-DD/hh:mm:ss gsm_pos - position vector in GSM coordinates in re (pos[*,3]) OUTPUT: returns Z displacement of the neutral sheet above or below the XY plane in Re (zgsm of the NS) Value is positive if NS is above z=0 gsm plane, negative if below KEYWORDS sc2NS - if set returns Z displacement from the spacecraft to the neutral sheet Value is positive if the NS is northward of the SC location, and negative if below NOTES: Reference: A statistical determination of the shape and position of the geomagnetic neutral sheet, Journal of Geophysical Research, Vol. 85, No A2, pages 775-780, February 1, 1980 Author - D. Fairfield HISTORY:
(See general/misc/neutral_sheet.pro)
NAME: FILE_ARCHIVE PURPOSE: Archives files by renaming them and optionally moving them to another directory. No action is taken if neither ARCHIVE_EXT or ARCHIVE_DIR is set. CALLING SEQUENCE: FILE_ARCHIVE,'old_file',archive_ext = '.arc' KEYWORDS: ARCHIVE_EXT = '.arc' ARCHIVE_DIR = 'archive_dir/' ; name of subdirectory to move files into. VERBOSE DLEVEL MAX_ARCS = n ; max number of archives to produce Author: Davin Larson June 2013 $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/file_archive.pro $
(See general/misc/file_archive.pro)
Procedure: file_copy2
(See general/misc/file_copy2.pro)
Procedure: FILE_DAILYNAMES Author: Davin Larson
(See general/misc/file_dailynames.pro)
Procedure FILE_OPEN,type,name Purpose: wrapper for OPENW, OPENU, OPENR, FILE_MKDIR type must be one of: 'w', 'u', 'r', 'd' (write, update, read, directory) This procedure performs the functions of creating/opening files and creating directories. It has several useful features which the regular procedures do not have: 1) Non-existant directories are created automatically (with optional mode setting) 2) If a non-existant file is opened for update, it is created with OPENW instead of producing an error. 3) Files (or directories) can be tested to see if they can be created before actually opening (or creating) them (use the TEST keyword). (The returned structure INFO will have the WRITE element set) Example 1: Creating a file for write access: FILE_OPEN,'w','/dir1/dir2/dir3/file.tmp',unit=u ; Will create the director tree if it does not already exist. Example 2: Creating new directories with defined modes: FILE_OPEN,'d','/dir1/dir2/dir3', dir_mode="777 , All newly created directories will have the given permissions (Octal 777) Example 3: FILE_OPEN,'w','/dir1/dir2/dir3/file.tmp',/test,info=info ;This will test if the file can be created (with given file system permissions) without actually creating the file. The returned info stucture can potentially have info.exists eq to 0 and info.write eq 1 Example 4:
(See general/misc/file_open.pro)
FUNCTION: FILE_RETRIEVE Purpose: FILE_RETRIEVE provides a simple, transportable interface to retrieve data files. It will download files from a remote web server and copy them into a local (cache) directory maintaining the original directory structure. It returns the list of local file names. By default files are only downloaded if the remote file is more recent. This routine is specifically designed to be used with the same file system that the web server is using to serve files. It can look for a MASTER_FILE that indicates the master files system is in use and it then bypasses the download process. The file system can be a mix of directories that hold the original files being served as well as a copy of files from external servers. The routine correctly handles multiple users sharing (and writing to) the same directories. Works on LINUX, MAC, and Windows Usage: files = file_retrieve(pathnames, [keyword options]) Suggested usage: First get a default structure that specifies where the files come from and where they will be stored locally source = file_retrieve(/default_structure,REMOTE_DATA_DIR='http://sprg.ssl.berkeley.edu/data/',master_file='maven/.master') ; Retrieve a MAVEN mag 1 sec resolution file for 2014-11-18 files = file_retrieve( 'maven/data/sci/mag/l2/sav/1sec/2014/11/mvn_mag_l2_pl_1sec_20141118.sav' ,_extra=source) ; Retrieve an array of filenames within a time range: files = file_retrieve( 'maven/data/sci/mag/l2/sav/1sec/YYYY/MM/mvn_mag_l2_pl_1sec_YYYYMMDD.sav',trange=['2014-12-30','2015-1-3'] ,_extra=source) ; Retrieve "globbed files from the SPDF: ; A typical URL at SPDF is: 'http://spdf.sci.gsfc.nasa.gov/pub/data/wind/mfi/mfi_h0/2015/wi_h0_mfi_20151008_v03.cdf The source of these files is given by: source = file_retrieve(/default, REMOTE_DATA_DIR='http://spdf.sci.gsfc.nasa.gov/pub/data/' , LOCAL_DATA_DIR = root_data_dir()+'istp/' ) ; The path specifiation is given by: pathname = 'wind/mfi/mfi_h0/YYYY/wi_h0_mfi_YYYYMMDD_v??.cdf' files = file_retrieve(pathname, trange=['2014-12-25','2015-1-4'],_extra=source,/last_version) Subsequent calls will be much faster since the files will have been downloaded. Arguments: pathnames: String or string array with partial path to the remote file. (will be appended to remote_data_dir) [newpathnames]: (optional) String or string array with partial path to file destination. (Will be appended to local_data_dir) (NOT RECOMMENDED TO USE THIS OPTION. Keywords: REMOTE_DATA_DIR: String defining remote data directory Pathnames will be appended to this variable. LOCAL_DATA_DIR: String or string array w/ local data directory(s) If newpathnames is set it will be appended to this variable; if not, pathnames will be appended. MASTER_FILE: (file pathname) if the file: LOCAL_DATA_DIR+MASTER_FILE exists then no download or contact with the server is made. (same effect as NO_SERVER - but evaluated at run time) NO_SERVER: Set this keyword to prevent any contact with a remote server. TRANGE: One or two element array indicating the time range of interest. If set, then PATHNAMES will be expanded into an array of pathnames using the special character sequences to translate: YYYY, yy, MM, DD, hh, mm, ss, .f, DOY, DOW, TDIFF are special characters that will be substituted with the appropriate date/time field Be especially careful of extensions that begin with '.f' since these will be translated into a fractional second. See "time_string" TFORMAT keyword for more info. LAST_VERSION: If set, then only the last of multiple file versions is downloaded and returned. (used in conjuction with "globbed" pathnames and version numbers.) USER_PASS: Username and password for secured systems; USER_PASS='username:password' ARCHIVE_EXT: string; Set archiving extension. (i.e.: ARCHIVE_EXT= '.arc'). to rename old files instead of deleting them. Prevents accidental file deletion. ARCHIVE_DIR: string; Set archiving subdirectory. (i.e.: ARCHIVE_DIR = '.archive/') VALID_ONLY: Set this keyword to return only existing files. PRESERVE_MTIME: if set, the local file will be given a modification time that is the same as the modification time of the remote server's file modification time. This keyword is ignored on (windows) machines that don't have touch installed. (No cygwin or GNU utils) Default is 1 VERBOSE: Set Verbosity - 0 print almost nothing , 2 is typical, 4 and above is for debugging. if_modified_since: Set to 0 to force download user_agent: String - User agent text to be sent to web server. file_mode: permissions for new files. Default is '666'o ; dir_mode: permissions for newly created directories. Default is '777'o ; progobj: Experimental option for a progress bar widget. (please ignore for now) min_age_limit: Files younger than this age (in seconds) are assumed current (avoids the need to recheck server) Default is 300 no_download:0 , $ ; similar to NO_SERVER keyword. Should still allow remote directory retrieval - but not files. no_update:0 , $ ; Set to 1 to prevent contact to server if local file already exists. (this is similar to no_clobber) History: 2012-6-25: local_data_dir and remote_data_dir accept array inputs with the same # of elements as pathnames/newpathnames -DO NOT USE this option! $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/file_retrieve.pro $
(See general/misc/file_retrieve.pro)
Procedure: file_retrieve_v Purpose: Wrapper for file_retrieve that searches for highest available version first, with no need to retrieve remote-index. Keywords: relpathnames: the list of relative pathnames that are being searched version_list(optional): if the user wants to override the default version priority list so this function prioritizes versions differently, a different version list can be passed in $LastChangedBy: kenb-mac $ $LastChangedDate: 2007-08-21 08:33:59 -0700 (Tue, 21 Aug 2007) $ $LastChangedRevision: 1463 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/file_retrieve_v.pro $
(See general/misc/file_retrieve_v.pro)
Function: file_source_dirname Purpose: Returns the directory path of the source file which calls this function. This is useful for determining the directory of associated data files. Warning: May not work for a precompile version of code. Author: D Larson 2008
(See general/misc/file_source_dirname.pro)
FILE_TOUCH Purpose: Wrapper routine for the "touch" program that sets file modification and access times USAGE: file_touch,'foo',systime(1)-300,/mtime ; sets mod time to 5 minutes ago keywords: MTIME set only modification time(UTC) ATIME set only access time(UTC) VERBOSE sets VERBOSITY of messages (0: error messages only, 6: lots) Restrictions: #1 Shell executable "touch" must be in path on local operating system. This is common on unix systems. Windows executable available from: http://sourceforge.net/projects/unxutils/ If the touch executable is not found then no action is taken. Test for executable occurs only once. #2 Behavior on Windows is currently untested, and may not be consistent with Linux. #3 This routine will not work with home directories(~/file_name will not work) on linux variants. The /noshell option to spawn means that it won't expand home directories into full paths #4 Routine will not work for modification date 1970-01-01/00:00:00 #5 Time should be a UTC time in seconds since 1970. Example: file_touch,'foo',systime(1),/mtime #6 This routine primarily for file_http_copy routine. It is not considered stable for general purpose use and the interface may change. $LastChangedBy: davin-mac $ $LastChangedDate: 2015-10-19 16:18:58 -0700 (Mon, 19 Oct 2015) $ $LastChangedRevision: 19110 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/file_touch.pro $
(See general/misc/file_touch.pro)
Procedure: FIND_CONST_INTERVALS Purpose: Find intervals within the input array where the data are constant to some tolerance, and return the begin and end indices into the original array for those intervals. Calling Sequence: x = [ 1, 1, 3, 3, 4, 1, 1, 1, 1] ctol = 0.01 find_const_intervals, x, nint=nint, ibeg=ibeg, iend=iend, ctol=ctol Arguements: X, ARRAY or any type; will be cast to FLOAT for comparison. NINT, LONG, number of intervals of constantcy found in X. IBEG, IEND, LONG[ nint], arrays of array indices to the begin and end of each constant interval. CTOL, FLOAT, tollerance for constancy of data; ABS(dX) lt CTOL for data to be "constant". Notes: None. $LastChangedBy: egrimes $ $LastChangedDate: 2016-11-14 13:46:58 -0800 (Mon, 14 Nov 2016) $ $LastChangedRevision: 22356 $ $URL $
(See general/misc/find_const_intervals.pro)
Name: find_nearest_neighbor Purpose: Uses binary search on a time series to find the array element closest to the target time Please consider using find_nearest neighbors 2 function as the faster version. Also, please consider nn function which provides the nearest index of the time. Input: time_series: monotonically increasing time series array (stored as doubles) target_time: time to search for in the time series (double) Keywords: quiet: suppress output of errors sort: sort the input array prior to searching allow_outside: if target_time is outside of target_series, this keyword causes this routine to return the last/first element in the array (whichever is closer) Output: Returns the value in time_series nearest to the target_time (as a double) Returns -1 if there's an error Examples: >> print, find_nearest_neighbor([1,2,3,4,5,6,7,8,9], 4.6) 5 >> print, find_nearest_neighbor([5,4,3,7,8,2,4,6,7], 7.6, /sort) 8 See also: find_nearest_neighbor2, nn $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/find_nearest_neighbor.pro $
(See general/misc/find_nearest_neighbor.pro)
Name: find_nearest_neighbor2 Purpose: Faster versin of find_nearest_neighbor. Use minimum to search in a time series to find the array element closest to the target time. nn function uses similar algorithm providing nearest index in time. Input: time_series: monotonically increasing time series array (stored as doubles) target_time: time to search for in the time series (double) Keywords: quiet: suppress output of errors sort: sort the input array prior to searching allow_outside: if target_time is outside of target_series, this keyword causes this routine to return the last/first element in the array (whichever is closer) Output: Returns the value in time_series nearest to the target_time (as a double) Returns -1 if there's an error Examples: >> print, find_nearest_neighbor2([1,2,3,4,5,6,7,8,9], 4.6) 5 >> print, find_nearest_neighbor2([5,4,3,7,8,2,4,6,7], 7.6, /sort) 8 See also: find_nearest_neighbor, nn $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/find_nearest_neighbor2.pro $
(See general/misc/find_nearest_neighbor2.pro)
**** OBSOLETE!!! Please use "str_element"instead! *** FUNCTION: find_str_element PURPOSE: find an element within a structure Input: struct, generic structure name, string (tag name) Purpose: Returns index of structure tag. Returns -1 if not found Returns -2 if struct is not a structure KEYWORDS: If VALUE is set to a named variable then the value of that element is returned in it. CREATED BY: Davin Larson LAST MODIFICATION: @(#)find_str_element.pro 1.6 95/10/06
(See general/misc/find_str_element.pro)
PROCEDURE: fname_to_time, fname, time PURPOSE: To translate the name of a standard WIND data file into the starting time of the data. INPUT: fname: filename (string) to be translated time: variable in which to return time (double) CREATED BY: Peter Schroeder LAST MODIFICATION: %W% %E%
(See general/misc/fname_to_time.pro)
FUNCTION: get_colors PURPOSE: returns a structure containing color pixel values INPUT: none KEYWORDS: NOCOLOR: forces all colors to !d.table_size-1. Written by: Davin Larson 96-01-31 FILE: get_colors.pro VERSION: 1.2 LAST MODIFICATION: 99/04/07
(See general/misc/get_colors.pro)
PROCEDURE: get_file_names, fnames PURPOSE: Gets an array of filenames within a time range INPUT: fnames: named variable in which the output array of filenames is placed. KEYWORDS: TIME_RANGE: Two element vector (double or string) specifying the time range. If time range is not set, then "GET_TIMESPAN" will be called to get a time range. MASTERFILE: Use this keyword to pass in one of the following: 1) Name of a masterfile that contains times and associated filenames. The file should have the format: yyyy-mm-dd/hh:mm:ss yyyy-mm-dd/hh:mm:ss fullpathfilename with one line for each file. (Hint: for CDF files, the masterfile can be created using the UNIX program 'kpdfile' or the IDL procedure "MAKE_CDF_INDEX".) 2) Full path/file names with wildcard characters to search for relevant files. Input should be in the form: /path/xxx* for files of form /path/xxx_date. 3) The name of a previously defined environment variable containing data in the form of 1 or 2 above. ROOT_DIR: Optional root_directory of the masterfile. This will properly manage operating system dependancies. CREATED BY: Davin Larson MODIFIED BY: Peter Schroeder VERSION: 1.26 00/10/04 get_file_names.pro
(See general/misc/get_file_names.pro)
PROCEDURE: get_file_names_ind, fnames PURPOSE: Gets an array of filenames within a masterfile within a time range INPUT: fnames: named variable in which the output array of filenames is placed. KEYWORDS: TIME_RANGE: Two element vector (double or string) specifying the time range. If time range is not set, then "GET_TIMESPAN" will be called to get a time range. MASTERFILE: Name of a masterfile that contains times and associated filenames. The file should have the format: yyyy-mm-dd/hh:mm:ss yyyy-mm-dd/hh:mm:ss fullpathfilename with one line for each file. (Hint: for CDF files, the masterfile can be created using the UNIX program 'kpdfile' or the IDL procedure "MAKE_CDF_INDEX".) ROOT_DIR: Optional root_directory of the masterfile. This will properly manage operating system dependancies. NO_DUPLICATES: (N; integer) when set the first N characters of file names are compared and only the highest version is returned. CREATED BY: Davin Larson VERSION: @(#)get_file_names_ind.pro 1.1 97/06/23
(See general/misc/get_file_names_ind.pro)
NAME: get_rt_path PURPOSE: gets the directory of the calling routine. Used for reliably looking up resource paths across platform CALLING SEQUENCE: get_rt_path,path OUTPUT: path: the path of the routine that called get_rt_path NOTES: This is a general version of specific routines like getctpath. Eventually those routines should be replaced with this one. $LastChangedBy: pcruce $ $LastChangedDate: 2009-07-16 16:38:39 -0700 (Thu, 16 Jul 2009) $ $LastChangedRevision: 6439 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/get_rt_path.pro $
(See general/misc/get_rt_path.pro)
Procedure: Grad Purpose: Calculates the gradient of a 2d or 3d grid in one of two ways. In 2d: Method1(default): gradientX = (grid[x+1,y] - grid[x,y] + grid[x+1,y+1] - grid[x,y+1]) / (2*dx) gradientY = (grid[x,y+1] - grid[x,y] + grid[x+1,y+1] - grid[x+1,y]) / (2*dy) Method2(leftright): gradientX = (grid[x+1,y] - grid[x,y] + grid[x,y] - grid[x-1,y]) / (2*dx) gradientY = (grid[x,y+1] - grid[x,y] + grid[x,y] - grid[x,y-1]) / (2*dy) This method is actually equivalent to: gradientX = (grid[x+1,y] - grid[x-1,y]) / (2*dx) gradientY = (grid[x,y+1] - grid[x,y-1]) / (2*dy) In 3d: Method1(default): gradientX = (grid[x+1,y,z] - grid[x,y,z] + grid[x+1,y+1,z] - grid[x,y+1,z] + grid[x+1,y,z+1] - grid[x,y,z+1] + grid[x+1,y+1,z+1] - grid[x,y+1,z+1]) / (4*dx) gradientY = (grid[x,y+1,z] - grid[x,y,z] + grid[x+1,y+1,z] - grid[x+1,y,z] + grid[x,y+1,z+1] - grid[x,y,z+1] + grid[x+1,y+1,z+1] - grid[x+1,y,z+1]) / (4*dy) gradientZ = (grid[x,y,z+1] - grid[x,y,z] + grid[x+1,y,z+1] - grid[x+1,y,z] + grid[x,y+1,z+1] - grid[x,y+1,z] + grid[x+1,y+1,z+1] - grid[x+1,y+1,z]) / (4*dz) Method2(leftright): gradientX = grid[x+1,y,z] - grid[x-1,y,z] / (2*dx) gradientY = grid[x,y+1,z] - grid[x,y-1,z] / (2*dy) gradientZ = grid[x,y,z+1] - grid[x,y,z-1] / (2*dz) Method1 will produce an output that is one element smaller in each dimension and whose element centers are offset by half the nominal spacing of the grid. Method2 will have the same centers and same number of elements as the original grid(if the original grid had regular spacing). Example: Inputs: grid: an NxM grid of points, if it contains NaNs the output may be unpredictable.(or an NxMxP) x(optional): An N length array specifying the positions of the grid points on the x-axis xc should be monotonic and should contain no NaNs. If unset this routine will assume dx = 1.0 y(optional): An M length array specifying the positions of the grid points on the y-axis yc should be monotonic and should contain no NaNs. If unset this routine will assume dy = 1.0 z:(optional) a P length array specifying the positions of the grid points on the z-axis. zc should be monotonic and should contain no NaNs. If unset this routine will assume dz = 1.0 Keywords: grad: The gradient is output through this keyword as an NxMx2 array of points. grad[*,*,0] is the x gradient & grad[*,*,1] is the y gradient xout: The positions of the gradient outputs on the x axis are output through this keyword as an N length array yout: The positions of the gradient outputs on the y axis are output through this keyword as an M length array xy: The positions for each output point are passed out as pairs through this keyword. The output array will have dimensions N*Mx2,(N times M by 2) dxy: The gradient for each point is passed out as pairs through this keyword. The output array will have dimensions N*Mx2,(N times M by 2) leftright: Set this keyword if you want to use the second method of gradient calculation. Notes: 1. This procedure is not particularly tolerant of NaNs in the input, so you should remove them before passing them into this routine. 2. The output may have slightly different centers/ dimensions as the input. This is will definitely be the case if the input array had irregular dimensions. 3. xy,dxy are useful output format keywords for the plotxyvec routine While grad,xout, & yout may be easier for other tasks.
(See general/misc/grad.pro)
hexprint :Description: Routine that will display hex values of an array of bytes, ints or longs. :Params: buffer - Either an array of (bytes, ints or longs) or a filename to open :Keywords: unit filename: Set this keyword to filename to dump the results decimal: display in decimal instead of hex. start nbytes: Set to number of bytes to display. Default is one kilobyte. dlevel ncolumns :Author: davin Jan 19, 2015 $LastChangedBy: davin-mac $ $LastChangedDate: 2018-05-13 16:15:11 -0700 (Sun, 13 May 2018) $ $LastChangedRevision: 25212 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/hexprint.pro $
(See general/misc/hexprint.pro)
NAME: high_pass_filter PURPOSE: subtracts running average from a data array CALLING SEQUENCE: y = high_pass_filter(array, time_array, no_time_interp=no_time_interp) INPUT: array = a data array time_array = a time array (in units of seconds) dt = the averaging time (in seconds) no_time_interp = if set, do *not* interpolate the data to the minimum time resolution. The default procedure is to interpolate the data to a regularly spaced grid, and then use ts_smooth to get the running average. This alternative can be slow, but it may save a lot of memory. double = if set, do calculation in double precision regardless of input type. (If input data is double calculation is always done in double precision) interp_resolution = If time interpolation is being used, set this option to control the number of seconds between interpolated samples. The default is to use the value of the smallest separation between samples. Any number higher than this will sacrifice output resolution to save memory. (NOTE: This option will not be applied if no interpolation is being performed because either (1) no_time_interp is set or (2) the sample rate of the data is constant) interactive_warning = if keyword is set pops up a message box if there are memory problems and asks the user if they would like to continue interactive_varname = set this to a string indicating the name of the quantity to be used in the warning message. warning_result = assign a named variable to this keyword to determine the result of the computation OUTPUT: y = the data array where at each point an average of the data for the previous dt has been subtracted. HISTORY: 14-jan-2008, jmm, jimm@ssl.berkeley.edu 06-feb-2008, teq, teq@ssl.berkeley.edu 13-mar-2008, jmm, added the default behavior using interpolation 17-mar-2008, jmm, Gutted and rewritten to use smooth_in_time program 23-apr-2008, pcruce, Added padding for no_time_interp option, added _extra keyword 28-apr-2008, pcruce, Added interp_resolution option, added memory warning, mod to guarantee that precision of output is at least as large as precision of input $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/high_pass_filter.pro $
(See general/misc/high_pass_filter.pro)
FUNCTION: H=histbins(R,XBINS) Purpose: Returns the histogram (H) and bin locations (XBINS) for an array of numbers. Examples: r = randomn(seed,10000) plot,psym=10, xbins, histbins(r,xbins) ;Use all defaults. plot,psym=10, xbins, histbins(r,xbins ,/shift) ;shift bin edges. plot,psym=10, xbins, histbins(r,xbins, binsize=.2) plot,psym=10, xbins, histbins(r,xbins, binsize=.2 ,/shift) plot,psym=10, xbins, histbins(r,xbins, range=[-10,10]) NOTE: XBINS is an output, not an input! Keywords: (All optional) Defaults are based on the size and range of input. BINSIZE: Size of bins. (recommend double precision!) NBINS: force the output array to have this number of elements. (Use with RANGE) RANGE: Limits of histogram SHIFT : Keyword that controls the location of bin edges. This has no effect if RANGE is defined. NORMALIZE: Set keyword to return a normalized histogram (probability distribution). REVERSE: See REVERSE keyword for histogram RETBINS: If set then an array of bins (same size as r) is returned instead. EXTEND_RANGE: if set then the range is extended on either end, (no effect if range is set) See also: "average_hist", "histbins2d"
(See general/misc/histbins.pro)
Function: h = histbins2d(x,y,xval,yval) Input: x, y, random variables to bin. Output: h number of events within bin xval, yval, center locations of the bins.
(See general/misc/histbins2d.pro)
FUNCTION: interp(y,x,u) PURPOSE: Linearly Interpolates vectors with an irregular grid. INTERP is functionally the same as INTERPOL, however it is typically much faster for most applications. USAGE: result = interp(y,x,u) INPUTS: Y: The input vector can be any type except string. X: The absicissae values for Y. This vector must have same # of elements as Y. The values MUST be monotonically ascending or descending. U: The absicissae values for the result. The result will have the same number of elements as U. U does not need to be monotonic. KEYWORDS: NO_CHECK_MONOTONIC: set this keyword to skip the check for monotonic data. INDEX: Set to named variable to return the index of the closest x less than u. (same dimensons as u) NO_EXTRAPOLATE: Set this keyword to prevent extrapolation. INTERP_THRESHOLD: Set to minimum allowed gap size. CREATED BY: Davin Larson 4-30-96 FILE: interp.pro VERSION: 1.15 LAST MODIFICATION: 02/04/17
(See general/misc/interp.pro)
;Function: isdaylightsavingtime purpose: returns 0 or 1 depending upon Limitations: Current only works for US time zones (-5 though -11) It will return 0 outside of these regions Arizona and Hawaii are unfortunately lumped together with the other 48 states.
(See general/misc/isdaylightsavingtime.pro)
Name: is_numeric Purpose: determines if input string is a validly formatted number. Does Inputs: s: the string to be checked Outputs: 1: if it is validly formatted 0: if it is not Keywords: sci_notation: add support for scientific notation (3*10^6) decimal: when set, only return 1 for decimal numeric values, such as 1.0, 0.000004, returns 0 for scientific, exponential, engineering, etc. notations Notes: Does not consider numbers in complex notation or numbers with trailing type codes to be valid. Examples: print,is_numeric('1') 1 print,is_numeric('1.23e45') 1 print,is_numeric('1.2c34') 0 print,is_numeric('1B') 0 print,is_numeric('-1.23d-3') 1 print,is_numeric('5e+4') 1 print,is_numeric('5.e2') 1 print,is_numeric('5.e3.2') 0 Examples using scientific notation: print,is_numeric('4*10^2', /sci) 1 print,is_numeric('4*10^-6', /sci) 1 print,is_numeric('4*10^(-12)', /sci) 1 print,is_numeric('12.3*10^2', /sci) 1 print,is_numeric('10^-2.2', /sci) 1 print,is_numeric('10.^-2.2', /sci) 1 print,is_numeric('12.3*10^', /sci) 0 print,is_numeric('12.3*', /sci) 0 $LastChangedBy: nikos $ $LastChangedDate: 2014-05-13 09:46:59 -0700 (Tue, 13 May 2014) $ $LastChangedRevision: 15109 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/is_numeric.pro $
(See general/misc/is_numeric.pro)
NAME: lopez_NS_model PURPOSE: This routine calculates the position along the zaxis at a specific x and y location. The Lopez model is used for this calculation. INPUT: time - string or double format double(s) seconds since 1970 string(s) format: YYYY-MM-DD/hh:mm:ss gsm_pos - position vector in GSM coordinates in re (pos[*,3]) kp - kp index value mlt - magnetic local time in degrees (0=midnight) OUTPUT: returns Z displacement of the neutral sheet above or below the XY plane in Re (zgsm of the NS) Value is positive if NS is above z=0 gsm plane, negative if below KEYWORDS sc2NS - if set returns Z displacement from the spacecraft to the neutral sheet Value is positive if the NS is northward of the SC location, and negative if below NOTES: Reference: The position of the magnetotail neutral sheet in the near-Earth Region, Geophysical Research Letters, Vol. 17, No 10, pages 1617-1620, 1990 Author - Ramon E. Lopez The lopez model is best used for distances <8.8 RE HISTORY:
(See general/misc/neutral_sheet.pro)
PROCEDURE: makegif, filename NAME: makegif PURPOSE: Creates a GIF file from the currently displayed image. PARAMETERS: filename filename of gif file to create. Defaults to 'plot'. Note: extension '.gif' is added automatically KEYWORDS: ct Index of color table to load. Note: will have global consequences! multiple Write multiple gifs to a single file. Subsequent calls to makegif with same filename argument will append to the file. Use /close to close. close close the gif file. Useful when writing multiple gifs to a single file. Does not write any image to the file. no_expose Don't print index of current window. Restrictions: Current device should have readable pixels (ie. 'x' or 'z') Created by: Davin Larson FILE: makegif.pro VERSION: 1.11 LAST MODIFICATION: 02/11/06
(See general/misc/makegif.pro)
PROCEDURE: makejpg, filename NAME: makejpg PURPOSE: Creates a jpg file from the currently displayed image. PARAMETERS: filename filename of jpg file to create. Defaults to 'plot'. Note: extension '.jpg' is added automatically KEYWORDS: ct Index of color table to load. Note: will have global consequences! multiple Does nothing. close Does nothing. no_expose Don't print index of current window. mkdir If set, make the parent directory/directories of the file specified by filename. Restrictions: Current device should have readable pixels (ie. 'x' or 'z') Based almost entirely on makepng by davin larson $LastChangedBy: pcruce $ $LastChangedDate: 2009-11-18 14:36:51 -0800 (Wed, 18 Nov 2009) $ $LastChangedRevision: 6941 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/makejpg.pro $
(See general/misc/makejpg.pro)
PROCEDURE: makepng, filename NAME: makepng PURPOSE: Creates a PNG file from the currently displayed image. PARAMETERS: filename filename of png file to create. Defaults to 'plot'. Note: extension '.png' is added automatically KEYWORDS: ct Index of color table to load. Note: will have global consequences! multiple Does nothing. close Does nothing. no_expose Don't print index of current window. mkdir If set, make the parent directory/directories of the file specified by filename. TIMETAG : 1 - Use current local time : 2 - Use current GMT : >2 Use unix time WINDOW : window number Restrictions: Current device should have readable pixels (ie. 'x' or 'z') Created by: Davin Larson FILE: makepng.pro VERSION: 1.11 LAST MODIFICATION: 02/11/06
(See general/misc/makepng.pro)
NAME: makeps.pro PURPOSE: OBSOLETE: please use tprint or popen and pclose A simple function to reliably and consistently do postscript export Right now it will export whatever your last tplot command was(ie current plot) CALLING SEQUENCE: makeps -or- makeps,'filename' INPUT: a filename or nothing OUTPUT: a postscript file to the specified location errors, grays out all buttons while processing NOTES: Will append a .ps to your filename whether you like it or not TODO: add an argument to accept a list of variables $LastChangedBy: pcruce $ $LastChangedDate: 2008-04-14 15:50:24 -0700 (Mon, 14 Apr 2008) $ $LastChangedRevision: 2719 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/makeps.pro $
(See general/misc/makeps.pro)
FUNCTION: minmax,array PURPOSE: returns a two element array of min, max values INPUT: array KEYWORDS: MAX_VALUE: ignore all numbers greater than this value MIN_VALUE: ignore all numbers less than this value POSITIVE: forces MINVALUE to 0 CREATED BY: Davin Larson LAST MODIFICATION: @(#)minmax.pro 1.2 02/04/17
(See general/misc/minmax.pro)
NAME: MK_HTML_HELP2 PURPOSE: Creates a html document from a list of IDL procedures. Given a list of IDL procedure files (.PRO), VMS text library files (.TLB), or directories that contain such files, this procedure generates a file in the HTML format that contains the documentation for those routines that contain a DOC_LIBRARY style documentation template. The output file is compatible with World Wide Web browsers. This version is enhanced over the routine supplied by IDL, It will also cross reference, print the purpose, and add links to the source code. CATEGORY: Help, documentation. CALLING SEQUENCE: MK_HTML_HELP, Sources, Outfile INPUTS: Sources: A string or string array containing the name(s) of the .pro or .tlb files (or the names of directories containing such files) for which help is desired. If a source file is a VMS text library, it must include the .TLB file extension. If a source file is an IDL procedure, it must include the .PRO file extension. All other source files are assumed to be directories. If not provided, searches down directory tree from current directory for files. Outfile: The name of the output file which will be generated without HTML extension. If no inputs are given: All directories in the current directory tree are used with the exception of: directories named: 'obsolete' or 'SCCS.' (UNIX only) KEYWORDS: TITLE: If present, a string which supplies the name that should appear as the Document Title for the help. FILENAME: Alternative method of specifying Outfile (see above) VERBOSE: Normally, MK_HTML_HELP does its work silently. Setting this keyword to a non-zero value causes the procedure to issue informational messages that indicate what it is currently doing. !QUIET must be 0 for these messages to appear. STRICT: If this keyword is set to a non-zero value, MK_HTML_HELP will adhere strictly to the HTML format by scanning the the document headers for characters that are reserved in HTML (",&,"). These are then converted to the appropriate HTML syntax in the output file. By default, this keyword is set to zero (to allow for faster processing). CROSSLINK:If this keyword is set MK_HTML_HELP will create a cross reference between library files. CLTURBO: If this keyword is set to a single character string, then the cross reference procedure will only cross reference lines that contain the character given in CLTURBO. This greatly increases the speed of the routine. By default the double quote (") is used PRINT_PURPOSE: If this keyword is set then the first line after PURPOSE: is printed in the output file. MASTLIST: If set, create master list only. Do not create subdirectory file listings. COMMON BLOCKS: None. SIDE EFFECTS: A help file with the name given by the Outfile argument is created. RESTRICTIONS: The following rules must be followed in formatting the .pro files that are to be searched. (a) The first line of the documentation block contains only the characters ";+", starting in column 1. (b) There must be a line which contains the string "NAME:", which is immediately followed by a line containing the name of the procedure or function being described in that documentation block. If this NAME field is not present, the name of the source file will be used. (c) The last line of the documentation block contains only the characters ";-", starting in column 1. (d) Every other line in the documentation block contains a ";" in column 1. Note that a single .pro file can contain multiple procedures and/or functions, each with their own documentation blocks. If it is desired to have "invisible" routines in a file, i.e. routines which are only for internal use and should not appear in the help file, simply leave out the ";+" and ";-" lines in the documentation block for those routines. No reformatting of the documentation is done. MODIFICATION HISTORY: July 5, 1995, DD, RSI. Original version. July 13, 1995, Mark Rivers, University of Chicago. Added support for multiple source directories and multiple documentation headers per .pro file. July 17, 1995, DD, RSI. Added code to alphabetize the subjects; At the end of each description block in the HTML file, added a reference to the source .pro file. July 18, 1995, DD, RSI. Added STRICT keyword to handle angle brackets. July 19, 1995, DD, RSI. Updated STRICT to handle & and ". Changed calling sequence to accept .pro filenames, .tlb text librarie names, and/or directory names. Added code to set default subject to name of file if NAME field is not present in the doc header. September, 1995, D. Larson. SSL Berkeley. Added crosslink, print_purpose clturbo. October 4, 1995, D. Larson. SSL Berkeley. Added link to source file. October 3, 1996, F. Marcoline. SSL Berkeley. Added Alphabet Jumpline. October 10, 1996, D. Larson. Added Listing by Directory. October 1, 2007, J. McTiernan, allow to work with more than 28 directories, dropped obsolete /stream keywords from openw calls. FILE: mk_html_help2.pro VERSION 1.26 LAST MODIFICATION: 99/04/22
(See general/misc/mk_html_help2.pro)
FUNCTION: ndimen PURPOSE: Returns the number of dimensions in an array. INPUT: array RETURNS number of dimensions (0 for scalers,-1 for undefined) SEE ALSO: "dimen", "data_type" CREATED BY: Davin Larson LAST MODIFICATION: @(#)ndimen.pro 1.6 97/03/10
(See general/misc/ndimen.pro)
Name: nearest_neighbor Purpose: Finding the nearest neighbors by interpolating the indices for two arrays. NANs can be returned when gap/no_extrapolate are used. Input: time_series: monotonically increasing time series array target_time: monotonically increasing time to search for in the time series Keywords: gap: return NANs if time gap > gap (in seconds), see keyword 'interp_threshold' in "interp" no_extrapolate: Set this keyword to prevent extrapolation. See keyword 'no_extrapolate' in "interp" silent: No printing $LastChangedBy: xussui $ $LastChangedDate: 2018-08-15 17:23:54 -0700 (Wed, 15 Aug 2018) $ $LastChangedRevision: 25642 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/nearest_neighbor.pro $ CREATED BY: Shaosui Xu 2018-08-15 FILE: nearest_neighbor.pro
(See general/misc/nearest_neighbor.pro)
NAME: nn PURPOSE: Find the index of the data point(s) nearest to the specified time(s) You can use find_nearest_neighbor2 function to find the nearest time. This routine can be inefficient when operating on large arrays. In such cases it is better, if possible, to divide the time arrays into smaller segments and work on one segment at a time. CALLING SEQUENCE: ind=nn(data,time) INPUTS: data: a data structure, a tplot variable name/index, or a time array time: (double) seconds from 1970-01-01, scalar or array if not present, "ctime" is called to get time(s) OPTIONAL INPUTS: none KEYWORD PARAMETERS: x, y, & v: set to named keywords to return the values of the x, y, & v arrays, if applicable progress: If set, then report progress in increments of 1%. No effect when n_elements(time) lt 100. OUTPUTS: a long scalar index or long array of indicies on failure, returns: -2 if bad inputs, -1 if nearest neighbor not found EXAMPLE: ctime,times,npoints=2 inds=nn('Np',times) get_data,'Np',data=dens & get_data,'Tp',data=temp plot,dens.y(inds(0):inds(1)),temp(inds(0):inds(1)) LAST MODIFICATION: @(#)nn.pro 1.8 02/04/17 CREATED BY: Frank Marcoline See also: find_nearest_neighbor2, find_nearest_neighbor $LastChangedBy: hara $ $LastChangedDate: 2018-05-17 14:33:19 -0700 (Thu, 17 May 2018) $ $LastChangedRevision: 25233 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/nn.pro $
(See general/misc/nn.pro)
FUNCTION: nn2 PURPOSE: Returns the indices of the nearest neighbors in one time array to the times in a second array. This routine is MUCH faster than nn.pro. Based on an idea by Shaosui Xu. If times outside the range of the first time array are present, the index of the first or last element of the first time array will be taken as the nearest neighbor. Use keyword MAXDT to ensure reasonable output. USAGE: i = nn2(time1, time2) INPUTS: time1: Input time array, in any format accepted by time double. Must be monotonically increasing or decreasing. time2: Another time array, in any format accepted by time_double, for which you want the indices of the nearest neighbors in time1. OUTPUTS: i: Indices of the nearest neighbors in time1 to the elements of time2. KEYWORDS: MAXDT: Maximum time difference in seconds between an element of time2 and its nearest neighbor in time1. If exceeded, the corresponding index will be set to -1. Note: Later versions of IDL allow -1 as a valid array index, so you must filter the output of this routine before using it to index an array. $LastChangedBy: dmitchell $ $LastChangedDate: 2018-09-05 12:36:06 -0700 (Wed, 05 Sep 2018) $ $LastChangedRevision: 25734 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/nn2.pro $ CREATED BY: David L. Mitchell 2018-08-23 FILE: nn2.pro
(See general/misc/nn2.pro)
PROCEDURE: oplot_err, x, low, high PURPOSE: Plot error bars over a previously drawn plot.
(See general/misc/oplot_err.pro)
PROCEDURE: pclose INPUT: none PURPOSE: Close postscript file opened with popen, and change device back to default. If common block string 'printer_name' is set, then file is sent to that printer. SEE ALSO: "print_options" "popen" CREATED BY: Davin Larson LAST MODIFICATION: @(#)pclose.pro 1.10 99/02/18
(See general/misc/pclose.pro)
FUNCTION: plot_positions PURPOSE: Procedure that will compute plot positions for multiple plots per page. Created by Davin Larson
(See general/misc/plot_positions.pro)
:PURPOSE: Create an Earth graphic. :INPUT: X - position x Y - position y R - radius Direction - direction of the sun in RAD LineColor - color of the line FillColor - color of the background RenderNum - number of defined vertex in earth half view Example: default plot the earth PLOT_THE_EARTH, 0, 0, 1, 0, 'k', 'black', 16 AUTHOR: Alexander Drozdov VERSION: $LastChangedBy: adrozdov $ $LastChangedDate: 2017-10-25 12:57:57 -0700 (Wed, 25 Oct 2017) $ $LastChangedRevision: 24214 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/plot_the_earth.pro $
(See general/misc/plot_the_earth.pro)
PROCEDURE: popen, filename PURPOSE: Change plot device to postscript. INPUT: optional; if: string : string used as filename, '.ps' extension is added automatically integer X: filename set to 'plotX.ps'. value of x is incremented by 1. none: filename set to 'plot.ps' KEYWORDS: See print_options for info. COPY: pass COPY keyword to set_plot INTERP: pass INTERP keyword to set_plot (default is to have interp off) XSIZE: postscript plot size in the x direction YSIZE: postscript plot size in the y direction UNITS: plot size units (inches or cm) SEE ALSO: "pclose", "print_options", "popen_com" HISOTRY: 4-apr-2008 cg, added optional keywords for postscript plot size units for plot size variables CREATED BY: Davin Larson LAST MODIFICATION: @(#)popen.pro 1.21 98/06/23
(See general/misc/popen.pro)
COMMON BLOCK: popen_com PURPOSE: Common block for print routines SEE ALSO: "popen","pclose", "print_options" CREATED BY: Davin Larson LAST MODIFICATION: @(#)popen_com.pro 1.10 97/12/05
(See general/misc/popen_com.pro)
PROCEDURE: printdat,[x] PURPOSE: Displays information and contents of a data variable. (Very similar to HELP procedure but much more verbose.) This routine is most useful for displaying contents of complex data structures. If printdat is called without arguments then information on all variables within the calling routine are displayed. POINTER occurences are recursively displayed as well. (only non-null pointers are listed) Keywords: FULL Set this keyword to display full variable output. NAMES = string: Optional list of variables to display (Same as for HELP) WIDTH: Width of screen (Default is 120). MAX: Maximum number of array elements to print. (default is 30) NSTRMAX Maximum number of structure elements to print. (default is 3) NPTRMAX Maximum number of pointer elements to print. (default is 5) OUTPUT=string : named variable in which the output is dumped. VARNAME=string : [optional] name of variable to be displayed. (useful if input is an expression instead of a variable) RECURSEMAX = integer : Maximum number of levels to dive into. (Useful for limiting the output for heavily nested structures or pointers) Written by Davin Larson, May 1997. $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/printdat.pro $
(See general/misc/printdat.pro)
PROCEDURE: print_options PURPOSE: controls postscript printing options KEYWORDS: PORT: print pages in portrait format (default) LAND: print pages in landscape format BW: Use black and white mode (untested) COLOR: Use Color postscript (default) XSIZE: plot size dimension in the x direction YSIZE: plot size dimension in the y direction UNITS: plot size units (inches or cm) FUTURE OPTIONS: Ecapsulated postscript format changing plotting area HISOTRY: 4-apr-2008 cg, added optional keywords for postscript file size and file size units SEE ALSO: "popen","pclose" CREATED BY: Davin Larson LAST MODIFICATION: @(#)print_options.pro 1.16 97/05/30
(See general/misc/print_options.pro)
Procedure: print_tinfo Purpose: prints info on a tplot variable, including dimensions and what each dimension represents Input: tplot_name: name of the tplot variable to print info on; also accepts tplot variable # Keywords: time: show the first and last times in the variable help: show the output of help, /structure, data and help, /structure, dlimits for the variable Note: This procedure assumes that there haven't been any modifications to the structure of the tplot variable; i.e., if you transpose the order of the indices in d.Y manually using get_data, store_data, this routine will not know that (and will incorrectly report the 'data format') Example: MMS> print_tinfo, 'mms1_hpca_hplus_phase_space_density' *** Variable: mms1_hpca_hplus_phase_space_density ** Structure <221f3690>, 4 tags, length=165121216, data length=165121212, refs=1: X DOUBLE Array[20456] Y DOUBLE Array[20456, 63, 16] V1 DOUBLE Array[16] V2 FLOAT Array[63] Data format: [Epoch, mms1_hpca_ion_energy, mms1_hpca_polar_anode_number] v1: mms1_hpca_polar_anode_number v2: mms1_hpca_ion_energy $LastChangedBy: egrimes $ $LastChangedDate: 2018-02-20 09:49:14 -0800 (Tue, 20 Feb 2018) $ $LastChangedRevision: 24751 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/print_tinfo.pro $
(See general/misc/print_tinfo.pro)
FUNCTION: PTRACE() PURPOSE: Returns a string that provides the current program location. KEYWORDS: OPTION: The value of the option is retained in a common block OPTION=0 : returns null string OPTION=1 : returns highest level routine name. OPTION=2 : returns highest level routine name (indented). OPTION=3 : returns all levels Usage: Generally useful for debugging code and following code execution. Example: if keyword_set(verbose) then print,ptrace(),'X=',x Written: Jan 2007, D. Larson
(See general/misc/ptrace.pro)
NAME: ptr_extract Function: ptrs = ptr_extract(p,EXCEPT=EXCEPT) Purpose: Recursively searches the input (of any type) and returns an array of all pointers found. This is useful for freeing pointers contained within some complicated structure heirachy or pointer list. if no pointers are found then a scaler null pointer is returned. This routine ignores object pointers! Keywords: EXCEPTPTRS = an array of pointers that should not be included in the output. Created by Davin Larson. May 2002.
(See general/misc/ptr_extract.pro)
NAME: pwrspc PURPOSE: Called with times time and data quantity, PWRSPC returns a power spectrum power at frequencies freq. A Hanning window is applied to the input data, and its power is divided out of the returned spectrum. A straight line is subtracted from the data to reduce spurious power due to sawtooth behavior of a background. UNITS ARE (UNITS)^2 WHERE UNITS ARE THE UNITS OF quantity. freq is in 1/timeunits. THUS THE OUTPUT REPRESENTS THE MEAN SQUARED AMPLITUDE OF THE SIGNAL AT EACH SPECIFIC FREQUENCY. THE TOTAL (SUM) POWER UNDER THE CURVE IS EQUAL TO THE MEAN (OVER TIME) POWER OF THE OSCILLATION IN TIME DOMAIN. NOTE: IF KEYWORD notperhz IS SET, THEN POWER IS IN UNITS^2. If notset power is (as normal) in UNITS^2/Hz. CALLING SEQUENCE: pwrspc, time, quantity, freq, power, noline = noline, $ nohanning = nohanning, bin = bin, notperhz = notperhz INPUT: time = the time array quantity = the function for which you want to obtain a power spectrum OUTPUT: freq = the frequency array (units =1/time units) power = the power spectrum, (units of quantity)^2/frequency_units KEYWORDS: noline = if set, no straight line is subtracted nohanning = if set, then no hanning window is applied to the input bin = a binsize for binning of the data, the default is 3 notperhz = if set, the output units are simply the square of the input units err_msg = named variable that contains any error message that might occur $LastChangedBy: jimm $ $LastChangedDate: 2018-06-20 11:48:31 -0700 (Wed, 20 Jun 2018) $ $LastChangedRevision: 25376 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/pwrspc.pro $
(See general/misc/pwrspc.pro)
NAME: READ_ASCII_CMDLINE PURPOSE: Read data from an ASCII file into IDL. CATEGORY: Input/Output. CALLING SEQUENCE: data = READ_ASCII(file) INPUTS: file - Name of file to read. INPUT KEYWORD PARAMETERS: record_start - 1st sequential "record" (see DESCRIPTION) to read. Default = 0 (the first record of the file). num_records - Number of records to read. Default = 0 = Read up to and including the last record. template - ASCII file template (e.g., generated by function ASCII_TEMPLATE) describing attributes of the file to read. Specific attributes contained in the template may be overridden by keywords below. Default = (see the keywords below). start_line - Number of lines of header to skip. Default (if no template) = 0L. (NOTE: this keyword name has been changed from the IDL read_ascii routine. It was data_start.) delimiter - Character that delimits fields. Default (if no template) = '' = use fields(*).loc. missing_value - Value to replace any missing/invalid data. Default (if no template) = !VALUES.F_NAN. comment_symbol - String identifying comments (from comment_symbol to the next end-of-line). Default (if no template) = '' = no comments. field_types - An array of the field (column) IDL data type. This array can be either a string array or a long array. Example: ['string', 'double', 'double'] or [7,5,5]. Valid types are ['int', 'long', 'float', 'double', 'string', 'structure'] or [2, 3, 4, 5, 7, 8] field_names - An array of the names for each field or column. Default values are Field01, Field02, Field03, ..... Fieldnn. field_locations - An array of the start positions of each column. Default values are zero and the procedure will try to figure it out. field_groups - An array of fields that are common to a group. [Note: The 'fields' keyword has not been implemented yet.] fields - Descriptions of the data fields, formatted as an array of structures containing the tags: name = name of the field (string) type = type of field as returned by SIZE (long) loc = offset from the beginning of line to the start of the field (long) group = sequential group the field is in (int) Default (if no template) = {name:'field', type:4L, loc:0L, group:0}. verbose - If set, print runtime messages. Default = Do not print them. OUTPUT KEYWORD PARAMETERS: header - The header read (string array of length data_start). If no header, empty string returned. count - The number of records read. OUTPUTS: The function returns an anonymous structure, where each field in the structure is a "field" of the data read (see DESCRIPTION). If no records are read, 0 is returned. COMMON BLOCKS: None. SIDE EFFECTS: None. RESTRICTIONS: See DESCRIPTION. DESCRIPTION: ASCII files handled by this routine consist of an optional header of a fixed number of lines, followed by columnar data. Files may also contain comments, which exist between a user-specified comment string and the corresponding end-of-line. One or more rows of data constitute a "record." Each data element within a record is considered to be in a different column, or "field." Adjacent fields may be "grouped" into multi-column fields. The data in one field must be of, or promotable to, a single type (e.g., FLOAT). EXAMPLES: ; Using default file attributes. data = READ_ASCII(file) ; Setting specific file attributes. data = READ_ASCII(file, START_LINE=10) ; Using a template to define file attributes. data = READ_ASCII(file, TEMPLATE=template) ; Using a template to define file attributes, ; and overriding some of those attributes. data = READ_ASCII(file, TEMPLATE=template, START_LINE=10) ; Using the ASCII_TEMPLATE GUI to generate a template in place. data = READ_ASCII(file, TEMPLATE=ASCII_TEMPLATE(file)) [Note: The 'fields' keyword has not been implemented yet.] ; An example defining fields by hand. fields = REPLICATE({name:'', type:0L, loc:0L, group:0}, 2, 3) num = N_ELEMENTS(fields) fields(*).name = 'field' + STRTRIM(STRING(INDGEN(num) + 1), 2) fields(*).type = REPLICATE(4L, num) fields(*).loc = [0L,10L, 0L,15L, 0L,12L] fields(*).group = INDGEN(num) data = READ_ASCII(file, FIELDS=fields) [Note: The 'fields' keyword has not been implemented yet.] ; Another example defining fields by hand. void = {sMyStructName, name:'', type:0L, loc:0L, group:0} fields = [ [ {sMyStructName, 'frog', (SIZE(''))(1), 0L, 0}, $ {sMyStructName, 'bird', (SIZE(0 ))(1), 15L, 1} ], $ [ {sMyStructName, 'fish', (SIZE(0.))(1), 0L, 2}, $ {sMyStructName, 'bear', (SIZE(0D))(1), 15L, 3} ], $ [ {sMyStructName, 'boar', (SIZE(0B))(1), 0L, 4}, $ {sMyStructName, 'nerd', (SIZE(OL))(1), 15L, 5} ] ] data = READ_ASCII(file, FIELDS=fields) DEVELOPMENT NOTES: - See ???,xxx in the code. - Error check input 'delimiter' to be a string (not a byte). - Implement the 'fields' keyword. MODIFICATION HISTORY: AL & RPM, 8/96 - Written. PCS, 3/99 - Deploy STRTOK and other new commands. Gain some speed. CT, Aug 2003: Free up temp pointers if an error occurs. clrussell 10-01-12 - Added five keywords field_count, field_types, field_names, field_locations, field_groups. These keywords were added so the user could specify these mixed data types without having to use a template.
(See general/misc/read_ascii_cmdline.pro)
FUNCTION: root_data_dir PURPOSE: Returns the root data directory used by numerous file retrieval procedures. By default it returns either: for unix: '/disks/data/' if it exists, '~/data/' otherwise for Windows: 'c:/data/' if it exists; else 'e:/data/' if it exists, else 'c:/data/' regardless. These data sets can grow to very large size. These defaults are intended to allow multiple users to share a common data directory system. It is recommended that PC users create a separate partition (e:/data/) to store files so that disk backups do not have to include these large (easily replaced) files. On unix systems, it is recommended to create a common directory with global write permission that multiple users can share. This will reduce internet traffic and disk storage requirements for users that use common data files. CHANGING THE DEFAULT: The default directory can be changed by creating an environment variable: 'ROOT_DATA_DIR' Example 1: setenv,'ROOT_DATA_DIR=/mydata/' Example 2: A temporary directory: setenv,'ROOT_DATA_DIR=' + getenv('IDL_TMPDIR') + 'data/' ; trailing '/' IS required. If the value of the environment variable ROOT_DATA_DIR is a list of directories, then the first existing directory is returned. Notes: 1) The environment variable should be set prior to running initialization routines (put it in your IDL_STARTUP file) 2) The trailing '/' is required! PC users should also use '/' (not backslash: '\') 3) The total size of all files can grow immense and there is no need to back them up. We suggest placing them on a partition that is not backed up 4) File storage space can be shared with other users if a commonly accessible data directory is chosen. 5) Use a temporary directory if you do not want to permanently store these cached files. 6) The root data directory should be writable by all. This routine is called by: wind_init istp_init stereo_init lanl_spa_load thm_config (through thm_init) $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/root_data_dir.pro $
(See general/misc/root_data_dir.pro)
NAME: scpot_overlay PURPOSE: Overlays a spacecraft potential (or similar line function) over a spectrogram CALLING SEQUENCE: cvar = scpot_overlay(pvar, svar) INPUT: pvar = a tplot variable containing the spacecraft potential svar = a tplot variable containing a spectrogram OUTPUT: cvar = a compound tplot variable name containing the combined spectrum variable with the SC pot overlaid. KEYWORDS: sc_line_color = if set, use this color for SCPOT sc_line_thick = if set, use this line thickness for SCPOT sc_line_style = if set, use this line_style for SCPOT scale_scpot = if set, then scale the scpot to the max and min of the spectrogram y-range use_yrange = if set, scale using the yrange range for the spectrogram, if not set, use min and max of data.v. zero_line = if set, add a line for zero potential suffix = suffix for output variable HISTORY: 3-sep-2013, jmm, jimm@ssl.berkeley.edu 29-jan-2016, jmm, must have lost the suffix keyword, replaced it. $LastChangedBy: jimm $ $LastChangedDate: 2016-01-29 11:44:34 -0800 (Fri, 29 Jan 2016) $ $LastChangedRevision: 19841 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/scpot_overlay.pro $
(See general/misc/scpot_overlay.pro)
PROCEDURE: setbp, module This procedure will set BREAKPOINTS at all lines within a program module file that contain the string: ";bp" A conditional break point is set with ;bpif condition statement Input: module (string) Purpose: This is a DEBUGGING tool that is used to set breakpoints. Keywords: /FUNCTION Set this keyword if module is a function. Author: Davin Larson 2007
(See general/misc/setbp.pro)
PROCEDURE: share_colors PURPOSE: Procedure that allows multiple IDL sessions to share the same color table. The procedure should be called in each session before any windows are created. USAGE: Typically this procedure will be put in a startup routine. such as: share_colors,first=f if f then loadct,39 KEYWORDS: FIRST Named variable that will be set to 1 if this is the first session, and set to 0 otherwise. SIDE EFFECTS: Creates a temporary file with the name 'idl_cmap:NAME' on the users home directory where NAME is the name of the display machine. This file is deleted upon exiting IDL. The procedure is only useful on UNIX for users with a common home directory.
(See general/misc/share_colors.pro)
Simple 1d despike, hacked from SXI_despike CALLING SEQUENCE: result=simple_despike_1d(image) INPUTS: image = 1-D image array (float or integer) to be cleaned OUTPUTS: result = Cleaned 1-D image array (float) KEYWORDS: spike_threshold = Median filter threshold for good pixel map width = width of median filter in each direction, default is 3 points use_nan = if set, instead of using the median value as a replacement for a spike, insert a NaN value jmm, 2013-02-12, testing SVN messaging jmm, 2013-02-12, testing SVN messaging, yet again $LastChangedBy: jimm $ $LastChangedDate: 2014-02-12 13:21:15 -0800 (Wed, 12 Feb 2014) $ $LastChangedRevision: 14361 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/simple_despike_1d.pro $
(See general/misc/simple_despike_1d.pro)
NAME: smooth_in_time PURPOSE: Runs smooth for irregular grids, after regularising grid CALLING SEQUENCE: ts = smooth_in_time(array, time_array, dt, /backward, /forward, /double, /no_time_interp) INPUT: array = a data array, can be 2-d (ntimes, n_something_else), the first index is smoothed or averaged. time_array = a time array (in units of seconds) dt = the averaging time (in seconds) KEYWORDS: backward = if set, perform an average over the previous dt, the default is to average from t-dt/2 to t_dt/2 forward = if set, perform an average over the next dt double = if set, do calculation in double precision regardless of input type. (If input data is double calculation is always done in double precision) no_time_interp = if set, do *not* interpolate the data to the minimum time resolution. The default procedure is to interpolate the data to a regularly spaced grid, and then use ts_smooth to get the running average. This alternative can be slow. smooth_nans = if set, replace Nan values in the input array with the average values calculated using the ts_smooth process. This has not been implemented for the no_time_interp option. true_t_integration = if set, subtract 1/2 of the end points of the integration from each value, to obtain the value for an integration over time of the appropriate interval. This has not been implemented for the no_time_interp option. Ths is created for the high_pass_filter. interp_resolution = If time interpolation is being used, set this option to control the number of seconds between interpolated samples. The default is to use the value of the smallest separation between samples. Any number higher than this will sacrifice output resolution to save memory. (NOTE: This option will not be applied if no interpolation is being performed because either (1) no_time_interp is set or (2) the sample rate of the data is constant) dtx_min_fraction = When interp_resolution is not set, the default is to use the value of the smallest separation between samples, with the caveat that this value of smallest separation has to occur relatively frequently. Dtx_min_fraction is used to get an effective value for the minimum of the input time resolution. If a suspected minimum value occurs less than dtx_min_fraction times the peak of a histogram of time resolutions, it is discarded. The default value is 0.10 interactive_warning = if keyword is set pops up a message box if there are memory problems and asks the user if they would like to continue interactive_varname = set this to a string indicating the name of the quantity to be used in the warning message. warning_result = assign a named variable to this keyword to determine the result of the computation display_object = Object reference to be passed to dprint for output. OUTPUT: ts = the data array smoothed or averaged HISTORY: 13-mar-2008, jmm, jimm@ssl.berkeley.edu, hacked from high_pass_filter.pro and added ts_smooth as the default 13-mar-2008, ts_smooth is way too slow, just uses smooth.pro now 6-may-2008, jmm, added sort for input data for cases with non-monotonic time_arrays 23-apr-2008, pcruce, Added padding for no_time_interp option, added _extra keyword 28-apr-2008, pcruce, Added interp_resolution option, added memory warning, mod to guarantee that precision of output is at least as large as precision of input $LastChangedBy: jimmpc1 $ $LastChangedDate: 2012-06-28 13:25:02 -0700 (Thu, 28 Jun 2012) $ $LastChangedRevision: 10658 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/smooth_in_time.pro $
(See general/misc/smooth_in_time.pro)
NAME: sm_ns_model PURPOSE: This routine calculates the NS position along the zaxis at a specific x and y location. CALLING SEQUENCE: zNS=sm_ns_model(time, position) or dz2NS=sm_ns_model(time, position, /sc2ns) INPUT: time - string or double format double(s) seconds since 1970 string(s) format: YYYY-MM-DD/hh:mm:ss gsm_pos - position vector in GSM coordinates in re (pos[*,3]) OUTPUT: returns Z displacement of the neutral sheet above or below the XY plane in Re (zgsm of the NS) Value is positive if NS is above z=0 gsm plane, negative if below KEYWORDS sc2NS - if set returns Z displacement from the spacecraft to the neutral sheet Value is positive if the NS is northward of the SC location, and negative if below NOTES: For the nominal mission, THEMIS used this model for the inner probes HISTORY:
(See general/misc/neutral_sheet.pro)
Procedure: space_bar Purpose: generates a horizontal bar stored in a tplot variable that is used to adjust the spacing between tplot variables in plots Arguments: n(positional,required): a double representing the height of the space bar newname(keyword,optional): the name you want the bar to have(default: 'space_bar') $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/space_bar.pro $
(See general/misc/space_bar.pro)
NAME: spd_default_local_data_dir PURPOSE: Returns the default data directory for file downloads for varius projects. It is used for the GUI configuration settings. Simplified replacement for root_data_dir CALLING SEQUENCE: spd_default_local_data_dir INPUT: none OUTPUT: (string) Directory in user's home path HISTORY: $LastChangedBy: egrimes $ $LastChangedDate: 2016-11-16 08:19:37 -0800 (Wed, 16 Nov 2016) $ $LastChangedRevision: 22362 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/spd_default_local_data_dir.pro $
(See general/misc/spd_default_local_data_dir.pro)
NAME: ssl_check_valid_name PURPOSE: Checks a string or array input against another array to find matches. CALLING SEQUENCE: ok_names = ssl_check_valid_name(names, valid_names) INPUT: names: String or string array to be checked valid_names: String array specifying valid values OUTPUT: return value: String array containing the subset set of input names determined to be valid. A null string is returned if no matches are found. KEYWORDS: include_all: if set, include 'all' in the possible datanames ignore_case: if set converts all inputs loose_interpretation: if set, adds wild card '*'s to each end of the input names no_warning: if set, do not issue a warning if the input is invalid invalid: returns string array containing non-valid names or a null string returned if all match, if the TYPE keyword is set then a full error message will be returned type: input string denoting what type of input is being check, will be used for error reporting (e.g. 'data type', 'probe', ...) HISTORY: 22-jan-2007, jmm, jimm@ssl.berkeley.edu 11-feb-2007, jmm, Added loose_interpretation keyword 30-apr-2015, af, Moved to general branch $LastChangedBy: aaflores $ $LastChangedDate: 2015-04-30 15:31:31 -0700 (Thu, 30 Apr 2015) $ $LastChangedRevision: 17459 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/ssl_check_valid_name.pro $
(See general/misc/ssl_check_valid_name.pro)
NAME: ssl_correlate_tplot PURPOSE: Identified the amount of shift required to correlate two time series tplot variables and stores the result in a tplot variable. Only compares 1-d to 1-d data at a time So for example you can, compare the fge x and the fgl_x but can't do all three at a time. Works by binning the timeseries data, then calculating the time shift required to maximally correlate each bin. When too few points overlap bins are rejected. CATEGORY: THEMIS-SOC CALLING SEQUENCE: pro thm_correlate_tplot,var1_name, var1_y_dim, var2_name, var2_y_dim, 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: var1_name: the tplot name of the first variable to be compared var1_y_dim: the numerical dimension of the first tplot y_var to look at(from 0 to n-1) var2_name: the tplot name of the second variable to be compared var2_y_dim: the numerical dimension of the second tplot y_var to look at(from 0 to n-1) 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:.9) point_number: optional, the minimum number of points of overlap necessary to try correlating a bin(default:200) lag_step_number: optional, checks plus or minus lag_steps * time steps to correlate the vectors (default:64) time_step_size: optional, the size of the time step to use when interpolating and correlating the vectors, in seconds(default:1/128 seconds) bin_size: optional, the size of each bin in seconds (default:60 seconds) OUTPUTS: stores the time and the shift values in the select 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-05-24 V1.0 ;$LastChangedBy: lphilpott $ $LastChangedDate: 2012-06-25 15:20:30 -0700 (Mon, 25 Jun 2012) $ $LastChangedRevision: 10638 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/ssl_correlate_tplot.pro $ KNOWN BUGS:
(See general/misc/ssl_correlate_tplot.pro)
NAME: ssl_correlation_shift PURPOSE: Calculates the shift required to correlate two tme series of data. Does this by binning the timeseries data, then calculating the time shift required to maximally correlate each bin. When too few points overlap bins are rejected. CATEGORY: THEMIS-SOC CALLING SEQUENCE: lag_time_series = thm_correlation_shift(var1_time_series,var2_time_series) INPUTS: var1_time_series: a 2xn matrix(column major) of n time/value pairs for var1 var2_time_series: a 2xn matrix(column major) of n time/value pairs for var2 n_pts: optional, the minimum number of points of overlap necessary to try correlating a bin lag_steps: optional, checks plus or minus lag_steps * time steps to correlate the vectors time_step: optional, the size of the time step to use when interpolating and correlating the vectors bin_size: optional, the size of each bin in seconds OUTPUTS: an 3xn matrix(column major) of time/shift/correlation triplets or -1L on failure, the output n is the number of bins constructed KEYWORDS: COMMENTS: This function will probably die horribly if time values are not monotonic. PROCEDURE: EXAMPLE: MODIFICATION HISTORY: Written by: Jim Lewis 2007-04-19 Initial version Updated by: Patrick Cruce(pcruce@gmail.com) 2007-05-22 V2.0 $LastChangedBy: lphilpott $ $LastChangedDate: 2012-06-25 15:20:30 -0700 (Mon, 25 Jun 2012) $ $LastChangedRevision: 10638 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/ssl_correlation_shift.pro $
(See general/misc/ssl_correlation_shift.pro)
Purpose: Calculates the complement of l2 - l1 (ie set difference) Arguments: l1 subset,l2 superset Notes: empty set is -1L all inputs must be empty set or arrays all outputs will be empty set or arrays Arrays must be of homogenous type
(See general/misc/ssl_set_complement.pro)
Purpose: Performs an intersection of two sets Parameters: l1,l2 sets(arrays) for which the intersection is calculated Returns: -1L on empty set, otherwise intersection of the two sets Notes: empty set is -1L Input arrays cannot contain repeated values all inputs must be empty set or arrays all outputs will be empty set or arrays Arrays must be of homogenous type
(See general/misc/ssl_set_intersection.pro)
Procedure: ssl_set_symbol Purpose: 1) Set the user defined plotting symbol to be used with psym=8, or 2) Return a graphics object of the specified symbol Calling Sequence: ssl_set_symbol, index [,fill=fill] [,size=size] [,fail=fail] [,object=object, [,obj_size=obj_size] [,color=color]] Arguments: INDEX: Number of the symbol that is desired: 1: Plus sign 2: Star 3: Circle 4: Diamond 5: Triangle 6: Square 7: X 42: Lemniscate FILL: Flag to fill the symbol (solid) SIZE: Number specifying the size of the symbol (default=1.0) (not valid if used with OBJECT) OBJECT: If called this keyword will return an IDLgrSymbol object of the requested type OBJ_SIZE: Two element array specifying the returned graphics object's x and y size respecively. COLOR: The color of the returned graphics object; may be specified as an index or as a three-element vector [red, green, blue]. FAIL: This keword will contain a message if any errors are encountered Examples: Set to a filled circle: ssl_set_symbol, 3, /fill Set to an large, unfilled triangle: ssl_set_symbol, 5, size = 5 Get IDLgrSymbol for a filled diamond: ssl_set_symbol, 4, obj=obj, /fill Caveats: Non-fillable symbols such as Asterisks and Plus Signs will not return graphics objects if /fill is set. Other: This routine was primarily developed as a method of drawing filled symbols; however, any number of custom symbols may be added by specifying the x and y variables in the main case statment.
(See general/misc/ssl_set_symbol.pro)
FUNCTION ssl_set_union(set1,set2) Purpose: returns the union of two sets Notes: empty set is -1L all inputs must be empty set or arrays all outputs will be empty set or arrays Arrays must be of homogenous type
(See general/misc/ssl_set_union.pro)
PROCEDURE: ssl_time_check.pro PURPOSE: prints information about gaps between timestamps in cdf files INPUT: dir: The directory in which to search for cdfs out: the output directory for the limit files LIM: reassign the limit if you want it is a 2 element array MNEM: optional regex to filter timestamp mnems KEYWORDS: none COMMENTS: Will check all timestamps for all cdfs in the directory and output a seperate file for each type of timestamp. File format is: timestamp1 timestamp2 gap_size record_number currently it signals a gap if a gap is over 180 seconds or negative EXAMPLE: ssl_time_check,'/','/dev/null' CREATED BY: Patrick Cruce (pcruce@gmail.com) $LastChangedBy: crussell $ $LastChangedDate: 2012-05-15 14:43:24 -0700 (Tue, 15 May 2012) $ $LastChangedRevision: 10431 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/ssl_time_check.pro $
(See general/misc/ssl_time_check.pro)
FUNCTION: res = strfilter(stringarray,searchstring) PURPOSE: Returns the subset of stringarray that matchs searchstring '*' will match all (non-null) strings '' will match only the null string Output can be modified with keywords NOTE: this routine is very similar to the STRMATCH routine introduced in IDL 5.3 it has some enhancements that make it useful. (i.e.: filterstring can also be an array) INPUT: stringarray: An array of strings to be filtered searchstring: A string that may contain wildcard characters ("*") (If searchstring is an array then results are OR'd together) RETURN VALUE: Either: Array of matching strings. or: Array of string indices. or: Byte array with same dimension as input string. Depends upon keyword setting (See below) KEYWORDS: FOLD_CASE: if set then CASE is ignored. (only IDL 5.3 and later) STRING: if set then the matching strings are returned. (default) INDEX: if set then the indices are returned. BYTES: if set then a byte array is returned with same dimension as input string array (similar to STRMATCH). NEGATE: pass only strings that do NOT match. DELIMITER: Set this to a delimiter that will break searchstring into an array of searchstrings COUNT: A named variable that will contain the number of matched strings. NO_MATCH: A named variable that will contain either a subset of searchstring that failed to match stringarray, an array of indices to that subset, or a byte array whose dimensions match the number of elements in searchstring. The data type returned will match that of the return value. (only IDL 5.3 and later) Limitations: This function still needs modification to accept the '?' character July 2000; modified to use the IDL strmatch function so that '?' is accepted for versions > 5.4 EXAMPLE: Print,strfilter(findfile('*'),'*.pro',/negate) ; print all files that do NOT end in .pro AUTHOR: Davin Larson, Space Sciences Lab, Berkeley; Feb, 1999 VERSION: 01/10/08
(See general/misc/strfilter.pro)
NAME: string_parser PURPOSE: Parse strings into components CALLING SEQUENCE: string_parser, inpx, parse_by, out, output_count INPUT: inpx strings to parse parse_by character to parse by OUTPUT: out array of substrings output_count number of substrings HISTORY: Updated 22-April-1993 by Terry Slocum Fixed output_count bug, 28-mar-94, JMM Gave the ability to use a parse_by string of more than one character, jmm 13-jun-2007
(See general/misc/tuserdef.pro)
FUNCTION: STRIPPATH DESCRIPTION: Function that strips off any directory components from a full file path, and returns the file name and directory components seperately in the structure: {file_cmp_str,file_name:'file',dir_name:'dir'} This is only implemented for UNIX at this time. USAGE (SAMPLE CODE FRAGMENT): ; find file component of /usr/lib/sendmail.cf stripped_file = STRIPPATH('/usr/lib/sendmail.cf') The variable stripped_file would contain: stripped_file.file_name = 'sendmail.cf' stripped_file.dir_name = '/usr/lib/' REVISION HISTORY: $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/strippath.pro $ Originally written by Jonathan M. Loran, University of California at Berkeley, Space Sciences Lab. Oct. '92 Updated to use IDL 6.0 features for cross-platform usability.
(See general/misc/strippath.pro)
FUNCTION: struct_value(struc,name,default=default,index=index) PURPOSE: Returns the value of a structure element. Function equivalent to the procedure: "STR_ELEMENT" if "name" is an array then a new structure is returned with only the named values. Author: Davin Larson, 2006
(See general/misc/struct_value.pro)
PROCEDURE: str_element, struct, tagname, value PURPOSE: Find (or add) an element of a structure. Input: struct, generic structure tagname, string (tag name) Output: value, Named variable in which value of the structure element is returned. Purpose: Retrieves the value of a structure element. This function will not produce an error if the tag and/or structure does not exist. KEYWORDS: SUCCESS: Named variable that will contain a 1 if the element was found or a 0 if not found. INDEX: a named variable in which the element index is returned. The index will be -2 if struct is not a structure, -1 if the tag is not found, and >= 0 if successful. ADD_REPLACE: Set this keyword to add or replace a structure element. DELETE: Set this keyword to delete the tagname. CLOSEST: Set this keyword to allow near matchs (useful with _extra) VALUE: (obsolete) alternate method of returning value. (Will not work with recursion) Notes: 1. Value remains unchanged if the structure element does not exist. 2. If tagname contains a '.' then the structure is recursively searched and index will be an array of indices. 3. If struct is an array then results may be unpredictable. 4. Elements may be inserted into embedded structures, by including the embedded structure name in the tagname string.(example below) Examples: Does an element exist? str_element,my_str,'my_tag_name',SUCCESS=s What is an element's value? str_element,my_str,'my_tag_name',v Add an element str_element,my_str,'my_tag_name','value',/add Add an element to embedded structure: str_element,my_str,'my_substr_name.my_tag_name','value',/add Modifications: 5/7/97: Added recursive searching of structure hierarchy. D. Larson 2014-1-20 : Added mulidimensional elements for arrays of structures CREATED BY: Davin Larson FILE: str_element.pro VERSION 1.10 LAST MODIFICATION: 01/10/08 CREATED BY: Davin Larson $LastChangedBy: egrimes $ $LastChangedDate: 2016-11-02 13:38:33 -0700 (Wed, 02 Nov 2016) $ $LastChangedRevision: 22260 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/str_element.pro $
(See general/misc/str_element.pro)
FUNCTION: TAG_NAMES_R(STRUCTURE, [TYPE=dt] ) PURPOSE: Very similar to the TAG_NAMES function but recursively obtains all structure names within imbedded structures as well. INPUT: STRUCTURE: A structure typically. If input is not a structure then a null string is returned KEYWORDS: TYPE=var; Named variable in which to return and array of data types. RETURNS: Returns an array of strings
(See general/misc/tag_names_r.pro)
NAME: tclip PURPOSE: Wrapper for xclip.pro allowing input of tplot variable names. IMPORTANT NOTE: The Y values of the tplot variable are cliped using tclip, Not Time. TO clip the time range of a tplot variable, use the program TIME_CLIP.PRO. CALLING SEQUENCE: tclip, varnames, amin, amax, _extra=_extra INPUT: varnames = an array (or scalar) of tplot variable names amin, amax = the minumum and maximum values KEYWORDS: flag = the value that clipped data are set to, the default is -0.0/0.0 (NaN) newname = if set,give these names to the clipped data, the default is to append '_clip' to the input names and pass out the names in the newname variables, Unless /overwrite is set. This will not work for wild card input. overwrite = if set, write the new data back to the old tplot variables, do not set this with newname display_object = Object reference to be passed to dprint for output. HISTORY: 2-feb-2007, jmm, jimm.ssl.berkeley.edu $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/tclip.pro $
(See general/misc/tclip.pro)
NAME: tcs_is_array PURPOSE: Helper function: tests if argument is array, 1L on success 0L on failure ;$LastChangedBy: lphilpott $ $LastChangedDate: 2012-06-25 15:20:30 -0700 (Mon, 25 Jun 2012) $ $LastChangedRevision: 10638 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/tcs_is_array.pro $
(See general/misc/tcs_is_array.pro)
NAME: tdeflag PURPOSE: wapper for xdeflag.pro allowing input of tplot variable names CALLING SEQUENCE: tdeflag, varnames, method, newname = newname, $ overwrite = overwrite, _extra = _extra INPUT: varnames = an array (or scalar) of tplot variable names method = set to "remove_nan", this will remove any NaN (or infinite) values from the data (potentially returning shortened or empty arrays) set to "repeat", this will repeat the last good value. set to "linear", then linear interpolation is used, but for the edges, the closest value is used, there is no extrapolation KEYWORDS: flag = all values greater than 0.98 times this value will be deflagged, the default is 6.8792e28, Nan's, Inf's are also deflagged maxgap = the maximum number of rows that can be filled? the default is n_elements(t) newname = if set, give these names to the deflagged data, the default is to append '_deflag' to the input names and pass out the names in the newname variables, Unless /overwrite is set overwrite = if set, write the new data back to the old tplot variables, do not set this with newname display_object = Object reference to be passed to dprint for output. HISTORY: 2-feb-2007, jmm, jimm.ssl.berkeley.edu $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/tdeflag.pro $
(See general/misc/tdeflag.pro)
NAME: tdegap PURPOSE: wrapper for xdegap.pro allowing input of tplot variable names CALLING SEQUENCE: tdegap, varnames, dt=dt, margin=margin, maxgap=maxgap,$ newname=newname, overwrite=overwrite INPUT: varnames = an array (or scalar) of tplot variable names KEYWORDS: dt = the nominal time resolution of the data that will be inserted, the default is to choose the median of the input time array margin = the margin used to determine if a gap is big enough, the default is 0.25 seconds maxgap = the maximum gap size that will be allowed to be filled, in units of dt. the default is to set this to the max number of data points (TDEGAP degaps anything that is greater than dt+margin and less than maxgap*dt) newname = if set,give these names to the degapped data, the default is to append '_degap' to the input names and pass out the names in the newname variables, Unless /overwrite is set overwrite = if set, write the new data back to the old tplot variables, do not set this with newname (Keywords passed to XDEGAP:) nowarning = if set, suppresses warnings flag = A numeric user-specified value to use for flagging gaps. Defaults to a floating NaN. If an array is entered, only the first element is considered.If a non-numeric datatype is entered, its value is ignored. onenanpergap = Fill gaps with only one NaN -> useful for conserving memory. Also, for reference concerning post-processing, the INTERPOL function propagates a single NaN just as it would many NaNs. display_object = An object reference to be passed to dprint for output. output_message = Passes any messages generated up to the calling procedure as an array of strings HISTORY: 9-apr-2007, jmm, jimm.ssl.berkeley.edu 10-oct-2008, jmm, Degaps v tags if necessary Added output_message keyword Feb-02-2011 prc $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/tdegap.pro $
(See general/misc/tdegap.pro)
Name: TDESPIKE_AE Purpose: This routine removes artificial spikes. Note that it is ONLY meant to be used for the calculation of the 'THEMIS AE index' in the overview plots. Variable: lower = lower cutoff of spikes to be removed upper = upper cutoff of spikes to be removed Keywords: none Example: tdespike_AE, -2000.0, 1500.0 Notes: Written by Andreas Keiling, 29 August 2007 $LastChangedBy: aaflores $ $LastChangedDate: 2009-08-03 10:43:14 -0700 (Mon, 03 Aug 2009) $ $LastChangedRevision: 6516 $ $URL $
(See general/misc/tdespike_ae.pro)
NAME: tdpwrspc PURPOSE: wapper for dpwrspc.pro allowing input of a tplot variable name CALLING SEQUENCE: tdpwrspc, varname, newname=newname,_extra=_extra INPUT: varname = one tplot variable name KEYWORDS: newname = if set,give this name to the new data, the default is to append '_dpwrspc' to the input name and pass out the name in the newname variable, Unless /overwrite is set. Note that if a multi-dimensional variable is passed in, the newname keyword is not used. overwrite = if set, write the new data back to the old tplot variable, do not set this with newname nboxpoints = the number of points to use for the hanning window, the default is the closest power of 2 less than the number of points divided by 32 nshiftpoints = the number of points to shift the hanning window per-step, the default in nboxpoints/2 bin = a binsize for binning of the data along the frequency domain, the default is 3 tbegin = a start time, the default is time[0] tend = an end time, the default is time[n_elements(time)-1] noline = if set, no straight line is subtracted nohanning = if set, then no hanning window is applied to the input notperhz = if set, the output units are simply the square of the input units HISTORY: 27-mar-2007, jmm, jimm.ssl.berkeley.edu 10-apr-2007, jmm, fixed 2 bugs wrt structure definition $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/tdpwrspc.pro $
(See general/misc/tdpwrspc.pro)
NAME: themis_NS_model PURPOSE: This routine calculates the position along the zaxis at a specific x and y location. The themis model is used for this calculation. The themis model uses z-sm (converted from z-gsm) for the inner probes and the Hammond model for the outer probes. INPUT: time - string or double format double(s) seconds since 1970 string(s) format: YYYY-MM-DD/hh:mm:ss gsm_pos - position vector in GSM coordinates in re (pos[*,3]) OUTPUT: returns Z displacement of the neutral sheet above or below the XY plane in Re (zgsm of the NS) Value is positive if NS is above z=0 gsm plane, negative if below KEYWORDS sc2NS - if set returns Z displacement from the spacecraft to the neutral sheet Value is positive if the NS is northward of the SC location, and negative if below NOTES; Reference: The themis model uses z-sm (converted from z-gsm) for the inner probes and the Hammond model (default) for the outer probes. The algorithm can be found in ssllib neutralsheet.pro. HISTORY:
(See general/misc/neutral_sheet.pro)
PROCEDURE: thigh_pass_filter, varname, dt, newname = newname PURPOSE: Uses high_pass_filter to calculate a running average of the input data and store the data with the running average subtracted in an output tplot variable. INPUT: varname = variable passed to get_data, example - thg_mag_ccnv dt = the averaging time (in seconds) KEYWORDS: newname: set output variable name no_time_interp: Set to save memory by preventing interpolation of time array when smoothing data before subtraction. This option will probably be significantly slower. double: Set so operation is performed at double precision regardless of input type. (If input data is double calculation is always done in double precision) interp_resolution = If time interpolation is being used, set this option to control the number of seconds between interpolated samples. The default is to use the value of the smallest separation between samples. Any number higher than this will sacrifice output resolution to save memory. (NOTE: This option will not be applied if no interpolation is being performed because either (1) no_time_interp is set or (2) the sample rate of the data is constant) interactive_warning = pops up a message box if there are memory problems and asks the user if they would like to continue warning_result = assign a named variable to this keyword to determine the result of the computation display_object = Object reference to be passed to dprint for output. HISTORY: 14-jan-2008, jmm, jimm@ssl.berkeley.edu 06-feb-2008, teq, teq@ssl.berkeley.edu 23-Apr-2009, pcruce, pcruce@igpp.ucla.edu, Added extra keyword support 28-apr-2008, pcruce, Added interp_resolution option, added memory warning, mod to guarantee that precision of output is at least as large as precision of input $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/thigh_pass_filter.pro $
(See general/misc/thigh_pass_filter.pro)
Function: time_average Calculates a bin based average over time series data Uses a histogram internally so it should be pretty quick Arguments: time: the time array for the input timeseries data: the data array for the input timeseries newtime(optional): named variable in which to return the times for each bin upon which an average is calculated trange(optional): a time range over which the average is performed resolution(optional): the size of each bin in seconds ret_total(optional): named variable in which totals for each bin are returned ret_min(optional): named variable in which mins for each bin are returned ret_med(optional): named variable in which medians for each bin are returned $LastChangedBy: aaflores $ $LastChangedDate: 2012-01-24 09:39:41 -0800 (Tue, 24 Jan 2012) $ $LastChangedRevision: 9596 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/time_average.pro $
(See general/misc/time_average.pro)
Procedure: time_clip Purpose: clips a tplot variable between a start time and an end time Inputs: tplot_var_name: the name of the variable to be clipped start_time: the start time for the clipping(double or string) end_time: the end time for the clipping(double or string) Keywords: newname(optional): the name of the output tplot variable otherwise it will be tplot_var_name+'_tclip' tvar(optional): set this keyword and start_time and end_time will be interpreted as the names of tplot variables The start and end times will then be taken from the first and last component of the tplot variables listed replace(optional): set this to replace the tplot variable, rather than create a new one error(optional): set this to a named variable to return the error status of the function, it will return 0 for no error and 1 to signal an error. This may be set to true even if the error was non fatal. Also if you are using globbing to modify many tplot variables it will signal an error if any of the variables failed interior_clip(optional): removes data inside the selected region instead of outside the selected region nan_replace(optional): instead of clipping replaces data with NaNs examples: time_clip,'thb_fgs_gsm','2007-03-23/10:00:00','2007-03-23/12:00:00',newname='thb_fgs_gsm_10t12clip' time_clip,'thb_peem_velocity','thb_fgs_gsm',thb_fgs_gsm',/tvar $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/time_clip.pro $
(See general/misc/time_clip.pro)
FUNCTION: TIME_INTERVALS Purpose: TIME_INTERVALS will generate regular time intervals given a time range This routine was specifically designed to aid in producing file names based on time ranges KEYWORDS: TRANGE: Time range - scaler or two element array. double, string or structure (see time_double(), time_string, time_struct) Generated times will be LESS than or equal to TRANGE[0] and less than TRANGE[1] (may be scaler) RESOLUTION: resolution in seconds MINUTE_RES: Forces RESOLUTION to 60 HOURLY_RES: Forces RESOLUTION to 3600 DAILY_RES: Forces RESOLUTION to 3600*24L MONTHLY_RES: resolution in months. YEARLY_RES: resolution in years PHASE_SHIFT: scaler between 0. and 1. - shifts the starting phase. TIMES: named variable that will return the double precision array of values (same as output if tformat is not specified)) array of times used to generate the output strings. (output if any of above resolutions and TRANGE is set) TIMES is an output if TRANGE is set and any of the resolutions are set. Otherwise is can be used as an input. TFORMAT: (string) format the output and return as a string (See TIME_STRING(t,TFORMAT=tformat)) Examples: times = time_intervals(trange=['2014-12-28','2015-1-3'],/daily_res) filenames = time_intervals(tformat='data/YYYY/MM/example_yyMMDD_v??.dat',trange=['2015','2016'] ,daily_res=7,phase_shift=4/7.,times=t) Generate weekly filenames that start on Mondays: tr =['2014-12-1','2015-1-31'] filenames = time_intervals(trange=tr,daily=7,phase_shift=4/7.,times=t,tformat='file_yyMMDD')+time_intervals(tformat='_yyMMDD_v??.dat',times=t+3600d*24*7) $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/time_intervals.pro $
(See general/misc/time_intervals.pro)
PROCEDURE: time_stamp,charsize=charsize PURPOSE: Prints a time stamp along the lower right edge of the current plot box KEYWORDS: CHARSIZE: The character size to be used. Default is !p.charsize/2. ON: if set, then timestamping is turned on. (No other action taken) OFF: if set, then timestamping is turned off. (Until turned ON)
(See general/misc/time_stamp.pro)
FUNCTION: time_tk_str = time_ticks(timerange,offset) NAME: time_ticks PURPOSE: Returns a structure that can be used to create time ticks for a plot. See "timetick" for more info INPUT: timerange: Two element vector specifying the time range of the plot this input can be obtained from: "time_double", "time_struct" or "time_string" offset: named variable in which offset time is placed. KEYWORDS: NUM_LAB_MIN: minimum number of labels for bottom axis. OUTPUT: a structure that can be used with the _EXTRA keyword of the PLOT routine See Also: "box", "tplot" NOTES: The returned time_tk_str has tags named so that it can be used with the special _EXTRA keyword in the call to PLOT or OPLOT. The offset value that is returned from timetick must be subtracted from the time-axis data values before plotting. This is to maintain resolution in the PLOT routines, which use single precision floating point internally. Remember that if the CURSOR routine is used to read a cursor position from the plot, this offset will need to be added back to the time-axis value to get seconds since 1970-01-01/00:00:00. NOTE: This routine is an enhanced version of the routine "timetick" See this routine for more info on usage WARNING!: This routine does not yet work on very small time scales. CREATED BY: Davin Larson Oct 1996 FILE: time_ticks.pro VERSION: 1.16 LAST MODIFICATION: 02/04/17
(See general/misc/time_ticks.pro)
Function: tinterpol Purpose: Wrapper for tinterpol_mxn. Performs interpolation on tplot variables. Interpolates xv_tvar to match uz_tvar. Can also interpolate with non-tvar types and return non-tvar types. (Helpful for interpolating matrices and time-series vectors) This function works on any n or nxm dimensional vectors. Interpolation always occurs along first dimension(time) Arguments: xv_tvar = tplot variable to be interpolated, the y component can have any dimesions, can use globbing to interpolate many values at once uses x component for x abcissa values Can also pass in a struct with the same format as the data component for a tplot variable: {x:time_array,y:data_array,v:optional_y_axis_abcissas} uz_tvar = tplot variable that V will be fit to uses x component for u abcissa values. Can also pass in an array of time values rather than a tplot variable. newname = output tplot variable name(optional) defaults to xv_tvar+'_interp'. If you want vector output, use the keyword "out" suffix = a suffix other than interp you can use, particularily useful when using globbing overwrite=set this variable if you just want the original variable overwritten instead of using newname or suffix Use only newname or suffix or overwrite. If you combine them the naming behavior may be erratic /LINEAR = pass this argument to specify linear interpolation(this is the default behavior) /QUADRATIC = pass this argument to specify quadratic interpolation /SPLINE = pass this argument to specify spline interpolation /NEAREST_NEIGHBOR = pass this argument to specify repeat nearest neighbor 'interpolation' /NO_EXTRAPOLATE = pass this argument to prevent extrapolation of data values in V passed it's start and end points /NAN_EXTRAPOLATE = pass this argument to extrapolate past the endpoints using NaNs as a fill value /REPEAT_EXTRAPOLATE = pass this argument to repeat nearest value past the endpoints ERROR(optional): named variable in which to return the error state of the computation. 1 = success 0 = failure Outputs(optional): out: Returns output as a data struct. If this argument is present, no tplot variable will be created. Note that only one result can be returned through this keyword.(ie You can't use this keyword with tplot name-globbing) CALLING SEQUENCE; tinterpol,'tplot_var1','tplot_var2',newname='tplot_var_out' tinterpol,'tplot_var1','tplot_var2',/NO_EXTRAPOLATE tinterpol,'tplot_var1','tplot_var2',/SPLINE tinterpol,'tplot_var1','tplot_var2',out=out_data_struct ;doesn't create tplot variable, instead returns struct tinterpol,'tplot_var1',time_array ;This calling method doesn't require second tplot variable tinterpol,{x:time_array,y:data_array},'tplot_var2' ;This calling method doesn't require first tplot variable tinterpol,{x:time_array,y:data_array,v:y_scale_vals},time_array,out=out_data_struct ; You can mix and match calling types. This calling method doesn't use any tplot variables Output: an N by D1 by D2 by ... array stored in an output tplot variabel Notes: Uses a for loop over D1*D2*..., but I'm operating under the assumption that D1*D2... << M (D1 * D2 *... is waaaay less than M) It uses a little bit of modular arithmatic so this function is generalized to any array dimensionality(IDL limits at 8) Examples: if the input is an array of 3-d vectors(say 1,1,1 and 2,2,2) and we want 3 vectors out the output is 1,1,1 1.5 1.5 1.5 2,2,2 if the input is an array of 3x3 matrices(say all ones and all twos) and we want three matrices then output is all 1s all 1.5s all 2s $LastChangedBy: egrimes $ $LastChangedDate: 2016-10-17 08:33:58 -0700 (Mon, 17 Oct 2016) $ $LastChangedRevision: 22105 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/tinterpol.pro $
(See general/misc/tinterpol.pro)
Procedure: tKm2Re Purpose: Converts a variable to RE or KM Inputs: name: a string naming the tplot variable to be modified globbing may be used Keywords: newname: set this keyword to a string to store the output in(only works when globbing is not used) suffix: set this keyword to a string indicating the suffix to be appended to the input variable(s) /replace: set this option to replace the variable being modified /KM : converts to KM from RE rather than to RE from KM examples: tKm2Re,'thb_state_pos' tKm2Re,'thb_state_pos',/replace tKm2Re,'thb_state_pos',/KM tKm2Re,'thb_state_pos',newname='pos_in_re' tKm2Re,'th?_state_pos',suffix='_converted' NOTES: Uses conversion of 6371.2 KM/RE ;mean radius By default output will be called: input_name+'_RE' $LastChangedBy: jimm $ $LastChangedDate: 2016-10-26 13:03:09 -0700 (Wed, 26 Oct 2016) $ $LastChangedRevision: 22202 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/tkm2re.pro $
(See general/misc/tkm2re.pro)
NAME: tplot_noise_vars PURPOSE: generate Nvars tplot variables, with random noise for testing CALLING SEQUENCE: tplot_names = tplot_noise_vars(nvars = nvars, time = time, $ nchan = nchan, ncounts = ncounts) INPUT: none explicit OUTPUT: tplot_names = an array of tplot names: 'test_var_nnnnnn', starting just after the highest value i.e., if you just created variable 99, then the first new variable will be variable 100. use del_data if you want to recreate variables KEYWORDS: nvars = number of variables, the default is 100, max is 999999L time = a time array, the default is systime()+indgen(60), one minute starting now. nchan = number of channels in data, the default is 16 ncounts = number of counts per channel, the output data is poisson distributed given the number of counts. The default is 1 count per channel. nostore = if set, don't create the variables, for testing HISTORY: 2017-08-24, jmm, jimm@ssl.berkeley.edu $LastChangedBy: jimmpc1 $ $LastChangedDate: 2017-10-13 10:50:56 -0700 (Fri, 13 Oct 2017) $ $LastChangedRevision: 24155 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/tplot_noise_vars.pro $
(See general/misc/tplot_noise_vars.pro)
NAME: tpwrspc PURPOSE: wrapper for pwrspc.pro allowing input of a tplot variable name. A Hanning window is applied to the input data, and its power is divided out of the returned spectrum. A straight line is subtracted from the data to reduce spurius power due to sawtooth behavior of a background. UNITS ARE (UNITS)^2 WHERE UNITS ARE THE UNITS OF quantity. freq is in 1/timeunits. THUS THE OUTPUT REPRESENTS THE MEAN SQUARED AMPLITUDE OF THE SIGNAL AT EACH SPECIFIC FREQUENCY. THE TOTAL (SUM) POWER UNDER THE CURVE IS EQUAL TO THE MEAN (OVER TIME) POWER OF THE OSCILLATION IN TIME DOMAIN. CALLING SEQUENCE: CALLING SEQUENCE: tpwrspc, varnames, newname=newname,_extra=_extra INPUT: varname = one tplot variable name OUTPUTS: freq_out=freq_out(optional): output frequency abcissas, in a 1-d array power_out = power_out(optional) : output powers at frequency abcissas, in a 1-d array KEYWORDS: newname = if set,give this name to the new data, the default is to append '_pwrspc' to the input name and pass out the name in the newname variable, Unless /overwrite is set overwrite = if set, write the new data back to the old tplot variable, do not set this with newname noline = if set, no straight line is subtracted nohanning = if set, then no hanning window is applied to the input bin = a binsize for binning of the frequency data, the default is 3 notperhz = if set, the output units are simply the square of the input units err_msg = named variable that contains any error message that might occur NOTES: 1. IF KEYWORD notperhz IS SET, THEN POWER IS IN UNITS^2. If notset power is (as normal) in UNITS^2/Hz. 2. Inputs must be 1-dimensional. For example, if you try to call this on a 3-d vector like fgs data, it will not work. call 'split_vec' first, to split the quantity into its components. 27-mar-2007, jmm, jimm.ssl.berkeley.edu HISTORY: $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/tpwrspc.pro $
(See general/misc/tpwrspc.pro)
FUNCTION: trange_str,t1,t2 INPUT: t1,t2 doubles, seconds since 1970 OUTPUT: string with the format: 'YYYY-MM-DD/HH:MM:SS - HH:MM:SS' CREATED BY: Davin Larson LAST MODIFICATION: @(#)trange_str.pro 1.10 97/12/22
(See general/misc/trange_str.pro)
PROCEDURE: tsmooth_in_time, varname, dt, newname = newname PURPOSE: Calls smooth_in_time function on a plot variable INPUT: varname = variable passed to get_data, example - thg_mag_ccnv dt = the averaging time (in seconds) KEYWORDS: newname = set output variable name display_object = Object reference to be passed to dprint for output. HISTORY: 11-apr-2008, jmm, jimm@ssl.berkeley.edu $LastChangedBy: aaflores $ $LastChangedDate: 2012-01-26 15:01:41 -0800 (Thu, 26 Jan 2012) $ $LastChangedRevision: 9619 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/tsmooth_in_time.pro $
(See general/misc/tsmooth_in_time.pro)
NAME: tsub_average PURPOSE: Subtracts average or median values from the data in a tplot variable, returns a new variable, only one at a time for now CALLING SEQUENCE: tsub_average, varname, out_name, new_name=new_name,median=median INPUT: varname = a tplot variable name OUTPUT: out_name = variable name of the output tplot variable KEYWORDS: new_name = can be used to input the new variable name, if not input the default is to add a '-d' to the input name (or '-m' for median subtraction) and the name is passed out in this variable display_object = Object reference to be passed to dprint for output. HISTORY: 18-jul-2007, jmm, jimm@ssl.berkeley.edu 02-nov-2007, jmm, Fixed bug for variables with no data. 06-may-2008, jmm, Fixed problem, by changing non-float and non-double datatypes to floats $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/tsub_average.pro $
(See general/misc/tsub_average.pro)
Procedure: tvectot(tplot vector total) Purpose: Add or remove the magnitude of a vector to a tplot quantity Inputs: name: a string naming the tplot variable to be modified, may use regex Keywords: /remove: set this keyword to remove the magnitude from vector newname: set this keyword to a string to store the(this option will not work properly if regex is used) output in a different variable instead of overwriting tot: set this keyword to a named variable to store the magnitude as an array or set it to a string to store the magnitude as a tplot variable(this option will not work properly if regex is used) examples: tvectot,'tha_fgs_dsl' tvectot,'tha_fgs_dsl',/remove tvectot,'tha_fg*_dsl' tvectot,'tha_fgs_dsl',newname='tha_fgs_dsl_mag' tvectot,'tha_fgs_dsl',tot=var tvectot,'tha_fgs_dsl',tot='mag_t_var' $LastChangedBy: pcruce $ $LastChangedDate: 2012-01-27 11:23:20 -0800 (Fri, 27 Jan 2012) $ $LastChangedRevision: 9637 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/tvectot.pro $
(See general/misc/tvectot.pro)
NAME: undefined PURPOSE: Tests whether a variable is undefined CALLING SEQUENCE: if ~undefined(var) then print,'Hooray!' INPUT: var: A variable to be tested OUTPUT: 1 on success, 0 on fail $LastChangedBy: pcruce $ $LastChangedDate: 2008-07-28 11:53:49 -0700 (Mon, 28 Jul 2008) $ $LastChangedRevision: 3311 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/undefined.pro $
(See general/misc/undefined.pro)
PROCEDURE: wi, wnum PURPOSE: Switch or open windows. INPUT: wnum - the window number. CREATED BY: REE, 95-10-23 completely rewritten by DEL 2006 FILE: wi.pro VERSION: 1.6 LAST MODIFICATION: 97/06/03
(See general/misc/wi.pro)
xclip PURPOSE: Replaces with FLAGs the values of the array that are BEYOND the limits specified. CALLING SEQUENCE: xclip, amin, amax, y, flag=flag, _extra=_extra INPUT: amin, amax = the minumum and maximum values y = the input array OUTPUT: y = set to flag for points less than amin or greater than amax KEYWORDS: flag = the value that clipped data will be set to, the default is -0.0/0.0 (NaN) clip_adjacent = if set, then clip the vales adjacent to the bad ones, as in tdespike_ae.pro HISTORY: 2-feb-2007, jmm, jimm.ssl.berkeley.edu from Vassilis' clip_deflag.pro 9-feb-2007, change big value to Nan 9-oct-2007, added option to clip the points adjacent to the bad ones, as in tdespike_ae.pro 20-Oct-2007, Jmm, Added this comment to test commit comand $LastChangedBy: adrozdov $ $LastChangedDate: 2018-01-10 17:03:26 -0800 (Wed, 10 Jan 2018) $ $LastChangedRevision: 24506 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/xclip.pro $
(See general/misc/xclip.pro)
xdeflag PURPOSE: Replaces FLAGs in arrays with interpolated or other values CALLING SEQUENCE: xdeflag, method, t, y, flag=flag, _extra=_extra INPUT: method = set to "repeat", this will repeat the last good value. set to "linear", then linear interpolation is used, but for the edges, the closest value is used, there is no extrapolation t = time array, in any useable tplot format y = the input array, n_elements(t) by n OUTPUT: y = either interpolated or repated, where the value is > 0.98*flag, or NaN KEYWORDS: flag = all values greater than 0.98 times this value will be removed; default is 6.879e28, NaNs and +/-Infinity are always removed maxgap = the maximum number of rows that can be filled? the default is n_elements(t) display_object = Object reference to be passed to dprint for output. HISTORY: 2-feb-2007, jmm, jimm.ssl.berkeley.edu from Vassilis' clip_deflag.pro $LastChangedBy: pcruce $ $LastChangedDate: 2012-07-05 11:21:00 -0700 (Thu, 05 Jul 2012) $ $LastChangedRevision: 10684 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/xdeflag.pro $
(See general/misc/xdeflag.pro)
NAME: xdegap PURPOSE: Locates gaps in data, and fills in with NaN This subroutine accepts the time array (can be cline time) t and the multi-dimensional array yarr that matches with the time array. It outputs the same arrays but with a different number of rows depending on how many rows were added. It then figures out where to add rows by checking which time differences are greater than or equal to deltat plus a margin and adds an array of rows of equispaced times of size tstep=gap/(number_of_points_that_fit_with_minimum_cumulative_error). The same number of rows is added to yarr with values equal to FLAGs. NOTE: ARRAYS AND STRUCTURES THAT NEED DEGAPPING ARE REDEFINED TO BE LARGER THAN BEFORE. THUS THE TIME COLUMN THAT HAS BEEN DEGAPPED WILL NOT CORRESPOND TO THE ELEMENTS OF AN ARRAY THAT HAS NOT BEEN DEGAPPED. CAUTION: DEGAP ALL ARRAYS OR STRUCTURES YOU ARE GOING TO USE TOGETHER, I.E., WITH ONE DEGAP CALL. ADDITIONAL NOTE: To conserve memory, see the ONENANPERGAP keyword. CALLING SEQUENCE: xdegap, dt, margin, ct, y, ct_out, y_out [,/nowarning] [,maxgap = <value>] [,iindices=<variable>] [,/onenanpergap] [,/twonanpergap] INPUT: dt = the time interval for tests margin = the margin ct = the input time array y = the input array, can be 1 or 2d (n_elements(ct), m) OUTPUT: ct_out = the output time array, y_out = the input time array KEYWORDS: nowarning = if set, suppresses warnings maxgap = the maximum gap size filled, in seconds iindicies = the indices in the output arrays that contain the original data flag = A numeric user-specified value to use for flagging gaps. Defaults to a floating NaN. If an array is entered, only the first element is considered.If a non-numeric datatype is entered, its value is ignored. onenanpergap = Fill gaps with only one NaN -> useful for conserving memory. Also, for reference concerning post-processing, the INTERPOL function propagates a single NaN just as it would many NaNs. twonanpergap = Fill gaps with only two NaNs, it turns out that onenanpergap does not work well with spectrograms. The exeption is if only one NAN fits in the gap given the input parameters, then only one is used. n_gaps = the number of gaps found gap_begin = the double-precision start times of the detected gaps. gap_end = the double-precision end times of the detected gaps. display_object = Object reference to be passed to dprint for output. output_message = Passes any messages generated up to the calling procedure as an array of strings HISTORY: From Vassilis' degap.pro, 2-apr-2007, jmm, jimm@ssl.berkeley.edu bug fix for undefined variable, jmm, 24-jun-2007 Switched maxgap to seconds, jmm, 26-oct-2007 Added comment to test svn version 4_00, jmm, 28-apr-2008 Added ONENANPERGAP kw, W.M.F., 5 May, 2009. Added GAP_BEGIN, GAP_END kwd's, 12 June, 2009. Added _extra keyword, 20-oct-2009, jmm Added output_message keyword Feb-02-2011 prc Added twonanpergap, jmm, 14-aug-2012 Return inputs instead of -1 if no gaps found, added n_gaps keyword, af 2016-05-03 $LastChangedBy: aaflores $ $LastChangedDate: 2016-05-03 13:28:56 -0700 (Tue, 03 May 2016) $ $LastChangedRevision: 21010 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/xdegap.pro $
(See general/misc/xdegap.pro)
NAME: fancompress PURPOSE: Decimates polylines in an aesthetically pleasing fashion. CALLING SEQUENCE: outidx = fancompress(inpts,err) INPUT: inpts: N x 2 dimension array, where inpts[*,0] are the x components of the polyline and inpts[*,1] are the y components of the polyline err: The amount of error allowed before including a point Keywords: vector: Will enable the vectorized fan compression algorithm. step: Controls the number of steps to perform per loop, during vectorized implementation. At the limit, where step = N, the vectorized version works like the iterative version. OUTPUT: An array of indexes into inpts. Indices will range from 0 to N-1. First and Last points are always included. NOTES: 1. Based almost entirely on the paper: Fowell, Richard A. and McNeil, David D. , “Faster Plots by Fan Data-Compression,” IEEE Computer Graphics & Applications, Vol. 9, No. 2,Mar. 1989, pp. 58-66. 2. One modification from published algorithm, handles NaNs by always including the point before a group of NaNs, 1 NaN and the point after the NaNs. This ensures that gaps will be drawn accurately. 3. Algorithm is fairly slow, because it requires 1 pass over all data points. Optimizing this algorithm by divide and conquer, vectorization, or dlm may be a worthwhile use of time in the future. 4. Vectorized version is essentially a divide and conquer version of the Fowell & McNeil algorithm. The idea being to split the array into sub-problems that can be addressed in parallel using IDL vector-ops. The fan-comparison operation at the core of the fan-compression algorithm takes 3-sequential points to work. So if step = 1, the algorithm will split the input array of length N in floor(N/3) segments; Making an independent decision on whether to keep the middle point of each segment, based upon the start and end points of each segment. If a point is removed, the 5-element fan vector at the start point is updated, and this will be applied in the subsequent test. 5. If step is higher an internal loop will perform the operation iteratively within-segments, but in parallel across segments. For example, If step is 3, N will be split into floor(N/5) segments(5-point segments). Operating on points 1-2-3 of the segment in the first iteration of the internal loop, points 1-3-4 or 2-3-4 on the second iteration and points 1-4-5,2-4-5,or 3-4-5 on the third iteration. Which sequence ends up being operated on depends on whether the point was accepted or rejected in the previous iteration. 6. Vectorized(step=1) version generally achieves a speed up of 1000% at decrease in compression by ~10%. For example, if the iterative version creates a 1 Mb of output in 1 sec, this will create 1.1 Mb of output in .1 sec. Higher values of step, tend to decrease compression rates until step becomes large, then compression approaches the iterative solution $LastChangedBy: pcruce $ $LastChangedDate: 2009-07-27 17:44:33 -0700 (Mon, 27 Jul 2009) $ $LastChangedRevision: 6496 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_1/general/misc/fancompress.pro $
(See general/misc/fancompress.pro)