00001 /** @file pmObjects.h 00002 * 00003 * The process of finding, measuring, and classifying astronomical sources on 00004 * images is one of the critical tasks of the IPP or any astronomical software 00005 * system. This file will define structures and functions related to the task 00006 * of source detection and measurement. The elements defined in this section 00007 * are generally low-level components which can be connected together to 00008 * construct a complete object measurement suite. 00009 * 00010 * @author GLG, MHPCC 00011 * 00012 * @version $Revision: 1.2.8.1 $ $Name: rel9_1 $ 00013 * @date $Date: 2005/12/12 21:52:22 $ 00014 * 00015 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii 00016 * 00017 */ 00018 00019 #if !defined(PM_OBJECTS_H) 00020 #define PM_OBJECTS_H 00021 00022 #if HAVE_CONFIG_H 00023 #include <config.h> 00024 #endif 00025 00026 #include <stdio.h> 00027 #include <math.h> 00028 #include "pslib.h" 00029 #include "pmAstrometry.h" 00030 /** 00031 * In the object analysis process, we will use specific mask values to mark the 00032 * image pixels. The following structure defines the relevant mask values. 00033 * 00034 * XXX: This is probably a bad solution: we will want to set mask values 00035 * outside of the PSPHOT code. Perhaps we can set up a registered set of mask 00036 * values with specific meanings that other functions can add to or define? 00037 */ 00038 typedef enum { 00039 PSPHOT_MASK_CLEAR = 0x00, 00040 PSPHOT_MASK_INVALID = 0x01, 00041 PSPHOT_MASK_SATURATED = 0x02, 00042 PSPHOT_MASK_MARKED = 0x08, 00043 } psphotMaskValues; 00044 00045 00046 /** pmPeakType 00047 * 00048 * A peak pixel may have several features which may be determined when the 00049 * peak is found or measured. These are specified by the pmPeakType enum. 00050 * PM_PEAK_LONE represents a single pixel which is higher than its 8 immediate 00051 * neighbors. The PM_PEAK_EDGE represents a peak pixel which touching the image 00052 * edge. The PM_PEAK_FLAT represents a peak pixel which has more than a specific 00053 * number of neighbors at the same value, within some tolarence: 00054 * 00055 */ 00056 typedef enum { 00057 PM_PEAK_LONE, ///< Isolated peak. 00058 PM_PEAK_EDGE, ///< Peak on edge. 00059 PM_PEAK_FLAT, ///< Peak has equal-value neighbors. 00060 PM_PEAK_UNDEF ///< Undefined. 00061 } pmPeakType; 00062 00063 00064 /** pmPeak data structure 00065 * 00066 * A source has the capacity for several types of measurements. The 00067 * simplest measurement of a source is the location and flux of the peak pixel 00068 * associated with the source: 00069 * 00070 */ 00071 typedef struct 00072 { 00073 int x; ///< X-coordinate of peak pixel. 00074 int y; ///< Y-coordinate of peak pixel. 00075 float counts; ///< Value of peak pixel (above sky?). 00076 pmPeakType class; ///< Description of peak. 00077 } 00078 pmPeak; 00079 00080 00081 /** pmMoments data structure 00082 * 00083 * One of the simplest measurements which can be made quickly for an object 00084 * are the object moments. We specify a structure to carry the moment information 00085 * for a specific source: 00086 * 00087 */ 00088 typedef struct 00089 { 00090 float x; ///< X-coord of centroid. 00091 float y; ///< Y-coord of centroid. 00092 float Sx; ///< x-second moment. 00093 float Sy; ///< y-second moment. 00094 float Sxy; ///< xy cross moment. 00095 float Sum; ///< Pixel sum above sky (background). 00096 float Peak; ///< Peak counts above sky. 00097 float Sky; ///< Sky level (background). 00098 float SN; ///< approx signal-to-noise 00099 int nPixels; ///< Number of pixels used. 00100 } 00101 pmMoments; 00102 00103 00104 /** pmPSFClump data structure 00105 * 00106 * A collection of object moment measurements can be used to determine 00107 * approximate object classes. The key to this analysis is the location and 00108 * statistics (in the second-moment plane, 00109 * 00110 */ 00111 typedef struct 00112 { 00113 float X; 00114 float dX; 00115 float Y; 00116 float dY; 00117 } 00118 pmPSFClump; 00119 00120 typedef int pmModelType; 00121 #define PS_MODEL_GAUSS 0 00122 #define PS_MODEL_PGAUSS 1 00123 #define PS_MODEL_QGAUSS 2 00124 #define PS_MODEL_SGAUSS 3 00125 00126 00127 /** pmModel data structure 00128 * 00129 * Every source may have two types of models: a PSF model and a FLT (floating) 00130 * model. The PSF model represents the best fit of the image PSF to the specific 00131 * object. In this case, the PSF-dependent parameters are specified for the 00132 * object by the PSF, not by the fit. The FLT model represents the best fit of 00133 * the given model to the object, with all parameters floating in the fit. 00134 * 00135 */ 00136 typedef struct 00137 { 00138 pmModelType type; ///< Model to be used. 00139 psVector *params; ///< Paramater values. 00140 psVector *dparams; ///< Parameter errors. 00141 float chisq; ///< Fit chi-squared. 00142 int nDOF; ///< number of degrees of freedom 00143 int nIter; ///< number of iterations to reach min 00144 float radius; ///< fit radius actually used 00145 } 00146 pmModel; 00147 00148 /** pmSourceType enumeration 00149 * 00150 * A given source may be identified as most-likely to be one of several source 00151 * types. The pmSource entry pmSourceType defines the current best-guess for this 00152 * source. 00153 * 00154 * XXX: The values given below are currently illustrative and will require 00155 * some modification as the source classification code is developed. (TBD) 00156 * 00157 */ 00158 typedef enum { 00159 PM_SOURCE_DEFECT, ///< a cosmic-ray 00160 PM_SOURCE_SATURATED, ///< random saturated pixels 00161 00162 PM_SOURCE_SATSTAR, ///< a saturated star 00163 PM_SOURCE_PSFSTAR, ///< a PSF star 00164 PM_SOURCE_GOODSTAR, ///< a good-quality star 00165 00166 PM_SOURCE_POOR_FIT_PSF, ///< poor quality PSF fit 00167 PM_SOURCE_FAIL_FIT_PSF, ///< failed to get a good PSF fit 00168 PM_SOURCE_FAINTSTAR, ///< below S/N cutoff 00169 00170 PM_SOURCE_GALAXY, ///< an extended object (galaxy) 00171 PM_SOURCE_FAINT_GALAXY, ///< a galaxy below S/N cutoff 00172 PM_SOURCE_DROP_GALAXY, ///< ? 00173 PM_SOURCE_FAIL_FIT_GAL, ///< failed on the galaxy fit 00174 PM_SOURCE_POOR_FIT_GAL, ///< poor quality galaxy fit 00175 00176 PM_SOURCE_OTHER, ///< unidentified 00177 } pmSourceType; 00178 00179 /** pmSource data structure 00180 * 00181 * This source has the capacity for several types of measurements. The 00182 * simplest measurement of a source is the location and flux of the peak pixel 00183 * associated with the source: 00184 * 00185 */ 00186 typedef struct 00187 { 00188 pmPeak *peak; ///< Description of peak pixel. 00189 psImage *pixels; ///< Rectangular region including object pixels. 00190 psImage *weight; ///< Image variance. 00191 psImage *mask; ///< Mask which marks pixels associated with objects. 00192 pmMoments *moments; ///< Basic moments measure for the object. 00193 pmModel *modelPSF; ///< PSF Model fit (parameters and type) 00194 pmModel *modelFLT; ///< FLT (floating) Model fit (parameters and type). 00195 pmSourceType type; ///< Best identification of object. 00196 } 00197 pmSource; 00198 00199 00200 /** pmPeakAlloc() 00201 * 00202 * @return pmPeak* newly allocated pmPeak with all internal pointers set to NULL 00203 */ 00204 pmPeak *pmPeakAlloc( 00205 int x, ///< Row-coordinate in image space 00206 int y, ///< Col-coordinate in image space 00207 float counts, ///< The value of the peak pixel 00208 pmPeakType class ///< The type of peak pixel 00209 ); 00210 00211 00212 /** pmMomentsAlloc() 00213 * 00214 */ 00215 pmMoments *pmMomentsAlloc(); 00216 00217 00218 /** pmModelAlloc() 00219 * 00220 */ 00221 pmModel *pmModelAlloc(pmModelType type); 00222 00223 00224 /** pmSourceAlloc() 00225 * 00226 */ 00227 pmSource *pmSourceAlloc(); 00228 00229 00230 /** pmFindVectorPeaks() 00231 * 00232 * Find all local peaks in the given vector above the given threshold. A peak 00233 * is defined as any element with a value greater than its two neighbors and with 00234 * a value above the threshold. Two types of special cases must be addressed. 00235 * Equal value elements: If an element has the same value as the following 00236 * element, it is not considered a peak. If an element has the same value as the 00237 * preceding element (but not the following), then it is considered a peak. Note 00238 * that this rule (arbitrarily) identifies flat regions by their trailing edge. 00239 * Edge cases: At start of the vector, the element must be higher than its 00240 * neighbor. At the end of the vector, the element must be higher or equal to its 00241 * neighbor. These two rules again places the peak associated with a flat region 00242 * which touches the image edge at the image edge. The result of this function is 00243 * a vector containing the coordinates (element number) of the detected peaks 00244 * (type psU32). 00245 * 00246 */ 00247 psVector *pmFindVectorPeaks( 00248 const psVector *vector, ///< The input vector (float) 00249 float threshold ///< Threshold above which to find a peak 00250 ); 00251 00252 00253 /** pmFindImagePeaks() 00254 * 00255 * Find all local peaks in the given image above the given threshold. This 00256 * function should find all row peaks using pmFindVectorPeaks, then test each row 00257 * peak and exclude peaks which are not local peaks. A peak is a local peak if it 00258 * has a higher value than all 8 neighbors. If the peak has the same value as its 00259 * +y neighbor or +x neighbor, it is NOT a local peak. If any other neighbors 00260 * have an equal value, the peak is considered a valid peak. Note two points: 00261 * first, the +x neighbor condition is already enforced by pmFindVectorPeaks. 00262 * Second, these rules have the effect of making flat-topped regions have single 00263 * peaks at the (+x,+y) corner. When selecting the peaks, their type must also be 00264 * set. The result of this function is an array of pmPeak entries. 00265 * 00266 */ 00267 psArray *pmFindImagePeaks( 00268 const psImage *image, ///< The input image where peaks will be found (float) 00269 float threshold ///< Threshold above which to find a peak 00270 ); 00271 00272 00273 /** pmCullPeaks() 00274 * 00275 * Eliminate peaks from the psList that have a peak value above the given 00276 * maximum, or fall outside the valid region. 00277 * 00278 */ 00279 psList *pmCullPeaks( 00280 psList *peaks, ///< The psList of peaks to be culled 00281 float maxValue, ///< Cull peaks above this value 00282 const psRegion valid ///< Cull peaks otside this psRegion 00283 ); 00284 00285 00286 /** pmPeaksSubset() 00287 * 00288 * Create a new peaks array, removing certain types of peaks from the input 00289 * array of peaks based on the given criteria. Peaks should be eliminated if they 00290 * have a peak value above the given maximum value limit or if the fall outside 00291 * the valid region. The result of the function is a new array with a reduced 00292 * number of peaks. 00293 * 00294 */ 00295 psArray *pmPeaksSubset( 00296 psArray *peaks, ///< Add comment. 00297 float maxvalue, ///< Add comment. 00298 const psRegion valid ///< Add comment. 00299 ); 00300 00301 00302 /** pmSourceDefinePixels() 00303 * 00304 * Define psImage subarrays for the source located at coordinates x,y on the 00305 * image set defined by readout. The pixels defined by this operation consist of 00306 * a square window (of full width 2Radius+1) centered on the pixel which contains 00307 * the given coordinate, in the frame of the readout. The window is defined to 00308 * have limits which are valid within the boundary of the readout image, thus if 00309 * the radius would fall outside the image pixels, the subimage is truncated to 00310 * only consist of valid pixels. If readout->mask or readout->weight are not 00311 * NULL, matching subimages are defined for those images as well. This function 00312 * fails if no valid pixels can be defined (x or y less than Radius, for 00313 * example). This function should be used to define a region of interest around a 00314 * source, including both source and sky pixels. 00315 * 00316 * XXX: must code this. 00317 * 00318 */ 00319 // XXX: Uncommenting the pmReadout causes compile errors. 00320 bool pmSourceDefinePixels( 00321 pmSource *mySource, ///< Add comment. 00322 pmReadout *readout, ///< Add comment. 00323 psF32 x, ///< Add comment. 00324 psF32 y, ///< Add comment. 00325 psF32 Radius ///< Add comment. 00326 ); 00327 00328 00329 /** pmSourceLocalSky() 00330 * 00331 * Measure the local sky in the vicinity of the given source. The Radius 00332 * defines the square aperture in which the moments will be measured. This 00333 * function assumes the source pixels have been defined, and that the value of 00334 * Radius here is smaller than the value of Radius used to define the pixels. The 00335 * annular region not contained within the radius defined here is used to measure 00336 * the local background in the vicinity of the source. The local background 00337 * measurement uses the specified statistic passed in via the statsOptions entry. 00338 * This function allocates the pmMoments structure. The resulting sky is used to 00339 * set the value of the pmMoments.sky element of the provided pmSource structure. 00340 * 00341 */ 00342 bool pmSourceLocalSky( 00343 pmSource *source, ///< The input image (float) 00344 psStatsOptions statsOptions, ///< The statistic used in calculating the background sky 00345 float Radius ///< The inner radius of the square annulus to exclude 00346 ); 00347 00348 00349 /** pmSourceMoments() 00350 * 00351 * Measure source moments for the given source, using the value of 00352 * source.moments.sky provided as the local background value and the peak 00353 * coordinates as the initial source location. The resulting moment values are 00354 * applied to the source.moments entry, and the source is returned. The moments 00355 * are measured within the given circular radius of the source.peak coordinates. 00356 * The return value indicates the success (TRUE) of the operation. 00357 * 00358 */ 00359 bool pmSourceMoments( 00360 pmSource *source, ///< The input pmSource for which moments will be computed 00361 float radius ///< Use a circle of pixels around the peak 00362 ); 00363 00364 00365 /** pmSourcePSFClump() 00366 * 00367 * We use the source moments to make an initial, approximate source 00368 * classification, and as part of the information needed to build a PSF model for 00369 * the image. As long as the PSF shape does not vary excessively across the 00370 * image, the sources which are represented by a PSF (the start) will have very 00371 * similar second moments. The function pmSourcePSFClump searches a collection of 00372 * sources with measured moments for a group with moments which are all very 00373 * similar. The function returns a pmPSFClump structure, representing the 00374 * centroid and size of the clump in the sigma_x, sigma_y second-moment plane. 00375 * 00376 * The goal is to identify and characterize the stellar clump within the 00377 * sigma_x, sigma_y second-moment plane. To do this, an image is constructed to 00378 * represent this plane. The units of sigma_x and sigma_y are in image pixels. A 00379 * pixel in this analysis image represents 0.1 pixels in the input image. The 00380 * dimensions of the image need only be 10 pixels. The peak pixel in this image 00381 * (above a threshold of half of the image maximum) is found. The coordinates of 00382 * this peak pixel represent the 2D mode of the sigma_x, sigma_y distribution. 00383 * The sources with sigma_x, sigma_y within 0.2 pixels of this value are then 00384 * * used to calculate the median and standard deviation of the sigma_x, sigma_y 00385 * values. These resulting values are returned via the pmPSFClump structure. 00386 * 00387 * The return value indicates the success (TRUE) of the operation. 00388 * 00389 * XXX: Limit the S/N of the candidate sources (part of Metadata)? (TBD). 00390 * XXX: Save the clump parameters on the Metadata (TBD) 00391 * 00392 */ 00393 pmPSFClump pmSourcePSFClump( 00394 psArray *source, ///< The input pmSource 00395 psMetadata *metadata ///< Contains classification parameters 00396 ); 00397 00398 00399 /** pmSourceRoughClass() 00400 * 00401 * Based on the specified data values, make a guess at the source 00402 * classification. The sources are provides as a psArray of pmSource entries. 00403 * Definable parameters needed to make the classification are provided to the 00404 * routine with the psMetadata structure. The rules (in SDRS) refer to values which 00405 * can be extracted from the metadata using the given keywords. Except as noted, 00406 * the data type for these parameters are psF32. 00407 * 00408 */ 00409 bool pmSourceRoughClass( 00410 psArray *source, ///< The input pmSource 00411 psMetadata *metadata, ///< Contains classification parameters 00412 pmPSFClump clump ///< Statistics about the PSF clump 00413 ); 00414 00415 00416 /** pmSourceModelGuess() 00417 * 00418 * Convert available data to an initial guess for the given model. This 00419 * function allocates a pmModel entry for the pmSource structure based on the 00420 * provided model selection. The method of defining the model parameter guesses 00421 * are specified for each model below. The guess values are placed in the model 00422 * parameters. The function returns TRUE on success or FALSE on failure. 00423 * 00424 */ 00425 pmModel *pmSourceModelGuess( 00426 pmSource *source, ///< The input pmSource 00427 pmModelType model ///< The type of model to be created. 00428 ); 00429 00430 00431 /** pmContourType 00432 * 00433 * Only one type is defined at present. 00434 * 00435 */ 00436 typedef enum { 00437 PS_CONTOUR_CRUDE, 00438 PS_CONTOUR_UNKNOWN01, 00439 PS_CONTOUR_UNKNOWN02 00440 } pmContourType; 00441 00442 00443 /** pmSourceContour() 00444 * 00445 * Find points in a contour for the given source at the given level. If type 00446 * is PM_CONTOUR_CRUDE, the contour is found by starting at the source peak, 00447 * running along each pixel row until the level is crossed, then interpolating to 00448 * the level coordinate for that row. This is done for each row, with the 00449 * starting point determined by the midpoint of the previous row, until the 00450 * starting point has a value below the contour level. The returned contour 00451 * consists of two vectors giving the x and y coordinates of the contour levels. 00452 * This function may be used as part of the model guess inputs. Other contour 00453 * types may be specified in the future for more refined contours (TBD) 00454 * 00455 */ 00456 psArray *pmSourceContour( 00457 pmSource *source, ///< The input pmSource 00458 const psImage *image, ///< The input image (float) (this arg should be removed) 00459 float level, ///< The level of the contour 00460 pmContourType mode ///< Currently this must be PS_CONTOUR_CRUDE 00461 ); 00462 00463 00464 /** pmSourceFitModel() 00465 * 00466 * Fit the requested model to the specified source. The starting guess for the 00467 * model is given by the input source.model parameter values. The pixels of 00468 * interest are specified by the source.pixelsand source.maskentries. This 00469 * function calls psMinimizeLMChi2() on the image data. The function returns TRUE 00470 * on success or FALSE on failure. 00471 * 00472 */ 00473 bool pmSourceFitModel( 00474 pmSource *source, ///< The input pmSource 00475 pmModel *model, ///< model to be fitted 00476 const bool PSF ///< Treat model as PSF or FLT? 00477 ); 00478 00479 00480 /** pmModelFitStatus() 00481 * 00482 * This function wraps the call to the model-specific function returned by 00483 * pmModelFitStatusFunc_GetFunction. The model-specific function examines the 00484 * model parameters, parameter errors, Chisq, S/N, and other parameters available 00485 * from model to decide if the particular fit was successful or not. 00486 * 00487 * XXX: Must code this. 00488 * 00489 */ 00490 bool pmModelFitStatus( 00491 pmModel *model ///< Add comment. 00492 ); 00493 00494 00495 /** pmSourceAddModel() 00496 * 00497 * Add the given source model flux to/from the provided image. The boolean 00498 * option center selects if the source is re-centered to the image center or if 00499 * it is placed at its centroid location. The boolean option sky selects if the 00500 * background sky is applied (TRUE) or not. The pixel range in the target image 00501 * is at most the pixel range specified by the source.pixels image. The success 00502 * status is returned. 00503 * 00504 */ 00505 bool pmSourceAddModel( 00506 psImage *image, ///< The output image (float) 00507 psImage *mask, ///< The image pixel mask (valid == 0) 00508 pmModel *model, ///< The input pmModel 00509 bool center ///< A boolean flag that determines whether pixels are centered 00510 ); 00511 00512 00513 /** pmSourceSubModel() 00514 * 00515 * Subtract the given source model flux to/from the provided image. The 00516 * boolean option center selects if the source is re-centered to the image center 00517 * or if it is placed at its centroid location. The boolean option sky selects if 00518 * the background sky is applied (TRUE) or not. The pixel range in the target 00519 * image is at most the pixel range specified by the source.pixels image. The 00520 * success status is returned. 00521 * 00522 */ 00523 bool pmSourceSubModel( 00524 psImage *image, ///< The output image (float) 00525 psImage *mask, ///< The image pixel mask (valid == 0) 00526 pmModel *model, ///< The input pmModel 00527 bool center ///< A boolean flag that determines whether pixels are centered 00528 ); 00529 00530 00531 /** 00532 * 00533 * The function returns both the magnitude of the fit, defined as -2.5log(flux), 00534 * where the flux is integrated under the model, theoretically from a radius of 0 00535 * to infinity. In practice, we integrate the model beyond 50sigma. The aperture magnitude is 00536 * defined as -2.5log(flux) , where the flux is summed for all pixels which are 00537 * not excluded by the aperture mask. The model flux is calculated by calling the 00538 * model-specific function provided by pmModelFlux_GetFunction. 00539 * 00540 * XXX: must code this. 00541 * 00542 */ 00543 bool pmSourcePhotometry( 00544 float *fitMag, ///< integrated fit magnitude 00545 float *obsMag, ///< aperture flux magnitude 00546 pmModel *model, ///< model used for photometry 00547 psImage *image, ///< image pixels to be used 00548 psImage *mask ///< mask of pixels to ignore 00549 ); 00550 00551 00552 /** 00553 * 00554 * This function converts the source classification into the closest available 00555 * approximation to the Dophot classification scheme: 00556 * 00557 * PM_SOURCE_DEFECT: 8 00558 * PM_SOURCE_SATURATED: 8 00559 * PM_SOURCE_SATSTAR: 10 00560 * PM_SOURCE_PSFSTAR: 1 00561 * PM_SOURCE_GOODSTAR: 1 00562 * PM_SOURCE_POOR_FIT_PSF: 7 00563 * PM_SOURCE_FAIL_FIT_PSF: 4 00564 * PM_SOURCE_FAINTSTAR: 4 00565 * PM_SOURCE_GALAXY: 2 00566 * PM_SOURCE_FAINT_GALAXY: 2 00567 * PM_SOURCE_DROP_GALAXY: 2 00568 * PM_SOURCE_FAIL_FIT_GAL: 2 00569 * PM_SOURCE_POOR_FIT_GAL: 2 00570 * PM_SOURCE_OTHER: ? 00571 * 00572 */ 00573 int pmSourceDophotType( 00574 pmSource *source ///< Add comment. 00575 ); 00576 00577 00578 /** pmSourceSextractType() 00579 * 00580 * This function converts the source classification into the closest available 00581 * approximation to the Sextractor classification scheme. the correspondence is 00582 * not yet defined (TBD) . 00583 * 00584 * XXX: Must code this. 00585 * 00586 */ 00587 int pmSourceSextractType( 00588 pmSource *source ///< Add comment. 00589 ); 00590 00591 /** pmSourceFitModel_v5() 00592 * 00593 * Fit the requested model to the specified source. The starting guess for the 00594 * model is given by the input source.model parameter values. The pixels of 00595 * interest are specified by the source.pixelsand source.maskentries. This 00596 * function calls psMinimizeLMChi2() on the image data. The function returns TRUE 00597 * on success or FALSE on failure. 00598 * 00599 */ 00600 bool pmSourceFitModel_v5( 00601 pmSource *source, ///< The input pmSource 00602 pmModel *model, ///< model to be fitted 00603 const bool PSF ///< Treat model as PSF or FLT? 00604 ); 00605 00606 00607 /** pmSourceFitModel_v7() 00608 * 00609 * Fit the requested model to the specified source. The starting guess for the 00610 * model is given by the input source.model parameter values. The pixels of 00611 * interest are specified by the source.pixelsand source.maskentries. This 00612 * function calls psMinimizeLMChi2() on the image data. The function returns TRUE 00613 * on success or FALSE on failure. 00614 * 00615 */ 00616 bool pmSourceFitModel_v7( 00617 pmSource *source, ///< The input pmSource 00618 pmModel *model, ///< model to be fitted 00619 const bool PSF ///< Treat model as PSF or FLT? 00620 ); 00621 00622 00623 /** pmSourcePhotometry() 00624 * 00625 * XXX: Need descriptions 00626 * 00627 */ 00628 bool pmSourcePhotometry( 00629 float *fitMag, 00630 float *obsMag, 00631 pmModel *model, 00632 psImage *image, 00633 psImage *mask 00634 ); 00635 00636 /** pmModelEval() 00637 * 00638 * XXX: Need descriptions 00639 * 00640 */ 00641 psF32 pmModelEval( 00642 pmModel *model, 00643 psImage *image, 00644 psS32 col, 00645 psS32 row 00646 ); 00647 00648 #endif
1.4.5