.help xt_pmmap Mar07 xtools
.ih
NAME
.nf
xt_pmmap -- map a mask and match it to a reference image
.fi
.ih
SYNOPSIS
.nf
# Open a mask.
pointer procedure xt_pmmap (pmname, refim, mname, sz_mname)

char	pmname[ARB]		#I Pixel mask name
pointer	refim			#I Reference image pointer
char	mname[ARB]		#O Expanded mask name
int	sz_mname		#O Size of expanded mask name


# Close the mask.
procedure xt_pmunmap (im)

pointer im                      #I IMIO pointer for mask
.fi
.ih
DESCRIPTION
This interface maps (opens) and unmaps (closes) a mask for use in an
application.  It includes resolving mask files from image header keywords
in a reference image, inverting masks, matching masks spatially to a
reference image, and access to non-pixel list formats.

The \fIpmname\fR argument is a file name or a reference to an image header
keyword using the syntax "!<keyword>".  As a special case the name "BPM"
is equivalent to "!BPM".  It is also legal for the file name to be a null
string which returns a NULL pointer for the application to interpret
as desired.  Most applications will treat this case as all image pixels
are good.

If the file name, or the file name obtained from a keyword reference,
begins with the character '^' the mask will be inverted to a boolean mask.
This means that input mask values which are zero are set to 1 and non-zero
mask values are set to 0.

The \fIrefim\fR argument is the IMIO image pointer for a reference image
used to resolve keyword references and for spatial matching.

The map routine returns the mask name through the \fImname\fR argument.
Typically an application would use the mask name for logging purposes
since it will expand keyword mask references.

.sh
SPATIAL MATCHING

The matching of masks to a reference image is a powerful feature though it
can also cause confusion.  The advantage of matching is that when images
are modified by trimming or other linear geometric operations the mask,
often referenced in the image header, will still correctly identify
the bad pixels.  Note that this does not apply to non-linear coordinate
transformations.

The matching is based on a "physical" coordinate system.  This is typically
the image pixel coordinate system prior to any linear transformation.
IRAF tasks which extract subrasters, subsample, block average, block
replicate, transpose, etc. update header keywords describing the mapping
from the image pixel coordinate system (called the "logical" coordinate
system) to the parent physical coordinate system.  Some applications
also attach a meaning to the physical coordinate system such as detector
array coordinates.

The transformation between logical coordinates (lx,ly) and physical
coordinates (px,py) is defined by the header keywords LTM1_1, LTM2_1,
LTM1_2, LTM_2_2, LTV1, and LTV2 as shown below.

.nf
    lx = px * LTM1_1 + py * LTM2_1 + LTV1
    ly = px * LTM1_2 + py * LTM2_2 + LTV2

    px = ( LTM2_2 * (lx - LTV1) - LTM2_1 * (ly - LTV2)) /
	 (LTM1_1 * LTM2_2 - LTM1_2 * LTM2_1)
    py = (-LTM1_2 * (lx - LTV1) + LTM1_1 * (ly - LTV2)) /
	 (LTM1_1 * LTM2_2 - LTM1_2 * LTM2_1)
.fi

Note that a missing keyword defaults to a value of zero.  When all
LTM/LTV keywords are missing then the physical and logical coordinate
systems are identical.  In other words the implied transformation is
an identify transformation.  Note that one cannot just have
LTV keywords because then the implied transformation matrix is
ill-defined (all matrix elements are assumed zero).

The matching consists of deriving a transformation between the
logical pixels in the image and the mask by combining the two physical
transformations.  This means that even if the logical to physical
transformations are complex, such as a rotation, if the two are the same
a identity or a simple offset relative transformation may still exist
between the two.  In this combined logical-to-logical transformation
the current version does not allow a rotation though, as just noted, the
separate logical-to-pixel transformation may be rotated by the same amount.

When the image is sampled more finely than the mask, that is the same mask
pixel overlaps multiple image pixels, then the nearest mask value (pixel
center to pixel center) is used for each image pixel.  When the image is
more coarsely sampled, that is more than one mask pixel overlaps an image
pixel, then the maximum mask value becomes the mask value for the pixel.
This latter choice means that if an image pixel is touched by any bad
pixel then it will be indicated as bad.

If after matching the mask to the image the mask does not cover
the image, the mask is extended by adding zero mask values.

The above description is fairly general which makes this seem complex.
However, by far the most common mismatch between an image and its mask
is that an image has been derived as a subraster of a parent image.
In this case the LTM values will be LTM1_1=LTM2_2=1 and LTM2_1=LTM1_2=0
(or missing) and the matching just depends on the origin offset keywords
LTV1 and LTV2.

Note that to eliminate this matching one resets the physical coordinate
system to be equivalent to the logical coordinate system.  The task
\fIwcsreset\fR can be used or the above LTM/LTV keywords can be deleted
using a header keyword editor.

.sh
ALTERNATIVE MASK DESCRIPTIONS

This interface accepts alternate mask descriptions that are internally
converted to the same mask structure for transparent use by the application.
The preferred input mask description is a pixel mask in either pixel list
format (.pl extension) or a FITS pixel mask (a binary table representation).
The alternate representations are a regular image and a text description.

The pixels values in a regular image are truncated (towards zero) to integers.
Then negative values are set to 0.

A text description consists of lines in a text file with either two or
four values.  The values are truncated to integers if needed.  Two values
define a mask value of 2 at the (x,y) coordinate.  Four values define a
region, given as (x1,x2,y1,y2) of mask values.  The mask values are 2 if
the width of the region is narrower or equal to the height.  Otherwise the
value is 3.  This is a convention used by task which then interpolate
across bad pixel regions.

Note that a text description is always tied directly to the input
image; that is, the physical and logical coordinate systems are the same.
.endhelp
