%+
% Name:
%    memo_acis_detect_hotpix_1.4.tex
%
% Usage:
%    latex memo_acis_detect_hotpix_1.4.tex
%
% Description:
%    This document describes the specification of a tool designed to detect 
%    hot or flaring pixels.
%
% Input:
%
% Output:
%
% Notes:
%
% History:
%    27 Apr 02, created (v1.0), Glenn E. Allen
%    01 Oct 02, minor revisions (v1.1), GEA
%    07 Mar 03, revised after prototyping (v1.2), GEA
%    17 Mar 03, several revisions (v1.3), GEA
%    05 Jan 04, fixed sign problem in equations 4 and 5.  Added more text
%      to explain equation 4.
%-

\documentclass{article}

\usepackage{changebar}
\usepackage{cxo-memo-logo}
\usepackage[dvips]{graphics}
\usepackage{gea}

\newcommand{\afterglowbit}{16}
\newcommand{\badadjbias}{-8189}
\newcommand{\biasthreshdefault}{6}
\newcommand{\biasthreshmin}{3}
\newcommand{\biasthreshmax}{100}
\newcommand{\bpixbit}{7}
\newcommand{\expnothreshdefault}{10}
\newcommand{\expnothreshmax}{10000}
\newcommand{\expnothreshmin}{2}
\newcommand{\hotpixel}{-8186}
\newcommand{\hotpixelbit}{4}
\newcommand{\knownbadbias}{-8192}
\newcommand{\knownbadpix}{-8191}
\newcommand{\maskedpixels}{-8190}
\newcommand{\probthreshdefault}{1.0e$-$3}
\newcommand{\probthreshmax}{1.0e$-$1}
\newcommand{\probthreshmin}{1.0e$-$10}
\newcommand{\regwidthdefault}{7}
\newcommand{\regwidthmax}{255}
\newcommand{\regwidthmin}{3}
\newcommand{\srcevents}{-8187}
\newcommand{\suspiciouspix}{-8188}

\begin{document}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 1. Header

\memobasic{
   Martin Elvis, SDS Group Leader }{
   Glenn E.\ Allen, SDS }{
   Removing hot pixels and cosmic-ray afterglows }{
   1.4 }{
   http://space.mit.edu/CXC/docs/docs.html\#hotpix }{
   /nfs/cxc/h2/gea/sds/docs/memos/memo\_\adh\_1.4.tex }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 2. Tool name

\section{\adh}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 3. Description

\subsection{ Description }

This tool is designed to identify hot pixels so that events on these pixels
can be flagged and excluded from Level 2 ACIS event data files.  Pixels
known to be bad or that are outside the valid event detection region are
excluded from the search.  The algorithm used to identify potential hot
pixels also identifies pixels affected by cosmic-ray afterglows and pixels
at the corners of the dither pattern for bright (\ie\ piled) sources.
However, it is possible to distinguish between hot pixels, afterglows and
real source events. This specification describes how to distinguish between
these three cases. Pixels identified as bad are added to the bad-pixel file
and the events on these pixels have a STATUS bit set to one.  Events
associated with afterglows have an afterglow STATUS bit set to one and the
pixel is not added to the bad-pixel file.  Events associated with bright
sources are not flagged as bad and the pixels on which these events occur
are not added to the bad-pixel file.  

The tool \adh\ is more efficient at removing afterglows than \ada\ because
the algorithm in \ada\ does not identify afterglow events if the events are
separated by one or more exposure with no events at the location of the
afterglow.  The tool \ada\ (but not \adh) also misidentifies piled source
events as afterglow events.  For these reasons, the tool \adh\ supercedes
\ada.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 4. Input

\subsection{ Input }

\begin{enumerate}

\item
A Level 0, 1, 1.5, or 2 event data file (acis*evt0.fits, acis*evt1.fits, 
acis*evt1a.fits, or acis*evt2.fits) 

\item
An optional Level 0 bias map file(s) (acis*bias0.fits)

\item
An optional Level 1 bad-pixel file (acis*bpix1.fits)

\item
An optional Level 1 window mask file (acis*msk1.fits)

\end{enumerate}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 5. Output

\subsection{ Output }

\begin{enumerate}

\item
An event data file

\item
A bad-pixel file

\end{enumerate}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 6. Parameters

\subsection{ Parameters }

\begin{enumerate}

\item
infile,s,a,``'',,,``Name of input event file ($\langle$filename$\rangle$)''

\item
outfile,s,a,``'',,,``Name of output event file ($\langle$filename$\rangle$)''

\item
badpixfile,s,a,``'',,,``Name of input bad-pixel file
($\langle$filename$\rangle$ | CALDB | none | NONE)''

\item
outbadpixfile,s,a,``'',,,``Name of output bad-pixel file
($\langle$filename$\rangle$)''

\item
maskfile,s,a,``'',,,``Name of input mask file 
($\langle$filename$\rangle$ | default | none | NONE)''

\item
biasfile,s,a,``'',,,``Name of input bias map file(s)
($\langle$filenames$\rangle$ | none | NONE)''

\item
logfile,s,h,``stdout'',,,``Destination of output messages (stdout | STDOUT
| $\langle$filename$\rangle$)''

\item
probthresh,r,h,\probthreshdefault,\probthreshmin,\probthreshmax,``Minimum 
significance of potentially bad pixels after trials (\eg\ $1 \sigma = 0.159$, 
$2 \sigma = 0.0228$, and $3 \sigma = 0.00135$)''

\item
biasthresh,i,h,\biasthreshdefault,\biasthreshmin,\biasthreshmax,``Minimum 
bias offset for invalid pixels in adu''

\item
expnothresh,i,h,\expnothreshdefault,\expnothreshmin,\expnothreshmax,``Minimum 
difference in frame numbers for hot pixels''

\item
regwidth,i,h,\regwidthdefault,\regwidthmin,\regwidthmax,``Size of reference 
region for comparison (\eg\ \regwidthdefault\ pixels $\times$
\regwidthdefault\ pixels)''

\item
clobber,b,h,``no'',,,``Overwrite output files if they already exist?''

\item
verbose,i,h,0,0,5,``Amount of messages produced (0=none, 5=most)''

\item
mode,s,h,``ql'',,,

\end{enumerate}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 7. Processing

\subsection{ Processing }
\label{secprocess}

\begin{enumerate}

\item
Verify that the input parameters are valid. Verify that the specified input
files exist.  If the parameter ${\rm clobber} = {\rm ``no}$,'' then verify
that the output file does not exist. Verify that the values specified for
the parameters probthresh, biasthresh, expnothresh, regwidth, and verbose
are in the allowed ranges from \probthreshmin\ to \probthreshmax,
\biasthreshmin\ to \biasthreshmax, \expnothreshmin\ to \expnothreshmax,
\regwidthmin\ to \regwidthmax, and 0 to 5, respectively.  If the value of
regwidth is even, then add one to regwidth and write a warning message to
the logfile.

\item
Create the three-dimensional arrays $A[i,j,k]$ (long integer) and $B[i,j,k]$
(short integer) for the event data and bias maps, respectively.  The indices
$0 \le i \le 9$, $1 \le j \le 1024$, and $1 \le k \le 1024$ (\ie\ $i$, $j$,
and $k$ correspond to CCD\_ID, CHIPX, and CHIPY, respectively).  If no bias
files are specified as input, then do not create the array $B[i,j,k]$.

\item
Read the values of CCD\_ID, CHIPX, and CHIPY for each event in the input
event file and add one to $A$[CCD\_ID,CHIPX,CHIPY].

\item
If bias files are specified as input, then read the bias for each CCD and
store the bias data in the array $B$.

\item
If $B[i,j,k] = 4094$, 4095, or 4096, then set the values of $A[i,j,k]$ and
$B[i,j,k] = \knownbadbias$.  These pixels are known to be bad and are
excluded from the search for hot pixels and afterglows.

\item
Read the input bad-pixel file (if one is specified).  If the parameter
badpixfile $=$ ``CALDB,'' then use the appropriate bad-pixel ARD file. If
one or more of the bad-pixel STATUS bits 0--6, 11, or 13 is set to one for a
pixel or column, then set the corresponding elements of $A[i,j,k]$ and
$B[i,j,k] = \knownbadpix$.  These pixels are known to be bad and are
excluded from the search for hot pixels and afterglows. However, if the only
STATUS bits set to one are 8, 9, 10, or 12, then do not set the
corresponding elements of $A[i,j,k]$ and $B[i,j,k] = \knownbadpix$.  These
pixels and columns are included in the search because they are not truly
bad.

\item
Read the input mask file if one is specified.  If the parameter maskfile $=$
``default,'' then use the appropriate mask described in the
acis\_build\_mask specification
(http://space.mit.edu/CXC/docs/docs.html\#msk).  No events can be reported
for the ``masked out'' region of a CCD.  Therefore, these regions are
excluded from the search for hot pixels and afterglows by setting the
corresponding values of $A[i,j,k]$ and $B[i,j,k] = \maskedpixels$.

\item
Set the appropriate values of $A[i,j,k]$ and $B[i,j,k] = \maskedpixels$ for
CCDs that are not used.  For example, if the CCD\_ID for a device is not
included in the keyword DETNAM in the specified infile, the values of
$A[i,j,k]$ and $B[i,j,k] = \maskedpixels$ for all of the pixels on the
device.

\item
Compute the total number $N_{\rm tot}$ of pixels to be searched.  This value
is the total number of pixels for which $A[i,j,k] \ne \maskedpixels$,
$\knownbadpix$, or $\knownbadbias$.  For example, if six CCDs were used for
an observation, then $N_{\rm tot} \approx 6 \times 10^{6}$.

\item
Compute the adjusted bias values by subtracting an offset from each column
of each bias.  For each CHIPX of each CCD\_ID set
%
\begin{equation}
B \left[ {\rm CCD\_ID,CHIPX,}k \right]
  =
  B \left[ {\rm CCD\_ID,CHIPX,}k \right] -
  {\rm median} \left( B \left[ {\rm CCD\_ID,CHIPX,}k \right] \right).
\end{equation}
%
When computing the median, exclude the elements $k$ whose values are equal
to $\maskedpixels$, $\knownbadpix$, or $\knownbadbias$.  Do not change the
value of $B[i,j,k]$ if its value is $\maskedpixels$, $\knownbadpix$, or
$\knownbadbias$. If all of the pixels in a column have one of these three
values, then do not change the values of $B$[CCD\_ID,CHIPX,$k$] for the
column.

\item
Identify suspicious pixels in the bias maps.  If $B[i,j,k] > {\rm
biasthresh}$ or $B[i,j,k] < -$biasthresh, then set the values of $A[i,j,k]$
and $B[i,j,k] = \badadjbias$.  Set the event data STATUS bit \hotpixelbit\
(of 0--31) to one for events occurring on these pixels.

\item
Identify suspicious pixels in the event data.  

\begin{itemize}

\item
Create a two-dimensional real-valued array $M[i,j]$ for the mean number of
events per node.  The indices $0 \le i \le 9$ and $0 \le j \le 3$ correspond
to CCD\_ID and NODE\_ID, respectively.

\item
For each CCD\_ID and NODE\_ID, compute the mean number of events per pixel.
%
\begin{equation}
M[{\rm CCD\_ID, NODE\_ID}]
  =
  \frac{1}{n}
  \left(
  \sum_{j}
  \sum_{k=1}^{1024}
  A[{\rm CCD\_ID},j,k] 
  \right),
  \label{eqnmeannexp}
\end{equation}
%
where $j$ is in the range of 1--256, 257--512, 513--768, or 769--1024 for
${\rm NODE\_ID} = 0$, 1, 2, or 3, respectively, and $n$ is the total number
of valid pixels on the node.  Pixels for which $A = \badadjbias$,
$\maskedpixels$, $\knownbadpix$, or $\knownbadbias$ are excluded from the
computation of the values of $n$ and $M$.

\item
Compute the expected number of events $R$ for each CCD\_ID, CHIPX, and CHIPY
such that $A[{\rm CCD\_ID, CHIPX, and CHIPY}] \ne \badadjbias$,
$\maskedpixels$, $\knownbadpix$, or $\knownbadbias$.  The expected number is
the average number of events on the valid pixels surrounding the pixel in
question. 
%
\begin{equation}
R
  =
  \frac{1}{n}
  \left[ \left(
  \sum_{j={\rm CHIPX}-w}^{{\rm CHIPX}+w}
  \sum_{k={\rm CHIPY}-w}^{{\rm CHIPY}+w}
  A[{\rm CCD\_ID},j,k] 
  \right) -
  S
  \right],
  \label{eqnnexp}
\end{equation}
%
where $S = A[{\rm CCD\_ID,CHIPX,CHIPY}]$, $w = ({\rm regwidth} - 1)/2$ (\eg\
$w = 3$, 4, 5, {\ldots} if ${\rm regwidth} = 7$, 9, 11, {\ldots}), and $n$
is the number of valid pixels surrounding the suspicious pixel.  Normally,
$n = 48$ (\ie\ $7 \times 7 - 1$) if ${\rm regwidth} = 7$.  (The pixel in
question is not included in the sum.) However, the number of pixels to
include in the computation of $R$ (and $n$) is smaller near the edges of a
node. For example, if the pixel for which $R$ is being computed is
(CHIPX,CHIPY$) = (2,3)$, the valid pixels are those for which $2 \le {\rm
CHIPX} \le 5$ and $2 \le {\rm CHIPY} \le 6$ ($n = 4 \times 5 - 1 = 19$).
Similarly, for the pixel (CHIPX,CHIPY$) = (256,1023)$ at the node boundary,
the valid pixels are $253 \le {\rm CHIPX} \le 256$ and $1020 \le {\rm CHIPY}
\le 1023$ ($n = 4 \times 4 - 1 = 15$). The values of $R$ and $n$ also
exclude pixels for which $A[i,j,k] = \hotpixel$, $\srcevents$,
$\suspiciouspix$, $\badadjbias$, $\maskedpixels$, $\knownbadpix$, or
$\knownbadbias$.  $R$ is a real number, not an integer.

\item
For each CCD\_ID, CHIPX, and CHIPY such that $A[{\rm CCD\_ID, CHIPX, and
CHIPY}] \ne \badadjbias$, $\maskedpixels$, $\knownbadpix$, or
$\knownbadbias$, compute the Poisson probability of obtaining at least
$A[{\rm CCD\_ID}, {\rm CHIPX}, {\rm CHIPY}]$ events if the expected number
of events is $R$. 
%
\begin{changebar}
\begin{equation}
P
  =
  1 - 
  e^{-R}
  \left[
  \left(
  \sum_{i=0}^{S-1}
  \frac{R^{i}}{i!}
  \right) +
  \frac{1}{2}
  \frac{R^{S}}{S!}
  \right].
  \label{eqnprob}
\end{equation}
%
where $R$ is the value from equation~\ref{eqnnexp} and $S = A[{\rm CCD\_ID,
CHIPX, CHIPY}]$.  Equation~\ref{eqnprob} is only appropriate if $S > 0$ and
$R > 0$.  If $S = 0$ and $R > 0$, then equation~\ref{eqnprob} is simply $P =
1 - 0.5 e^{-R}$.  If $S > 0$ and $R = 0$, then use equation~\ref{eqnprob}
with $R$ replaced by the appropriate value of $M$ from
equation~\ref{eqnmeannexp}.  If $S = 0$ and $R = 0$, then use $P = 1 - 0.5
e^{-M}$. The probability $P$ is a double-precision real number. 
\end{changebar}

\item
If $P < {\rm probthresh} / N_{\rm tot}$ or $P > (1 - {\rm probthresh} /
N_{\rm tot})$ for the pixel CCD\_ID, CHIPX, CHIPY, then set $A[{\rm CCD\_ID,
CHIPX, CHIPY}]$ and $B[{\rm CCD\_ID, CHIPX, CHIPY}] = \suspiciouspix$.

\end{itemize}

\item
Compute the total number of suspicious pixels $N_{\rm sus}$.  This number is
the sum of all those for which $A[{\rm CCD\_ID, CHIPX, CHIPY}] =
\suspiciouspix$.

\item
Classify the events on the suspicious pixels as being associated with hot
pixels, afterglows, or bright sources.  For each CCD\_ID, CHIPX, and CHIPY
such that $A[{\rm CCD\_ID, CHIPX, CHIPY}] = \suspiciouspix,$

\begin{itemize}

\item
Compute the values of $R$ (and $n$) using equation~\ref{eqnnexp}.

\item
Compute the probability of obtaining $R$ expected events if the mean number
of expected events is $M[{\rm CCD\_ID, NODE\_ID}]$.
%
\begin{changebar}
\begin{equation}
P_{\rm exp}
  =
  1 - 
  e^{-n M}
  \left[
  \left(
  \sum_{i=0}^{nR-1}
  \frac{(nM)^{i}}{i!}
  \right) +
  \frac{1}{2}
  \frac{(nM)^{nR}}{nR!}
  \right].
\end{equation}
\end{changebar}
%
Although $R$ is a real number, the value $n R$ is an integer. If $R = 0$,
then set $P_{\rm exp} = 0.5$.

\item
Identify valid X-ray events.  If $P_{\rm exp} < {\rm probthresh} / N_{\rm
sus}$, then the events on the pixel are most likely events from a bright
source at one of the corners of the dither pattern because some of the
pixels surrounding the suspicious pixel also have an unusually large number
of events.  In this case, set $A[{\rm CCD\_ID, CHIPX, CHIPY}]$ and $B[{\rm
CCD\_ID, CHIPX, CHIPY}] = \srcevents$.

\item
Identify real hot pixels.  Compute the values of $\Delta {\rm EXPNO} = {\rm
EXPNO}_{i} - {\rm EXPNO}_{i-1}$ for each event $i$ on a suspicious pixel.
For example, if there are six events on a suspicious pixel with ${\rm EXPNO}
= 3$, 6, 7, 8, 10, and 11, then the five values of $\Delta {\rm EXPNO}$ are
3, 1, 1, 2, and 1.  The median value of $\Delta {\rm EXPNO}$ for this set is
1. For another pixel with eight events that have ${\rm EXPNO} = 27$, 163,
345, 746, 839, 1337, 1593, and 1714, the seven values of $\Delta {\rm
EXPNO}$ are 136, 182, 401, 93, 498, 256, and 121.  The median value of this
set is 182. If the median value of $\Delta {\rm EXPNO} > {\rm expnothresh}$,
then the pixel is most likely a real hot pixel instead of an afterglow
because afterglow events have closely-spaced exposure numbers.  In this
case, set $A[{\rm CCD\_ID, CHIPX, CHIPY}]$ and $B[{\rm CCD\_ID, CHIPX,
CHIPY}] = \hotpixel$ and set the event data STATUS bit \hotpixelbit\ (of
0--31) to one for events occurring on the pixel.

\item
The events on the remaining suspicious pixels (those for which $A[{\rm
CCD\_ID, CHIPX, CHIPY}] = \suspiciouspix$), are most likely dominated by
afterglow events. However, not all of the events on these pixels are
necessarily due to afterglows. Some of the events may be legitimate X-ray
events.  To distinguish between real X-ray events and afterglow events, use
the values of $\Delta {\rm EXPNO}$.  For simplicity, we assume that only one
afterglow has occurred on any given suspicious pixel.  In this case, there
are two possible scenarios. \\ \hspace*{0.5\baselineskip}

{\it The first event is part of an afterglow.} \\ 
%
If the value of $\Delta {\rm EXPNO}$ between the first and second events is
less than or equal to expnothresh, then set STATUS bit \afterglowbit\ (of
0--31) to one for both events.  If the value of $\Delta {\rm EXPNO}$ between
the second and third events is less than expnothresh, then set STATUS bit
\afterglowbit\ to one for the third event. Repeat this process until the
value of $\Delta {\rm EXPNO}$ for event $i$ and event $i-1$ is greater than
expnothresh.  Set STATUS bit \afterglowbit\ to one for event $i-1$, but not
for event $i$. Stop processing the events for this suspicious pixel.  The
remaining events (if any) are assumed to be valid. \\
\hspace*{0.5\baselineskip}

{\it The first event is not part of an afterglow.} \\
%
If the value of $\Delta {\rm EXPNO}$ between the first and second events is
greater than expnothresh, then do not set STATUS bit \afterglowbit\ to one
for the first event.  Continue checking the value of $\Delta {\rm EXPNO}$
until the value is less than or equal to expnothresh for events $i$ and
$i-1$.  Set STATUS bit \afterglowbit\ to one for both events $i$ and $i-1$.
Continue to set the STATUS bit for events to one (as described in ``{\it The
first event is part of an afterglow}'' until the value of $\Delta {\rm
EXPNO}$ for event $i$ and event $i-1$ is greater than expnothresh.  Set
STATUS bit \afterglowbit\ to one for event $i-1$, but not for event $i$.
Stop processing the events for this suspicious pixel.  The remaining events
(if any) are assumed to be valid.

\end{itemize}

\item
Write the output event data to the file specified by outfile.  The only
difference between the input and output event data files (aside from minor
changes to the header) is the contents of the column STATUS.  Events
associated with hot pixels or pixels that have bad bias values have STATUS
bit \hotpixelbit\ set to one.  Events associated with afterglows have STATUS
bit \afterglowbit\ set to one.

\item
Write the output bad-pixel file (if one is specified).  The new bad-pixel
file should include all of the information in the input bad-pixel file as
well as all the pixels for which $A[{\rm CCD\_ID, CHIPX, CHIPY}] =
\badadjbias$ or $\hotpixel$.  STATUS bit \bpixbit\ (of 0--15) is set to one
for the newly identified bad pixels.

\end{enumerate}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 8. Special Array Values

\subsection{ Special Array Values }

The processing described in section~\ref{secprocess} includes several
special values for the arrays $A$ and $B$.  These special values are
summarized in the following table.

\begin{table}[h]
\begin{center}
\begin{tabular}{l l}
Value
  &
  Condition
  \\
\hline
$\knownbadbias$
  & \parbox{5.0in}{The bias value is 4094, 4095, or 4096 for the pixel.}
  \\
\ & \\
$\knownbadpix$
  & \parbox{5.0in}{One or more of the bad-pixel STATUS bits 0--6, 11, and 13
    is set to one for the pixel.}
  \\
\ & \\
$\maskedpixels$
  & \parbox{5.0in}{The pixel is ``masked out'' or is on a CCD that was not 
    used for the observation.}
  \\
\ & \\
$\badadjbias$
  & \parbox{5.0in}{The pixel is suspicious because the adjusted bias value
    for the pixel is not within the specified limits.}
    \\
\ & \\
$\suspiciouspix$
  & \parbox{5.0in}{The pixel is suspicious because the number of events on
    it is unusually high or low.}
  \\
\ & \\
$\srcevents$
  & \parbox{5.0in}{The events on the suspicious pixel are most likely
    associated with a bright source.}
  \\
\ & \\
$\hotpixel$
  & \parbox{5.0in}{The pixel is most likely a hot pixel.}
\end{tabular}
\end{center}
\end{table}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 9. Acknowledgements

\subsection{ Acknowledgements }

This specification was developed after discussing the concept with Catherine
Grant and reviewing the hot-pixel detection algorithm developed by Takashi
Isobe for the mission and trends analysis group.  The efforts of Kevin
Tibbetts, who helped develop a prototype, are greatly appreciated.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 10. Finish

\end{document}

