TABLES v2.2 RELEASE NOTES ************************* TABLES APPLICATIONS CHANGES TTOOLS: New Tasks: - THEDIT A new table header editor was added to ttools. This can be used to add, edit, or print table header keywords. Existing Tasks: - TPRINT When printing header keywords, leading blanks are now removed from the value and comment before printing. When printing data, if the last column on a page is to be printed left justified, trailing blanks will no longer be printed. - TREBIN When the independent variable column in the input table contains arrays rather than scalar values, each row will be rebinned independently; scalar columns will be copied to output unchanged, and array columns (if they are the same length as the independent variable column) will be rebinned. Two new hidden parameters were added, 'xtable' and 'padvalue'. 'xtable' is the name of a table of independent variable values at which the input table will be resampled; this is an alternative to 'start', 'end', 'step' and allows nonuniform output spacing. If 'padvalue' is not INDEF, this value will be ignored if it is found at the end of an array of input independent variable values; INDEF values will also be ignored. This option was added because array columns often have an allocated size that is larger than is actually used, and the array is padded with zero or INDEF. - TAINSERT A warning message is printed for the case that the number of rows in the input table is greater than the array size of the column to which the values will be written. The message has been modified to include the column name. The task only works on one column at a time, but if tainsert is used in a script, it can be very helpful to have the column name in the message. - IMTAB and TABIM These tasks now accept filename templates for the image and table names. - TABIM If the output image dimension is specified, tabim no longer gets all of the axis lengths from the cl parameters. All but the last axis length are gotten, and the last one is computed from the number of rows and the product of the specified axis lengths. - TITABLE and TXTABLE Arrays of character strings were not being handled correctly. - TCALC The input table name can now be a file name template. - TCHCOL Trailing blanks are now removed from the new values of column name, print format, and units. - TSORT Some changes were made to speed up the operation of tsort on large tables (external sorts). The file type of the temporary table, rather than the input table, is set to sequential. Another change was made so that the number of rows in a temporary table is computed from the number of chars in a row rather than the number of reals. The number of tables used at a single time during the merge was increased from 7 to 15. TABLES LIBRARY CHANGES TABLES I/O routines: For text tables with explicit column definitions, the specified data type may be converted to a type that is supported for text tables, i.e. from real to double, short to int, and boolean to an eight-byte character string. - CFITSIO CFITSIO version 2.034 (23 Nov 1999) was installed in the tables package. The table I/O interface was modified to save the column scaling parameters TSCALi and TZEROi in the column descriptor. If a table is opened new-copy, the original data type (the real type, in the table file) will be preserved for the output table, and the same scaling parameters will be used. A new routine tbcscal was added to the interface to allow setting the scaling parameters for a previously defined column of type short or int. One of the options for tbpsta is to get the file I/O buffer size. If the table is in a FITS file, however, the value returned was garbage, since IRAF file I/O is not used for FITS tables. For FITS tables, tbpsta now calls a new function tbfsiz to get the buffer size used by CFITSIO. In the section for text tables in tbhrpr.x, the data type was being set incorrectly for keywords HISTORY or COMMENT if the first word of the value was a number, e.g. "1993 June 17". The data type is now set to TY_CHAR if the keyword is HISTORY or COMMENT. There were two bugs in the array put routines, for the case of writing to the next row after the last row in the table. In tbxapt, the parameter that keeps track of the number of rows in the table was not being updated; the data were actually being written to the table, but they were then lost. For the tbxap[] routines other than tbxapt, when the data type was not the same as the data type in the table column, the new row was garbled. - further information about low level changes to tables: With regard to preserving TSCALi and TZEROi when a table is opened new-copy, the following changes were made. The SPP/C interface file tbfxff.c and its include file underscore.h were modified to add fsukyd. The new or modified files are: tbtables.h, underscore.h, tbfxff.c, mkpkg, tbcscal.x (new), tbfscal.x (new), tbcadd.x, tbcrcd.x, tbfnew.x, tbfrcd.x, tbftya.x, tbftyb.x, tbfwcd.x, tbtopns.x. With regard to getting the file I/O buffer size by tbpsta, tbpsta calls tbfsiz, which calls fsgrsz, which is an interface routine that has been added to tbfxff.c, and fsgrsz calls the CFITSIO function ffgrsz. Since fsgrsz didn't exist in the SPP version of FITSIO, this routine has been added to that version. The modified files are mkpkg, tbpsta, tbfxff.c and underscore.h; the new files are tbfsiz.x and fitsio/fitssppb/fsgrsz.x. With regard to writing to the next row after the last row in the table, all the tbxap[] routines (except tbxapt) in tbxap.x were modified so that they now call tbxwer when writing to the row following the last row in the table, for the case that the data type is not the same as the data type in the table column. GFLIB: Gflib is designed to allow GEIS specific tasks to transparently access either GEIS or FITS format files. To increase the compatibility, gflib was modified to copy the primary header the first time a new image is opened in NEW_COPY mode. Also, the data type of a new extension is explicitly set to the data type of the old extension when an image is opened in NEW_COPY mode. This works around a bug in the FITS kernel. These fixes still leave unsolved the problem of copying the primary header into the extension header when inherit is true. Modifications were made so that when copying a FITS file without extensions, it is no longer converted to a FITS file with extensions. Extensive modifications were made to support the correct placement of header keywords in either the primary or extension header. The determination of whether a FITS image has extensions is now made by trying to open the first extension rather than reading the EXTEND keyword. IRAF format images are now converted to simple FITS files rather than FITS files with extensions. Changes were made to fix some bugs in updating the primary header. A change was made so that FITS files created from input images with group number equal to -1 (undefined) are now no longer set to have group number equal to 1. A check to determine if the input file is FITS or GEIS was inserted in place of a call to determine if the image has groups or extensions. GILIB: Two new procedures have been added to the gilib library to return information from the FITS kernel and to step through the GEIS group parameter structure. These procedures were added to support changes in gflib. STXTOOLS: The number of groups in an image was not being computed correctly when the user omitted the image extension from the image name. The code was modified so that the default extension is now added to the root name. In order to fix a bug reported in tcalc, indef strings are now capitalized before being added to the expression evaluator.