NAME:
    wfc3model
 PURPOSE: (one line)
    Generate synthetic PSF images for the HST WFC3 UVIS Camera.
 DESCRIPTION:
    A generated PSF is added to the output array.  If the array is not
 defined, it is created with dimensions 4096 by 2048.  Successive calls
 will add objects (PSF's) to the array.
 CATEGORY:
  CCD data processing
 CALLING SEQUENCE:
    wfc3model, chip, xsrc, ysrc, inten, filter, bmvnum, back, image
 INPUTS:
    chip    : CCD number (1 or 2) for UVIS1 or UVIS2, use 3 for IR channel
 xsrc, ysrc : Position of the PSF in the output array.
    inten   : Intensity of PSF relative to TinyTim output PSF
    filter  : Filter name in the form Fxxx(W,LP,M,N).
    bmvnum  : B-V list value (TinyTim V7.0 values):
                BMVNUM    TYPE       B-V
                1           O5      -0.34
                2           O8F     -0.32
                3           O6      -0.31
                4           B1V     -0.27
                5           B3V     -0.21
                6           B6V     -0.12
                7           A0V     -0.04
                8           A5V      0.12
                9           F6V      0.37
               10           F8V      0.48
               11           G2V      0.56
               12           G5V      0.66
               13           G8V      0.75
               14           K4V      0.92
               15           K7V      1.28
               16           M1.5V    1.45
               17           M3V      1.44
             This can be a scalar to be applied to all objects or it can
              be a vector but the length must match xsrc,ysrc,inten
    back    : Background to be added.

 KEYWORD PARAMETERS:
;  DISTORT   : If set the input x,y are taken to be in an undistorted reference
;              plane. They will be converted to the instrumental (distorted)
;              frame before generating the psf's for the model image, which is 
;              in distorted space as always.
  GRID      : Grid spacing for psf files.
  HSTPATH   : Alternate path for HST PSF's.
  JITTER    : If set contains the gaussian smearing to apply to the image.
                This number set the 1/e half width of the jitter in pixels.
                If not set, no smearing is applied. This calculation is done
                in double precision or float according to the type of image.
                The values passed to the exp function
                         ( e - (((x/j)^2 + y/j)^2/2) )
                are restricted to a maximum based on the computational
                precision to avoid floating point underflow.
              Another option is to provide a jitter kernel externally.  This
                allows being a bit more creative and handling something like
                a smearing funciton.
               
  NEW       : If set, clears the output array to zeros before building the
              PSF image(s).

  OBJRAD    : Radius of object in pixels.  If not set, assumed to be a point
              source.  If set and radius is greater than 0.5, then PSF is
              convolved with a circular function of this radius.  This models
              the object as a Lambert disk, crude but useful for barely
              resolved objects.  Keep in mind that this is absolutely wrong
              for objects that are clearly resolved.
  PSFSIZE   : Size of requested PSF, in arcseconds (default: 5).
  VERBOSE   : If set, prints informational message.
  XSIZE     : size of output array to generate, default full image
  YSIZE     : size of output array to generate, default full image
  XOFFSET   : X offset to apply to input coordinates to convert to absolute
                chip values (used if you only want to compute a sub-array)
  YOFFSET   : Y offset to apply to input coordinates to convert to absolute
                chip values (used if you only want to compute a sub-array)
  Z4        : setting for fourth (focus) Zernicke coefficient (default=0).

 OUTPUTS:
    image  : The image array into which the PSF is placed.
 COMMON BLOCKS:

 SIDE EFFECTS:

 RESTRICTIONS:

 PROCEDURE:
    The Tiny Tim programs are used, via the procedure HSTPSF, to generate
 a distorted PSF at the nearest grid location to the 
 requested position. (This grid and default spacing are defined in hstpsf).
 MODIFICATION HISTORY:
  Cloned from pc2model.pro,
    Written by Marc W. Buie, Southwest Research Institute, 2009/09/01
  2011/03/22, MWB, added IR camera support, added XSIZE/YSIZE keywords
  2014/07/08, MWB, added new option for input jitter/smearing kernel
  2014/09/23, MWB, reversed jitter kernel for true convolution
  2017/05/26, MWB, added a kludge to prevent pasting kernel out of bounds