IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 5367


Ignore:
Timestamp:
Oct 18, 2005, 10:15:05 AM (21 years ago)
Author:
eugene
Message:

added flat-field norm, update names on pmAstrom functions

Location:
trunk/doc/modules
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/doc/modules/CameraImages.tex

    r5361 r5367  
    863863entry must contain the following user-defined parameters:
    864864\begin{itemize}
    865 \item GRID_OFFSET : maximum allowed displacement in search
    866 \item GRID_SCALE  : grid bin size in focal-plane coordinate units
    867 \item MIN_ANGLE : minimum tested relative rotation
    868 \item MAX_ANGLE : maximum tested relative rotation
    869 \item DEL_ANGLE : relative rotation step size
     865\item \code{GRID_OFFSET} : maximum allowed displacement in search
     866\item \code{GRID_SCALE}  : grid bin size in focal-plane coordinate units
     867\item \code{MIN_ANGLE} : minimum tested relative rotation
     868\item \code{MAX_ANGLE} : maximum tested relative rotation
     869\item \code{DEL_ANGLE} : relative rotation step size
    870870\end{itemize}
    871871The output from this process is the statistics of the best-fit
     
    930930following function performs this operation:
    931931\begin{prototype}
    932 bool pmAstromMatchedListFit (pmFPA *fpa, psArray *st1, psArray *st2, psArray *match, psMetadata *config);
     932bool pmAstromFitFPA (pmFPA *fpa, psArray *st1, psArray *st2, psArray *match, psMetadata *config);
    933933\end{prototype}
    934934This function accepts the raw and reference source lists and the list
     
    949949linear terms and the higher-order terms of the polynomial fits.
    950950
     951An alternative to fitting the rotation of the FPA relative to the
     952Tangent Plane is to treat the fitted transformation as a measurement
     953of the chip within the FPA.  The following function performs this
     954operation in the same way as \code{pmAstromFitFPA}:
     955\begin{prototype}
     956bool pmAstromFitChip (pmFPA *fpa, psArray *st1, psArray *st2, psArray *match, psMetadata *config);
     957\end{prototype}
     958This function accepts the raw and reference source lists for a single
     959chip and the list of matched entries.  It uses the matched list to
     960determine a polynomial transformation between the two coordinate
     961systems.  The fitting uses clipping to exclude outliers, likely
     962representing poor matches.  The \code{config} element must contain the
     963information \code{ASTROM_NSIGMA} (specifying the number of sigma used
     964in the clipping) and \code{ASTROM_NCLIP} (specifying the number of
     965clipping iterations must be performed).  The \code{config} element
     966must also specify the order of the polynomial fit (keyword:
     967\code{ASTROM_ORDER}).  The result of this fit is a set of
     968modifications of the components of the \code{pmChip.toFPA}
     969transformation.
     970
    951971A mosaic represents a particular set of challenges when determining an
    952972astrometric solution.  There is substantial degeneracy between the
  • trunk/doc/modules/ChangeLogSDRS.tex

    r5077 r5367  
    1 %%% $Id: ChangeLogSDRS.tex,v 1.33 2005-09-20 22:01:33 jhoblitt Exp $
     1%%% $Id: ChangeLogSDRS.tex,v 1.34 2005-10-18 20:15:05 eugene Exp $
    22
    33\subsection{Changes from version 00 (16 August 2004) to version 01 (12 October 2004)}
     
    142142\begin{itemize}
    143143  \item fix enum syntax
     144  \item added Astrometry Fitting Support (matching / fitting routines)
     145  \item added \code{pmAstromRadiusMatch}
     146  \item added \code{pmAstromGridMatch}
     147  \item added \code{pmAstromApplyGridMatch}
     148  \item added \code{pmAstromMeasureGradients}
     149  \item added \code{pmAstromFitFPA}
     150  \item added \code{pmAstromFitChip}
     151  \item added \code{pmAstromFitDistortion}
     152  \item renamed section 7 to Detrend Creation, moved \code{pmReadoutCombine} to a subsection
     153  \item added \code{pmFringeStats} (Fringe Amplitude subsection)
     154  \item added \code{pmFlatNormalization} (Flat-field renorm section)
    144155\end{itemize}
  • trunk/doc/modules/ModulesSDRS.tex

    r5361 r5367  
    1 %%% $Id: ModulesSDRS.tex,v 1.61 2005-10-18 14:32:25 eugene Exp $
     1%%% $Id: ModulesSDRS.tex,v 1.62 2005-10-18 20:15:05 eugene Exp $
    22\documentclass[panstarrs,spec]{panstarrs}
    33
     
    12051205\end{itemize}
    12061206
    1207 \subsection{Fringes}
     1207%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     1208
     1209\section{Detrend Creation}
     1210
     1211In the detrend creation process, a collection of raw images are
     1212combined to produce a clean, high-quality master image for correcting
     1213the effect of interest.  The input images may potentially be processed
     1214and scaled in some way.  The resulting output images may be to be
     1215re-scaled to have a consistent signal for all chips in the mosaic.
     1216The simplest example is the construction of a bias image, in the case
     1217where there is signficant 2-D bias structure.  In this case, the input
     1218raw bias images are probably combined without any additional
     1219processing.  In another example, flat-field image must be
     1220bias-corrected and scaled to a consistent normalization before being
     1221combined, and the flat-field images from the different chips must be
     1222normalized so that each chip will be flattened consistently across the
     1223mosaic.  A complex example is the fringe pattern, in which the input
     1224images must be bias-corrected and flattened, and the resulting images
     1225must be scaled by the amplitude of the fringe pattern on each image,
     1226rather than by the average flux level.  In this section, we define the
     1227tools necessary to perform the detrend creation process.
     1228
     1229\subsection{Image Stacking}
     1230
     1231A basic operation in generating the master detrend images is using a
     1232stack of many input images of a particular type and combining them,
     1233with perhaps some additional scaling, in order to build up
     1234signal-to-noise and to reject deviant pixel.  For this, we require a
     1235general purpose image combination module.  We forsee this module as
     1236only acting upon data from the same detector, and so each input image
     1237will have the same noise characteristics.
     1238
     1239\begin{datatype}
     1240typedef struct {
     1241    psStats *stats;                     // Statistics to use in combining pixels
     1242    unsigned int maskVal,               // Mask pixels where mask & maskVal == 1
     1243    float fracHigh;                     // Fraction of high pixels to throw
     1244    float fracLow;                      // Fraction of low pixels to throw
     1245    int nKeep;                          // Number of pixels to be sure to keep
     1246} pmCombineParams;
     1247\end{datatype}
     1248
     1249\begin{prototype}
     1250psImage *
     1251pmReadoutCombine(psImage *output,       // Output image, or NULL
     1252                 const psList *inputs,  // List of input readouts
     1253                 pmCombineParams *params, // Combination parameters
     1254                 const psVector *zero,  // Offsets to apply for each image
     1255                 const psVector *scale, // Scales to apply for each image
     1256                 bool applyZeroScale,   // Are zero and scale for application, or only noise properties?
     1257                 float gain,            // Gain in e/ADU
     1258                 float readnoise        // Read noise in e
     1259                 );
     1260\end{prototype}
     1261
     1262\code{pmReadoutCombine} combines input images pixel by pixel --- for
     1263each pixel of the output image, a stack of contributing input pixels
     1264is formed and combined.  Several of its input parameters are lists or
     1265vectors, and if these are not all of the same length (or \code{NULL}),
     1266the module shall generate an error and return \code{NULL}.
     1267
     1268If the provided \code{output} is \code{NULL}, then the module shall
     1269allocate a new image of sufficient size for the input images.  If the
     1270\code{output} image is non-\code{NULL} and is not of sufficient size
     1271for the combined image, the module shall generate an error and return
     1272\code{NULL}.
     1273
     1274If the \code{inputs} is \code{NULL}, the module shall generate an
     1275error and return \code{NULL}.  Otherwise, the \code{inputs} shall be a
     1276list of \code{pmReadout}s.  The images contained within the
     1277\code{pmReadout}s need not all be of the same size, but the module
     1278shall take into account the offsets (\code{col0,row0}) from the corner
     1279of the detector when comparing pixels, so that it is the same
     1280\textit{physical} pixels that are combined.
     1281
     1282The parameters used in the combination, including how the pixels are
     1283to be combined, and how the rejection is performed is contained within
     1284the \code{params}, which may not be \code{NULL} (otherwise the module
     1285shall generate an error and return \code{NULL}).  We choose to use
     1286this structure instead of supplying the values separately in order to
     1287keep down the number of parameters to \code{pmReadoutCombine}; the
     1288\code{pmCombineParams} may be recycled for subsequent calls to
     1289\code{pmReadoutCombine} since the values are not dependent upon the
     1290choice of inputs, but merely specify how the combination is to be
     1291performed.
     1292
     1293The particular statistic specified by \code{stats} shall be used to
     1294combine each stack of pixels from the input images.  Only one of the
     1295statistics choices may be specified, otherwise the module shall
     1296generate an error and return \code{NULL}.
     1297
     1298If the \code{maskVal} is non-zero, then pixels in the \code{mask} of
     1299each \code{pmReadout} in the \code{inputs} which satisfy the
     1300\code{maskVal} shall not have the corresponding pixels placed in the
     1301stack for combination.
     1302
     1303After masking, but before performing the combination, the highest
     1304\code{fracHigh} fraction and lowest \code{fracLow} fraction of pixels
     1305in the stack are immediately rejected, unless this would leave less
     1306than \code{nKeep} pixels in the stack, in which case no immediate
     1307rejection is performed.
     1308
     1309If the \code{zero} vector is non-\code{NULL} and \code{applyZeroScale}
     1310is \code{true}, then the appropriate values shall be added to the
     1311\code{inputs} before rejection is performed.  If \code{zero} is
     1312non-\code{NULL} and \code{applyZeroScale} is false, then the values
     1313shall only be used in calculating the Poisson variances.
     1314
     1315If the \code{scale} vector is non-\code{NULL} and
     1316\code{applyZeroScale} is \code{true}, then the appropriate values
     1317shall multiply the \code{inputs} before rejection is performed.  If
     1318\code{scale} is non-\code{NULL} and \code{applyZeroScale} is false,
     1319then the values shall only be used in calculating the Poisson
     1320variances.
     1321
     1322The purpose of \code{applyZeroScale} is to allow combination of fringe
     1323frames, where the frames have been deliberately sky-subtracted and
     1324rescaled (to get the fringes amplitudes running from -1 to 1), which
     1325actions should not be undone when combining, but yet it is desirable
     1326to provide the \code{zero} and \code{scale} values so that the correct
     1327noise properties are used in the combination.
     1328
     1329If the \code{gain} and \code{readnoise} are positive and non-negative
     1330(respectively), then these shall be used to provide weights for the
     1331combination using Poisson statistics ($\sigma_i$ below).
     1332
     1333In summary, pixels corresponding to the same physical pixel are
     1334combined, having values $x_i \pm \sigma_i$.  In the case that
     1335\code{applyZeroScale} is \code{true}, then:
     1336\begin{eqnarray}
     1337x_i & = & s_i f_i + z_i \\
     1338\sigma_i & = & [g x_i + r^2]^{1/2} / g
     1339\end{eqnarray}
     1340Where $f_i$ is the value of the pixel in image $i$, $s_i$ is the scale
     1341applied to image $i$, $z_i$ is the zero offset applied to image $i$,
     1342$g$ is the gain, and $r$ is the read noise.  If scales are not
     1343provided, they are set to unity; if zero offsets are not provided,
     1344they are set to zero.
     1345
     1346If \code{applyZeroScale} is \code{false}, then the values are:
     1347\begin{eqnarray}
     1348x_i & = & f_i \\
     1349\sigma_i & = & [g (s_i f_i + z_i) + r^2]^{1/2} / g
     1350\end{eqnarray}
     1351where the same symbols are used as above.
     1352
     1353The \code{inputs, zero} and \code{scale} may be of U16, S32 and F32
     1354types, and must all be of the same type.  The \code{output} shall be
     1355of the same type.
     1356
     1357\subsection{Fringe Amplitude}
    12081358
    12091359Some images contain a signal caused by thin-film interference in the
     
    12251375
    12261376A simple approach to the fringe pattern is to subtract a master fringe
    1227 frame scaled by the amplitude of the fringe pattern.  We thus need a
    1228 method of measuring the fringe amplitude which is robust in the
    1229 presence of stars and which is fast.  We implement a method used at
    1230 CFHT in which the fringe pattern is mapped by a series of points pairs
    1231 which correspond to peaks and valleys of the fringe pattern.  We
    1232 define the following function to measure the global fringe amplitude
    1233 of an image given a collection of fringe point pairs.
     1377frame scaled by the amplitude of the fringe pattern.  The amplitude of
     1378the fringe pattern is used both in the process of constructing the
     1379master image and in scaling the master image when it is applied to
     1380science image.  We thus need a method of measuring the fringe
     1381amplitude which is robust in the presence of stars and which is fast.
     1382We implement a method used at CFHT in which the fringe pattern is
     1383mapped by a series of points pairs which correspond to peaks and
     1384valleys of the fringe pattern.  We define the following function to
     1385measure the global fringe amplitude of an image given a collection of
     1386fringe point pairs.
    12341387\begin{prototype}
    12351388stats *pmFringeStats (psArray *fringePoints, psImage *image, psMetadata *config);
     
    12561409\end{datatype}
    12571410
    1258 
    1259 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1260 
    1261 \section{Calibration}
    1262 
    1263 The calibration module essentially consists of combining multiple
    1264 images of a particular type in order to build up signal-to-noise.  For
    1265 this, we require a general purpose image combination module.  We
    1266 forsee this module as only acting upon data from the same detector,
    1267 and so each input image will have the same noise characteristics.
    1268 
    1269 \begin{datatype}
    1270 typedef struct {
    1271     psStats *stats;                     // Statistics to use in combining pixels
    1272     unsigned int maskVal,               // Mask pixels where mask & maskVal == 1
    1273     float fracHigh;                     // Fraction of high pixels to throw
    1274     float fracLow;                      // Fraction of low pixels to throw
    1275     int nKeep;                          // Number of pixels to be sure to keep
    1276 } pmCombineParams;
    1277 \end{datatype}
    1278 
    1279 \begin{prototype}
    1280 psImage *
    1281 pmReadoutCombine(psImage *output,       // Output image, or NULL
    1282                  const psList *inputs,  // List of input readouts
    1283                  pmCombineParams *params, // Combination parameters
    1284                  const psVector *zero,  // Offsets to apply for each image
    1285                  const psVector *scale, // Scales to apply for each image
    1286                  bool applyZeroScale,   // Are zero and scale for application, or only noise properties?
    1287                  float gain,            // Gain in e/ADU
    1288                  float readnoise        // Read noise in e
    1289                  );
    1290 \end{prototype}
    1291 
    1292 \code{pmReadoutCombine} combines input images pixel by pixel --- for
    1293 each pixel of the output image, a stack of contributing input pixels
    1294 is formed and combined.  Several of its input parameters are lists or
    1295 vectors, and if these are not all of the same length (or \code{NULL}),
    1296 the module shall generate an error and return \code{NULL}.
    1297 
    1298 If the provided \code{output} is \code{NULL}, then the module shall
    1299 allocate a new image of sufficient size for the input images.  If the
    1300 \code{output} image is non-\code{NULL} and is not of sufficient size
    1301 for the combined image, the module shall generate an error and return
    1302 \code{NULL}.
    1303 
    1304 If the \code{inputs} is \code{NULL}, the module shall generate an
    1305 error and return \code{NULL}.  Otherwise, the \code{inputs} shall be a
    1306 list of \code{pmReadout}s.  The images contained within the
    1307 \code{pmReadout}s need not all be of the same size, but the module
    1308 shall take into account the offsets (\code{col0,row0}) from the corner
    1309 of the detector when comparing pixels, so that it is the same
    1310 \textit{physical} pixels that are combined.
    1311 
    1312 The parameters used in the combination, including how the pixels are
    1313 to be combined, and how the rejection is performed is contained within
    1314 the \code{params}, which may not be \code{NULL} (otherwise the module
    1315 shall generate an error and return \code{NULL}).  We choose to use
    1316 this structure instead of supplying the values separately in order to
    1317 keep down the number of parameters to \code{pmReadoutCombine}; the
    1318 \code{pmCombineParams} may be recycled for subsequent calls to
    1319 \code{pmReadoutCombine} since the values are not dependent upon the
    1320 choice of inputs, but merely specify how the combination is to be
    1321 performed.
    1322 
    1323 The particular statistic specified by \code{stats} shall be used to
    1324 combine each stack of pixels from the input images.  Only one of the
    1325 statistics choices may be specified, otherwise the module shall
    1326 generate an error and return \code{NULL}.
    1327 
    1328 If the \code{maskVal} is non-zero, then pixels in the \code{mask} of
    1329 each \code{pmReadout} in the \code{inputs} which satisfy the
    1330 \code{maskVal} shall not have the corresponding pixels placed in the
    1331 stack for combination.
    1332 
    1333 After masking, but before performing the combination, the highest
    1334 \code{fracHigh} fraction and lowest \code{fracLow} fraction of pixels
    1335 in the stack are immediately rejected, unless this would leave less
    1336 than \code{nKeep} pixels in the stack, in which case no immediate
    1337 rejection is performed.
    1338 
    1339 If the \code{zero} vector is non-\code{NULL} and \code{applyZeroScale}
    1340 is \code{true}, then the appropriate values shall be added to the
    1341 \code{inputs} before rejection is performed.  If \code{zero} is
    1342 non-\code{NULL} and \code{applyZeroScale} is false, then the values
    1343 shall only be used in calculating the Poisson variances.
    1344 
    1345 If the \code{scale} vector is non-\code{NULL} and
    1346 \code{applyZeroScale} is \code{true}, then the appropriate values
    1347 shall multiply the \code{inputs} before rejection is performed.  If
    1348 \code{scale} is non-\code{NULL} and \code{applyZeroScale} is false,
    1349 then the values shall only be used in calculating the Poisson
    1350 variances.
    1351 
    1352 The purpose of \code{applyZeroScale} is to allow combination of fringe
    1353 frames, where the frames have been deliberately sky-subtracted and
    1354 rescaled (to get the fringes amplitudes running from -1 to 1), which
    1355 actions should not be undone when combining, but yet it is desirable
    1356 to provide the \code{zero} and \code{scale} values so that the correct
    1357 noise properties are used in the combination.
    1358 
    1359 If the \code{gain} and \code{readnoise} are positive and non-negative
    1360 (respectively), then these shall be used to provide weights for the
    1361 combination using Poisson statistics ($\sigma_i$ below).
    1362 
    1363 In summary, pixels corresponding to the same physical pixel are
    1364 combined, having values $x_i \pm \sigma_i$.  In the case that
    1365 \code{applyZeroScale} is \code{true}, then:
    1366 \begin{eqnarray}
    1367 x_i & = & s_i f_i + z_i \\
    1368 \sigma_i & = & [g x_i + r^2]^{1/2} / g
    1369 \end{eqnarray}
    1370 Where $f_i$ is the value of the pixel in image $i$, $s_i$ is the scale
    1371 applied to image $i$, $z_i$ is the zero offset applied to image $i$,
    1372 $g$ is the gain, and $r$ is the read noise.  If scales are not
    1373 provided, they are set to unity; if zero offsets are not provided,
    1374 they are set to zero.
    1375 
    1376 If \code{applyZeroScale} is \code{false}, then the values are:
    1377 \begin{eqnarray}
    1378 x_i & = & f_i \\
    1379 \sigma_i & = & [g (s_i f_i + z_i) + r^2]^{1/2} / g
    1380 \end{eqnarray}
    1381 where the same symbols are used as above.
    1382 
    1383 The \code{inputs, zero} and \code{scale} may be of U16, S32 and F32
    1384 types, and must all be of the same type.  The \code{output} shall be
    1385 of the same type.
     1411\subsection{Flat-field Re-Normalization}
     1412
     1413Consider a collection of $N_i$ flat-field images obtained with a
     1414mosaic camera consisting of $N_j$ chips.  Each image is exposed to an
     1415illumination source which should be a uniform surface
     1416brightness\footnote{This is likely a false assumption: the
     1417illumination source likely has spatial variations.  However, for the
     1418purposes of this discussion, it only matters that such spatial
     1419variations scale consistently as a function of illumination intensity.
     1420The spatial errors are corrected by the photometric flat-field
     1421correction technique (eg., Magnier \& Cuillandre 2004).}  Two factors
     1422determine the actual measured flux level (in Digital Numbers) on each
     1423of the chips in each image: the gain of each chip ($\mbox{gain}_j$)
     1424and the flux level from the illumination source ($\mbox{source}_i$).
     1425When the images are combined, the input images must be scaled so that
     1426the flux levels can be consistently compared.  After combining the
     1427collection of images, it is necessary to determine an appropriate
     1428re-normalization for the resulting flat-field images.  In effect, the
     1429individual chips must be adjusted so that the master flat-field image
     1430has a flux level which varies from chip to chip in proportion to the
     1431actual chip gain.  In this case, if a uniform illumination source
     1432illuminates the mosaic, the resulting flux levels will be corrected by
     1433the flat-field to a single, consistent flux level.
     1434
     1435In order to determine the correct relative scaling between the
     1436devices, it is thus necessary to know the individual chip gains, or at
     1437least the gain ratios.  A typical technique scaled all chips relative
     1438to a reference chip, or by a statistic measured for the complete
     1439collection.  These techniques fail if the input collection of images
     1440does not always consist of the same set of chips; for the GPC on
     1441Pan-STARRS, we must expect that individual cells or even chips may be
     1442disabled on a frequent basis, so our algorithms must not be limited by
     1443the assumption that all chips are available in all images.  We
     1444therefore define the following algorithm to measure the relative chip
     1445gains for a collection of input flat-field images, each with a
     1446measured flux $\mbox{flux}_{i,j}$.  We want to solve for the chip
     1447gains and the source illumination fluxes which would make the best
     1448prediction of the measured input image fluxes:
     1449\[
     1450\mbox{flux}^{\rm pred}_{i,j} = \mbox{gain}_j \times \mbox{source}_i
     1451\]
     1452This relationship is easiest to determine if we take the logarithm of
     1453both sides of the equation:
     1454\[
     1455M^{\rm pred}_{i,j} = G_j + S_i
     1456\]
     1457where $M^{\rm pred}_{i,j} = \log \mbox{flux}^{\rm pred}_{i,j}$, $G_j =
     1458\log \mbox{gain}_j$, and $\log \mbox{source}_i = S_i$.  We can then
     1459write the chi-square which we want to minimize as:
     1460\[
     1461\chi^2 = \sum_{i,j} (M^{\rm obs}_{i,j} - G_j - S_i)^2
     1462\]
     1463where we ignore the weights of the different measured flux levels.
     1464Taking the derivatives with respect to the parameters of interest
     1465($G_j, S_i$), and setting them to 0, we determine the following set of
     1466equations which must be solved:
     1467\[
     1468G_j \times N_i = \sum_i M^{\rm obs}_{i,j} - \sum_i S_i
     1469\]
     1470\[
     1471S_j \times N_j = \sum_j M^{\rm obs}_{i,j} - \sum_j G_j \\
     1472\]
     1473This set of equations can be solved iteratively, starting from the
     1474assumption that all chip gains are 1.0, ($G_j = 0$), or by supplying
     1475a guess for the chip gains.  The result of this analysis is the
     1476measured chip gains and the measured source illumination levels for
     1477each of the input flat-field images.  The chip gains can then be used
     1478to modify the flux levels on the master flat-field images.
     1479
     1480We define the following function to perform the analysis discussed
     1481above:
     1482\begin{prototype}
     1483bool pmFlatNormalization (psVector *sourceFlux, psVector *chipGains, psArray *fluxLevels);
     1484\end{prototype}
     1485The input array \code{fluxLevels} consists of $N_i$ vectors, one per
     1486mosaic image.  Each vector consists of $N_j$ elements, each a
     1487measurement of the input flat-field image flux levels.  All of these
     1488vectors must be constructed with the same number of elements, or the
     1489function will return an error.  If a chip is missing from a particular
     1490image, that element should be set to \code{NaN}.  The vector
     1491\code{chipGains} supplies initial guesses for the chip gains.  If the
     1492vector contains the values 0.0 or \code{NaN} for any of the elements,
     1493the gain is set to the mean of the valid values.  If the vector length
     1494does not match the number of chips, an warning is raised, all chip
     1495gain guesses will be set to 1.0, and the vector length modified to
     1496match the number of chips defined by the supplied \code{fluxLevels}.
     1497The \code{sourceFlux} input vector must be allocated (not
     1498\code{NULL}), but the routine will set the vector length to the number
     1499of source images regardless of the initial state of the vector.  All
     1500vectors used by this function must be of type \code{PS_DATA_F64}.
     1501
     1502%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    13861503
    13871504\section{Objects on Images}
Note: See TracChangeset for help on using the changeset viewer.