Last modified: November 2016

URL: https://cxc.cfa.harvard.edu/chips/ahelp/get_pick.html
Jump to: Description · Examples · Bugs · See Also


AHELP for CIAO 4.11 ChIPS v1

get_pick

Context: coordinates

Synopsis

Return the coordinates of one or more mouse or key presses.

Syntax

get_pick()
get_pick(count)
get_pick(count, eventmask)
get_pick(id)
get_pick(id, count)
get_pick(id, count, eventmask)

Description

The function arguments.

Argument Description
count The number of events to capture; default is 1.
eventmask Which type of events to capture (the default is taken from the pick.mask preference setting).
id A ChipsId structure identifying the item.

The get_pick command allows the user to obtain the location of the cursor when a specified event is registered.

Valid event types for the eventmask argument:

Event type Numeric value Description
KEY_PRESS 0x01 pressing any key
KEY_RELEASE 0x10 releasing any key
BTNS_DOWN 0x0E clicking any mouse button
BTN1_DOWN 0x02 clicking the left mouse button
BTN2_DOWN 0x04 clicking the middle mouse button
BTN3_DOWN 0x08 clicking the right mouse button
BTNS_UP 0xE0 releasing any mouse button
BTN1_UP 0x20 releasing the left mouse button
BTN2_UP 0x40 releasing the middle mouse button
BTN3_UP 0x80 releasing the right mouse button

The default eventmask value is "KEY_PRESS|BTNS_DOWN"; this can be changed by setting the pick.mask preference. Note that when more than one entry is specified, they are joined via the | (vertical pipe) symbol.

The following coordinate systems may be used to display the cursor location - PIXEL, FRAME_NORM, PLOT_NORM, or DATA. The system is specified by setting the coord_sys field of the optional ChipsId structure. If not specified, the coordinates are returned in the current coordinate system for the window. The command will only work if a single window is current.

When an event is registered, the coordinates are stored internally as a (x,y) coordinate pair. The get_pick command returns an array of x positions, an array of y positions, and an array of numeric values representing the type of event. If any of the events were key presses or releases, a fourth array of the respective key values is also returned. The values of these events are given in the table above.

Coordinate format

Two string arrays contain the coordinate values using the formatting of the axes. So, if the X axis has a tickformat attribute of "%ra" then the X coordinate will be returned as both a floating-point value and a string that looks like "14:58:20".

Number of events

The number of events to capture may be set by the user via the count parameter; the default value is 1. A value of 0 indicates that the pick should continue until the user uses the escape key (<ESC>) to end the pick. A count value greater than 0 indicates that the pick should continue until the specified number of events has occurred.

To have the coordinates of the pick points printed to the screen instead of being stored in an array, use the pick command ("ahelp pick").


Examples

Example 1

chips> clear()
chips> add_curve([1,2,5], [-9,14,5])
chips> a = get_pick()
chips> print("x = {0} y = {1}".format(a[0][0], a[1][0]))
x = 2.8403 y = -5.31489

Retrieve the coordinates of a single point. The return value from get_pick() is an array of 5 or 6 items. In this case, since the event was a mouse press (the value of a[2][0] is 2 which is the value of BTN1_DOWN), there are only five items (the last two give the string representation of the coordinate, using the axis formatting):

chips> a
          
[array([ 1.90162964]),
 array([-4.94007407]),
 array([2], dtype=uint32),
 array(['1.90163'], 
      dtype='|S8'),
 array(['-4.94007'], 
      dtype='|S9')]

The a[0] and a[1] elements contain the X and Y coordinates of the events (in this case there is only 1).

Example 2

chips> clear()
chips> add_image("img.fits")
chips> set_xaxis(["tickformat", "%ra"])
chips> set_yaxis(["tickformat", "%dec"])
chips> a = get_pick()
chips> print("x = {} y = {}".format(a[0][0], a[1][0]))
x = 239.559788796 y = 27.2730363564
chips> print("ra = {} dec = {}".format(a[3][0], a[4][0]))
ra = 15:58:14 dec = +27:16:23

Here we display an image and use sexagesimal notation for the coordinates. In this case the last two elements returned by get_pick() contain the coordinates using this notation.

chips> a

[array([ 239.5597888]),
 array([ 27.27303636]),
 array([2], dtype=uint32),
 array(['15:58:14'], 
      dtype='|S9'),
 array(['+27:16:23'], 
      dtype='|S10')]

Example 3

chips> id = ChipsId()
chips> id.coord_sys = FRAME_NORM
chips> a = get_pick(id)

Retrieve the frame normalized location of a point, using the default eventmask.

Example 4

chips> id = ChipsId()
chips> id.coord_sys = DATA
chips> a = get_pick(id, 0, BTN3_DOWN)

Retrieve the cursor location in data coordinates whenever the right mouse button is pressed, until the Escape key is pressed. If

chips> a = get_pick(id, 0, KEY_PRESS)

had been used instead then the location would be recorded whenever a key was pressed instead (the Escape key is not considered a key press in this context; it exits the pick call instead).

Example 5

chips> a = get_pick(3, BTN3_DOWN)
chips> a[0]
array([-4.01444456, 4.78555553, 9.9677778 ])
chips> a[1]
array([ 0.95510914, -0.57461505, -1.40901007])
chips> a[2]
array([1, 1, 2], dtype=uint32)
chips> a[2] == KEY_PRESS
array([ True, True, False], dtype=bool)
chips> a[2] == BTN1_DOWN
array([False, False, True], dtype=bool)
chips> print(a[3])
['w' 'g' '']

Here we use get_pick to select three coordinates, using either key presses or mouse button events to select the positions. The first two positions were selected using key presses - using the "w" and "g" keys respectively - whilst the third was selected using the left-mouse button.


Bugs

The button event types are not processed correctly

The button-up event types - such as BTNS_UP and BTN1_UP - are not handled correctly and should not be used. The button-down evens - such as BTNS_DOWN - may also incorrcetly register up events; this may mean duplicated positions are returned.

Do not use when the window display is turned off

It is possible to hang ChIPS if you use get_pick with a window which was created with its display attribute set to False and this attribute has remained unchanged.

See the bugs pages on the ChIPS website for an up-to-date listing of known bugs.

See Also

coordinates
pick