pmObjects.h

Go to the documentation of this file.
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

Generated on Tue Dec 13 13:38:22 2005 for Pan-STARRS Module Library by  doxygen 1.4.5