IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Nov 7, 2004, 2:43:20 PM (22 years ago)
Author:
eugene
Message:

bugzilla mods

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/doc/pslib/psLibSDRS.tex

    r2241 r2300  
    1 %%% $Id: psLibSDRS.tex,v 1.145 2004-10-29 22:01:19 eugene Exp $
     1%%% $Id: psLibSDRS.tex,v 1.146 2004-11-08 00:43:20 eugene Exp $
    22\documentclass[panstarrs,spec]{panstarrs}
    33
    44% basic document variables
    5 \title{Pan-STARRS Image Processing Pipeline Library}
     5\title{Pan-STARRS PS-1 Image Processing Pipeline Library}
    66\subtitle{Supplementary Design Requirements}
    77\shorttitle{PSLib SDRS}
     
    1111\project{Pan-STARRS Image Processing Pipeline}
    1212\organization{Institute for Astronomy}
    13 \version{08}
     13\version{09}
    1414\docnumber{PSDC-430-007}
    1515
     
    4141
    4242\DocumentsInternal
    43 PSDC-130-001  &   PS-1 Design Reference Mission \\ \hline
    44 PSDC-430-004  &   Pan-STARRS IPP C Code Conventions \\ \hline
    45 PSDC-430-005  &   Pan-STARRS IPP SRS \\ \hline
    46 PSDC-430-006  &   Pan-STARRS IPP ADD \\ \hline
    47 PSDC-430-008  &   Pan-STARRS IPP Architecture SDR \\
     43PSDC-230-001  &   PS-1 Design Reference Mission \\ \hline
     44PSDC-430-004  &   Pan-STARRS PS-1 IPP C Code Conventions \\ \hline
     45PSDC-430-005  &   Pan-STARRS PS-1 IPP Software Requirements Specification \\ \hline
     46PSDC-430-006  &   Pan-STARRS PS-1 IPP Algorithm Design Document \\ \hline
     47PSDC-430-011  &   Pan-STARRS PS-1 IPP System/Subsystem Design Description \\ \hline
    4848\DocumentsExternal
    4949Posix Standard & Open Group Based Specifications Issue 6, IEEE Std 1003.1, 2003 \\
     
    19391939This function takes the input data in \code{in} (with optional
    19401940\code{errors} in these values; and with optional masking in
    1941 \code{mask}, so that the user may explicitly reject specific entries )
     1941\code{mask}, so that the user may explicitly reject specific entries)
    19421942and a \code{psStats} structure, which will be altered and returned.
    19431943The \code{psStats} structure includes several fields which are used
     
    19551955field values must be set by the \code{psStats} constructor.  The input
    19561956vector may be of type \code{psS8}, \code{psU16}, \code{psF32},
    1957 \code{psF64}; the \code{errors} must be of the same type as the
    1958 \code{in} vector; the mask must be of type \code{psU8}.
     1957\code{psF64}.  The \code{errors} must be of the same type as the
     1958\code{in} vector.  If \code{errors} is not \code{NULL}, the
     1959calculation of certain statistics are modified: The sample mean is
     1960calculated using the formula for the weighted mean; the standard
     1961deviation is modified as specified in the ADD; the clipping used for
     1962clipped statistics are modified according to the ADD; the robust
     1963median and quartiles are modified as specified in the ADD.  The mask
     1964must be of type \code{psU8}.
    19591965
    19601966The \code{psStats} structure is defined with entries for each of the
     
    21672173To evaluate the polynomials at specific coordinates, we define:
    21682174\begin{verbatim}
    2169 double psDPolynomial2DEval(double x, double y, const psDPolynomial2D *restrict myPoly);
     2175double psDPolynomial2DEval(const psDPolynomial2D *restrict myPoly, double x, double y);
    21702176\end{verbatim}
    21712177
    21722178In the event that several evaluations are required, we also define:
    21732179\begin{verbatim}
    2174 psVector *psDPolynomial2DEvalVector(const psVector *x, const psVector *y,
    2175                                     const psDPolynomial2D *myPoly);
     2180psVector *psDPolynomial2DEvalVector(const psDPolynomial2D *myPoly, const psVector *x, const psVector *y);
    21762181\end{verbatim}
    21772182If the \code{x} and \code{y} vectors do not match the precision of the
     
    22362241
    22372242\begin{verbatim}
    2238 float psSpline1DEval(const psSpline1D *spline, float x);
    2239 psVector *psSpline1DEvalVector(const psVector *x, const psSpline1D *spline);
    2240 \end{verbatim}
    2241 
     2243psF64 psSpline1DEval(const psSpline1D *spline, float x);
     2244psVector *psSpline1DEvalVector(const psSpline1D *spline, const psVector *x);
     2245\end{verbatim}
    22422246
    22432247\subsubsection{Gaussians}
     
    24742478\code{psVectorFitSpline} shall return the spline that best fits the
    24752479given combination of ordinates (\code{x}) and coordinates (\code{y}).
    2476 As for \code{psVectorFitPolynomial1D}, if \code{x} is \code{NULL},
    2477 then the vector index shall be used as the ordinate; and if
    2478 \code{yErr} is \code{NULL}, then all the data errors shall be assumed
    2479 to be equal.  This function must be valid only for types \code{psF32},
    2480 \code{psF64}.
     2480The function shall construct a new \code{psSpline1D} based on domains
     2481determined from \code{x}: the domain boundaries are the data values in
     2482\code{x}.  As is the case for \code{psVectorFitPolynomial1D}, if
     2483\code{x} is \code{NULL}, then the index of \code{y} shall be used as
     2484the ordinate; and if \code{yErr} is \code{NULL}, then all the data
     2485errors shall be assumed to be equal.  This function must be valid only
     2486for types \code{psF32}, \code{psF64}.
    24812487
    24822488%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    38133819\code{psMetadata.hash} entries, which are required to have unique
    38143820keys, would have a single entry with the keyword of the repeated key,
    3815 with the value of \code{psMetadataType} set to
    3816 \code{PS_META_ITEM_SET}, and the \code{psMetadataItem.items} element
    3817 pointing to a \code{psList} pointing to the actual entries.  If
    3818 \code{psMetadataItemAlloc} is called with the type set to
    3819 \code{PS_META_ITEM_SET}, such a repeated key is created.  If the data
    3820 value passed to \code{psMetadataItemAlloc} (the quantity in ellipsis)
    3821 is \code{NULL}, then an empty \code{psMetadataItem} with the given
    3822 keyword is created to hold future entries of that keyword.
     3821with the value of \code{psMetadataType} set to \code{PS_META_LIST},
     3822and the \code{psMetadataItem.data} element pointing to a \code{psList}
     3823containing the actual entries.  If \code{psMetadataItemAlloc} is
     3824called with the type set to \code{PS_META_LIST}, such a repeated key
     3825is created.  If the data value passed to \code{psMetadataItemAlloc}
     3826(the quantity in ellipsis) is \code{NULL}, then an empty
     3827\code{psMetadataItem} with the given keyword is created to hold future
     3828entries of that keyword.
    38233829
    38243830The \code{psMetadataAdd} routine is required to check that all
    38253831metadata names are unique unless the type is already qualified as
    3826 \code{PS_META_ITEM_SET}; in this case the data are added to the
    3827 corresponding \code{psMetadataItem.items} list.
     3832\code{PS_META_LIST}; in this case the data are added to the
     3833corresponding \code{psMetadataItem.data} list.
    38283834
    38293835\subsubsection{Metadata APIs}
     
    38693875Care should be taken not to leak memory when appending an item for
    38703876which the key already exists in the metadata (and is not
    3871 \code{PS_META_ITEM_SET}).
     3877\code{PS_META_LIST}).
    38723878%
    38733879\begin{verbatim}
     
    39303936void psMetadataItemPrint(FILE *fd, const char *format, const psMetadataItem *md);
    39313937\end{verbatim}
    3932 
    3933 \begin{verbatim}
    3934 psMetadata *psMetadataReadHeader(psMetadata *output, const char *extname,
    3935                                  int extnum, const char *filename);
    3936 \end{verbatim}
    3937 Read header data from a FITS image file into a \code{psMetadata}
    3938 structure.  The \code{extname} and \code{extnum} parameters specify
    3939 the extension of interest as above.  The data is read from the
    3940 extension specified by extname (matching the EXTNAME keyword) or by
    3941 the extnum value (with 0 representing the primary header unit (PHU), 1
    3942 the first extension, etc).  This function must call \code{psError} and
    3943 return \code{NULL} if the specified extension does not exist.  If
    3944 \code{extname} is not \code{NULL}, \code{extnum} must be set to -1 or
    3945 the function shall raise an error.
    3946 
    3947 \tbd{this function is being deprecated and the equivalent is being
    3948 moved to FITS I/O Functions.}
    3949 
    3950 \begin{verbatim}
    3951 psMetadata *psMetadataFReadHeader(psMetadata *output, const char *extname,
    3952                                   int extnum, FILE *f);
    3953 \end{verbatim}
    3954 Read header data from a FITS image file descriptor into a
    3955 \code{psMetadata} structure.
    3956 
    3957 \tbd{this function is being deprecated and the equivalent is being
    3958 moved to FITS I/O Functions.}
    39593938
    39603939\subsubsection{Configuration files}
     
    41234102a file without multiple open commands (which are expensive).
    41244103
     4104\subsubsection{FITS File Manipulations}
     4105
     4106\begin{verbatim}
     4107psFits *psFitsAlloc(const char *filename);
     4108\end{verbatim}
     4109
     4110Opens a FITS file at positions the pointer to the PHU.
     4111
     4112\begin{verbatim}
     4113psFits *psFitsMoveExtName(psFits *fits, const char *extname);
     4114\end{verbatim}
     4115
     4116Positions the pointer to the beginning of the specified
     4117\code{extname}.  If the \code{extname} does not exist, the function
     4118shall fail.  \tbd{is it necessary to return the pointer? can this just
     4119return a status?}
     4120
     4121\begin{verbatim}
     4122bool psFitsMoveExtNum(psFits* fits, int extnum, bool relative);
     4123\end{verbatim}
     4124
     4125Moves the pointer to the beginning of the specified HDU number.  If
     4126\code{relative} is TRUE, \code{extnum} represents the number of HDUs
     4127relative to the current HDU.  \tbd{Is PHU 0 or -1?  is it necessary to
     4128return the pointer? can this just return a status?}
     4129
     4130\begin{verbatim}
     4131int psFitsGetExtNum(psFits* fits);
     4132\end{verbatim}
     4133
     4134Returns the current HDU number (i.e., file position). 
     4135
     4136\begin{verbatim}
     4137int psFitsGetSize(psFits* fits);
     4138\end{verbatim}
     4139
     4140Returns the number of HDUs in the file.
     4141
     4142\begin{verbatim}
     4143int psFitsCreateExt(psFits* fits, psFitsType type, const char* name);
     4144\end{verbatim}
     4145
     4146Creates a new HDU on the end of the file with the given extname and
     4147type.  The psFits pointer is positioned to the new HDU.  \tbd{does
     4148this write data to disk or not?}
     4149
     4150\begin{verbatim}
     4151psFitsType psFitsGetExtType(psFits* fits);
     4152\end{verbatim}
     4153
     4154Gets the current HDU's type (table or image).
     4155
    41254156\subsubsection{FITS Header I/O Functions}
    41264157
    41274158\begin{verbatim}
    4128 psMetadata *psFitsReadHeader(psMetadata *output, const char *extname, int extnum, const char *filename);
    4129 psMetadata *psFitsReadHeaderPtr(psMetadata *output, const char *extname, int extnum, const psFits *fd);
    4130 \end{verbatim}
    4131 Read header data from a FITS image file into a \code{psMetadata}
    4132 structure.  The \code{extname} and \code{extnum} parameters specify
    4133 the extension of interest as above.  The data is read from the
    4134 extension specified by extname (matching the EXTNAME keyword) or by
    4135 the extnum value (with 0 representing the primary header unit (PHU), 1
    4136 the first extension, etc).  This function must call \code{psError} and
    4137 return \code{NULL} if the specified extension does not exist.  If
    4138 \code{extname} is not \code{NULL}, \code{extnum} must be set to -1 or
    4139 the function shall raise an error.  The file is either specified as a
    4140 named file on disk or by an open \code{psFits} file pointer.
    4141 
    4142 \begin{verbatim}
    4143 psHash *psFitsReadHeaderSet (const char *filename);
    4144 psHash *psFitsReadHeaderSetPtr (const psFits *fd);
    4145 \end{verbatim}
    4146 Load a complete set of headers from a named file or \code{psFits} file
    4147 pointer.  This function loads the headers from all extensions into a
     4159psMetadata *psFitsReadHeader(psMetadata *out, const psFits *fits);
     4160\end{verbatim}
     4161Read header data into a \code{psMetadata} structure.  The data is read
     4162from the current HDU pointed at by the \code{psFits *fits} entry.  If
     4163\code{out} is \code{NULL}, a new psMetadata is created.
     4164
     4165\begin{verbatim}
     4166psHash *psFitsReadHeaderSet (psFits *fits);
     4167\end{verbatim}
     4168Load a complete set of headers from the \code{psFits} file pointer.
     4169This function loads the headers from all extensions into a
    41484170\code{psHash}, each entry of which is a pointer to a \code{psMetadata}
    41494171structure containing the header data.  The hash keys are the
    41504172\code{EXTNAME} values for each header (with the value of \code{PHU}
    4151 for the primary header unit).
    4152 
    4153 \begin{verbatim}
    4154 bool psFitsWriteHeader(psMetadata *output, const char *filename);
    4155 bool psFitsWriteHeaderPtr(psMetadata *output, const psFits *fd);
     4173for the primary header unit).  At the start of the operation, the file
     4174pointer is rewound to the beginning of the file.  At the end, it is
     4175positioned where it started when the function was called.
     4176
     4177\begin{verbatim}
     4178bool psFitsWriteHeader(psMetadata *output, const psFits *fits);
    41564179\end{verbatim}
    41574180Write metadata into the header of a FITS image file.  The header is
    4158 written to the end of the given file.  \tbd{Allow for overwriting a
    4159 specific header? dangerous in anycase: the header and data must agree
    4160 for the file to be valid...}  \tbd{consistency check?}  \tbd{function
    4161 to remove non-FITS header entries?}
     4181written at the current HDU.
    41624182
    41634183\subsubsection{FITS Image I/O Functions}
    41644184
    41654185\begin{verbatim}
    4166 psImage *psFitsReadImageSection(psImage *output, psRegion region, int z, const char *extname, int extnum, const char *filename);
    4167 psImage *psFitsReadImageSectionPtr(psImage *output, psRegion region, int z, const char *extname, int extnum, const psFits *fd);
    4168 \end{verbatim}
    4169 Read an image or subimage from a named file or \code{psFits} file
    4170 pointer.  This function is a wrapper to the CFITSIO library function.
    4171 The input parameters allow a full image or a subimage to be read.  The
    4172 region to be read is specified by \code{region}.  A negative value
    4173 for either of \code{region.x1} or \code{region.y1} specifies the
    4174 size of the region to be read counting down from the end of the array.
    4175 The file pointer version must not make any assumption about the
    4176 current position of the file pointer.
     4186psImage *psFitsReadImageSection(psImage *output, psFits *fits, psRegion region, int z);
     4187\end{verbatim}
     4188Read an image or subimage from the \code{psFits} file pointer.  This
     4189function is a wrapper to the CFITSIO library function.  The input
     4190parameters allow a full image or a subimage to be read.  The region to
     4191be read is specified by \code{region}.  A negative value for either of
     4192\code{region.x1} or \code{region.y1} specifies the size of the region
     4193to be read counting down from the end of the array. 
    41774194
    41784195If the native image is a cube, the value of z specifies the requested
    4179 slice of the image.  The data is read from the extension specified by
    4180 extname (matching the EXTNAME keyword) or by the extnum value (with 0
    4181 representing the primary header unit (PHU), 1 the first extension,
    4182 etc).  This function must call \code{psError} and return \code{NULL}
    4183 if any of the specified parameters are out of range for the data in
    4184 the image file, if the specified image file does not exist, or the
    4185 image on disk is zero- or one-dimensional.  This function need only
    4186 read images of the native FITS image types (\code{psU8}, \code{psS16},
    4187 \code{psS32}, \code{psF32}, \code{psF64}).  The user is expected to
    4188 convert the data type as needed with \code{psImageCopy}. 
     4196slice of the image.  This function must call \code{psError} and return
     4197\code{NULL} if any of the specified parameters are out of range for
     4198the data in the image file, or if the image on disk is zero- or
     4199one-dimensional.  This function need only read images of the native
     4200FITS image types (\code{psU8}, \code{psS16}, \code{psS32},
     4201\code{psF32}, \code{psF64}).  The user is expected to convert the data
     4202type as needed with \code{psImageCopy}.
    41894203 
    41904204\begin{verbatim}
    4191 bool psFitsWriteImageSection(const psImage *input, int x, int y, int z, const char *extname, int extnum, const char *filename);
    4192 bool psFitsWriteImageSectionPtr(const psImage *input, int x, int y, int z, const char *extname, int extnum, const psFits *fd);
    4193 \end{verbatim}
    4194 Write an image section to the named file (which may exist) or open
    4195 \code{psFits} file pointer.  This operation may write a portion of an
    4196 image over the existing bytes of an existing image.  If the file does
    4197 not exist, it should be created.  If the specified extension does not
    4198 exist, it should be created.  If an extension is specified and no PHU
    4199 exists, a basic PHU should be created.  Care must be taken to
    4200 interpret x,y,z in the two cases a) there is already an existing image
    4201 and b) there is not an existing image.  If the image exists, write the
    4202 complete psImage data to the existing image starting at the coordinate
    4203 x,y,z.  If any of these parameters implies writing pixels outside the
    4204 existing data area of the image, return an error (ie, if \code{x +
    4205 image.nx >= NAXIS1}, \code{y + image.ny >= NAXIS2}, or \code{z >=
    4206 NAXIS3}).  If the image does not exist, require x,y,z to be zero.
    4207 This function will only write images of the native FITS image types
    4208 (\code{psU8}, \code{psS16}, \code{psS32}, \code{psF32}, \code{psF64}).
    4209 The user is expected to convert the data type as needed with
    4210 \code{psImageCopy}.  The return value must be 0 for a successful
    4211 operation and 1 for an error.
    4212 
    4213 \tbd{versions of these functions which do not construct the header,
    4214 but instead use a corresponding metadata structure, need to exist}.
     4205bool psFitsWriteImageSection(psFits *fits, const psImage *input, psRegion region, int z);
     4206\end{verbatim}
     4207Write an image section to the open \code{psFits} file pointer.  This
     4208operation may write a portion of an image over the existing bytes of
     4209an existing image.  Care must be taken to interpret \code{region},
     4210which specified the output pixels to be written / over-written.  If
     4211the combination of \code{region} and the size of \code{psImage *input}
     4212implies writing pixels outside the existing data area of the image,
     4213the function shall return an error (ie, if \code{region.x0 + image.nx
     4214>= NAXIS1}, \code{region.y0 + image.ny >= NAXIS2}, or \code{z >=
     4215NAXIS3}).  This function will only write images of the native FITS
     4216image types (\code{psU8}, \code{psS16}, \code{psS32}, \code{psF32},
     4217\code{psF64}).  The user is expected to convert the data type as
     4218needed with \code{psImageCopy}.  The return value must be 0 for a
     4219successful operation and 1 for an error.
    42154220
    42164221\subsubsection{FITS Table I/O Functions}
    42174222
    42184223\begin{verbatim}
    4219 void *psFitsReadTableRow (int *nBytes, char *extname, int row, char *filename);
    4220 void *psFitsReadTableRowPtr (int *nBytes, char *extname, int row, psFits *fd);
    4221 \end{verbatim}
    4222 These functions read a single row of the table in the extension
    4223 specified by \code{extname}, in the file specified by the given
    4224 \code{filename} or \code{psFits} file pointer.  The row number to be
    4225 read is given by \code{row}.  The result is returned as collection of
     4224psMetadata *psFitsReadTableRow (psFits *fits, int row);
     4225\end{verbatim}
     4226This function reads a single row of the table in the extension pointed
     4227at by the \code{psFits} file pointer.  The row number to be read is
     4228given by \code{row}.  The result is returned as a \code{psMetadata}
     4229collection with elements of the apporpriate types and keys
     4230corresponding to the table column names.  The function must apply the
     4231needed byte-swapping on the data in the row based on the description
     4232of the table data in the table header.  \tbr{we may need to be more
     4233flexible here: if we call this function repeatedly, it would be more
     4234efficient to pass the corresponding header or keep it somewhere (and
     4235the file pointer location, for that matter).}
     4236
     4237\begin{verbatim}
     4238void *psFitsReadTableRowRaw (int *nBytes, psFits *fits, int row);
     4239\end{verbatim}
     4240This function reads a single row of the table in the extension pointed
     4241at by the \code{psFits} file pointer.  The row number to be read is
     4242given by \code{row}.  The result is returned as collection of
    42264243\code{nBytes} bytes allocated by the function.  The function must
    42274244apply the needed byte-swapping on the data in the row based on the
    42284245description of the table data in the table header.  \tbr{we may need
    4229   to be more flexible here: if we call this function repeatedly, it
    4230   would be more efficient to pass the corresponding header or keep it
    4231   somewhere (and the file pointer location, for that matter).}
    4232 
    4233 \begin{verbatim}
    4234 psArray *psFitsReadTableColumn (char *extname, char *colname, char *filename);
    4235 psArray *psFitsReadTableColumnPtr (char *extname, char *colname, psFits *fd);
    4236 \end{verbatim}
    4237 These functions read a single column of the table in the extension
    4238 specified by \code{extname}, in the file specified by the given
    4239 \code{filename} or \code{psFits} file pointer.  The column is
    4240 specified by the FITS table column key given by \code{row}.  The
    4241 result is returned as a \code{psArray}, with one row's worth of data
     4246to be more flexible here: if we call this function repeatedly, it
     4247would be more efficient to pass the corresponding header or keep it
     4248somewhere (and the file pointer location, for that matter).}
     4249
     4250\begin{verbatim}
     4251psArray *psFitsReadTableColumn (psFits *fits, char *colname);
     4252\end{verbatim}
     4253This function reads a single column of the table in the extension
     4254pointed at by the \code{psFits} file pointer.  The column is specified
     4255by the FITS table column key given by \code{row}.  The result is
     4256returned as a \code{psArray}, with the data from one row of the table
     4257column per array element.
     4258
     4259\begin{verbatim}
     4260psVector *psFitsReadTableColumnNum (psFits *fits, char *colname);
     4261\end{verbatim}
     4262This function reads a single column of the table in the extension
     4263pointed at by the \code{psFits} file pointer.  The column is specified
     4264by the FITS table column key given by \code{row} and must be of a
     4265numeric data type.  The result is returned as a \code{psVector} of the
     4266appropriate data type, with the data from one row of the table column
    42424267per array element.
    42434268
    42444269\begin{verbatim}
    4245 psVector *psFitsReadTableColumnNum (char *extname, char *colname, char *filename);
    4246 psVector *psFitsReadTableColumnNumPtr (char *extname, char *colname, psFits *fd);
    4247 \end{verbatim}
    4248 These functions read a single column of the table in the extension
    4249 specified by \code{extname}, in the file specified by the given
    4250 \code{filename} or \code{psFits} file pointer.  The column is
    4251 specified by the FITS table column key given by \code{row}. 
    4252 
    4253 \begin{verbatim}
    4254 psArray *psFitsReadTable (int *nBytes, char *extname, char *filename);
    4255 psArray *psFitsReadTablePtr (int *nBytes, char *extname, psFits *fd);
     4270psArray *psFitsReadTableRaw (int *nBytes, psFits *fits);
    42564271\end{verbatim}
    42574272This function reads the entire data block from a table into the a
    42584273\code{psArray}, with one element of the array per row.  The number of
    4259 bytes per row is returned in \code{nBytes}.  The result is returned as
    4260 a \code{psVector}, which, as a numerical data type, is only valid for
    4261 numerical table columns.  The function must apply the needed
    4262 byte-swapping on the data in each row based on the description of the
    4263 table data in the table header.
    4264 
    4265 \tbd{need to have corresponding table write functions...}
     4274bytes per row is returned in \code{nBytes}.  The function must apply
     4275the needed byte-swapping on the data in each row based on the
     4276description of the table data in the table header.
     4277
     4278\begin{verbatim}
     4279psArray *psFitsReadTable (psFits *fits);
     4280\end{verbatim}
     4281This function reads the entire data block from a table into the a
     4282\code{psArray}, with one element of the array per row.  Each row is
     4283stored as a \code{psMetadata} collection as described above for
     4284\code{psFitsReadTableRow}.
     4285
     4286\begin{verbatim}
     4287bool psFitsWriteTable(psFits* fits, psArray* table);
     4288\end{verbatim}
     4289Accepts a \code{psArray} of \code{psMetadata} and writes it to the
     4290current HDU.  If the current HDU is not a table type, this will fail
     4291and return FALSE.
    42664292
    42674293\subsection{Detector and Sky Coordinates}
Note: See TracChangeset for help on using the changeset viewer.