Changeset 2300 for trunk/doc/pslib/psLibSDRS.tex
- Timestamp:
- Nov 7, 2004, 2:43:20 PM (22 years ago)
- File:
-
- 1 edited
-
trunk/doc/pslib/psLibSDRS.tex (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/doc/pslib/psLibSDRS.tex
r2241 r2300 1 %%% $Id: psLibSDRS.tex,v 1.14 5 2004-10-29 22:01:19eugene Exp $1 %%% $Id: psLibSDRS.tex,v 1.146 2004-11-08 00:43:20 eugene Exp $ 2 2 \documentclass[panstarrs,spec]{panstarrs} 3 3 4 4 % basic document variables 5 \title{Pan-STARRS Image Processing Pipeline Library}5 \title{Pan-STARRS PS-1 Image Processing Pipeline Library} 6 6 \subtitle{Supplementary Design Requirements} 7 7 \shorttitle{PSLib SDRS} … … 11 11 \project{Pan-STARRS Image Processing Pipeline} 12 12 \organization{Institute for Astronomy} 13 \version{0 8}13 \version{09} 14 14 \docnumber{PSDC-430-007} 15 15 … … 41 41 42 42 \DocumentsInternal 43 PSDC- 130-001 & PS-1 Design Reference Mission \\ \hline44 PSDC-430-004 & Pan-STARRS IPP C Code Conventions \\ \hline45 PSDC-430-005 & Pan-STARRS IPP SRS\\ \hline46 PSDC-430-006 & Pan-STARRS IPP ADD\\ \hline47 PSDC-430-0 08 & Pan-STARRS IPP Architecture SDR \\43 PSDC-230-001 & PS-1 Design Reference Mission \\ \hline 44 PSDC-430-004 & Pan-STARRS PS-1 IPP C Code Conventions \\ \hline 45 PSDC-430-005 & Pan-STARRS PS-1 IPP Software Requirements Specification \\ \hline 46 PSDC-430-006 & Pan-STARRS PS-1 IPP Algorithm Design Document \\ \hline 47 PSDC-430-011 & Pan-STARRS PS-1 IPP System/Subsystem Design Description \\ \hline 48 48 \DocumentsExternal 49 49 Posix Standard & Open Group Based Specifications Issue 6, IEEE Std 1003.1, 2003 \\ … … 1939 1939 This function takes the input data in \code{in} (with optional 1940 1940 \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) 1942 1942 and a \code{psStats} structure, which will be altered and returned. 1943 1943 The \code{psStats} structure includes several fields which are used … … 1955 1955 field values must be set by the \code{psStats} constructor. The input 1956 1956 vector 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 1959 calculation of certain statistics are modified: The sample mean is 1960 calculated using the formula for the weighted mean; the standard 1961 deviation is modified as specified in the ADD; the clipping used for 1962 clipped statistics are modified according to the ADD; the robust 1963 median and quartiles are modified as specified in the ADD. The mask 1964 must be of type \code{psU8}. 1959 1965 1960 1966 The \code{psStats} structure is defined with entries for each of the … … 2167 2173 To evaluate the polynomials at specific coordinates, we define: 2168 2174 \begin{verbatim} 2169 double psDPolynomial2DEval( double x, double y, const psDPolynomial2D *restrict myPoly);2175 double psDPolynomial2DEval(const psDPolynomial2D *restrict myPoly, double x, double y); 2170 2176 \end{verbatim} 2171 2177 2172 2178 In the event that several evaluations are required, we also define: 2173 2179 \begin{verbatim} 2174 psVector *psDPolynomial2DEvalVector(const psVector *x, const psVector *y, 2175 const psDPolynomial2D *myPoly); 2180 psVector *psDPolynomial2DEvalVector(const psDPolynomial2D *myPoly, const psVector *x, const psVector *y); 2176 2181 \end{verbatim} 2177 2182 If the \code{x} and \code{y} vectors do not match the precision of the … … 2236 2241 2237 2242 \begin{verbatim} 2238 float psSpline1DEval(const psSpline1D *spline, float x); 2239 psVector *psSpline1DEvalVector(const psVector *x, const psSpline1D *spline); 2240 \end{verbatim} 2241 2243 psF64 psSpline1DEval(const psSpline1D *spline, float x); 2244 psVector *psSpline1DEvalVector(const psSpline1D *spline, const psVector *x); 2245 \end{verbatim} 2242 2246 2243 2247 \subsubsection{Gaussians} … … 2474 2478 \code{psVectorFitSpline} shall return the spline that best fits the 2475 2479 given 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}. 2480 The function shall construct a new \code{psSpline1D} based on domains 2481 determined 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 2484 the ordinate; and if \code{yErr} is \code{NULL}, then all the data 2485 errors shall be assumed to be equal. This function must be valid only 2486 for types \code{psF32}, \code{psF64}. 2481 2487 2482 2488 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% … … 3813 3819 \code{psMetadata.hash} entries, which are required to have unique 3814 3820 keys, 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 futureentries of that keyword.3821 with the value of \code{psMetadataType} set to \code{PS_META_LIST}, 3822 and the \code{psMetadataItem.data} element pointing to a \code{psList} 3823 containing the actual entries. If \code{psMetadataItemAlloc} is 3824 called with the type set to \code{PS_META_LIST}, such a repeated key 3825 is 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 3828 entries of that keyword. 3823 3829 3824 3830 The \code{psMetadataAdd} routine is required to check that all 3825 3831 metadata names are unique unless the type is already qualified as 3826 \code{PS_META_ ITEM_SET}; in this case the data are added to the3827 corresponding \code{psMetadataItem. items} list.3832 \code{PS_META_LIST}; in this case the data are added to the 3833 corresponding \code{psMetadataItem.data} list. 3828 3834 3829 3835 \subsubsection{Metadata APIs} … … 3869 3875 Care should be taken not to leak memory when appending an item for 3870 3876 which the key already exists in the metadata (and is not 3871 \code{PS_META_ ITEM_SET}).3877 \code{PS_META_LIST}). 3872 3878 % 3873 3879 \begin{verbatim} … … 3930 3936 void psMetadataItemPrint(FILE *fd, const char *format, const psMetadataItem *md); 3931 3937 \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 specify3939 the extension of interest as above. The data is read from the3940 extension specified by extname (matching the EXTNAME keyword) or by3941 the extnum value (with 0 representing the primary header unit (PHU), 13942 the first extension, etc). This function must call \code{psError} and3943 return \code{NULL} if the specified extension does not exist. If3944 \code{extname} is not \code{NULL}, \code{extnum} must be set to -1 or3945 the function shall raise an error.3946 3947 \tbd{this function is being deprecated and the equivalent is being3948 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 a3955 \code{psMetadata} structure.3956 3957 \tbd{this function is being deprecated and the equivalent is being3958 moved to FITS I/O Functions.}3959 3938 3960 3939 \subsubsection{Configuration files} … … 4123 4102 a file without multiple open commands (which are expensive). 4124 4103 4104 \subsubsection{FITS File Manipulations} 4105 4106 \begin{verbatim} 4107 psFits *psFitsAlloc(const char *filename); 4108 \end{verbatim} 4109 4110 Opens a FITS file at positions the pointer to the PHU. 4111 4112 \begin{verbatim} 4113 psFits *psFitsMoveExtName(psFits *fits, const char *extname); 4114 \end{verbatim} 4115 4116 Positions the pointer to the beginning of the specified 4117 \code{extname}. If the \code{extname} does not exist, the function 4118 shall fail. \tbd{is it necessary to return the pointer? can this just 4119 return a status?} 4120 4121 \begin{verbatim} 4122 bool psFitsMoveExtNum(psFits* fits, int extnum, bool relative); 4123 \end{verbatim} 4124 4125 Moves the pointer to the beginning of the specified HDU number. If 4126 \code{relative} is TRUE, \code{extnum} represents the number of HDUs 4127 relative to the current HDU. \tbd{Is PHU 0 or -1? is it necessary to 4128 return the pointer? can this just return a status?} 4129 4130 \begin{verbatim} 4131 int psFitsGetExtNum(psFits* fits); 4132 \end{verbatim} 4133 4134 Returns the current HDU number (i.e., file position). 4135 4136 \begin{verbatim} 4137 int psFitsGetSize(psFits* fits); 4138 \end{verbatim} 4139 4140 Returns the number of HDUs in the file. 4141 4142 \begin{verbatim} 4143 int psFitsCreateExt(psFits* fits, psFitsType type, const char* name); 4144 \end{verbatim} 4145 4146 Creates a new HDU on the end of the file with the given extname and 4147 type. The psFits pointer is positioned to the new HDU. \tbd{does 4148 this write data to disk or not?} 4149 4150 \begin{verbatim} 4151 psFitsType psFitsGetExtType(psFits* fits); 4152 \end{verbatim} 4153 4154 Gets the current HDU's type (table or image). 4155 4125 4156 \subsubsection{FITS Header I/O Functions} 4126 4157 4127 4158 \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 4159 psMetadata *psFitsReadHeader(psMetadata *out, const psFits *fits); 4160 \end{verbatim} 4161 Read header data into a \code{psMetadata} structure. The data is read 4162 from 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} 4166 psHash *psFitsReadHeaderSet (psFits *fits); 4167 \end{verbatim} 4168 Load a complete set of headers from the \code{psFits} file pointer. 4169 This function loads the headers from all extensions into a 4148 4170 \code{psHash}, each entry of which is a pointer to a \code{psMetadata} 4149 4171 structure containing the header data. The hash keys are the 4150 4172 \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); 4173 for the primary header unit). At the start of the operation, the file 4174 pointer is rewound to the beginning of the file. At the end, it is 4175 positioned where it started when the function was called. 4176 4177 \begin{verbatim} 4178 bool psFitsWriteHeader(psMetadata *output, const psFits *fits); 4156 4179 \end{verbatim} 4157 4180 Write 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?} 4181 written at the current HDU. 4162 4182 4163 4183 \subsubsection{FITS Image I/O Functions} 4164 4184 4165 4185 \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. 4186 psImage *psFitsReadImageSection(psImage *output, psFits *fits, psRegion region, int z); 4187 \end{verbatim} 4188 Read an image or subimage from the \code{psFits} file pointer. This 4189 function is a wrapper to the CFITSIO library function. The input 4190 parameters allow a full image or a subimage to be read. The region to 4191 be 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 4193 to be read counting down from the end of the array. 4177 4194 4178 4195 If 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}. 4196 slice 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 4198 the data in the image file, or if the image on disk is zero- or 4199 one-dimensional. This function need only read images of the native 4200 FITS image types (\code{psU8}, \code{psS16}, \code{psS32}, 4201 \code{psF32}, \code{psF64}). The user is expected to convert the data 4202 type as needed with \code{psImageCopy}. 4189 4203 4190 4204 \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}. 4205 bool psFitsWriteImageSection(psFits *fits, const psImage *input, psRegion region, int z); 4206 \end{verbatim} 4207 Write an image section to the open \code{psFits} file pointer. This 4208 operation may write a portion of an image over the existing bytes of 4209 an existing image. Care must be taken to interpret \code{region}, 4210 which specified the output pixels to be written / over-written. If 4211 the combination of \code{region} and the size of \code{psImage *input} 4212 implies writing pixels outside the existing data area of the image, 4213 the function shall return an error (ie, if \code{region.x0 + image.nx 4214 >= NAXIS1}, \code{region.y0 + image.ny >= NAXIS2}, or \code{z >= 4215 NAXIS3}). This function will only write images of the native FITS 4216 image types (\code{psU8}, \code{psS16}, \code{psS32}, \code{psF32}, 4217 \code{psF64}). The user is expected to convert the data type as 4218 needed with \code{psImageCopy}. The return value must be 0 for a 4219 successful operation and 1 for an error. 4215 4220 4216 4221 \subsubsection{FITS Table I/O Functions} 4217 4222 4218 4223 \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 4224 psMetadata *psFitsReadTableRow (psFits *fits, int row); 4225 \end{verbatim} 4226 This function reads a single row of the table in the extension pointed 4227 at by the \code{psFits} file pointer. The row number to be read is 4228 given by \code{row}. The result is returned as a \code{psMetadata} 4229 collection with elements of the apporpriate types and keys 4230 corresponding to the table column names. The function must apply the 4231 needed byte-swapping on the data in the row based on the description 4232 of the table data in the table header. \tbr{we may need to be more 4233 flexible here: if we call this function repeatedly, it would be more 4234 efficient to pass the corresponding header or keep it somewhere (and 4235 the file pointer location, for that matter).} 4236 4237 \begin{verbatim} 4238 void *psFitsReadTableRowRaw (int *nBytes, psFits *fits, int row); 4239 \end{verbatim} 4240 This function reads a single row of the table in the extension pointed 4241 at by the \code{psFits} file pointer. The row number to be read is 4242 given by \code{row}. The result is returned as collection of 4226 4243 \code{nBytes} bytes allocated by the function. The function must 4227 4244 apply the needed byte-swapping on the data in the row based on the 4228 4245 description 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 4246 to be more flexible here: if we call this function repeatedly, it 4247 would be more efficient to pass the corresponding header or keep it 4248 somewhere (and the file pointer location, for that matter).} 4249 4250 \begin{verbatim} 4251 psArray *psFitsReadTableColumn (psFits *fits, char *colname); 4252 \end{verbatim} 4253 This function reads a single column of the table in the extension 4254 pointed at by the \code{psFits} file pointer. The column is specified 4255 by the FITS table column key given by \code{row}. The result is 4256 returned as a \code{psArray}, with the data from one row of the table 4257 column per array element. 4258 4259 \begin{verbatim} 4260 psVector *psFitsReadTableColumnNum (psFits *fits, char *colname); 4261 \end{verbatim} 4262 This function reads a single column of the table in the extension 4263 pointed at by the \code{psFits} file pointer. The column is specified 4264 by the FITS table column key given by \code{row} and must be of a 4265 numeric data type. The result is returned as a \code{psVector} of the 4266 appropriate data type, with the data from one row of the table column 4242 4267 per array element. 4243 4268 4244 4269 \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); 4270 psArray *psFitsReadTableRaw (int *nBytes, psFits *fits); 4256 4271 \end{verbatim} 4257 4272 This function reads the entire data block from a table into the a 4258 4273 \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...} 4274 bytes per row is returned in \code{nBytes}. The function must apply 4275 the needed byte-swapping on the data in each row based on the 4276 description of the table data in the table header. 4277 4278 \begin{verbatim} 4279 psArray *psFitsReadTable (psFits *fits); 4280 \end{verbatim} 4281 This 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 4283 stored as a \code{psMetadata} collection as described above for 4284 \code{psFitsReadTableRow}. 4285 4286 \begin{verbatim} 4287 bool psFitsWriteTable(psFits* fits, psArray* table); 4288 \end{verbatim} 4289 Accepts a \code{psArray} of \code{psMetadata} and writes it to the 4290 current HDU. If the current HDU is not a table type, this will fail 4291 and return FALSE. 4266 4292 4267 4293 \subsection{Detector and Sky Coordinates}
Note:
See TracChangeset
for help on using the changeset viewer.
