This page was created by the IDL library routine
mk_html_help2.
Last modified: Sun Apr 13 03:17:35 2025.
Procedure:
cdf_version_test
Purpose:
Check that the patched version the CDF library (3.4+) is installed
Note:
The crash due to an unpatched CDF library is usually due to a
change in the number of arguments of the function CDF_EPOCH_COMPARE.
The change was introduced in version 3.4 of the CDF library:
http://cdaweb.sci.gsfc.nasa.gov/pub/software/cdf/dist/cdf35_0_2/idl/CDF_EPOCH_COMPARE.txt
$LastChangedBy: egrimes $
$LastChangedDate: 2014-10-31 09:11:43 -0700 (Fri, 31 Oct 2014) $
$LastChangedRevision: 16091 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/cdf_version_test.pro $
(See spedas_gui/utilities/cdf_version_test.pro)
NAME:
CENTERTLB
PURPOSE:
This is a utility routine to position a widget program
on the display at an arbitrary location. By default the
widget is centered on the display.
AUTHOR:
FANNING SOFTWARE CONSULTING
David Fanning, Ph.D.
1645 Sheely Drive
Fort Collins, CO 80526 USA
Phone: 970-221-0438
E-mail: davidf@dfanning.com
Coyote's Guide to IDL Programming: http://www.dfanning.com
CATEGORY:
Utilities
CALLING SEQUENCE:
CenterTLB, tlb, [x, y, /NOCENTER, /DEVICE]
REQUIRED INPUTS:
tlb: The top-level base identifier of the widget program. This must
be a valid widget ID.
OPTIONAL INPUTS:
x: Set this equal to a normalized position for the center
of the widget as measured from the left-hand side of the screen.
The default value is 0.5 (the center) Setting this equal to 1.0
places the widget at the far right-hand side of the screen.
y: Set this equal to a normalized position for the center
of the widget as measured from the bottom of the screen.
The default value is 0.5 (the center) Setting this equal to 1.0
places the widget at the top of the screen.
KEYWORDS:
DEVICE: Normally, the x and y parameters are specified in normalized
coordinates. If this keyword is set, they are taken to be in DEVICE
coordinates.
NOCENTER: By default, the center of the widget is positioned at the
location specified by the x and y parameters. If NOCENTER is set
to a non-zero value, then the upper left corner of the widget
is postioned at the specifed location.
PROCEDURE:
The program should be called after all the widgets have
been created, but just before the widget hierarchy is realized.
It uses the top-level base geometry along with the display size
to calculate offsets for the top-level base that will center the
top-level base on the display.
COMMENT:
Regardless of the values set for x, y and NOCENTER, the widget
is not permitted to run off the display.
MODIFICATION HISTORY:
Written by: Dick Jackson, 12 Dec 98.
Modified to use device-independent Get_Screen_Size
function. 31 Jan 2000. DWF.
Added x, y, NOCENTER and run-off protection. 26 Jan 2001. BT.
Added a maximum value of 1280 for X screen size. This helps
center the widget on a single monitor when using dual
monitor settings with some graphics cards. 3 Feb 2003. DWF.
Added DEVICE keyword. 4 January 2006. DWF.
(See spedas_gui/utilities/centertlb.pro)
NAME:
COLORBAR
PURPOSE:
The purpose of this routine is to add a color bar to the current
graphics window.
AUTHOR:
FANNING SOFTWARE CONSULTING
David Fanning, Ph.D.
1645 Sheely Drive
Fort Collins, CO 80526 USA
Phone: 970-221-0438
E-mail: davidf@dfanning.com
Coyote's Guide to IDL Programming: http://www.dfanning.com/
CATEGORY:
Graphics, Widgets.
CALLING SEQUENCE:
COLORBAR
INPUTS:
None.
KEYWORD PARAMETERS:
BOTTOM: The lowest color index of the colors to be loaded in
the bar.
CHARSIZE: The character size of the color bar annotations. Default is 1.0.
COLOR: The color index of the bar outline and characters. Default
is !P.Color..
DIVISIONS: The number of divisions to divide the bar into. There will
be (divisions + 1) annotations. The default is 6.
FONT: Sets the font of the annotation. Hershey: -1, Hardware:0, True-Type: 1.
FORMAT: The format of the bar annotations. Default is '(I5)'.
INVERTCOLORS: Setting this keyword inverts the colors in the color bar.
MAXRANGE: The maximum data value for the bar annotation. Default is
NCOLORS.
MINRANGE: The minimum data value for the bar annotation. Default is 0.
MINOR: The number of minor tick divisions. Default is 2.
NCOLORS: This is the number of colors in the color bar.
POSITION: A four-element array of normalized coordinates in the same
form as the POSITION keyword on a plot. Default is
[0.88, 0.10, 0.95, 0.90] for a vertical bar and
[0.10, 0.88, 0.90, 0.95] for a horizontal bar.
;
RANGE: A two-element vector of the form [min, max]. Provides an
alternative way of setting the MINRANGE and MAXRANGE keywords.
RIGHT: This puts the labels on the right-hand side of a vertical
color bar. It applies only to vertical color bars.
TICKNAMES: A string array of names or values for the tick marks.
TITLE: This is title for the color bar. The default is to have
no title.
TOP: This puts the labels on top of the bar rather than under it.
The keyword only applies if a horizontal color bar is rendered.
VERTICAL: Setting this keyword give a vertical color bar. The default
is a horizontal color bar.
COMMON BLOCKS:
None.
SIDE EFFECTS:
Color bar is drawn in the current graphics window.
RESTRICTIONS:
The number of colors available on the display device (not the
PostScript device) is used unless the NCOLORS keyword is used.
EXAMPLE:
To display a horizontal color bar above a contour plot, type:
LOADCT, 5, NCOLORS=100
CONTOUR, DIST(31,41), POSITION=[0.15, 0.15, 0.95, 0.75], $
C_COLORS=INDGEN(25)*4, NLEVELS=25
COLORBAR, NCOLORS=100, POSITION=[0.15, 0.85, 0.95, 0.90]
MODIFICATION HISTORY:
Written by: David W. Fanning, 10 JUNE 96.
10/27/96: Added the ability to send output to PostScript. DWF
11/4/96: Substantially rewritten to go to screen or PostScript
file without having to know much about the PostScript device
or even what the current graphics device is. DWF
1/27/97: Added the RIGHT and TOP keywords. Also modified the
way the TITLE keyword works. DWF
7/15/97: Fixed a problem some machines have with plots that have
no valid data range in them. DWF
12/5/98: Fixed a problem in how the colorbar image is created that
seemed to tickle a bug in some versions of IDL. DWF.
1/12/99: Fixed a problem caused by RSI fixing a bug in IDL 5.2. Sigh... DWF.
3/30/99: Modified a few of the defaults. DWF.
3/30/99: Used NORMAL rather than DEVICE coords for positioning bar. DWF.
3/30/99: Added the RANGE keyword. DWF.
3/30/99: Added FONT keyword. DWF
5/6/99: Many modifications to defaults. DWF.
5/6/99: Removed PSCOLOR keyword. DWF.
5/6/99: Improved error handling on position coordinates. DWF.
5/6/99. Added MINOR keyword. DWF.
5/6/99: Set Device, Decomposed=0 if necessary. DWF.
2/9/99: Fixed a problem caused by setting BOTTOM keyword, but not NCOLORS. DWF.
8/17/99. Fixed a problem with ambiguous MIN and MINOR keywords. DWF
8/25/99. I think I *finally* got the BOTTOM/NCOLORS thing sorted out. :-( DWF.
10/10/99. Modified the program so that current plot and map coordinates are
saved and restored after the colorbar is drawn. DWF.
3/18/00. Moved a block of code to prevent a problem with color decomposition. DWF.
4/28/00. Made !P.Font default value for FONT keyword. DWF.
9/26/00. Made the code more general for scalable pixel devices. DWF.
1/16/01. Added INVERTCOLORS keyword. DWF.
5/11/04. Added TICKNAME keyword. DWF.
(See spedas_gui/utilities/colorbar.pro)
NAME:
ERROR_MESSAGE
PURPOSE:
The purpose of this function is to have a device-independent
error messaging function. The error message is reported
to the user by using DIALOG_MESSAGE if widgets are
supported and MESSAGE otherwise.
In general, the ERROR_MESSAGE function is not called directly.
Rather, it is used in a CATCH error handler. Errors are thrown
to ERROR_MESSAGE with the MESSAGE command. A typical CATCH error
handler is shown below.
Catch, theError
IF theError NE 0 THEN BEGIN
Catch, /Cancel
ok = Error_Message(/Traceback, /Error)
RETURN
ENDIF
Error messages would get into the ERROR_MESSAGE function by
throwing an error with the MESSAGE command, like this:
IF test NE 1 THEN Message, 'The test failed.'
AUTHOR:
FANNING SOFTWARE CONSULTING
David Fanning, Ph.D.
1645 Sheely Drive
Fort Collins, CO 80526 USA
Phone: 970-221-0438
E-mail: davidf@dfanning.com
Coyote's Guide to IDL Programming: http://www.dfanning.com/
CATEGORY:
Utility.
CALLING SEQUENCE:
ok = Error_Message(the_Error_Message)
INPUTS:
the_Error_Message: This is a string argument containing the error
message you want reported. If undefined, this variable is set
to the string in the !Error_State.Msg system variable.
KEYWORDS:
ERROR: Set this keyword to cause Dialog_Message to use the ERROR
reporting dialog. Note that a bug in IDL causes the ERROR dialog
to be used whether this keyword is set to 0 or 1!
INFORMATIONAL: Set this keyword to cause Dialog_Message to use the
INFORMATION dialog instead of the WARNING dialog. Note that a bug
in IDL causes the ERROR dialog to be used if this keyword is set to 0!
TITLE: Set this keyword to the title of the DIALOG_MESSAGE window. By
default the keyword is set to 'System Error' unless !ERROR_STATE.NAME
equals "IDL_M_USER_ERR", in which case it is set to "Trapped Error'.
TRACEBACK: Setting this keyword results in an error traceback
being printed to standard output with the PRINT command. Set to
1 (ON) by default. Use TRACEBACK=0 to turn this functionality off.
OUTPUTS:
Currently the only output from the function is the string "OK".
RESTRICTIONS:
The WARNING Dialog_Message dialog is used by default.
EXAMPLE:
To handle an undefined variable error:
IF N_Elements(variable) EQ 0 THEN $
ok = Error_Message('Variable is undefined', /Traceback)
NOTES: This version has a systen variable called !GUIDEBUG that has been added for usage with
the SPEDAS GUI, it is used to disable windowing with this error routine. If !GUIDEBUG = 1
this routine will only print to command line. To set GUIDEBUG call: defsysv,'!GUIDEBUG',1
MODIFICATION HISTORY:
Written by: David W. Fanning, 27 April 1999.
Added the calling routine's name in the message and NoName keyword. 31 Jan 2000. DWF.
Added _Extra keyword. 10 February 2000. DWF.
Forgot to add _Extra everywhere. Fixed for MAIN errors. 8 AUG 2000. DWF.
Adding call routine's name to Traceback Report. 8 AUG 2000. DWF.
Added ERROR, INFORMATIONAL, and TITLE keywords. 19 SEP 2002. DWF.
Removed the requirement that you use the NONAME keyword with the MESSAGE
command when generating user-trapped errors. 19 SEP 2002. DWF.
Added distinctions between trapped errors (errors generated with the
MESSAGE command) and IDL system errors. Note that if you call ERROR_MESSAGE
directly, then the state of the !ERROR_STATE.NAME variable is set
to the *last* error generated. It is better to access ERROR_MESSAGE
indirectly in a Catch error handler from the MESSAGE command. 19 SEP 2002. DWF.
Change on 19 SEP 2002 to eliminate NONAME requirement did not apply to object methods.
Fixed program to also handle messages from object methods. 30 JULY 2003. DWF.
Removed obsolete STR_SEP and replaced with STRSPLIT. 27 Oct 2004. DWF.
Made a traceback the default case without setting TRACEBACK keyword. 19 Nov 2004. DWF.
Added !GUIDEBUG keyword support. Patrick Cruce 2008-09-17
(See spedas_gui/utilities/error_message.pro)
FUNCTION:
formatannotation
PURPOSE:
This routine is used as a callback for axis labeling by IDLgrAxis
Because it is a callback routine, IDL requires it to have this specific form.
It is probably useful as a general purpose formatting routine, as well.
Inputs:
Axis:Required by IDL, but ignored
Index: Required by IDL, but ignored
Value: Required The value to be formatted.
Data: Keyword,Required
The data struct holds the important information and has the following format:
data = {timeAxis:0B, $ ;Should we format as time data?
formatid:0L, $ ;Precision of returned value in sig figs
scaling:0B, $ ;0:Linear,1:Log10,2:LogN
exponent:0B, $ ;(REQUIRED for non-time data)0:Auto-Format(see description),1:Numerical(double),2:Sci-Notation(1.2x10^3)
range:[0D,0D],$ ; The range field is optional. If it is present in the struct, value will be interpreted a multiplier over the specified range.(generally this is used if the data is being stored as a proportion)
noformatcodes:0b,$ ; Optional, set to 1 to disable IDL formatting codes like !U
maxexplen:0L,$ ; Optional, if present and not equal -1 then exponents will be formatted to this length
negexp:0B} ; Optional, if present 1 indicates presence of a negative exponent on axis (only considered if maxexplen is also set and not -1)
Auto-Format:
If the number being formatted is too large or small to be displayed with the requested number of
significant figures then the number will be automatically displayed in scientific notation
(e.g. for 3 sig. figs '1234.5' will be shown as '1.23x10^3' and '.00012345' will be shown as '1.23x10^-4')
Values in log_10() space will be displayed as '10^1.2'
Values in ln() space will be displayes as 'e^1.2'
Integer formatting is not effected.
Formatting Codes:
Formatting codes are utilized to create superscripts and unicode characters that are displayd
by IDLgraxis:
!z(00d7): Unicode multiplication symbol
!U : Superscripts the following substring
Example:
print,formatannotation(0,0,1,data={timeaxis:0,formatid:7,scaling:0,exponent:0})
1.000000
print,formatannotation(0,0,.5,data={timeaxis:1,formatid:12,scaling:0,range:[time_double('2007-03-23'),time_double('2007-03-24')]})
082/12:00:00.000
print,formatannotation(0,0,4,data={timeaxis:0,formatid:5,scaling:2,exponent:0})
e!U4.0000
print,formatannotation(0,0,.25,data={timeaxis:0,formatid:5,scaling:1,range:[1,2],exponent:0})
10!U1.2500
print,formatannotation(0,0,1234,data={timeaxis:0,formatid:7,scaling:0,exponent:2})
1.234000!z(00d7)10!U3
$LastChangedBy: egrimes $
$LastChangedDate: 2014-06-05 10:01:44 -0700 (Thu, 05 Jun 2014) $
$LastChangedRevision: 15308 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/formatannotation.pro $
(See spedas_gui/utilities/formatannotation.pro)
NAME:
FSC_COLOR
PURPOSE:
The purpose of this function is to obtain drawing colors
by name and in a device/decomposition independent way. The
color names and values may be read in as a file, or 88
color names and values are supplied from the program. These
were obtained from the file rgb.txt, found on most X-Window
distributions. Representative colors were chose from across
the color spectrum. To see a list of colors available, type:
Print, FSC_Color(/Names), Format='(6A15)'.
AUTHOR:
FANNING SOFTWARE CONSULTING:
David Fanning, Ph.D.
1645 Sheely Drive
Fort Collins, CO 80526 USA
Phone: 970-221-0438
E-mail: davidf@dfanning.com
Coyote's Guide to IDL Programming: http://www.dfanning.com
CATEGORY:
Graphics, Color Specification.
CALLING SEQUENCE:
color = FSC_COLOR(theColor, theColorIndex)
NORMAL CALLING SEQUENCE FOR DEVICE-INDEPENDENT COLOR:
If you write your graphics code *exactly* as it is written below, then
the same code will work in all graphics devices I have tested.
These include the PRINTER, PS, and Z devices, as well as X, WIN, and MAC.
In practice, graphics code is seldom written like this. (For a variety of
reasons, but laziness is high on the list.) So I have made the
program reasonably tolerant of poor programming practices. I just
point this out as a place you might return to before you write me
a nice note saying my program "doesn't work". :-)
axisColor = FSC_COLOR("Green", !D.Table_Size-2)
backColor = FSC_COLOR("Charcoal", !D.Table_Size-3)
dataColor = FSC_COLOR("Yellow", !D.Table_Size-4)
thisDevice = !D.Name
Set_Plot, 'toWhateverYourDeviceIsGoingToBe', /Copy
Device, .... ; Whatever you need here to set things up properly.
IF (!D.Flags AND 256) EQ 0 THEN $
POLYFILL, [0,1,1,0,0], [0,0,1,1,0], /Normal, Color=backColor
Plot, Findgen(11), Color=axisColor, Background=backColor, /NoData, $
NoErase= ((!D.Flags AND 256) EQ 0)
OPlot, Findgen(11), Color=dataColor
Device, .... ; Whatever you need here to wrap things up properly.
Set_Plot, thisDevice
OPTIONAL INPUT PARAMETERS:
theColor: A string with the "name" of the color. To see a list
of the color names available set the NAMES keyword. This may
also be a vector of color names. Colors available are these:
Almond Antique White Aquamarine Beige Bisque Black
Blue Blue Violet Brown Burlywood Charcoal Chartreuse
Chocolate Coral Cornsilk Cyan Dark Goldenrod Dark Gray
Dark Green Dark Khaki Dark Orchid Dark Salmon Deep Pink Dodger Blue
Firebrick Forest Green Gold Goldenrod Gray Green
Green Yellow Honeydew Hot Pink Indian Red Ivory Khaki
Lavender Lawn Green Light Coral Light Cyan Light Gray Light Salmon
Light Yellow Lime Green Linen Magenta Maroon Medium Gray
Medium Orchid Moccasin Navy Olive Olive Drab Orange
Orange Red Orchid Pale Goldenrod Pale Green Papaya Peru
Pink Plum Powder Blue Purple Red Rose
Rosy Brown Royal Blue Saddle Brown Salmon Sandy Brown Sea Green
Seashell Sienna Sky Blue Slate Gray Snow Spring Green
Steel Blue Tan Thistle Tomato Turquoise Violet
Violet Red Wheat White Yellow
Also, these system color names are available in IDL 5.6 and higher: Frame, Text, Active,
Shadow, Highlight, Edge, Selected, Face.
The color WHITE is used if this parameter is absent or a color name is mis-spelled. To see a list
of the color names available in the program, type this:
Print, FSC_COLOR(/Names), Format='(6A15)'
theColorIndex: The color table index (or vector of indices the same length
as the color name vector) where the specified color is loaded. The color table
index parameter should always be used if you wish to obtain a color value in a
color-decomposition-independent way in your code. See the NORMAL CALLING
SEQUENCE for details. If theColor is a vector, and theColorIndex is a scalar,
then the colors will be loaded starting at theColorIndex.
RETURN VALUE:
The value that is returned by FSC_COLOR depends upon the keywords
used to call it, on the version of IDL you are using,and on the depth
of the display device when the program is invoked. In general,
the return value will be either a color index number where the specified
color is loaded by the program, or a 24-bit color value that can be
decomposed into the specified color on true-color systems. (Or a vector
of such numbers.)
If you are running IDL 5.2 or higher, the program will determine which
return value to use, based on the color decomposition state at the time
the program is called. If you are running a version of IDL before IDL 5.2,
then the program will return the color index number. This behavior can
be overruled in all versions of IDL by setting the DECOMPOSED keyword.
If this keyword is 0, the program always returns a color index number. If
the keyword is 1, the program always returns a 24-bit color value.
If the TRIPLE keyword is set, the program always returns the color triple,
no matter what the current decomposition state or the value of the DECOMPOSED
keyword. Normally, the color triple is returned as a 1 by 3 column vector.
This is appropriate for loading into a color index with TVLCT:
IDL> TVLCT, FSC_Color('Yellow', /Triple), !P.Color
But sometimes (e.g, in object graphics applications) you want the color
returned as a row vector. In this case, you should set the ROW keyword
as well as the TRIPLE keyword:
viewobj= Obj_New('IDLgrView', Color=FSC_Color('charcoal', /Triple, /Row))
If the ALLCOLORS keyword is used, then instead of a single value, modified
as described above, then all the color values are returned in an array. In
other words, the return value will be either an NCOLORS-element vector of color
table index numbers, an NCOLORS-element vector of 24-bit color values, or
an NCOLORS-by-3 array of color triples.
If the NAMES keyword is set, the program returns a vector of
color names known to the program.
If the color index parameter is not used, and a 24-bit value is not being
returned, then colorIndex is typically set to !D.Table_Size-1. However,
this behavior is changed on 8-bit devices (e.g., the PostScript device,
or the Z-graphics buffer) and on 24-bit devices that are *not* using
decomposed color. On these devices, the colors are loaded at an
offset of !D.Table_Size - ncolors - 2, and the color index parameter reflects
the actual index of the color where it will be loaded. This makes it possible
to use a formulation as below:
Plot, data, Color=FSC_Color('Dodger Blue')
on 24-bit displays *and* in PostScript output! Note that if you specify a color
index (the safest thing to do), then it will always be honored.
INPUT KEYWORD PARAMETERS:
ALLCOLORS: Set this keyword to return indices, or 24-bit values, or color
triples, for all the known colors, instead of for a single color.
DECOMPOSED: Set this keyword to 0 or 1 to force the return value to be
a color table index or a 24-bit color value, respectively.
FILENAME: The string name of an ASCII file that can be opened to read in
color values and color names. There should be one color per row
in the file. Please be sure there are no blank lines in the file.
The format of each row should be:
redValue greenValue blueValue colorName
Color values should be between 0 and 255. Any kind of white-space
separation (blank characters, commas, or tabs) are allowed. The color
name should be a string, but it should NOT be in quotes. A typical
entry into the file would look like this:
255 255 0 Yellow
NAMES: If this keyword is set, the return value of the function is
a ncolors-element string array containing the names of the colors.
These names would be appropriate, for example, in building
a list widget with the names of the colors. If the NAMES
keyword is set, the COLOR and INDEX parameters are ignored.
listID = Widget_List(baseID, Value=GetColor(/Names), YSize=16)
ROW: If this keyword is set, the return value of the function when the TRIPLE
keyword is set is returned as a row vector, rather than as the default
column vector. This is required, for example, when you are trying to
use the return value to set the color for object graphics objects. This
keyword is completely ignored, except when used in combination with the
TRIPLE keyword.
SELECTCOLOR: Set this keyword if you would like to select the color name with
the PICKCOLORNAME program. Selecting this keyword automaticallys sets
the INDEX positional parameter. If this keyword is used, any keywords
appropriate for PICKCOLORNAME can also be used. If this keyword is used,
the first positional parameter can be either a color name or the color
table index number. The program will figure out what you want.
TRIPLE: Setting this keyword will force the return value of the function to
*always* be a color triple, regardless of color decomposition state or
visual depth of the machine. The value will be a three-element column
vector unless the ROW keyword is also set.
In addition, any keyword parameter appropriate for PICKCOLORNAME can be used.
These include BOTTOM, COLUMNS, GROUP_LEADER, INDEX, and TITLE.
OUTPUT KEYWORD PARAMETERS:
CANCEL: This keyword is always set to 0, unless that SELECTCOLOR keyword is used.
Then it will correspond to the value of the CANCEL output keyword in PICKCOLORNAME.
COLORSTRUCTURE: This output keyword (if set to a named variable) will return a
structure in which the fields will be the known color names (without spaces)
and the values of the fields will be either color table index numbers or
24-bit color values. If you have specified a vector of color names, then
this will be a structure containing just those color names as fields.
NCOLORS: The number of colors recognized by the program. It will be 88 by default.
COMMON BLOCKS:
None.
SIDE EFFECTS:
None.
ADDITIONAL PROGRAMS REQUIRED:
PICKCOLORNAME: This file can be found in the Coyote Library:
http://www.dfanning.com/programs/pickcolorname.pro
EXAMPLE:
To get drawing colors in a device-decomposed independent way:
axisColor = FSC_COLOR("Green", !D.Table_Size-2)
backColor = FSC_COLOR("Charcoal", !D.Table_Size-3)
dataColor = FSC_COLOR("Yellow", !D.Table_Size-4)
Plot, Findgen(11), Color=axisColor, Background=backColor, /NoData
OPlot, Findgen(11), Color=dataColor
To set the viewport color in object graphics:
theView = Obj_New('IDLgrView', Color=FSC_Color('Charcoal', /Triple))
To change the viewport color later:
theView->SetProperty, Color=FSC_Color('Antique White', /Triple)
To load the drawing colors "red", "green", and "yellow" at indices 100-102, type this:
IDL> TVLCT, FSC_Color(["red", "green", and "yellow"], /Triple), 100
MODIFICATION HISTORY:
Written by: David W. Fanning, 19 October 2000. Based on previous
GetColor program.
Fixed a problem with loading colors with TVLCT on a PRINTER device. 13 Mar 2001. DWF.
Added the ROW keyword. 30 March 2001. DWF.
Added the PICKCOLORNAME code to the file, since I keep forgetting to
give it to people. 15 August 2001. DWF.
Added ability to specify color names and indices as vectors. 5 Nov 2002. DWF.
Fixed a problem with the TRIPLE keyword when specifying a vector of color names. 14 Feb 2003. DWF.
Fixed a small problem with the starting index when specifying ALLCOLORS. 24 March 2003. DWF.
Added system color names. 23 Jan 2004. DWF
Added work-around for WHERE function "feature" when theColor is a one-element array. 22 July 2004. DWF.
Added support for 8-bit graphics devices when color index is not specified. 25 August 2004. DWF.
Fixed a small problem with creating color structure when ALLCOLORS keyword is set. 26 August 2004. DWF.
Extended the color index fix for 8-bit graphics devices on 25 August 2004 to
24-bit devices running with color decomposition OFF. I've concluded most of
the people using IDL don't have any idea how color works, so I am trying to
make it VERY simple, and yet still maintain the power of this program. So now,
in general, for most simple plots, you don't have to use the colorindex parameter
and you still have a very good chance of getting what you expect in a device-independent
manner. Of course, it would be *nice* if you could use that 24-bit display you paid
all that money for, but I understand your reluctance. :-) 11 October 2004. DWF.
Have renamed the first positional parameter so that this variable doesn't change
while the program is running. 7 December 2004. DWF.
Fixed an error I introduced on 7 December 2004. Sigh... 7 January 2005. DWF.
(See spedas_gui/utilities/fsc_color.pro)
NAME:
FSC_FIELD
PURPOSE:
The purpose of this compound widget is to provide an alternative
to the CW_FIELD widget offered in the IDL distribution. One weakness
of the CW_FIELD compound widget is that the text widgets do not
look editable to the users on Windows platforms. This program
corrects that deficiency and adds some features that I think
will be helpful. For example, you can now assign an event handler
to the compound widget, ask for positive numbers only, and limit
the number of digits in a number, or the number of digits to the
right of a decimal point. The program is written as a widget object,
which allows the user to call object methods directly, affording
even more flexibility in use. This program replaces the earlier
programs FSC_INPUTFIELD and COYOTE_FIELD.
The program consists of a label widget next to a one-line text widget.
The "value" of the compound widget is shown in the text widget. If the
value is a number, it will not be possible (generally) to type
alphanumeric values in the text widget. String values behave like
strings in any one-line text widget.
AUTHOR:
FANNING SOFTWARE CONSULTING
David Fanning, Ph.D.
1645 Sheely Drive
Fort Collins, CO 80526 USA
Phone: 970-221-0438
E-mail: davidf@dfanning.com
Coyote's Guide to IDL Programming: http://www.dfanning.com/
CATEGORY:
General programming.
TYPICAL CALLING SEQUENCE:
fieldID = FSC_FIELD(parent, Title="X Size:", Value=256, Object=fieldObject, Digits=3)
INPUT PARAMETERS:
parent -- The parent widget ID of the compound widget. Required.
INPUT KEYWORDS:
COLUMN Set this keyword to have the Label widget above the Text widget.
The default is to have the Label widget in a row with the Text widget.
CR_ONLY Set this keyword if you only want Carriage Return events returned to
your event handler. If this keyword is not set, all events are returned.
Setting this keyword has no effect unless either the EVENT_PRO or
EVENT_FUNC keyword is used.
DECIMAL Set this keyword to the number of digits to the right of the decimal
point in floating point or double precision numbers. Ignored for STRING values.
DIGITS Set this keyword to the number of digits permitted in integer numbers.
EVENT_FUNC Set this keyword to the name of an event handler function. If this
keyword is undefined and the Event_Pro keyword is undefined,
all compound widget events are handled internally and not
passed on to the parent widget.
EVENT_PRO Set this keyword to the name of an event handler procedure. If this
keyword is undefined and the Event_Func keyword is undefined,
all compound widget events are handled internally and not
passed on to the parent widget.
FIELDFONT The font name for the text in the text widget.
FRAME Set this keyword to put a frame around the compound widget.
FOCUS_EVENTS Set this keyword to enable event generation for keyboard focus
events. Ignored unless EVENT_FUNC or EVENT_PRO keywords are specified.
HIGHLIGHT Set this keyword to highlight the existing text if the widget gain
the keyboard focus. This keyword MUST be set for tabbing to work naturally
in IDL 6.2 and higher.
LABEL_LEFT Set this keyword to align the text on the label to the left.
LABEL_RIGHT Set this keyword to align the text on the label to the right.
LABELFONT The font name for the text in the label widget.
LABELSIZE The X screen size of the label widget.
NAME A string containing the name of the object. The default is ''.
NOEDIT Set this keyword to allow no user editing of the input text widget.
NONSENSITIVE Set this keyword to make the input text widget non-sensitive.
POSITIVE Set this keyword if you want only positive numbers allowed.
SCR_XSIZE The X screen size of the compound widget.
SCR_YSIZE The Y screen size of the compound widget.
TITLE The string text placed on the label widget.
UNDEFINED Set this keyword to the value to use for "undefined" values. If
not set, then !Value.F_NAN is used for numerical fields and a
NULL string is used for string fields. This applies to values
obtained with the GET_VALUE method or the GET_VALUE function.
UVALUE A user value for any purpose.
VALUE The "value" of the compound widget. Any type of integer, floating, or string
variable is allowed. The data "type" is determined automatically from the
value supplied with this keyword. Be sure you set the type appropriately for
your intended use of the value.
XSIZE The X size of the text widget in the usual character units.
OUTPUT KEYWORDS:
OBJECT Set this keyword to a named variable to receive the compound widget's
object reference. This is required if you wish to call methods on the object.
Note that the object reference is also available in the event structure
generated by the widget object. Note that the object reference will be
necessary if you want to get or set values in the compound widget.
COMMON BLOCKS:
None.
RESTRICTIONS:
Requires DBLTOSTR from the Coyote Library:
http://www.dfanning.com/programs/dbltostr.pro
EVENT STRUCTURE:
All events are handled internally unless either the Event_Pro or Event_Func
keywords are used to assign an event handler to the compound widget. By
default all events generated by the text widget are passed to the assigned
event handler. If you wish to receive only Carriage Return events, set the
CR_Only keyword.
event = { FSC_FIELD_EVENT, $ ; The name of the event structure.
ID: 0L, $ ; The ID of the compound widget's top-level base.
TOP: 0L, $ ; The widget ID of the top-level base of the hierarchy.
HANDLER: 0L, $ ; The event handler ID. Filled out by IDL.
OBJECT: Obj_New(), $ ; The "self" object reference. Provided so you can call methods.
VALUE: Ptr_New(), $ ; A pointer to the widget value.
TYPE:"" ; A string indicating the type of data in the VALUE field.
}
Note that if the field is "empty", the VALUE will be a pointer
to an undefined variable. You should check this value before you
use it. You code will look something like this:
IF N_Elements(*event.value) EQ 0 THEN $
Print, 'Current Value UNDEFINED.' ELSE $
Print, 'Current Value: ', *event.value
GETTING and SETTING VALUES:
Almost all the properties of the widget can be obtained or set via
the object's GetProperty and SetProperty methods (described below).
Traditional compound widgets have the ability to get and set the "value"
of the compound widget identifier (e.g., fieldID in the calling
sequence above). Unfortunately, it is impossible to retreive a variable
in this way when the variable is undefined. In practical terms, this
means that the undefined variable must be set to *something*. You can
determine what that something is with the UNDEFINED keyword, or I will set
it to !VALUES.F_NAN for numerical fields and to the null string for string
fields. In any case, you will have to check for undefined variables before
you try to do something with the value. For a numerical field, the code
might look something like this:
fieldID = FSC_FIELD(parent, Title="X Size:", Value=256, Object=fieldObject, Digits=3)
currentValue = fieldObject->Get_Value()
IF Finite(currentValue) EQ 0 THEN Print, 'Value is Undefined' ELSE Print, currentValue
Additional examples are provided in the numerical example fields in Example Program below.
Setting the value of the compound widget is the same as calling the Set_Value
method on the object reference. In other words, these two statements are equivalent.
fieldObject->Set_Value, 45.4
Widget_Control, fieldID, Set_Value=45.4
The data type of the value is determined from the value itself. Be sure you set it appropriately.
OBJECT PROCEDURE METHODS:
GetProperty -- This method allows various properties of the widget to be
returned via output keywords. The keywords that are available are:
CR_Only -- A flag, if set, means only report carriage return events.
DataType -- The data type of the field variable.
Decimal -- Set this keyword to the number of digits to the right of the decimal
point in FLOATVALUE and DOUBLEVALUE numbers.
Digits -- Set this keyword to the number of digits permitted in INTERGERVALUE and LONGVALUE numbers.
Event_Func -- The name of the event handler function.
Event_Pro -- The name of the event handler function.
Has_Focus -- Set to 1 if the text widget currently has the keyboard focus.
Highlight -- The highlight flag.
NoEdit -- The NoEdit flag.
NonSensitive -- The NonSensitive flag.
Undefined -- The "value" of any undefined value.
UValue -- The user value assigned to the compound widget.
Value -- The "value" of the compound widget.
Name -- A scalar string name of the object.
Resize -- This method allows you to resize the compound widget's text field.
The value parameter is an X screen size for the entire widget. The text
widget is sized by using the value obtained from this value minus the
X screen size of the label widget.
objectRef->Resize, screen_xsize_value
Set_Value -- This method allows you to set the "value" of the field. It takes
one positional parameter, which is the value.
objectRef->Set_Value, 5
SetProperty -- This method allows various properties of the widget to be
set via input keywords. The keywords that are available are:
CR_Only -- Set this keyword if you only want Carriage Return events.
Decimal -- Set this keyword to the number of digits to the right of the decimal
point in FLOAT and DOUBLE numbers.
Digits -- Set this keyword to the number of digits permitted in INTERGER and LONG numbers.
Event_Func -- Set this keyword to the name of an Event Function.
Event_Pro -- Set this keyword to the name of an Event Procedure.
Highlight -- Set this keyword to highlight the existing text
when the widget gets the keyboard focus
LabelSize -- The X screen size of the Label Widget.
Name -- A scalar string name of the object. (default = '')
NoEdit -- Set this keyword to make the text widget uneditable
NonSensitive -- Set this keyword to make the widget nonsensitive
Scr_XSize -- The X screen size of the text widget.
Scr_YSize -- The Y screen size of the text widget.
Title -- The text to go on the Label Widget.
UValue -- A user value for any purpose.
Value -- The "value" of the compound widget.
XSize -- The X size of the Text Widget.
SetTabNext -- This method allows you to specify which field to go to when a TAB character
is typed in the text widget. See the Example program below for an example of how to
use this method.
OBJECT FUNCTIONS METHODS:
Get_Value -- Returns the "value" of the field. No parameters. Will be undefined
if a "number" field is blank. Should be checked before using:
IF N_Elements(objectRef->Get_Value()) NE 0 THEN Print, Value is: ', objectRef->Get_Value()
GetID -- Returns the widget identifier of the compound widget's top-level base.
(The first child of the parent widget.) No parameters.
GetLabelSize -- Returns the X screen size of the label widget. No parameters.
GetTextID -- Returns the widget identifier of the compound widget's text widget.
No parameters.
GetTextSize -- Returns the X screen size of the text widget. No parameters.
PRIVATE OBJECT METHODS:
Although there is really no such thing as a "private" method in IDL's
object implementation, some methods are used internally and not meant to
be acessed publicly. Here are a few of those methods. I list them because
it may be these private methods are ones you wish to override in subclassed
objects.
MoveTab -- This method moves the focus to the widget identified in the "next" field,
which must be set with the SetTabNext method. No parameters. Called automatically
when a TAB character is typed in the text widget.
Text_Events -- The main event handler method for the compound widget. All
text widget events are processed here.
ReturnValue -- This function method accepts a string input value and converts
it to the type of data requested by the user.
Validate -- This function method examines all text input and removes unwanted
characters, depending upon the requested data type for the field. It makes it
impossible, for example, to type alphanumeric characters in an INTEGER field.
EXAMPLE:
An example program is provided at the end of the FSC_FIELD code. To run it,
type these commands:
IDL> .Compile FSC_Field
IDL> Example
MODIFICATION HISTORY:
Written by: David W. Fanning, 18 October 2000. Based heavily on an earlier
FSC_INPUTFIELD program and new ideas about the best way to write
widget objects.
Added LABEL_LEFT, LABEL_RIGHT, and UNDEFINED keywords. 29 Dec 2000. DWF.
Modified the way the value is returned in the GET_VALUE method and the
GET_VALUE function. Modified Example program to demonstrate. 30 Dec 2000. DWF.
Added NOEDIT and NONSENSITIVE keywords, with corresponding SETEDIT and SETSENNSITIVE
methods. 19 Jan 2001. DWF.
Actually followed through with the changes I _said_" I made 29 Dec 2000. (Don't ask....) 13 June 2001. DWF.
Added GetTextSize and GetLabelSize methods for obtaining the X screen
size of the text and label widgets, respectively. 21 July 2001. DWF.
Fixed a problem in SetProperty method where I was setting self.xsize, which doesn't exist. 24 April 2002. DWF.
Small modification to the SetEdit method. 6 August 2003. DWF.
Added Highlight keyword. Ported Focus_Events keyword from
fsc_inputfield.pro. Updated documentation. 17 November
2004. DWF and Benjamin Hornberger
Added Has_Focus keyword to the GetProperty method. 18 November
2004. Benjamin Hornberger
Fixed bug in GetProperty method (set value to *self.undefined if
*self.value is undefined. 24 Feb 2004. Benjamin Hornberger
Modified FOCUS_EVENTS keyword handling so that *all* focus events are now
passed to specified event handlers. Check event.select to see if the
widget is gaining or losing focus. 10 August 2005. DWF.
Added new tabbing functionality, introduced in IDL 6.2. To use tabbing
functionality natually, the HIGHTLIGHT keywords must be set.
See included EXAMPLE program for details. 10 August 2005. DWF.
Added functionality to covert double precision values to strings properly. 30 Nov 2005. DWF.
(See spedas_gui/utilities/fsc_field.pro)
NAME: getctpath PURPOSE: gets the path of the color table on the file system CALLING SEQUENCE: getctpath,color_table_path OUTPUT: color_table_path: the path to the color table $LastChangedBy: jimm $ $LastChangedDate: 2014-02-11 10:54:32 -0800 (Tue, 11 Feb 2014) $ $LastChangedRevision: 14326 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/getctpath.pro $
(See spedas_gui/utilities/getctpath.pro)
NAME: gethelppath PURPOSE: gets the path of the help directory in a cross platform way CALLING SEQUENCE: gethelppath,path OUTPUT: path: the path to the resource directory $LastChangedBy: jimm $ $LastChangedDate: 2014-02-11 10:54:32 -0800 (Tue, 11 Feb 2014) $ $LastChangedRevision: 14326 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/gethelppath.pro $
(See spedas_gui/utilities/gethelppath.pro)
NAME: getpluginpath PURPOSE: gets the path of the plugins directory in a cross platform way CALLING SEQUENCE: getpluginpath,path OUTPUT: path: the path to the plugins directory $LastChangedBy: egrimes $ $LastChangedDate: 2015-01-09 09:30:19 -0800 (Fri, 09 Jan 2015) $ $LastChangedRevision: 16608 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/getpluginpath.pro $
(See spedas_gui/utilities/getpluginpath.pro)
NAME: getresourcepath PURPOSE: gets the path of the resource directory in a cross platform way CALLING SEQUENCE: getresourcepath,path OUTPUT: path: the path to the resource directory $LastChangedBy: nikos $ $LastChangedDate: 2015-06-25 11:06:01 -0700 (Thu, 25 Jun 2015) $ $LastChangedRevision: 17971 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/getresourcepath.pro $
(See spedas_gui/utilities/getresourcepath.pro)
Call this function to return the absolute file path to the
<b>introduction</b> directory (used to store files for the
<i>Introduction to IDL</i> class) on your computer.
<p>
This routine replaces SET_TRAINING_DIRECTORY, which is now obsolete.
<p>
@pre This file must reside in the same directory as the course files.
@returns The path to the directory where the course files reside.
@examples
<pre>
IDL> dir = get_intro_dir()
IDL> print, filepath('hello.pro', root=dir)
/home/mpiper/IDL/introduction/hello.pro
</pre>
@uses SOURCEROOT or SOURCEPATH
@requires IDL 5.2
@author Mark Piper, RSI, 2005
(See spedas_gui/utilities/get_intro_dir.pro)
NAME: get_max_memblock.pro PURPOSE: Returns size of largest contiguous block of memory available to IDL in megabytes. This function is intended to be used as a guide to determine how much data can be stored in a single operation without IDL returning an "Unable to allocate memory" error. The block size returned is not necessarily the largest block in RAM. It might be partially or completely located in virtual memory/disk swap space, in which case performance might suffer if that block is used. Note that the returned value is only a snapshot in time. Since other things can be going on with the OS and other applications, the size of the largest free memory block can increase or decrease in the time between calling this function and attempting to fill that block with data. It is up to the programmer to decide what percentage of the returned value is safe to use. CALLING SEQUENCE: maxBlockSize = get_max_memblock() INPUT: None OUTPUT: Size of largest contiguous memory block available to IDL in megabytes.
(See spedas_gui/utilities/get_max_memblock.pro)
NAME:
get_max_memblock2.pro
PURPOSE:
Returns size of largest contiguous block of memory available to IDL in
megabytes.
This function is intended to be used as a guide to determine how much data
can be stored in a single operation without IDL returning an "Unable to
allocate memory" error. The block size returned is not necessarily the
largest block in RAM. It might be partially or completely located in virtual
memory/disk swap space, in which case performance might suffer if that block
is used.
Note that the returned value is only a snapshot in time. Since other things
can be going on with the OS and other applications, the size of the largest
free memory block can increase or decrease in the time between calling this
function and attempting to fill that block with data. It is up to the
programmer to decide what percentage of the returned value is safe to use.
CALLING SEQUENCE:
maxBlockSize = get_max_memblock()
INPUT:
None
KEYWORDS:
maxblock_in = the size of the initial value of the max blocksize in
bytes, the default is 12 Gigabytes worth. Note that a
long64 integer is needed if the value is larger than 2
gBytes.
OUTPUT:
Size of largest contiguous memory block available to IDL in
megabytes.
Modification HISTORY:
jmm, 3-feb-2009, hacked get_max_memblock--changed method to bisection
(See spedas_gui/utilities/get_max_memblock2.pro)
NAME:
LOADDATA
PURPOSE:
The purpose of this function is to read a selection of standard
data sets that are found in the normal IDL distribution in the
subdirectory $IDL_DIR/examples/data. At least 17 data sets are
available in all categories of data. The user selects one of the
possible data sets with the mouse.
CATEGORY:
File I/O.
AUTHOR:
FANNING SOFTWARE CONSULTING
David Fanning, Ph.D.
1645 Sheely Drive
Fort Collins, CO 80526 USA
Phone: 970-221-0438
E-mail: davidf@dfanning.com
Coyote's Guide to IDL Programming: http://www.dfanning.com/
CALLING SEQUENCE:
If calling from the IDL command line:
data = LoadData()
If calling from within a widget program:
data = LoadData(Cancel=cancelled, Group_Leader=event.top)
If you know which data set you want, you can load it directly:
data = LoadData(7)
OPTIONAL INPUTS:
selection : The number of the data selection. Values start at 1,
and go up to the number of data sets available (currently 17).
KEYWORD PARAMETERS:
CANCEL : An output keyword that is 1 of the use clicked the CANCEL
button and 0 otherwise.
data = Loaddata(Cancel=cancelled)
IF cancelled THEN RETURN
GROUP_LEADER: The group leader of the widget. This keyword
is required if you wish LOADDATA to be a modal widget program.
(Which you *always* do when calling it from a widget program.)
IMAGES: Set this keyword if you only want to select 2D image
data sets. Note that the selection number does *not* change
just because fewer data sets are available in the selection
widget.
COMMON BLOCKS:
None.
SIDE EFFECTS:
None.
RESTRICTIONS:
None.
EXAMPLE:
To load the world elevation data set:
image = LoadData(7)
MODIFICATION HISTORY:
Written by: David W. Fanning, 5 March 1999.
Added some additonal random data capability. 29 April 99. DWF
Added IMAGES keyword. 31 March 2000. DWF.
Fixed a problem with the CANCEL button. 25 Oct 2002. DWF.
Added new JPEG, DICOM, TIFF, and PGN images. 30 Oct 2002. DWF.
Modified old program units to work with IDL strict arrays. 29 June 2003. DWF
(See spedas_gui/utilities/loaddata.pro)
A program for loading data files used in the ITT VIS course
<i>Introduction to IDL</i>.
@param name {in}{required}{type=string} The name of a dataset, entered
as a string.
@keyword list {optional}{type=boolean} Set this keyword to return a list
of available datasets.
@returns A requested dataset.
@examples
<pre>
IDL> dem = load_data('lvdem')
IDL> isurface, dem
</pre>
@pre This file must be in the same directory as the course files.
@uses READ_ASOS, GET_INTRO_DIR
@requires IDL 5.3
@author Mike Galloy and Mark Piper, RSI, 2003
@history
2004-08, MP: Uses SOURCEROOT instead of SET_TRAINING_DIRECTORY
2005-10, MP: Added 'ladem' and 'laimage'
2005-10, MP: Replaced SOURCEROOT and <i>!training</i> with
GET_INTRO_DIR function
(See spedas_gui/utilities/load_data.pro)
NAME: makecolortable PURPOSE: makes the color table file for the spedas gui CALLING SEQUENCE: makecolortable EFFECTS: overwrites the file spedas/spd_ui/utilities/spd_gui_colors.tbl $LastChangedBy: nikos $ $LastChangedDate: 2016-10-18 16:31:28 -0700 (Tue, 18 Oct 2016) $ $LastChangedRevision: 22141 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/makecolortable.pro $
(See spedas_gui/utilities/makecolortable.pro)
Procedure: num_to_str_pad
Purpose:
This is a very basic operation that gets repeated a lot in date file output.
This takes a number as input and pads zeros on the front so that the number outputs
at fixed field width.
Inputs:
val: The number to be converted
len: The final length requested
Keywords:
pad: Select a character other than '0' with which to pad
integral: Normally, if val is a floating point type, if will add a .00, If this keyword is set, forces no decimal points.
Notes:
1. For a while I resisted putting this in the distribution as it seemed too specific an operation,
but at the point when I was considering implementing this routine for a 4th time in a separate
namespace, I just decided to go ahead and add this instead.
2. There is no error checking to determine if the input is wider than 'len'
3. Currently floating point inputs will produce unreliable results.
Example:
date_str = num_to_str_pad(year,4)+num_to_str_pad(mon,2)+num_to_str_pad(day,2)
$LastChangedBy: nikos $
$LastChangedDate: 2016-10-19 15:27:17 -0700 (Wed, 19 Oct 2016) $
$LastChangedRevision: 22151 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/num_to_str_pad.pro $
(See spedas_gui/utilities/num_to_str_pad.pro)
PRO: open_spedas_document PURPOSE: opens a spedas document Inputs: info: info struct from main gui event handler filename:name of the file nodelete:indicates that preexisting data should not be deleted during read Outputs: statuscode: negative value indicates failure, 0 indicates success statusmsg: a message to be returned in the event of an error $LastChangedBy: jimm $ $LastChangedDate: 2014-02-11 10:54:32 -0800 (Tue, 11 Feb 2014) $ $LastChangedRevision: 14326 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/open_spedas_document.pro $
(See spedas_gui/utilities/open_spedas_document.pro)
PRO: open_spedas_template PURPOSE: opens a spedas template Inputs: filename:name of the file Outputs: statuscode: negative value indicates failure, 0 indicates success statusmsg: a message to be returned in the event of an error template: the template object $LastChangedBy: egrimes $ $LastChangedDate: 2015-04-09 11:52:06 -0700 (Thu, 09 Apr 2015) $ $LastChangedRevision: 17264 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/open_spedas_template.pro $
(See spedas_gui/utilities/open_spedas_template.pro)
NAME:
PICKCOLOR
PURPOSE:
A modal dialog widget allowing the user to select
the RGB color triple specifying a color. The return
value of the function is the color triple specifying the
color or the "name" of the color if the NAME keyword is set.
AUTHOR:
FANNING SOFTWARE CONSULTING:
David Fanning, Ph.D.
1645 Sheely Drive
Fort Collins, CO 80526 USA
Phone: 970-221-0438
E-mail: davidf@dfanning.com
Coyote's Guide to IDL Programming: http://www.dfanning.com
NOTE: This software has been heavily modified for usage by the SPEDAS GUI. Please direct any errors to the SPEDAS software team
team and we will contact David Fanning, as necessary.
CATEGORY:
Graphics, Color Specification. See related program FSC_COLOR.
CALLING SEQUENCE:
color = PickColor(colorindex)
RETURN VALUE:
The return value of the function is a 1-by-3 array containing
the values of the color triple that specifies the selected color.
The color can be loaded, for example, in any color index:
color = PickColor(240)
TVLCT, color, 240
The return value is the original color triple if the user
selects the CANCEL button.
IF the NAMES keyword is set, the return value of the function is
the "name" of the selected color. This would be appropriate for
passing to the FSC_COLOR program, for example.
OPTIONAL INPUT POSITIONAL PARAMETERS:
COLORINDEX: The color index of the color to be changed. If not
specified the color index !D.Table_Size - 2 is used.
The Current Color and the Color Sliders are set to the
values of the color at this color index.
OPTIONAL INPUT KEYWORD PARAMETERS:
GROUP_LEADER: The group leader for this widget program. This
keyword is required for MODAL operation. If not supplied
the program is a BLOCKING widget. Be adviced, however, that
the program will NOT work if called from a blocking widget
program, unless a GROUP_LEADER is supplied.
NAMES: Set this keyword to return the "name" of the selected color
rather than its color triple.
STARTINDEX: 88 pre-determined colors are loaded The STARTINDEX
is the index in the color table where these 88 colors will
be loaded. By default, it is !D.Table_Size - 89.
TITLE: The title on the program's top-level base. By default the
title is "Pick a Color".
OPTIONAL INPUT KEYWORD PARAMETERS:
CANCEL: A keyword that is set to 1 if the CANCEL button is selected
and to 0 otherwise.
COMMON BLOCKS:
None.
MODIFICATION HISTORY:
Written by: David Fanning, 28 Oct 99.
Added NAME keyword. 18 March 2000, DWF.
Fixed a small bug when choosing a colorindex less than !D.Table_Size-17. 20 April 2000. DWF.
Added actual color names to label when NAMES keyword selected. 12 May 2000. DWF.
Modified to use 88 colors and FSC_COLOR instead of 16 colors and GETCOLOR. 4 Dec 2000. DWF.
Now drawing small box around each color. 13 March 2003. DWF.
Added CURRENTCOLOR keyword. 3 July 2003. DWF.
Switched to object graphics, eliminated side-effects. 25 Jan 2011 pcruce.
(See spedas_gui/utilities/pickcolor.pro)
NAME:
PICKCOLORNAME
PURPOSE:
The purpose of this program is to provide a blocking
or modal widget interface for selecting a color "name".
The program uses colors familiar to the FSC_COLOR program,
and is often used to select a color name for passing to FSC_COLOR.
AUTHOR:
FANNING SOFTWARE CONSULTING:
David Fanning, Ph.D.
1645 Sheely Drive
Fort Collins, CO 80526 USA
Phone: 970-221-0438
E-mail: davidf@dfanning.com
Coyote's Guide to IDL Programming: http://www.dfanning.com
CATEGORY:
Graphics, Color Specification.
CALLING SEQUENCE:
colorName = PickColorName(startColorName)
OPTIONAL INPUT PARAMETERS:
startColorName: A string with the "name" of the color. Colors available are these:
Almond Antique White Aquamarine Beige Bisque Black
Blue Blue Violet Brown Burlywood Charcoal Chartreuse
Chocolate Coral Cornsilk Cyan Dark Goldenrod Dark Gray
Dark Green Dark Khaki Dark Orchid Dark Salmon Deep Pink Dodger Blue
Firebrick Forest Green Gold Goldenrod Gray Green
Green Yellow Honeydew Hot Pink Indian Red Ivory Khaki
Lavender Lawn Green Light Coral Light Cyan Light Gray Light Salmon
Light Yellow Lime Green Linen Magenta Maroon Medium Gray
Medium Orchid Moccasin Navy Olive Olive Drab Orange
Orange Red Orchid Pale Goldenrod Pale Green Papaya Peru
Pink Plum Powder Blue Purple Red Rose
Rosy Brown Royal Blue Saddle Brown Salmon Sandy Brown Sea Green
Seashell Sienna Sky Blue Slate Gray Snow Spring Green
Steel Blue Tan Thistle Tomato Turquoise Violet
Violet Red Wheat White Yellow
The color WHITE is used if this parameter is absent.
INPUT KEYWORD PARAMETERS:
BOTTOM: The colors used in the program must be loaded somewhere
in the color table. This keyword indicates where the colors
start loading. By default BOTTOM is set equal to !D.Table_Size-NCOLORS-1.
COLUMNS: Set this keyword to the number of columns the colors should
be arranged in.
FILENAME: The string name of an ASCII file that can be opened to read in
color values and color names. There should be one color per row
in the file. Please be sure there are no blank lines in the file.
The format of each row should be:
redValue greenValue blueValue colorName
Color values should be between 0 and 255. Any kind of white-space
separation (blank characters, commas, or tabs) are allowed. The color
name should be a string, but it should NOT be in quotes. A typical
entry into the file would look like this:
255 255 0 Yellow
GROUP_LEADER: This identifies a group leader if the program is called
from within a widget program. Note that this keyword MUST be provided
if you want to guarantee modal widget functionality. (If you don't know
what this means, believe me, you WANT to use this keyword, always.)
INDEX: This keyword identifies a color table index where the selected color
is to be loaded when the program exits. The default behavior is to restore
the input color table and NOT load a color.
TITLE: This keyword accepts a string value for the window title. The default
is "Select a Color".
OUTPUT KEYWORD PARAMETERS:
CANCEL: On exit, this keyword value is set to 0 if the user selected
the ACCEPT button. IF the user selected the CANCEL button, or
closed the window in any other way, this keyword value is set to 1.
COMMON BLOCKS:
None.
SIDE EFFECTS:
Colors are loaded in the current color table. The input color table
is restored when the program exits. This will only be noticable on
8-bit displays. The startColorName is returned if the user cancels
or destroys the widget before a selection is made. Users should
check the CANCEL flag before using the returned color.
EXAMPLE:
To call the program from the IDL comamnd line:
IDL> color = PickColorName("red") & Print, color
To call the program from within a widget program:
color = PickColorName("red", Group_Leader=event.top) & Print, color
MODIFICATION HISTORY:
Written by: David Fanning, 31 August 2000.
Modified program to read colors from a file and to use more
colors on 24-bit platforms. 16 October 2000. DWF.
Added the COLUMNS keyword. 16 October 2000. DWF.
Fixed a small problem with mapping a modal widget. 2 Jan 2001. DWF
Now drawing small box around each color. 13 March 2003. DWF.
(See spedas_gui/utilities/pickcolorname.pro)
NAME:
PROGRESSBAR__DEFINE
PURPOSE:
Creates a simple progress bar for indicating the progess of a looping
operation in IDL.
AUTHOR:
FANNING SOFTWARE CONSULTING
David Fanning, Ph.D.
1645 Sheely Drive
Fort Collins, CO 80526 USA
Phone: 970-221-0438
E-mail: davidf@dfanning.com
Coyote's Guide to IDL Programming: http://www.dfanning.com
CATEGORY:
Utilities
CALLING SEQUENCE:
progressBar = Obj_New("PROGRESSBAR")
ARGUMENTS:
None.
KEYWORDS:
BACKGROUND: The name of the background color of the progress bar. By default, "black".
COLOR: The name of the color for the progress bar. By default: "red".
Possible color names are those defined by FSC_COLOR:
Almond Antique White Aquamarine Beige Bisque Black
Blue Blue Violet Brown Burlywood Charcoal Chartreuse
Chocolate Coral Cornsilk Cyan Dark Goldenrod Dark Gray
Dark Green Dark Khaki Dark Orchid Dark Salmon Deep Pink Dodger Blue
Firebrick Forest Green Gold Goldenrod Gray Green
Green Yellow Honeydew Hot Pink Indian Red Ivory Khaki
Lavender Lawn Green Light Coral Light Cyan Light Gray Light Salmon
Light Yellow Lime Green Linen Magenta Maroon Medium Gray
Medium Orchid Moccasin Navy Olive Olive Drab Orange
Orange Red Orchid Pale Goldenrod Pale Green Papaya Peru
Pink Plum Powder Blue Purple Red Rose
Rosy Brown Royal Blue Saddle Brown Salmon Sandy Brown Sea Green
Seashell Sienna Sky Blue Slate Gray Snow Spring Green
Steel Blue Tan Thistle Tomato Turquoise Violet
Violet Red Wheat White Yellow
FAST_LOOP: Set this keyword if what you are doing in the loop doesn't involve
any color operations and you want the progress bar to update as fast
as possible. With this keyword set, the program will eliminate extra
calls to FSC_COLOR, which can be slow if you are calling it, say,
10,000 times!
GROUP_LEADER: The group leader for the progress bar.
NOCANCEL: Set this keyword to eliminate the CANCEL button from the progres bar.
PERCENT: The initial percent on the progress bar. Used only if the START keyword is
also set.
START: Set this keyword if you wish to call the START method immediately upon initialization.
TEXT: The textual message that goes above the progress bar. By default:
"Operation in progress..."
TITLE: The title of the progress bar window. By default: "Progress Bar".
XSIZE: The X size of the progress bar itself. By default, 150 pixels.
YSIZE: The Y size of the progress bar itself. By default, 10 pixels.
PROCEDURE:
The user is responsible for starting, updating, checking for CANCEL events, and
destroying the progress indicator. The sequence of commands might look
like this:
progressBar = Obj_New("PROGRESSBAR")
progressBar -> Start
FOR j=0,9 DO BEGIN
IF progressBar -> CheckCancel() THEN BEGIN
ok = Dialog_Message('The user cancelled operation.')
RETURN
ENDIF
Wait, 0.5 ; Would probably be doing something ELSE here!
progressBar -> Update, (j+1)*10
ENDFOR
progressBar -> Destroy
See the example program at the end of this file for a working example of code.
METHODS:
CHECKCANCEL: This function method returns a 1 if the user has clicked
the CANCEL button. Otherwise, it returns a 0.
cancelled = progressBar -> CheckCancel()
IF cancelled THEN progressBar->Destroy
DESTROY: Destroys the progress bar widgets as well as the object.
progressBar -> Destroy
GETPROPERTY: Gets certain properties of the object.
progressBar -> GetProperty, Color=currentColor
SETPROPERTY: Allows the user to set certain properties of the object.
progressBar -> SetProperty, Color='green'
START: Puts the progress bar on the display and enables it to receive events.
progressBar -> Start
UPDATE: Updates the progress bar. Requires on argument, a number between 0
and 100 that indicates the percent of progress bar that should be filled
with a color. Can optional specify TEXT that is displayed above the progress
bar.
progressBar -> Update, 50
progressBar -> Update, 50, Text='Operation 50% completed...'
EXAMPLE:
See the example program at the bottom of this file.
RESTRICTIONS:
Note that the progress bar cannot be run as a MODAL widget program and
still capture CANCEL button events. Thus, the user *may* be able to generate events
in the calling program while this progress bar is in operation.
DEPENDENCIES:
This program requires FSC_COLOR from the Coyote Library:
http://www.dfanning.com/programs/fsc_color.pro
MODIFICATION HISTORY:
Written by: David W. Fanning, 19 September 2002.
Added TEXT keyword to Update method. 12 Nov 2002. DWF.
Added FAST_LOOP keyword. 19 Dec 2002. DWF.
Fixed a problem in where I was checking for CANCEL button event. 2 April 2003. DWF.
Removed the XMANAGER call in the START method, since it wasn't needed. 7 October 2003. DWF.
General maintenance updates. Added START keyword to INIT method to allow immediate
starting upon initialization. Added better error handling and checking. 10 October 2003. DWF.
Added ACCEPT button and CheckButton method. Modified Example program to demonstrate new
functionality. 1 December 2003. DWF.
Added XOFFSET and YOFFSET keywords. 4 March 2004. DWF.
Removed obsolete STR_SEP and replaced with STRSPLIT. 27 Oct 2004. DWF.
Added keyword keyword TITLE to Update method. 23 Feb 2005. Benjamin Hornberger
Added BACKGROUND keyword. 22 Dec 2006. DWF.
Added RETAIN=1 keyword to Widget_Draw command. 9 Dec 2007. DWF.
(See spedas_gui/utilities/progressbar__define.pro)
NAME:
saveas_ascii.pro
PURPOSE:
Saves SPEDAS Loaded Data variables in ASCII format.
INPUT & KEYWORDS:
loadedData: SPEDAS GUI loaded data object
timefmt: Index specifying which format to use for time quantities.
(passed to formatannotation.pro)
fmt_code: Index specifying which format to use for data.
; (passed to formatannotation.pro)
timeStringFmt: String specifying a custom time format.
See TFORMAT keyword for time_string.pro for usage.
This keyword will override TIMEFMT.
local_time: Flag to use local time instead of UTC, only valid if
used with TIMESTRINGFMT
OTHER:
Documentation for this procedure is incomplete.
(See spedas_gui/utilities/saveas_ascii.pro)
PRO: save_document PURPOSE: saves a spedas document Inputs: windowstorage: windowstorage object storing the draw tree to be save filename:name of the file Outputs: statuscode: negative value indicates failure, 0 indicates success statusmsg: a message to be returned in the event of an error $LastChangedBy: jimm $ $LastChangedDate: 2014-02-11 10:54:32 -0800 (Tue, 11 Feb 2014) $ $LastChangedRevision: 14326 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/save_document.pro $
(See spedas_gui/utilities/save_document.pro)
PRO: save_spedas_template PURPOSE: saves a spedas template Inputs: template:the template object to be saved filename:name of the file Outputs: statuscode: negative value indicates failure, 0 indicates success statusmsg: a message to be returned in the event of an error $LastChangedBy: jimm $ $LastChangedDate: 2014-02-11 10:54:32 -0800 (Tue, 11 Feb 2014) $ $LastChangedRevision: 14326 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/save_spedas_template.pro $
(See spedas_gui/utilities/save_spedas_template.pro)
This procedure returns the directory path associated with
the routine calling this function. This is useful for
building applications that need to bootstrap resource and
configuration files when the installation directory may not
be known until run time. Use this function in conjunction
with FILEPATH to build platform-independent file path strings
to your resources. <br>
For example, <pre>
b = WIDGET_BUTTON(tlb, /BITMAP, $
VALUE=FILEPATH('up.bmp', ROOT = SourcePath(), SUBDIR = ['resource'])</pre>
This will search for a file named "up.bmp" in the subdirectory named
"resource" below the directory in which is located the source code
(or SAVE file) for the routine containing the above statement.
@Keyword
Base_Name {out}{optional}{type=string}
Set this keyword to a named variable to retrieve the
base file name of the routine's source.
@Returns
The return value is the root directory path to
the calling routine's source file or SAVE file.
@Examples <pre>
Create a file myapp.pro with the contents and run it.
PRO MYAPP
PRINT, SourcePath()
END
The printed output will be the full path to the
directory in which abc.pro was created, regardless of
IDL's current working directory.</pre>
@History
03/18/2005 JLP, RSI - Original version
(See spedas_gui/utilities/sourcepath.pro)
The SOURCEROOT function, in combination with
FILEPATH, allows a program to locate other
files within a routine source file's related
directory tree.
<p>
For example, an IDL routine file named
C:\myapp\abc.pro calls SOURCEROOT as in
<p>
<pre>
PRO ABC
PRINT, SOURCEROOT()
END
</pre>
the resulting output will be the string "C:\myapp".
<p>
If data associated with the application are in
C:\myapp\mydata, a data file in this directory
can be located via
<p>
<pre>
IDL> datafile = FilePath('data.dat',$
IDL> ROOT=SourceRoot(), $
IDL> SUBDIR=['data'])
</pre>
The programmer can distribute the application
to another user who may install the original directory tree
into "D:\app".
No code modifications would be required for this
user to successfully locate the data.dat file.
<p>
If the routine ABC were compiled and saved to
an IDL SAVE file and distributed, the SOURCEROOT
function will return the path to the SAVE file
instead.
@author Jim Pendleton
(See spedas_gui/utilities/sourceroot.pro)
NAME: spd_addslash PURPOSE: Adds a trailing slash to a string, (usually a directory name) if it does not already have one. This is used to insure that local and remote directory names passed into load programs have the trailing slash. Note that even for windows, a '/' works, no need to use '\' CALLING SEQUENCE: dirslash = spd_addslash(dir) INPUT: dir = A string, usually a directory name. OUTPUT: dirslash = dir+'/', if there is no slash, otherwise dir is unchanged HISTORY: 2012-08-15, jmm, jimm@ssl.berkeley.edu $LastChangedBy: nikos $ $LastChangedDate: 2016-10-06 15:10:51 -0700 (Thu, 06 Oct 2016) $ $LastChangedRevision: 22057 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_addslash.pro $
(See spedas_gui/utilities/spd_addslash.pro)
NAME: ARRANGE_PLOTS
PURPOSE: Returns normal coordinates of plot position box, suitable for
passing to PLOT, when you want to put many plots on one
page. Differs from setting !p.multi, because plots can be
put against one another with no space between. You can
specify the outer margins through keywords, as well as the
gaps between plots. By default, the margins are 0.1 left,
0.05 right, 0.1 bottom, 0.07 top, and there is no gap
between plots in either direction.
INPUTS:
KEYWORD PARAMETERS:
NX - the number of plots in the x direction
NY - the number of plots in the y direction
NPLOTS - the total number of plots
X0MARGIN, Y0MARGIN,
X1MARGIN, Y1MARGIN - the plot margins, in
normalized coordinates.
SQUARE - if set, the resulting plots are
square. The larger dimension is shrunk to
make squares.
OUTPUTS:
x0, y0, x1, y1: These are named variables in which the
left, lower, right, and upper boundaries, respectively of
each plot are returned.
EXAMPLE:
arrange_plots, x0, y0, x1, y1, nx=3
erase
for i=0,2 do plot,my_data,position=[x0[i],y0[i],x1[i],y1[i]],/noerase
MODIFICATION HISTORY:
Original from Li-Jen Chen at GSFC (forked for SPEDAS, 3/15/2016)
(See spedas_gui/utilities/spd_arrange_plots.pro)
ro spd_bshock,xsh,ysh ,ysh_west=ysh_west,short=short,xsh_max=xsh_max
gse or gsm does not matter because bow shock is assumed to be
;rotationally symmetric
This subroutine calculates the bow shock (X,Y) locations based on
the Fairfield model (JGR, 1971 Vol 76 Oct-Dec p.6700). It outputs the location of the bow
shock down to a very large distance (xmp_max=-300 Re)
Aberration of 4 degrees is assumed
Modification: calculates ysh for given xsh and returns only abs(ysh)
Note, this provides flexibility with xsh_max
$LastChangedBy: jimm $
$LastChangedDate: 2015-07-24 12:07:30 -0700 (Fri, 24 Jul 2015) $
$LastChangedRevision: 18247 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_bshock.pro $
(See spedas_gui/utilities/spd_bshock.pro)
PROCEDURE:
spd_cdf_compress
PURPOSE:
Compresses a cdf file using the CDF utility cdfconvert
PARAMETERS:
file_in: (string) Input cdf file. Full path.
KEYWORDS:
file_out: (string) Output cdf file. Full path. Optional if replace=1.
replace: if set, replace original file (file_out is ignored)
cdfconvert: (string) Full path to cdfconvert executable
cdfparams: (string) Parameters for cdfconvert
cdf_tmp_dir: (string) Directory for temp files
cdf_compress_error: (string) Returns error
OUTPUT:
A compressed cdf file
NOTES:
The default (optimal) options used with cdfconvert are available only with CDF 3.6.1 and later.
EXAMPLE:
spd_cdf_compress, '/data/tha_l2_fgm_20110101_v01.cdf', file_out='/data/tha_l2_fgm_20110101_v01_temp.cdf', replace=1, cdf_compress_error=cdf_compress_error
on windows:
spd_cdf_compress, 'c:\temp\in.cdf', file_out='c:\temp\out.cdf', cdfconvert='C:\CDF_Distribution\cdf36_3-dist\bin\cdfconvert.exe', replace=1, $
cdf_tmp_dir='c:\temp\', cdf_compress_error=cdf_compress_error
$LastChangedBy: jimm $
$LastChangedDate: 2022-03-01 12:52:56 -0800 (Tue, 01 Mar 2022) $
$LastChangedRevision: 30634 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_cdf_compress.pro $
(See spedas_gui/utilities/spd_cdf_compress.pro)
NAME:
spd_check_tvar (FUNCTION)
PURPOSE:
This routine check whether the given tplot variable TVAR exists in the
memory. If not, return 0. Otherwise, then check whether it contains data
of the current date. If yes, return 1. If not, return 0.
ARGUMENTS:
tvar: (INPUT, REQUIRED) The name of a tplot variable to be checked.
KEYWORDS:
None.
HISTORY:
2009-05-10: written by Jianbao Tao, in CU/LASP.
$LastChangedBy: nikos $
$LastChangedDate: 2016-10-06 15:10:51 -0700 (Thu, 06 Oct 2016) $
$LastChangedRevision: 22057 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_check_tvar.pro $
(See spedas_gui/utilities/spd_check_tvar.pro)
Procedure: spd_find_file Purpose: Check for the existence of a file in the current path. Calling Sequence: bool = spd_find_file(file_name) Input: name: (string) Name of file including type appendix Output: Return Value: (bool) true if one or more copies of the file found in your path, false if not Notes: $LastChangedBy: pcruce $ $LastChangedDate: 2015-01-12 12:57:20 -0800 (Mon, 12 Jan 2015) $ $LastChangedRevision: 16646 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_find_file.pro $
(See spedas_gui/utilities/spd_find_file.pro)
PRO spd_graphics_config This routine does just the graphics configuration for SPEDAS plug-ins. It can be called from routines that need to have a guaranteed graphics configuration without forcing the rest of the plug-in initialization to be run. This is done to avoid overwriting settings that may have been set by users later in their session. Keywords: colortable: overwrite the default colortable initialization $LastChangedBy: egrimes $ $LastChangedDate: 2019-01-16 13:34:22 -0800 (Wed, 16 Jan 2019) $ $LastChangedRevision: 26470 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_graphics_config.pro $
(See spedas_gui/utilities/spd_graphics_config.pro)
ro spd_mpause,xmp,ymp,ymp_west=ymp_west,short=short,xmp_max=xmp_max
gse or gsm does not matter because mpause assumed
;rotationally symmetric
This subroutine calculates the magnetopause (X,Y) locations based on
the Fairfield model (JGR, 1971). It outputs the location of the ma-
gnetopause down to a very large distance (xmp_max=-300 Re)
Aberation of 4 degrees is assumed
$LastChangedBy: jimm $
$LastChangedDate: 2015-07-24 12:07:30 -0700 (Fri, 24 Jul 2015) $
$LastChangedRevision: 18247 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_mpause.pro $
(See spedas_gui/utilities/spd_mpause.pro)
NAME:
spd_new_coords
PURPOSE:
sets coordinate systems in the dlimits structure of input
tplot variables from the CDF attributes, or alternatively, input
keywords
CALLING SEQUENCE:
spd_new_coords,vars,coords_in=coords_in
INPUT:
vars = variable names
OUTPUT:
none explicit, the dlimits structure of the variables are changed
KEYWORDS:
coords_in = if set, then the coords for all vars will be set to this
value (this is a scalar input)
HISTORY:
12-feb-2008, jmm, jimm@ssl.berkeley.edu
$LastChangedBy: nikos $
$LastChangedDate: 2016-10-07 12:19:00 -0700 (Fri, 07 Oct 2016) $
$LastChangedRevision: 22071 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_new_coords.pro $
(See spedas_gui/utilities/spd_new_coords.pro)
NAME:
spd_new_units
PURPOSE:
sets units in the dlimits structure of input tplot variables from
the CDF attributes, or alternatively, input keywords
CALLING SEQUENCE:
spd_new_units,vars,units_in=units_in
INPUT:
vars = variable names
OUTPUT:
none explicit, the dlimits structure of the variables are changed
KEYWORDS:
units_in = if set, then the units for all vars will be set to this
value (this is a scalar input)
HISTORY:
12-feb-2008, jmm, jimm@ssl.berkeley.edu
$LastChangedBy: nikos $
$LastChangedDate: 2016-10-07 12:01:16 -0700 (Fri, 07 Oct 2016) $
$LastChangedRevision: 22068 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_new_units.pro $
(See spedas_gui/utilities/spd_new_units.pro)
PROCEDURE:
spd_smooth_time
PURPOSE:
Smooths a tplot variable in time using a simple boxcar average
This routine is essentially just a wrapper around the IDL smooth
function that allows the /NAN keyword, unlike tsmooth_in_time
KEYWORDS:
newname: name of the tplot variable to store the data in; default is input_name+"_smth"
nan: ignore NaNs in the input (treat as missing data)
$LastChangedBy: egrimes $
$LastChangedDate: 2017-07-27 09:01:57 -0700 (Thu, 27 Jul 2017) $
$LastChangedRevision: 23712 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_smooth_time.pro $
(See spedas_gui/utilities/spd_smooth_time.pro)
NAME:
spd_string_replacen
PURPOSE:
Find and replace for strings.
KEYWORDS:
inString {in} {type=string}
input string.
findString {in} {type=string}
find string. It can be a regular expression.
replaceString {in} {type=string}
replace string.
HISTORY:
$LastChangedBy: $
$LastChangedDate:$
$LastChangedRevision: $
$URL: $
(See spedas_gui/utilities/spd_string_replacen.pro)
Procedure:
spd_str_split
Purpose:
Splits strings and arrays of strings.
Returns a string or an array of strings.
Calling Sequence:
result = spd_str_split(str, pattern, /extract)
Input:
str: (string) A string to be splitted
pattern: (optional string) A patern to find and split (usually a single character).
If not given,
If the /extract keyword is used, the patern is not included in the result.
Output:
Return Value: (string) An array of strings
Notes:
Use spd_str_split instead of the IDL strsplit to split string arrays in SPEDAS.
In IDL 8.x the strsplit function, when applied to an array of strings returns a LIST.
LIST is a new type of variable that was introduced in IDL 8.0.
SPEDAS has to be compatible with IDL 6.4 and IDL 7.x, so it cannot use LIST variables.
$LastChangedBy: nikos $
$LastChangedDate: 2016-04-25 10:54:54 -0700 (Mon, 25 Apr 2016) $
$LastChangedRevision: 20909 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_str_split.pro $
(See spedas_gui/utilities/spd_str_split.pro)
Function: spd_tplot_trange Purpose: Return the full or current tplot time range without unnecessary calls to other time procedures. Calling Sequence: trange = spd_tplot_trange( [/current] ) Input: current: Flag to return currently plotted time range. Output: return value: Two element double-prec. time range as stored by tplot. Notes: This routine should not modify any variables in the tplot common block. $LastChangedBy: aaflores $ $LastChangedDate: 2015-02-20 13:46:54 -0800 (Fri, 20 Feb 2015) $ $LastChangedRevision: 17020 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_tplot_trange.pro $
(See spedas_gui/utilities/spd_tplot_trange.pro)
NAME: spd_ui_calendar.pro PURPOSE: Calendar selection widget for the GUI CALLING SEQUENCE: spd_ui_calendar,title, otime, gui_id, startyear INPUT: title: Title of the calendar window otime: Time object gui_id: Widget ID of the widget that called the calendar startyear: Start year in 'Year' list HISTORY: $LastChangedBy: $ $LastChangedDate: $ $LastChangedRevision: $ $URL: $
(See spedas_gui/utilities/spd_ui_calendar.pro)
Procedure: spd_ui_call_plugin Purpose: Opens specified GUI plugin window. Calling Sequence: spd_ui_call_plugin, event, info Input: event: event structure from plugin menu info: Main storage structure from GUI Output: none Notes: $LastChangedBy: nikos $ $LastChangedDate: 2014-07-25 10:45:13 -0700 (Fri, 25 Jul 2014) $ $LastChangedRevision: 15610 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_call_plugin.pro $
(See spedas_gui/utilities/spd_ui_call_plugin.pro)
NAME: spd_ui_check_overlap PURPOSE: Determins if any panels on the current page are overlapping. Prints message notifying user of those panels. CALLING SEQUENCE: bool = spd_ui_check_overlap( panels, cwindow ) INPUT: panels: Array of current panel objects cwindow: Current window(page) object OUTPUT: 1 if overlaps are found, 0 otherwise HISTORY:
(See spedas_gui/utilities/spd_ui_check_overlap.pro)
Name:
spd_ui_check_overwrite_data
Purpose:
Used to check if data is already loaded in the GUI and queries the
user to see if they want to overwrite data if it is already loaded.
This code was originally repeated in basically every load routine, so the
purpose for this routine is to avoid repeated code
Input:
new_var: the new variable
loadedData: the loadedData object
gui_id: widget ID of the parent widget
statusBar: status bar object
historyWin: history window object
overwrite_selection: user's selection for the current query
overwrite_count: tracking the number of overwrites for saving/replaying SPEDAS documents
Keywords:
replay: set by the calling routine if the user is replaying a SPEDAS document
overwrite_selections: an array containing the user's selections
;$LastChangedBy: jimm $
$LastChangedDate: 2014-02-11 10:54:32 -0800 (Tue, 11 Feb 2014) $
$LastChangedRevision: 14326 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_check_overwrite_data.pro $
(See spedas_gui/utilities/spd_ui_check_overwrite_data.pro)
NAME: spd_ui_cleanup_tplot
PURPOSE:
Abstracts the oft-repeated operation which identifies new tplot variables,
and identifies variables that should be deleted
CALLING SEQUENCE:
tnames_before = tnames('*',create_time=cn_before)
thm_load_state ;some operation
spd_ui_cleanup_tplot,tnames_before,create_time_before=cn_before,del_vars=del_vars,new_vars=new_vars
Inputs:
tnames_before: a list of tplot names from before the operation in question
Keywords:
create_time_before(optional,input): This is an array of the create times associated with tnames_before
This argument is only required if you want the list of new_vars
new_vars(output): This will output an array of new tplot variable names, if create_time_before was specified
del_vars(output): This will output an array of tplot variable names to delete.
Note:
The list of new variables and delete variables is generally not the same. Delete variables contains only names
that did not exist before the operation, whereas new variables may contain names that pre-existed but were overwritten
$LastChangedBy: jimm $
$LastChangedDate: 2014-02-11 10:54:32 -0800 (Tue, 11 Feb 2014) $
$LastChangedRevision: 14326 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_cleanup_tplot.pro $
(See spedas_gui/utilities/spd_ui_cleanup_tplot.pro)
NAME:
SPD_UI_COMBOBOX
PURPOSE:
IDL combobox doesn't actually support null strings('') as entries
in the combobox. Entering a null string will generate an error that halts
execution. This is a simple wrapper compound widget to fix this problem
by making the box appear empty when it is not.
CALLING SEQUENCE:
Result = SPD_UI_COMBOBOX
KEYWORD PARAMETERS:
Exactly the same as normal combobox
EVENT STRUCTURE:
The same as normal combobox, with the exception that the
event structure is called 'SPD_UI_COMBOBOX'
(See spedas_gui/utilities/spd_ui_combobox.pro)
NAME:
spd_ui_data_minmax
PURPOSE:
Returns a two-element array containing the mininum and maximum values
contained in the loadedData quantity specified by the NAME positional
parameter.
CALLING SEQUENCE:
minmax = spd_ui_data_minmax(loadedData, options)
INPUT:
loadedData: The loadedData object.
name: The name of the variable (a string).
KEYWORDS:
none
OUTPUT:
[minRange, maxRange]: A two-element array containing the mininum and maximum
values of the quantity specified by the NAME parameter.
(See spedas_gui/utilities/spd_ui_data_minmax.pro)
Name: SPD_UI_DIALOG_PICKFILE_SAVE_WRAPPER
Purpose: Wrapper for the IDL routine dialog_pickfile. Checks for invalid characters in the filename.
Inputs: Any keywords that need to be passed on to dialog_pickfile (see note 1 below for special cases)
Output: Filename ('' if dialog is cancelled)
NOTE:
1. This routine should not be used if the multiple_files keyword is being passed to dialog_pickfile
as ';' will be flagged as invalid if used to separate file names.
2. This routine doesn't check for all characters that can cause problems on windows. A large number of cases
are already screened by dialog_pickfile on windows (cases that cause no problems on linux).
$LastChangedBy: egrimes $
$LastChangedDate: 2014-07-10 15:57:22 -0700 (Thu, 10 Jul 2014) $
$LastChangedRevision: 15553 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_dialog_pickfile_save_wrapper.pro $
(See spedas_gui/utilities/spd_ui_dialog_pickfile_save_wrapper.pro)
NAME: spd_ui_do_nudge PURPOSE: Abstracted nudge data operation CALLING SEQUENCE: spd_ui_do_nudge, INPUT: gui_id = widget id of the widget that called this program info = the info structure of the Main GUI OUTPUT: fail=fail HISTORY: $LastChangedBy: aaflores $ $LastChangedDate: 2015-04-29 13:24:31 -0700 (Wed, 29 Apr 2015) $ $LastChangedRevision: 17451 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_do_nudge.pro $
(See spedas_gui/utilities/spd_ui_do_nudge.pro)
NAME:
spd_ui_fix_performance
PURPOSE:
This fixes issue IDL-68782:
in Linux, some drawing operations are very slow for IDL 8.3
another solution would be win = obj_new("idlgrwindow", LINE_QUALITY=0)
it might be useful for windows, too
HISTORY:
$LastChangedBy: $
$LastChangedDate: $
$LastChangedRevision: $
$URL: $
(See spedas_gui/utilities/spd_ui_fix_performance.pro)
FUNCTION: spd_ui_getlengthvars PURPOSE: helper function for formatannotation Inputs: Example: $LastChangedBy: jimm $ $LastChangedDate: 2014-02-11 10:54:32 -0800 (Tue, 11 Feb 2014) $ $LastChangedRevision: 14326 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_getlengthvars.pro $
(See spedas_gui/utilities/spd_ui_getlengthvars.pro)
Purpose: Return the index of specified combobox widget's current selection. Arguments: BASE: Widget ID of base existing above the combobox in the widget heirarchy UNAME: Uname of the combobox widget Return Value: Index of the specified combobox widget's current selection. Usage: idx = spd_ui_get_combobox_select(top_base, 'my_combobox') Notes:
(See spedas_gui/utilities/spd_ui_get_combobox_select.pro)
NAME: spd_ui_get_panels PURPOSE: Generic GUI function for returning the panel names and panel objects given a window CALLING SEQUENCE: panel_names = spd_ui_get_panels(window, panelObjs = panelObjs) INPUT: window: current active window, see the following example: EXAMPLE: window = windowStorage->getActive() panel_names = spd_ui_get_panels(window, panelObjs=panelObjs) OUTPUT: names of the panels on the current page, or a single element array with 'No Panels' if there aren't any panels on the current page $LastChangedBy: egrimes $ $LastChangedDate: 2014-07-24 12:19:29 -0700 (Thu, 24 Jul 2014) $ $LastChangedRevision: 15603 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_get_panels.pro $
(See spedas_gui/utilities/spd_ui_get_panels.pro)
NAME:
spd_ui_interpolate
PURPOSE:
Interpolates over x-axis of active data and adds new data to
loaded data object. Intended to be called from spd_ui_dproc.
CALLING SEQUENCE:
spd_ui_interpolate, result, loadedData, historywin, statusbar
INPUT:
loadedData: Loaded data object.
historywin: History window reference.
statusbar: Status bar reference.
guiid: If set and valid, will make user queries part of GUI widget hierarchy.
result: Anonymous structure returned by spd_ui_interpol_options:
{
num: Number of points for the result when not matching.
cad: Cadence of the result when using that option
match: Flag indicating to interpolate to another variable's abcissa.
matchto: Group name of variable to match to.
extrap: Flags for extrapolation type: [none, last value, NaN]
suffix: Suffix to create new data group with.
limit: Flag indicating time limits.
trange: Time range array containing desired time limits.
type: Flags for interpolation type: [linear,quadratic,lsquadratic,spline]
ntype: Flag to use number or cadence (0,1 respectively)
ok: (not used) Indicates spd_ui_interpol_options was successful
}
HISTORY:
(See spedas_gui/utilities/spd_ui_interpolate.pro)
FUNCTION:
spd_ui_login_widget
PURPOSE:
Prompt the user for their login information
KEYWORDS:
title: title of the login window
group_leader: widget ID of the leader widget
note: add a note to the bottom of the widget
OUTPUT:
Returns a structure containing the username, password,
and a tag 'save' that specifies whether the user wants
to save the login information
NOTES:
Written by Doug Lindholm at LASP, forked for SPEDAS on 8/20/2015.
Minor modifications by Aaron Flores @ IGPP
3/15/2016: updated to accept 'note' keyword - allows for
adding a note to the bottom of the widget
$LastChangedBy: egrimes $
$LastChangedDate: 2017-02-15 15:48:51 -0800 (Wed, 15 Feb 2017) $
$LastChangedRevision: 22793 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_login_widget.pro $
(See spedas_gui/utilities/spd_ui_login_widget.pro)
A procedure to match the background color of a bitmap to that of the OS GUI. Will be used to match icon backgrounds INPUT bitmap_array : three dimensional byte array representing an RGB bitmap image; read_bmp(<img>,/rgb) topbase : the top base widget of window housing the bitmap/widget
(See spedas_gui/utilities/spd_ui_match_background.pro)
Procedure:
spd_ui_message
Purpose:
Output messages to the history window, status bar, and/or dialog message pop-up.
Calling sequence:
spd_ui_message, message [,sb=sb] [,hw=hw] [,dialog=dialog]
Inputs:
message: output message string
sb: GUI status bar object reference (optional)
hw: GUI history window object reference (optional)
dialog: flag to pop-up dialog message (optional)
Notes:
_extra can be used to pass keywords to:
-history window
-dialog_message
$LastChangedBy: aaflores $
$LastChangedDate: 2014-02-14 12:17:24 -0800 (Fri, 14 Feb 2014) $
$LastChangedRevision: 14382 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_message.pro $
(See spedas_gui/utilities/spd_ui_message.pro)
This program creates a string for the history array when multiple datatypes, spacecraft or stations are chosen, for use in the spedas_w_event routine $LastChangedBy: jimm $ $LastChangedDate: 2014-02-11 10:54:32 -0800 (Tue, 11 Feb 2014) $ $LastChangedRevision: 14326 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_multichoice_history.pro $
(See spedas_gui/utilities/spd_ui_multichoice_history.pro)
NAME:
spd_ui_open_url
PURPOSE:
Open an url in the default web browser.
If a browser executable is specified in the Configuration Settings, then prefer that.
On UNIX platforms, the script tries to find an appropriate browser.
CALLING SEQUENCE:
spd_ui_open_url, url
INPUT:
url : string, the full url, for example http://spedas.org
$LastChangedBy: $
$LastChangedDate: $
$LastChangedRevision: $
$URL: $
(See spedas_gui/utilities/spd_ui_open_url.pro)
Purpose: Wrapper to thm_part_products, to be called during replay by spd_ui_call_sequence Modularizes
some operations.
Inputs: probe,$
dtype,$
trange, $
start_angle,$
suffix,$
outputs, $
phi,$
theta,$
pitch,$
gyro, $
energy,$
regrid, $
fac_type,$
sst_cal, $
sst_method_clean, $
statusbar,$
historyWin,$
loadedData
Version:
$LastChangedBy: jimm $
$LastChangedDate: 2014-02-11 10:54:32 -0800 (Tue, 11 Feb 2014) $
$LastChangedRevision: 14326 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_part_getspec_replay.pro $
(See spedas_gui/utilities/spd_ui_part_getspec_replay.pro)
Procedure: spd_ui_plugin_menu Purpose: Builds GUI plugin menu. Calling Sequence: spd_ui_plugin_menu, menu_id [,plugin_menu_items] Input: menu_id: Widget ID of the parent menu into which plugin buttons will be placed. plugin_menu_items: an array of structures containing the plugin menu items; loaded via pluginManager->getPluginMenus() uname: (optional) Specified uname of widget buttons (default='GUI_PLUGIN') Output: Notes: $LastChangedBy: aaflores $ $LastChangedDate: 2015-04-24 18:45:02 -0700 (Fri, 24 Apr 2015) $ $LastChangedRevision: 17429 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_plugin_menu.pro $
(See spedas_gui/utilities/spd_ui_plugin_menu.pro)
Procedure:
spd_ui_plugin_replay
Purpose:
Replays data modification operations performed by GUI plugins when loading GUI documents.
Calling Sequence:
spd_ui_plugin_replay, procedure, parameters, loaded_data, history_window, status_bar
Input:
procedure: (string) name of plugin routine to be called
parameters: (stuct/int) Anonymous struct conforming to keywords for named routine
or 0 if no keywords specified.
loaded_data: (obj) reference to loaded_data object
history_window: (obj) reference to history window object
status_bar: (obj) reference to status bar object
Output:
none
Notes:
$LastChangedBy: egrimes $
$LastChangedDate: 2014-05-05 13:39:26 -0700 (Mon, 05 May 2014) $
$LastChangedRevision: 15050 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_plugin_replay.pro $
(See spedas_gui/utilities/spd_ui_plugin_replay.pro)
NAME:
spd_ui_prompt_widget.pro
PURPOSE:
Simple standardized popup, for yes/no,yes_to_all,no_to_all,cancel
Like dialog_message, but allows additional options, and automatically logs/prompts
CALLING SEQUENCE:
result = spd_ui_prompt_widget(parent,statusbar,historywin,"Continue?")
INPUT:
parent: Widget Id of parent widget(Note that if parent is invalid, it will block until a response is received. See documentation for XMANAGER:NO_BLOCK keyword)
statusBar: The statusbar object to which output should be sent, if unavailable pass null object(obj_new())
historywin: The historywin object to which output should be sent if unavailable pass null object(obj_new())
promptText=promptText: The text of the prompt to be displayed to the user.
no=no :Include "No" Button
yes=yes: Include "Yes" Button
allno=allno: Include "No To All" button.
allyes=allyes: Include "Yes To All" button.
cancel=cancel: Include "Cancel" button.
ok=ok: Include "Ok" button.
maxwidth=maxwidth: Control the width at which the prompt starts wrapping prompt text.
defaultValue=defaultValue: Set to string to return as default. (Occurs during error or close by clicking "X")
Normally default is value of right-most button.
title=title: Set window title to string.
traceback=traceback: Do a trace to calling location
frame_attr=frame_attr: Control the window appearance via TLB_FRAME_ATTR. Values:
1 Base cannot be resized, minimized, or maximized.
2 Suppress display of system menu.
4 Suppress title bar.
8 Base cannot be closed.
16 Base cannot be moved.
For multiple effects add values together.
There are differences between Linux and Windows, so test before using. TLB_FRAME_ATTR=8 seems to work everywhere.
OUTPUT:
Returns an all lower case string with the response text:
"no","yes","yestoall","notoall","cancel","ok"
NOTES:
1. If no button keywords are set, "ok" is used.
2. Based heavily on deprecated gui load subroutine: spd_ui_load_clob_prompt:
3. If a parent widget is unavailable, statusbar, or historywin unavailable, you can pass null values
result = spd_ui_prompt_widget(0l,obj_new(),obj_new(),prompt="Continue?")
This call will interact with other widgets in a way that is similar to a call to error_message
HISTORY:
$LastChangedBy: aaflores $
$LastChangedDate: 2015-03-12 17:12:52 -0700 (Thu, 12 Mar 2015) $
$LastChangedRevision: 17128 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_prompt_widget.pro $
(See spedas_gui/utilities/spd_ui_prompt_widget.pro)
NAME:
spd_ui_pwrspc
PURPOSE:
Creates power spectra from GUI variables that are active in the Process Data
window and loads the spectra into the loadedData object. Directly calls
PWRSPC and DPWRSPC to create the spectra. Intended to be called from
SPD_UI_DPROC.
CALLING SEQUENCE:
spd_ui_pwrspc, options,invars, loadedData, historyWin, statusBar,guiID
INPUT:
options: Structure that is output from SPD_UI_PWRSPC_OPTIONS containing
keyword options for PWRSPC and DPWRSPC.
loadedData: The loadedData object.
historyWin: The history window object.
statusBar: The status bar object for the Data Processing window.
guiid: The widget id for the GUI so that it can display prompts with the correct layering.
KEYWORDS:
OUTPUT:
none
(See spedas_gui/utilities/spd_ui_pwrspc.pro)
NAME: spd_ui_run_calc PURPOSE: Function that interprets program for spd_ui_calculate CALLING SEQUENCE: spd_ui_run_calc,programtext,loadeddata,historywin,statusbar,error=error INPUT: programText: array of strings, text of program loadeddata: the loaded data object historywin: the historywin object statusbar: the statusbar object OUTPUT: error=error: set to named variable, will be 0 on success, will be set to error struct returned by calc.pro on failure HISTORY: $LastChangedBy: pcruce $ $LastChangedDate: 2014-05-27 16:29:10 -0700 (Tue, 27 May 2014) $ $LastChangedRevision: 15236 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_run_calc.pro $
(See spedas_gui/utilities/spd_ui_run_calc.pro)
Name
spd_ui_sbar_hwin_update
Purpose:
Wrapper routine for updating the status bar and history window objects
also handles dialog messages from error handlers
Arguments:
state: state structure from the top level widget, contains the history window and status bar objects
message: string or array of strings to write to the history window and status bar objects
/nohistoryWin: flag to turn off updating the history window object
/nostatusBar: flag to turn off updating the status bar object
/error: flag indicating an error sent us here
err_msgbox_title: title to be displayed in the error msgbox
$LastChangedBy: jimm $
$LastChangedDate: 2014-02-11 10:54:32 -0800 (Tue, 11 Feb 2014) $
$LastChangedRevision: 14326 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_sbar_hwin_update.pro $
(See spedas_gui/utilities/spd_ui_sbar_hwin_update.pro)
NAME:
spd_ui_set_cursor
PURPOSE:
Replaces the cursor on non-windows machines
CALLING SEQUENCE:
spd_ui_set_cursor,win
INPUT:
win: an IDLgrWindow
OUTPUT:
HISTORY:
$LastChangedBy: jimm $
$LastChangedDate: 2014-02-11 10:54:32 -0800 (Tue, 11 Feb 2014) $
$LastChangedRevision: 14326 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_set_cursor.pro $
(See spedas_gui/utilities/spd_ui_set_cursor.pro)
spdfcdawebchooser GUI load code is structured in such a way that it would be very difficult to abstract. Instead just rewriting the load process in a way that isn't so dependent on pseudo-globals(via state) and gui elements, this way we can replay the data without needing the UI to be instantiated. In the future, we may want to consider replacing the cdawebchooser GUI code with this. as I'm forking a little bit here. $LastChangedBy: nikos $ $LastChangedDate: 2024-05-30 15:22:29 -0700 (Thu, 30 May 2024) $ $LastChangedRevision: 32663 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_spdf_replay.pro $
(See spedas_gui/utilities/spd_ui_spdf_replay.pro)
NAME:
SPD_UI_SPINNER
PURPOSE:
A compound 'spinner' widget for editing numerical values.
Consists of up and down buttons and a text field for display
and direct editing.
CALLING SEQUENCE:
Result = SPINNER(parent)
KEYWORD PARAMETERS:
VALUE: Initial value (float/double)
INCREMENT: Numerical ammount spinner value is incremented/decremented
LABEL: String to be used as the widget's label
UNITS: String containing the units to appear to the right of the value
SPIN_TIME: Delay before 'spinning' when clicking up/down buttons
XLABELSIZE: Size of the text label in points
getXLabelSize: Set to a named variable to pass back the length of the
spinner's label in points
TEXT_BOX_SIZE: Size of the text box in # of characters
TOOLTIP: String to be used at the buttons' tooltip
MAX_VALUE: The maximum allowed value for the spinner (optional)
MIN_VALUE: The minimum allowed value for the spinner (optional)
EVENT STRUCTURE:
When the field is modified (either directly) or by the
up/down buttons, the following event is returned:
{ID: id, TOP: top, HANDLER: handler, VALUE: value, VALID: valid}
VALUE: formatted, double precision number from widget's text field;
value is NaN when the text widget contains an unrecognizable
or unconvertable number
VALID: 0 if value is not a recogizable/convertable number, or if buttons
attempt to go outside min/max range, 1 otherwise
GETTING/SETTINGS VALUES
Using get_value from widget_control will return the same as the VALUE
field in the event structure.
The set_value procedure expects numerical input (e.g. doubles, floats, ints).
Use spd_ui_spinner_set_max_value/spd_ui_spinner_set_min_value to change max_value, min_value.
spd_ui_spinner_get_max_value/spd_ui_spinner_get_min_value return MAX_VALUE, MIN_VALUE
NOTES:
(lphilpott 06/10/11)
Setting the max_value and min_value will restrict the use of the up and down buttons
to reach values outside that range.
They do not impact on values that are typed into the text field (these
should be handled by the calling function) or any values simply passed to the set_value procedure.
(lphilpott 06/15/11)
Use of VALID: VALID=0 if the event is not valid. This includes non-recognizable
numbers but ALSO cases where the user tries to go outside the allowed min-max range using up and down buttons.
If the user clicks the up/down button and reaches the limit, the value returned is the limit value and valid=0.
If the user enters a non numerical value the value returned is NAN and valid=0
This allows the calling procedure to issue messages to the user such as invalid entry based on both VALUE and VALID.
Note: valid = 0 only if the starting value of the spinner is at the bounds. If the user holds down the buttons and reaches
the bounds valid = 1. This avoids problems where existing code processes events only if event.valid = 1.
I have not used max and min to restrict values typed into the field due to the difficulty of knowing when the user
has finished typing - do not want to reset the value while the user is still entering it.
When using a spinner cases where the user types in a value outside the allowed range need to be handled, also
invalid entries. If necessary warning messages should be issued to user when they use the up/down buttons and have
reached the allowed limits.
Added get and set procedures for min and max designed to be called externally, eg. spd_ui_spinner_set_max_value
Idea is to allow max and min to be set in case they need to be changed after spinner is created (e.g for range spinners where allowed values
depend on whether scaling is linear or log)
HISTORY:
$LastChangedBy: $
$LastChangedDate: $
$LastChangedRevision: $
$URL: $
(See spedas_gui/utilities/spd_ui_spinner.pro)
NAME:
spd_ui_splash_widget
PURPOSE:
Widget for the SPEDAS GUI splash screen
OUTPUT:
ID of the widget, so it can be destroyed by the GUI
on load
$LastChangedBy: egrimes $
$LastChangedDate: 2015-07-20 14:44:54 -0700 (Mon, 20 Jul 2015) $
$LastChangedRevision: 18181 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_splash_widget.pro $
(See spedas_gui/utilities/spd_ui_splash_widget.pro)
NAME: spd_ui_timefix PURPOSE: Will fix an input time string of yyyy-mm-dd hh:mm:ss.xxxx if there is only 1 digit in the day or hour or second, etc. Will also return an error message, if the months, days, hours, seconds are not valid. 2011-07-20, added comment to test post-commit emails, jmm 2011-11-04, added comment to test post-commit emails, jmm $LastChangedBy: egrimes $ $LastChangedDate: 2015-03-12 11:46:50 -0700 (Thu, 12 Mar 2015) $ $LastChangedRevision: 17121 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_timefix.pro $ unction spd_ui_timefix, time_in, progobj = progobj, _extra = _extra
(See spedas_gui/utilities/spd_ui_timefix.pro)
NAME:
spd_ui_time_widget.pro
PURPOSE:
Compound widget used to generate standardized time selection ui,
for all tabs in the load data window.
CALLING SEQUENCE:
widgetid = spd_ui_time_widget(parent,statusBar,historyWin,timeRangeObj=timeRangeObj,uvalue=uvalue,uname=uname, oneday=oneday)
INPUT:
parent: ID of base in which compound widget will sit
statusBar: statusBar Object for reporting errors and user info
historywin: historywin object for reporting errors and user info
timeRangeObj: a spd_ui_time_range storing the range that will be used.
If provided, the compound widget will mutate this object
uvalue: Assign a user value to this widget
uname: assign a user name to this widget
oneday: flag to determine whether the range is fixed to one day
startyear: optional keyword to change the start year for the calendar widget
default start year is 2000
OUTPUT:
This widget's id
NOTES:
1. Returns events of the form:
return_struct = {time_widget,id:0l,top:0l,handler:0l,timerange:obj_new(),error:0}
2. Can use get_value and set_value keywords with widget control, to return the time range object
that this compound widget mutates.
HISTORY:
$LastChangedBy: jwl $
$LastChangedDate: 2022-02-24 16:22:15 -0800 (Thu, 24 Feb 2022) $
$LastChangedRevision: 30616 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_time_widget.pro $
(See spedas_gui/utilities/spd_ui_time_widget.pro)
Procedure:
spd_ui_track_one
Purpose:
Switches on single-panel tracking by setting the appropriate flags
in the GUI's main storage structure. This is a temporary solution
until the tracking options can be re-worked.
Calling Sequence:
spd_ui_track_one, info_struct
Input:
info_struct: The GUI's main storage structure.
Output:
none
Notes:
Moved from call sequence object.
5/5/2014: Changed input argument from pointer to the main GUI's info struct to the actual struct.
$LastChangedBy: $
$LastChangedDate: $
$LastChangedRevision: $
$URL: $
(See spedas_gui/utilities/spd_ui_track_one.pro)
NAME:
spd_ui_update_progress
PURPOSE:
Write a string into the progress widget for the THEMIS GUI
CALLING SEQUENCE:
spd_ui_update_progress, gui_id, input_string
INPUT:
gui_id = the widget_id for the GUI
input_string = a string to be displayed
OUTPUT:
None
KEYWORDS:
message_wid = id for any other message widgets that you might like
to display the messages
HISTORY:
jmm, 9-may-2007, jimm@ssl.berkeley.edu
jmm, 5-mar-2008, added multiple lines, and the ability to show in
multiple message widgets.
$LastChangedBy: nikos $
$LastChangedDate: 2014-06-17 11:59:06 -0700 (Tue, 17 Jun 2014) $
$LastChangedRevision: 15392 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_update_progress.pro $
(See spedas_gui/utilities/spd_ui_update_progress.pro)
FUNCTION: spd_ui_usingexponent PURPOSE: Used to determine if any of a set of inputs will be put into exponential notation Inputs: The data struct is an input to format annotation data.exponent values: 0: autoformat 1: decimal 2: scientific 3: base^x 4: hexadecimal Outputs: Determine format type:
(See spedas_gui/utilities/spd_ui_usingexponent.pro)
PRO: spd_ui_validate_file PURPOSE: Verifies file read/write permissions and file availability Inputs: filename:name of the file Outputs: statuscode: negative value indicates failure, 0 indicates success statusmsg: a message to be returned in the event of an error Keywords: write: validate for save $LastChangedBy: jimm $ $LastChangedDate: 2014-02-11 10:54:32 -0800 (Tue, 11 Feb 2014) $ $LastChangedRevision: 14326 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_validate_file.pro $
(See spedas_gui/utilities/spd_ui_validate_file.pro)
NAME:
spd_ui_wavelet
PURPOSE:
wavelet transform of the input tplot variables, fist calls split_vec
to split up any multi-component vectors.
CALLING SEQUENCE:
spd_ui_wavelet, vnames, new_names, polar=polar,_extra=_extra
INPUT:
vnames = the tplot variable names to transform
OUTPUT:
new_names = new variable names generated by the process
KEYWORDS:
polar = if set, passes the /polar keyword into the split_vec
procedure, new variable names for 3-d data will be polar,
and not '_x','_y','_z'
gui_id = the main GUI widget ID, for messages
messw_id = the dproc widget id, for messages
temp_names = the names of temporary variables create by the process
so that they can be reliably removed
maxpoints = the maximum number of time samples in the original data
(default = 2^15 if not set)
HISTORY:
12-mar-2007, jmm, jimm@ssl.berkeley.edu
5-jun-2007, jmm, no longer handles history
7-may-2008, W. Michael Feuerstein, Test for >= 2 finite points.
11-may-2009,prc(pcruce@igpp.ucla.edu) added keyword to return the
names of temporary variables created in process
$LastChangedBy: nikos $
$LastChangedDate: 2016-03-07 10:51:31 -0800 (Mon, 07 Mar 2016) $
$LastChangedRevision: 20343 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_wavelet.pro $
(See spedas_gui/utilities/spd_ui_wavelet.pro)
NAME:
spd_ui_wv_memory_test
PURPOSE:
Estimate of memory used by a wavelet transform. The estimated memory
use is 36.26*n_elements(transformed_data.y). The factor of 36 comes
from testing different transforms for different types of data, for
fgm (FGH and FGS) data, 2009-01-14, for ESA L2 density data
2007-07-07, and for GMAG data for both of those days. Note that this
is currently only useful for default inputs.
INPUT:
t = the time array
OUTPUT:
jv = the number of wavelets to eventually be used, jv must be GT 1
for the wavelet2 routine to work.
prange = the default period range of the output,
nyquist period, 5% of time period]
info_txt = Informational test array, with memory sizes, and jv value
HISTORY:
10-jun-2009, jmm, added jv output to test for a reasonable number of
wavelets later.
19-Jan-2015, jmm, Changed the name and separated into a new file
6-feb-2015, jmm, Added frange output, for the default frequency range
$LastChangedBy: jimm $
$LastChangedDate: 2015-02-09 13:28:13 -0800 (Mon, 09 Feb 2015) $
$LastChangedRevision: 16922 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_ui_wv_memory_test.pro $
(See spedas_gui/utilities/spd_ui_wv_memory_test.pro)
Procedure: spd_uniq Purpose: Implement most common usage of IDL uniq() function Calling Sequence: output = spd_uniq(array) Input: array: An array Return Value: Sorted, unique values from input Notes: $LastChangedBy: aaflores $ $LastChangedDate: 2015-08-06 20:01:43 -0700 (Thu, 06 Aug 2015) $ $LastChangedRevision: 18419 $ $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/spd_uniq.pro $
(See spedas_gui/utilities/spd_uniq.pro)
Function: stringIsNum
Purpose: Determines if a given string is a number or not.
Inputs: str : the string to be checked
Output: Returns 1 if yes, or if no
EXAMPLES:
if stringIsNum(s) then print, strtrim(double(s),2)
% Compiled module: STRINGISNUM.
SPEDAS> print,stringisnum('hello')
0
SPEDAS> print,stringisnum('1.234')
1
SPEDAS> print,stringisnum('1.234e4')
1
SPEDAS> print,stringisnum('1B')
1
SPEDAS> print,stringisnum(' 1 ')
1
SPEDAS> print,stringisnum(' 1Hello ')
0
SPEDAS> print,stringisnum(' 1D ')
1
SPEDAS> print,stringisnum(' Hello ')
0
Notes: String must be only a numerical string and leading or trailing whitespace
if true is to be returned. Strings that include other non-numerical characters
will return false even if they have numerical sub-strings.
$LastChangedBy: jimm $
$LastChangedDate: 2014-02-11 10:54:32 -0800 (Tue, 11 Feb 2014) $
$LastChangedRevision: 14326 $
$URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/trunk/spedas_gui/utilities/stringisnum.pro $
(See spedas_gui/utilities/stringisnum.pro)
NAME:
test_leap_yr
CALLING SEQUENCE:
lyr=test_leap_yr(iyr,modays=modays)
PURPOSE:
Determines whether a given year is a leap year, and
returns the number of days in every month
INPUT:
iyr = The year, as an integer
OUTPUT:
lyr= 1 if iyr is a leap year and 0 if not
KEYWORDS:
modays= the number of days in each month
modays= [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] for
a leap yr, [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] otherwise
HISTORY:
Written 19-OCt-93 by JM
Rewritten, 9-jul-2007, jmm
(See spedas_gui/utilities/spd_ui_timefix.pro)
NAME:
TVIMAGE
PURPOSE:
This purpose of TVIMAGE is to enable the TV command in IDL
to be a completely device-independent and color-decomposition-
state independent command. On 24-bit displays color decomposition
is always turned off for 8-bit images and on for 24-bit images.
The color decomposition state is restored for those versions of
IDL that support it (> 5.2). Moreover, TVIMAGE adds features
that TV lacks. For example, images can be positioned in windows
using the POSITION keyword like other IDL graphics commands.
TVIMAGE also supports the !P.MULTI system variable, unlike the
TV command. TVIMAGE was written to work especially well in
resizeable graphics windows. Note that if you wish to preserve
the aspect ratio of images in resizeable windows, you should set
the KEEP_ASPECT_RATIO keyword, described below. TVIMAGE works
equally well on the display, in the PostScript device, and in
the Printer and Z-Graphics Buffer devices. The TRUE keyword is
set automatically to the correct value for 24-bit images, so you
don't need to specify it when using TVIMAGE.
AUTHOR:
FANNING SOFTWARE CONSULTING:
David Fanning, Ph.D.
1645 Sheely Drive
Fort Collins, CO 80526 USA
Phone: 970-221-0438
E-mail: davidf@dfanning.com
Coyote's Guide to IDL Programming: http://www.dfanning.com/
CATEGORY:
Graphics display.
CALLING SEQUENCE:
TVIMAGE, image
INPUTS:
image: A 2D or 3D image array. It should be byte data.
x : The X position of the lower-left corner of the image.
This parameter is only recognized if the TV keyword is set.
If the Y position is not used, X is taken to be the image
"position" in the window. See the TV command documenation
for details.
y : The Y position of the lower-left corner of the image.
This parameter is only recognized if the TV keyword is set.
KEYWORD PARAMETERS:
BACKGROUND: This keyword specifies the background color. Note that
the keyword ONLY has effect if the ERASE keyword is also
set or !P.MULTI is set to multiple plots and TVIMAGE is
used to place the *first* plot.
ERASE: If this keyword is set an ERASE command is issued
before the image is displayed. Note that the ERASE
command puts the image on a new page in PostScript
output.
_EXTRA: This keyword picks up any TV keywords you wish to use.
HALF_HALF: If set, will tell CONGRID to extrapolate a *half* row
and column on either side, rather than the default of
one full row/column at the ends of the array. If you
are interpolating images with few rows, then the
output will be more consistent with this technique.
This keyword is intended as a replacement for
MINUS_ONE, and both keywords probably should not be
used in the same call to CONGRID.
KEEP_ASPECT_RATIO: Normally, the image will be resized to fit the
specified position in the window. If you prefer, you can
force the image to maintain its aspect ratio in the window
(although not its natural size) by setting this keyword.
The image width is fitted first. If, after setting the
image width, the image height is too big for the window,
then the image height is fitted into the window. The
appropriate values of the POSITION keyword are honored
during this fitting process. Once a fit is made, the
POSITION coordiates are re-calculated to center the image
in the window. You can recover these new position coordinates
as the output from the POSITION keyword.
MARGIN: A single value, expressed as a normalized coordinate, that
can easily be used to calculate a position in the window.
The margin is used to calculate a POSITION that gives
the image an equal margin around the edge of the window.
The margin must be a number in the range 0.0 to 0.333. This
keyword is ignored if the POSITION or OVERPLOT keywords are
used. It is also ignormed when TVImage is executed in a
multi-plot window, EXCEPT if it's value is zero. In this
special case, the image will be drawn into its position in
the multi-plot window with no margins whatsoever. (The
default is to have a slight margin about the image to separate
it from other images or graphics.
MINUS_ONE: The value of this keyword is passed along to the CONGRID
command. It prevents CONGRID from adding an extra row and
column to the resulting array, which can be a problem with
small image arrays.
NOINTERPOLATION: Setting this keyword disables the default bilinear
interpolation done to the image when it is resized. Nearest
neighbor interpolation is done instead. This is preferred
when you do not wish to change the pixel values of the image.
This keyword must be set, for example, when you are displaying
GIF files that come with their own non-IDL color table vectors.
NORMAL: Setting this keyword means image position coordinates x and y
are interpreted as being in normalized coordinates. This keyword
is only valid if the TV keyword is set.
OVERPLOT: Setting this keyword causes the POSITION keyword to be ignored
and the image is positioned in the location established by the
last graphics command. For example:
Plot, Findgen(11), Position=[0.1, 0.3, 0.8, 0.95]
TVImage, image, /Overplot
POSITION: The location of the image in the output window. This is
a four-element floating array of normalized coordinates of
the type given by !P.POSITION or the POSITION keyword to
other IDL graphics commands. The form is [x0, y0, x1, y1].
The default is [0.0, 0.0, 1.0, 1.0]. Note that this can
be an output parameter if the KEEP_ASPECT_RATIO keyword is
used.
TV: Setting this keyword makes the TVIMAGE command work much
like the TV command, although better. That is to say, it
will still set the correct DECOMPOSED state depending upon
the kind of image to be displayed (8-bit or 24-bit). It will
also allow the image to be "positioned" in the window by
specifying the coordinates of the lower-left corner of the
image. The NORMAL keyword is activated when the TV keyword
is set, which will indicate that the position coordinates
are given in normalized coordinates rather than device
coordinates.
Setting this keyword will ensure that the keywords
KEEP_ASPECT_RATIO, MARGIN, MINUS_ONE, MULTI, and POSITION
are ignored.
OUTPUTS:
None.
SIDE EFFECTS:
Unless the KEEP_ASPECT_RATIO keyword is set, the displayed image
may not have the same aspect ratio as the input data set.
RESTRICTIONS:
If the POSITION keyword and the KEEP_ASPECT_RATIO keyword are
used together, there is an excellent chance the POSITION
parameters will change. If the POSITION is passed in as a
variable, the new positions will be returned in the same variable
as an output parameter.
If a 24-bit image is displayed on an 8-bit display, the
24-bit image must be converted to an 8-bit image and the
appropriate color table vectors. This is done with the COLOR_QUAN
function. The TVIMAGE command will load the color table vectors
and set the NOINTERPOLATION keyword if this is done. Note that the
resulting color table vectors are normally incompatible with other
IDL-supplied color tables. Hence, other graphics windows open at
the time the image is display are likely to look strange.
EXAMPLE:
To display an image with a contour plot on top of it, type:
filename = FILEPATH(SUBDIR=['examples','data'], 'worldelv.dat')
image = BYTARR(360,360)
OPENR, lun, filename, /GET_LUN
READU, lun, image
FREE_LUN, lun
TVIMAGE, image, POSITION=thisPosition, /KEEP_ASPECT_RATIO
CONTOUR, image, POSITION=thisPosition, /NOERASE, XSTYLE=1, $
YSTYLE=1, XRANGE=[0,360], YRANGE=[0,360], NLEVELS=10
To display four images in a window without spacing between them:
!P.Multi=[0,2,2]
TVImage, image, Margin=0
TVImage, image, Margin=0
TVImage, image, Margin=0
TVImage, image, Margin=0
!P.Multi = 0
MODIFICATION HISTORY:
Written by: David Fanning, 20 NOV 1996.
Fixed a small bug with the resizing of the image. 17 Feb 1997. DWF.
Removed BOTTOM and NCOLORS keywords. This reflects my growing belief
that this program should act more like TV and less like a "color
aware" application. I leave "color awareness" to the program
using TVIMAGE. Added 24-bit image capability. 15 April 1997. DWF.
Fixed a small bug that prevented this program from working in the
Z-buffer. 17 April 1997. DWF.
Fixed a subtle bug that caused me to think I was going crazy!
Lession learned: Be sure you know the *current* graphics
window! 17 April 1997. DWF.
Added support for the PRINTER device. 25 June 1997. DWF.
Extensive modifications. 27 Oct 1997. DWF
1) Removed PRINTER support, which didn't work as expected.
2) Modified Keep_Aspect_Ratio code to work with POSITION keyword.
3) Added check for window-able devices (!D.Flags AND 256).
4) Modified PostScript color handling.
Craig Markwart points out that Congrid adds an extra row and column
onto an array. When viewing small images (e.g., 20x20) this can be
a problem. Added a Minus_One keyword whose value can be passed
along to the Congrid keyword of the same name. 28 Oct 1997. DWF
Changed default POSITION to fill entire window. 30 July 1998. DWF.
Made sure color decomposition is OFF for 2D images. 6 Aug 1998. DWF.
Added limited PRINTER portrait mode support. The correct aspect ratio
of the image is always maintained when outputting to the
PRINTER device and POSITION coordinates are ignored. 6 Aug 1998. DWF
Removed 6 August 98 fixes (Device, Decomposed=0) after realizing that
they interfere with operation in the Z-graphics buffer. 9 Oct 1998. DWF
Added a MARGIN keyword. 18 Oct 1998. DWF.
Re-established Device, Decomposed=0 keyword for devices that
support it. 18 Oct 1998. DWF.
Added support for the !P.Multi system variable. 3 March 99. DWF
Added DEVICE, DECOMPOSED=1 command for all 24-bit images. 2 April 99. DWF.
Added ability to preserve DECOMPOSED state for IDL 5.2 and higher. 4 April 99. DWF.
Added TV keyword to allow TVIMAGE to work like the TV command. 11 May 99. DWF.
Added the OVERPLOT keyword to allow plotting on POSITION coordinates
estabished by the preceding graphics command. 11 Oct 99. DWF.
Added automatic recognition of !P.Multi. Setting MULTI keyword is no
longer required. 18 Nov 99. DWF.
Added NOINTERPOLATION keyword so that nearest neighbor interpolation
is performed rather than bilinear. 3 Dec 99. DWF
Changed ON_ERROR condition from 1 to 2. 19 Dec 99. DWF.
Added Craig Markwardt's CMCongrid program and removed RSI's. 24 Feb 2000. DWF.
Added HALF_HALF keyword to support CMCONGRID. 24 Feb 2000. DWF.
Fixed a small problem with image start position by adding ROUND function. 19 March 2000. DWF.
Updated the PRINTER device code to take advantage of available keywords. 2 April 2000. DWF.
Reorganized the code to handle 24-bit images on 8-bit displays better. 2 April 2000. DWF.
Added BACKGROUND keyword. 20 April 2000. DWF.
Fixed a small problem in where the ERASE was occuring. 6 May 2000. DWF.
Rearranged the PLOT part of code to occur before decomposition state
is changed to fix Background color bug in multiple plots. 23 Sept 2000. DWF.
Removed MULTI keyword, which is no longer needed. 23 Sept 2000. DWF.
Fixed a small problem with handling images that are slices from 3D image cubes. 5 Oct 2000. DWF.
Added fix for brain-dead Macs from Ben Tupper that restores Macs ability to
display images. 8 June 2001. DWF.
Fixed small problem with multiple plots and map projections. 29 June 2003. DWF.
Converted all array subscripts to square brackets. 29 June 2003. DWF.
Removed obsolete STR_SEP and replaced with STRSPLIT. 27 Oct 2004. DWF.
Small modification at suggestion of Karsten Rodenacker to increase size of
images in !P.MULTI mode. 8 December 2004. DWF.
Minor modifications on Karsten Rodenacker's own account concerning margination
and TV behaviour. 8 December 2004. KaRo
(See spedas_gui/utilities/tvimage.pro)
NAME:
TVREAD
PURPOSE:
To get accurate screen dumps with the IDL command TVRD on 24-bit
PC and Macintosh computers, you have to be sure to set color
decomposition on. This program adds that capability automatically.
In addition, the program will optionally write BMP, GIF, JPEG,
PICT, PNG, and TIFF color image files of the screen dump.
AUTHOR:
FANNING SOFTWARE CONSULTING
David Fanning, Ph.D.
1645 Sheely Drive
Fort Collins, CO 80526 USA
Phone: 970-221-0438
E-mail: davidf@dfanning.com
Coyote's Guide to IDL Programming: http://www.dfanning.com
CATEGORY:
Graphics
CALLING SEQUENCE:
image = TVREAD(xstart, ystart, ncols, nrows)
The returned image will be a 2D image on 8-bit systems and
a 24-bit pixel interleaved true-color image on 24-bit systems.
A -1 will be returned if a file output keyword is used (e.g., JPEG, TIFF, etc.).
OPTIONAL INPUTS:
XSTART -- The starting column index. By default, 0.
YSTART -- The starting row index. By default, 0.
NCOLS -- The number of columns to read. By default, !D.X_Size - XSTART
NROWS -- The number of rows to read. By default, !D.Y_Size - YSTART.
KEYWORD PARAMETERS:
BMP -- Set this keyword to write the screen dump as a color BMP file.
CANCEL -- An output keyword set to 1 if the user cancels out of a
filename dialog. Set to 0 otherwise.
COLORS -- If a 24-bit image has to be quantized, this will set the number
of colors in the output image. Set to 256 by default. Applies to BMP,
GIF, PICT, and PNG formats written from 24-bit displays.(See the
COLOR_QUAN documentation for details.)
CUBE -- If this keyword is set to a value between 2 and 6 the color
quantization will use a cubic method of quantization. Applies to BMP,
GIF, PICT, and PNG formats written from 24-bit displays.(See the
COLOR_QUAN documentation for details.)
DITHER -- If this keyword is set the quantized image will be dithered.
Applies to BMP, GIF, PICT, and PNG formats written from 24-bit displays.
(See the COLOR_QUAN documentation for details.)
FILENAME -- The base name of the output file. (No file extensions;
they will be added automatically.) This name may be changed by the user.
image = TVREAD(Filename='myfile', /JPEG)
No file will be written unless a file output keyword is used
(e.g., JPEG, TIFF, etc.) in the call. By default the FILENAME is
set to "idl". The file extension will be set automatically to match
the type of file created.
GIF -- Set this keyword to write the screen dump as a color GIF file.
JPEG -- Set this keyword to write the screen dump as a color JPEG file.
NODIALOG -- Set this keyword if you wish to avoid the DIALOG_PICKFILE
dialog that asks you to name the output file. This keyword should be
set, for example, if you are processing screens in batch mode.
ORDER -- Set this keyword to determine the image order for reading the
display. Corresponds to !Order and set to such as the default.
PICT -- Set this keyword to write the screen dump as a color PICT file.
PNG -- Set this keyword to write the screen dump as a color PNG file.
TIFF -- Set this keyword to write the screen dump as a color TIFF file.
TRUE -- Set this keyword to the type of interleaving you want. 1 = Pixel
interleaved, 2 = row interleaved, 3 = band interleaved.
QUALITY -- This keyword sets the amount of compression for JPEG images.
It should be set to a value between 0 and 100. It is set to 75 by default.
(See the WRITE_JPEG documentation for details.)
WID -- The index number of the window to read from. The current graphics window
(!D.Window) is selected by default. An error is issued if no windows are
currently open on a device that supports windows.
_EXTRA -- Any keywords that are appropriate for the WRITE_*** routines are
also accepted via keyword inheritance.
COMMON BLOCKS:
None
RESTRICTIONS: Requires IDL 5.2 and higher.
MODIFICATION HISTORY:
Written by David W. Fanning, 9 AUG 2000.
Added changes to make the program more device independent. 16 SEP 2000. DWF.
Removed GIF file support for IDL 5.4 and above. 18 JAN 2001. DWF.
Added NODIALOG keyword. 28 MAR 2001. DWF.
Added an output CANCEL keyword. 29 AUG 2001. DWF.
Added ERROR_MESSAGE code to file. 17 DEC 2001. DWF.
Added ORDER keyword. 25 March 2002. DWF.
Now create 24-bit PNG files if reading from a 24-bit display. 11 May 2002. DWF.
Now create 24-bit BMP files if reading from a 24-bit display. 23 May 2002. DWF.
Removed obsolete STR_SEP and replaced with STRSPLIT. 27 Oct 2004. DWF.
(See spedas_gui/utilities/tvread.pro)