IMIO modifications to support SDAS format imagefiles ---------------------------------------------------------------- 1. EXISTING DATA FORMATS 1.1 IRAF Data Format (pre-DBIO) Characteristics: o Header: binary data structure + fits card image string buffer o Pixels: binary pixhdr + pixels (can be block aligned) o Many datatypes supported o One image per imagefile o Pixel file may be stored in different directory than header file o Header file is protected from deletion Disadvantages: o Can lose track of pixel file if header is deleted. o Since each image is stored in a separate pair of files, directories can be large. o The storage format is machine dependent. Modifications in this release: o Add .imh extension to image header file o Add .pix extension to pixel file, make root name same as that of the header file o If IMDIR = "", put pixel file in same directory as the header. This avoids use a pathname in the header, hence the images are relocatable, but forces one to work on a scratch device. 1.2 SDAS Data Format Characteristics: o Images are physically stored in group format o FITS group header + binary image headers o Pixfile format: [pixels + group header] * ngroups nothing is aligned on block boundaries o Pixel and header files stored in same directory o Header file extension .hhh, pixel file extension .hhd Disadvantages: o Images cannot be added to a group; the number of images in a group must be specified when the group is created. o The individual images in a group cannot be deleted; only the entire group can be deleted. o The format of the image headers for the individual images in a group is fixed at create time; new parameters cannot be added to the individual image headers (new parameters can however be added which apply to the group as a whole). o The images in a group must all be of the same size and datatype (this is probably not a serious disadvantage). o The storage format is machine dependent. 2. IMAGEFILE ACCESS o Open/create image o Make new_copy image o Access pixel segment o Close image o Test if image exists (and determine type) o Delete image o Rename image 2.1 Open Image generate header filename open/create header file allocate image descriptor if (existing image) read image header into descriptor else initialize descriptor return pointer to descriptor 2.2 Access Pixel Segment All image size parameters must be determined at pixfile creation time. if (new segment) { fill in descriptor if (new pixel file) allocate pixel file else open pixel file r/w update header } else open pixel file 2.3 Close Image if (header has been modified) update header close pixfile close header 3. SPECIFICATIONS 3.1 Image Header Access To minimize changes to existing code, the IMIO internal data structures will not be modified. The principal change to the structure of the existing interface is the replacement of the direct calls to the FIO open, close, read, write, etc. procedures called to access the image header in mass storage by calls to a new interface IH (Image Header access). The new interface will hide the disk image format from IMIO. Interface subroutines will be provided only for the IRAF and SDAS image formats, although in principle the interface will be extensible to other formats as well. Ideally the IH interface should be coded using only relatively low level VOS and kernel facilities (i.e., no high level FIO, no error handling) so that it may be used by the IMFORT interface and called from host Fortran programs, as well as by IMIO. im = ihopen (image, group, acmode) ihopix (im) ihclose (im) IHOPEN returns the standard IMIO image descriptor, consisting of the internal IMIO fields, the binary image header structure IMHDR, and the "user area", a sequence of FITS card images stored in memory a string buffer, i.e., each card image is represented as a stripped, newline delimited sequence of characters, with an EOS following the last card. The GROUP argument to IHOPEN permits access to the individual elements of a group format imagefile. Group format is supported for both imagefile formats, the principal difference being that the individual images are stored in separate files in the old IRAF format, and in a single pair of images in the SDAS format. The individual images in a group format imagefile appear as separate, independent images in IMIO. Several images in a group format imagefile may be simultaneously open (the files are physically opened only once). The group header parameters are duplicated for each image in the group. If the images are stored in the old IRAF format on disk the values of these parameters may vary from image to image, otherwise (SDAS format) they are the same for all members of the group. The number of images in a group is fixed at image creation time. 3.2 Image Sections and Templates The image section notation recognized by IMMAP may include a group specifier (set selection expression) as well as a section specifier. The full syntax is "image{group}[section]", e.g., pix{3}[*,5] where { is the set selection operator, and [ is the familiar array subscript or subsection operator. The image template notation has also been generalized to support group format image data. The general form of a template element is image{groups}[section] where [section] applies to each image in the group. For example, the template aa{4},bb{1,3:5},cc{12:15}[*,-*] expands as image 4 of group AA, images 1, 3, 4, and 5 of group BB, and images 12 through 15 of group CC flipped in Y.