In many X-ray astronomical analysis software suites (e.g., fitsio, ciao, funtools), spatial regions allow one to select sections of an image or rows of a table by means of simple geometric shapes. When an image is filtered, only pixels found within these shapes are processed. When a table is filtered, only rows found within these shapes are processed.
In these systems, spatial region filtering is accomplished by means of region specifications. Typically, region specifications use bracket notation appended to the filename of the data being processed:
funcnts "foo.fits[circle(512,512,100)]"
JS9 implements a subset of the widely-used DS9/Funtools regions syntax, as described below.
# comment until end of line # each region expression contains shapes and optional local json objects [region_expression1] {local json object} # tags [region_expression2] # tags
A single region expression consists of:
# shape name and parens are required # arguments are separated by commas. spaces are optional, as is the + sign [+-]shape(val, val, ...)where regions shapes can be:
shape: arguments: ----- ---------------------------------------- annulus (xcenter, ycenter, inner_radius, outer_radius) box (xcenter, ycenter, xwidth, yheight[, angle]) circle (xcenter, ycenter, radius) ellipse (xcenter, ycenter, xwidth, yheight[, angle]) text (x1, x2, text) point (x1, y1) polygon (x1, y1, x2, y2, ..., xn yn)Note that other keyword keywords (e.g., the DS9 "global" keyword and DS9/Funtools region shapes not yet implemented in JS9) are silently ignored.
All arguments to regions are real values; integer values are automatically converted to real where necessary. All angles are in degrees and run from the positive image x-axis to the positive image y-axis.
Shapes also can be globally excluded from a region descriptor by using a minus sign before a region:
operator arguments: -------- ----------- - Globally exclude the region expression following '-' sign from ALL regions specified in this file
JS9 retains the use of comments to specify tags, but utilizes a JSON object to specify secondary properties. This optional object follows the region specification:
point(4300.00, 4250.00) {"color": "red"} # background,include point(350.897859, 58.835164) {"ptshape": "circle", "ptsize": 5}See the JS9.Regions.opts object in the JS9 source code for a list of properties that can be passed in this JSON object.
name description ---- ------------------------------------------ physical pixel coords of original file using LTM/LTV image pixel coords of current file FK4 sky coordinate system FK5 sky coordinate system galactic sky coordinate system ecliptic sky coordinate system ICRS currently same as J2000If no coordinate system is specified, physical is assumed. The coordinate system specifier should appear at the beginning of the region description, separated by semi-colon, or on a separate line. Note that multiple coordinate systems can be in the same specifier. Each one pertains to the region following until the next coordinate system is defined:
# Region file format: JS9 version 1.0 ICRS point(23:23:27.815, +58:48:42.017) box(23:23:27.815, +58:48:42.017, 29.51", 29.51", 0.000) physical ellipse(4300.00, 4250.00, 30.00, 20.00, 0.00) box(4300.00, 4250.00, 60.00, 60.00, 0.00) ICRS circle(350.897859, 58.835164, 0.76') ellipse(350.897859, 58.835164, 14.76", 9.84", 0.000)
position arguments description ------------------ ------------------------------ [num] context-dependent (see below) [num]d degrees [num]r radians [num]p physical pixels [num]i image pixels [num]:[num]:[num] hms for 'odd' position arguments [num]:[num]:[num] dms for 'even' position arguments [num]h[num]m[num]s explicit hms [num]d[num]m[num]s explicit dms size arguments description -------------- ----------- [num] context-dependent (see below) [num]" arc seconds [num]' arc minutes [num]d degrees [num]r radiansWhen a "pure number" (i.e. one without a format directive such as 'd' for 'degrees') is specified, its interpretation depends on the context defined by the 'coordsys' keyword. In general, the rule is:
All pure numbers have implied units corresponding to the current coordinate system.
If no such system is explicitly specified, the default system is implicitly assumed to be PHYSICAL. In practice this all means that for IMAGE and PHYSICAL systems, pure numbers are pixels. Otherwise, for all systems, pure numbers are degrees.
# js9 region format, properties contained in json ellipse(23:23:22.179, +58:48:10.542, 40", 20", 60) {"text": "json ellipse test", "textOpts": {"color": "yellow", "fontSize": 16, "fontStyle": "italic", "fontWeight": "bold"}, "color": "violet"} # json test tag, another tag # ds9 format, properties contained in comment string box(23:23:35.486, +58:50:03.146, 40", 20", 30) # width=4 text={ds9 box test} dash=1 color=red fixed=1 rotate=0 tag="ds9 test tag" # hybrid js9/ds9 format circle(23:23:29.526, +58:49:09.56, 14.756997") {"strokeWidth": 1, "strokeDashArray": [3,1], "transparentCorners": true} # text="hybrid circle test" tag="ds9 test tag" tag="json test tag"