ITOOL__DEFINE
Class Name
itool
Purpose (one Line)
To display an image and provide tools for its visualization.
Category
Widgets
Superclasses
Subclasses
Creation
See itool::init
Methods
itool::apdraw
itool::cleanup
itool::close
itool::cstr
itool::display
itool::draw
itool::getproperty
itool::newprofile
itool::nextimage
itool::oneph
itool::phact
itool::setproperty
itool::tpdraw
itool::trk
itool::realize
itool::init
2004, Mar and Apr, DWL,
This version of itool was derived from a major overhaul of cw_itool
and related routines. It was implemented as an object class
named 'itool.' Multiple instances may be realized and managed by host
applications.
All of the widget applications that may be launched from itool have
been re-written using object-oriented techniques and using a standard
interface that allows simple and efficient communication of data between
them and itool. The object-oriented approach simplifies operation on
data, via method routines. With this approach and the standard
interface, it should be simple to maintain itool and its related
applications, as well as to add other widget applications in the
future.
All of the itool object-oriented widget applications are named with
"itoolwa" as the prefix. The "wa" in the name stands for "widget
application." The portion of the file names before the two "underscore"
characters are the object-class names. The itool widget applications are:
itoolwacpmgr__define.pro ; The Comet Photometry Manager.
itoolwaimparms__define.pro ; The Image Parameters Editor.
itoolwaphparms__define.pro ; The Photometry Parameters Editor.
itoolwapixed__define : The Pixel Editor.
itoolwaprofile__define.pro ; The Profiles Tool.
itoolwatpmgr__define : The Template Manager.
itool widget-application details:
First, each object-oriented widget application, including itool itself,
have the following "properties" available within their respective
object classes:
tlb : the top-level-base of the widget application.
pstate : a pointer to the widget application's state structure.
In addition, each of the widget applications listed above have the
following property in their respective object classes:
oitool : The object reference of the instance of itool from which
the application was launched.
Other properties are defined for each object class, including
the "itool" object class.
Finally, each object-oriented widget application, including itool,
stores a copy of its own object reference in the UVALUE of its
top-level base. Every event handler may retrieve a copy of the application's
object reference by calling
widget_control, event.top, get_uvalue=oref
Then, a copy of the pointer to the state structure may be obtained by calling
oref->getproperty, PSTATE=pstate
Method routines have direct access to the pointer to the state structure,
via their intrinsic "self" arguments (self.pstate).
When one of the above widget applications is launched from an instance
of itool, itool passes a copy of its object reference to that application.
In return, itool receives a copy of the object reference for the new
instance of that application. The object class for itool defines
"properties" for storing object references of each of the applications
listed above. The Profiles Tool is allowed more than one instance
to be active; object references for it are maintained within an object
array.
Additional comments:
Fixed old bugs. Cleaned up event handling and data-storage techniques.
Some of the external routines called are:
itool_pplod.pro Loads photometry parameters into a
structure, from a file.
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
METHOD NAME:
itool::apdraw
Purpose
To draw a photometric aperture in the zoom window.
Calling Sequence
oref->apdraw,x,y
-----------------------------------------------------------------------------
METHOD NAME:
itool::cleanup
Purpose
Self-explanatory
Calling Sequence
obj_destroy, oref
Inputs
oref : An itool object reference.
-----------------------------------------------------------------------------
METHOD NAME:
itool::close
Purpose
Self-explanatory
Calling Sequence
oref->close
Inputs
oref : An itool object reference.
-----------------------------------------------------------------------------
METHOD NAME:
itool::cstr
Purpose
To compute a stretch range for the image.
Calling Sequence
oref->cstr, frame
Inputs
frame : The image frame number (the image may be a "cube" of images).
Always 1 for 2-D images.
Optional Inputs
Keyword Parameters
SILENT : Set this keyword to suppress display of the stretch range.
-----------------------------------------------------------------------------
METHOD NAME:
itool::display
Purpose
To refresh the itool label and text widgets.
Calling Sequence
oref->display
-----------------------------------------------------------------------------
METHOD NAME:
itool::draw
Purpose
To refresh the draw itool widgets (full, zoom, and work).
Calling Sequence
oref->draw
Inputs
Optional Inputs
Keyword Parameters
ALT_WORKWIN : Set this keyword to a valid window number. It will be
used instead of the window number of the local work
window.
FULL : Set this keyword to draw the full window.
WORK : Set this keyword to draw the work window.
ZOOM : Set this keyword to draw the zoom window.
ZXCEN : The x-coordinate of the center of the zoom array.
ZYCEN : The y-coordinate of the center of the zoom array.
-----------------------------------------------------------------------------
METHOD NAME:
itool::getproperty
Purpose
To retrieve "properties" defined for the itool object class. Properties
are specified as keyword arguments.
Calling Sequence
oref->getproperty
Inputs
Optional Inputs
Keyword Parameters
NO_BLOCK : Set this keyword to a named variable in which to return the
value of the NO_BLOCK property. It is passed to all of the
itool widget applications. If itool is running in non-blocked
mode, all of its widget applications will run in non-blocked
mode.
OIMAGE : Set this keyword to a named variable in which to return the
object reference of the current image object that is active.
OITOOLWACPMGR : Set this keyword to a named variable in which to return
the object reference for an active Comet Photometry
Manager.
OITOOLWAIMPARMS : Set this keyword to a named variable in which to return
the object reference for an active Image Parameters
tool.
OITOOLWAPHPARMS : Set this keyword to a named variable in which to return
the object reference for an active Photometry Parameters
tool.
PPH_PARMS : Set this keyword to a named variable in which to return
a pointer to the ph_parms structure.
PSTATE : Set this keyword to a named variable in which to return
a pointer to the state structure.
STATUS : Set this keyword to a named variable in which to return
the itool status structure. The status structure is
defined as:
status = {flag:flag, msg:msg, lasttype:lasttype,
lastpos:lastpos, object:object,
lastfwhm:lastfwhm, lastmag:lastmag}
where
flag = true if photometry parameters or if templates
have been modified.
msg = A message string, indicating which have been
modified.
lasttype, lastpos, object, lastfwhm, and lastmag are
from the im_parms structure.
-----------------------------------------------------------------------------
METHOD NAME:
itool::newprofile
Purpose
To launch a new instance of the Profiles widget application.
Calling Sequence
oref->newprofile
Inputs
-----------------------------------------------------------------------------
METHOD NAME:
itool::nextimage
Purpose
To display another image.
Calling Sequence
oref->nextimage, oimage
Inputs
oimage : An object reference of class itoolimage.
Optional Inputs
Keyword Parameters
FIRST : Set this keyword if nextimage is called from a fresh start-up
of itool. Otherwise, assume that nextimage is being called
directly from the host application that launched this instance
of itool.
-----------------------------------------------------------------------------
METHOD NAME:
itool::oneph
Purpose
To do one single-object photometry operation.
Calling Sequence
oref->oneph, x, y
Inputs
x, y : the work-window coordinates from a mouse-button event.
-----------------------------------------------------------------------------
METHOD NAME:
itool::phact
Purpose
To perform template photometry.
Calling Sequence
oref->phact, x, y
Inputs
x, y : the work-window coordinates from a mouse-button event.
-----------------------------------------------------------------------------
METHOD NAME:
itool::setproperty
Purpose
To set "properties" defined for the itool object class. Properties
are specified as keyword arguments.
Calling Sequence
oref->setproperty
Inputs
Optional Inputs
Keyword Parameters
OITOOLWACPMGR : the object reference for the newly-launched Comet
Photometry manager.
OITOOLWAIMPARMS : the object reference for the newly_launched Image
Parameters tool.
OITOOLWAPHPARMS : the object reference for the newly_launched Photometry
Parameters tool.
OITOOLWATPMGR : the object reference for the newly_launched Template
Manager.
-----------------------------------------------------------------------------
METHOD NAME:
itool::tpdraw
Purpose
To plot the current template in the work window.
Calling Sequence
oref->tpdraw
Keyword Parameters
ALT_TPLATE : Set this keyword to a valid {itool_templatelist} structure.
It will be used as the template to draw, instead of the
currently-selected template from The Template Manager.
ALT_WORKWIN : Set this keyword to a valid window number. It will be
used instead of the window number of the local work
window.
-----------------------------------------------------------------------------
METHOD NAME:
itool::trk
Purpose
To refresh the cursor tracking display widgets.
Calling Sequence
oref->trk, x, y
Inputs
x, y : the coordinates from a motion event in the work or zoom window.
-----------------------------------------------------------------------------
METHOD NAME:
itool::realize
Purpose
To realize a new, managed instance of the itool object class.
Calling Sequence
oref->realize
Inputs
Optional Inputs
Keyword Parameters
NO_BLOCK : Set this keyword to cause the widget application to run
in non-blocked mode.
-----------------------------------------------------------------------------
METHOD NAME:
itool::init
Purpose
To initialize a new instance of the itool object class (the itool GUI).
Calling Sequence
oref = obj_new('itool', oimage)
Inputs
oimage : An object reference of class itoolimage.
Optional Inputs
Keyword Parameters
EXPERT : Set this keyword to turn on certain "expert" modes of
operation.
FVISIBLE : Set this keyword to the desired size, in pixels, of the
full window (default is 128).
GROUP_LEADER : Set this keyword to the group leader for this instance.
NODISMISS : Set this keyword, to de-sensitize the Dismiss button on
the file menu and sensitize the Exit button. Otherwise,
the Dismiss button will be sensitive and the Exit button
will be insensitive.
PHOTPARMFILE : Set this keyword to a string containing the name of
a photometry-parameters file.
SCLMIN : Set this keyword to a minimum stretch-range value.
SCLMAX : Set this keyword to a maximum stretch-range value.
TMPLFILE : Set this keyword to a string containing the name of
a template file.
WXVISIBLE : Set this keyword to the size, in pixels, of the width
of the work window (default is 500).
WYVISIBLE : Set this keyword to the size, in pixels, of the height
of the work window (default is 500).
WZOOMFACT : Set this keyword to the ceiling of the zoom factor
(default is unlimited).
XSIZE : Set this keyword to the width, in pixels, of the image
(required).
YSIZE : Set this keyword to the height, in pixels, of the image
(required).
ZVISIBLE : Set this keyword to the desired size, in pixels, of the
zoom window (default is 128).
Outputs
oref = The object reference of the new instance of the itool
object class.
Optional Outputs
Common Blocks
Side Effects
Restrictions
Procedure
After creating a new instance of this object-oriented widget application,
it must be realized.
Example
oref = obj_new('itool', oimage, GROUP_LEADER=group_leader)
oref->realize
-----------------------------------------------------------------------------
Modification History
Note: Adapted from cw_itool.pro. The following history has been copied
from cw_itool:
Written by Doug Loucks, Lowell Observatory, June 1994.
This version is a major re-write, employing the compound widget design
introduced in Version 3 of IDL.
94/10/27, MWB, Lowell Observatory, fixed ZOOM bug on line 1144.
95/01/24, MWB, xcen,ycen size mismatch storing back to template if array is
3-d. Fixed to copy *last* position from Basphote return.
95/06/12, MWB, Fixed bug in stretch range computation for large cubes of
small images.
95/09/07, MWB, Changed auto-stretch computation to make it more robust.
95/10/31, MWB, Fixed widget layout problem caused by IDL v4.0 changes.
96/01/06, MWB, Changed W*VISIBLE default to recognize smaller screens.
96/01/16, MWB, Fixed !order=1 bug in mouse event handling.
Fixed Stretch Menu operational bugs for handling image cubes.
96/06/25, MWB, Added autophot support
97/12/12, MWB, changed display to include more image info on main window.
99/08/31, MWB (with help from John Mattox), added a
feature that overplots the aperture on the zoom window
image after template or single-object photometry measurement.
2001/4/3, MWB, added plotting of active template in work window
2001/9/18, MWB, fixed color error in plots with 8-bit display.
2002/11/17, MWB, fixed !order=1 bug for overplotting templates.
Replaced image scaling with updated skysclim routine.
2004/04/15, DWL, Major overhaul of the entire program.
2004/05/28, DWL. Added a 'Save Image to FITS' button to the File Menu.
Added a 'Save Thumbnail Window to JPEG' button to the
File Menu.
Added a 'Save Work Window to JPEG' button to the
File Menu.
Added a 'Save Zoom Window to JPEG' button to the
File Menu.
2005/11/01, DWL. Added method routine itool::close. This method allows
an instance of itool to be closed, from an application
that is managing the instance.
2006/03/15 - DWL, Created a new object class named 'itoolimage' (see
itoolimage__define.pro for details).
An instance of this object class is now passed as the
argument to this init method, instead of the former "pim_parms"
argument.
The changes to the itool GUI involve the places where the
"pim_parms" argument is required. Now, "pim_parms" is acquired
via the "getproperty" method of the 'itoolimage' object class,
using the object reference provided via the "oimage"
argument.
Since it has always been necessary to generate and store
information (im_parms) about the image to be displayed in the
itool GUI, I felt that this was a good argument in favor of
combining the image data and the initialization requirements
for those data. Obviously, this suggested object-oriented
techniques. With this new object class, calling routines
that use the itool GUI benefit from the built-in
initialization and cleanup when an instance is created or
destroyed. It is no longer necessary for callers of the itool
GUI to invoke separate code segments to handle initialization
and cleanup of image data; they need only create and destroy
instances of the 'itoolimage' object class (obj_new and
obj_destroy).
Note that the old procedure named itool_init is no longer
needed; the duties of that procedure are now handled by the
"init" method of the 'itoolimage' object class.
2006/04/4, MWB, fixed auto-scaling bug when looking at image cubes.
2006/5/22, Peter L. Collins, Lowell Observatory
added ccd readout noise as photometric parameter.