Index: trunk/psphot/src/psphot.h
===================================================================
--- trunk/psphot/src/psphot.h	(revision 4251)
+++ trunk/psphot/src/psphot.h	(revision 4375)
@@ -5,4 +5,7 @@
 # include <unistd.h>
 # include <stdlib.h>
+# include <math.h>
+
+# define  M_PI 3.14159265358979323846264338328      /* pi */
 
 typedef struct {
@@ -22,14 +25,41 @@
   psVector   *mask;
   psVector   *metric;
-  psStats    *metricStats;
+  psVector   *fitMag;
+  float       ApResid;
+  float       dApResid;
+  float       skyBias;
 } pmPSF_Test;
 
-bool psTimerStart (char *name);
-psF64 psTimerMark (char *name);
+// used by mask operations
+# define AND true
+# define OR false
 
-bool psImageInit (psImage *image,...);
-void psImageSmooth (psImage *image, float sigma, float Nsigma);
-psRegion *psRegionForImage (psRegion *out, psImage *image, psRegion *in);
 
+// top-level psphot functions
+psImageData *setup (psMetadata *config);
+psStats *image_stats (psImageData *imdata, psMetadata *config);
+psArray *find_peaks (psImageData *imdata, psMetadata *config, psStats *sky);
+psArray *source_moments (psImageData *imdata, psMetadata *config, psArray *allpeaks);
+pmPSF *choose_psf_model (psMetadata *config, psArray *sources, psStats *sky);
+bool apply_psf_model (psImageData *imdata, psMetadata *config, psArray *sources, pmPSF *psf, psStats *sky);
+bool test_psf_scatter (psArray *sources);
+bool mark_psf_sources (psArray *sources, psMetadata *config);
+bool subtract_psf_sources (psArray *sources);
+bool fit_galaxies (psImage *image, psMetadata *config, psArray *sources);
+bool subtract_galaxies (psArray *sources, psMetadata *config);
+bool subtract_psf_source (psSource *source);
+bool mark_psf_source (psSource *source, float shapeNsigma);
+bool find_defects (psImage *zapmask, psArray *sources, psMetadata *config, pmPSF *psf);
+
+// psf utilities
+pmPSF *pmPSFAlloc (psModelType type);
+pmPSF_Test *pmPSF_TestAlloc (psArray *stars, char *modelName);
+pmPSF_Test *pmPSF_TestModel (psArray *sources, char *modelName, float radius);
+bool pmPSFFromModels (pmPSF *psf, psArray *models, psVector *mask);
+psModel *psModelFromPSF (psModel *model, pmPSF *psf);
+bool pmSourcePhotometry (float *fitMag, float *obsMag, psModel *model, psImage *image, psImage *mask);
+bool pmPSFMetricModel (pmPSF_Test *test, float RADIUS);
+
+// output options
 bool DumpPeaks (psArray *sources, char *filename);
 bool DumpMoments (psArray *sources, char *filename);
@@ -38,61 +68,17 @@
 bool DumpImage (psImage *image, char *filename);
 
+// psphot utilities
 int usage ();
-int get_argument (int argc, char **argv, char *arg);
-int remove_argument (int N, int *argc, char **argv);
 psMetadata *load_args (int *argc, char **argv);
-
+int by_SN (const void **a, const void **b);
 psArray *pmPeaksSubset(psArray *peaks, psF32 maxValue, const psRegion *valid);
 psArray *SelectPSFStars (psArray *sources);
-
-psF32 pmConfigLookupF32 (bool *status, psMetadata *config, psMetadata *header, char *name);
-
-psF32 Polynomial2DEval(const psPolynomial2D* myPoly, psF32 x, psF32 y);
-psImage *psBuildSums2D(psImage* sums,psF64 x,psF64 y,psS32 nXterm, psS32 nYterm);
-psPolynomial1D* VectorFitPolynomial1DOrd_EAM(psPolynomial1D* myPoly, psVector* mask, const psVector* x, const psVector* y, const psVector* yErr);
-psPolynomial2D* VectorFitPolynomial2DOrd_EAM(psPolynomial2D* myPoly, psVector* mask, const psVector* x, const psVector* y, const psVector* z, const psVector* zErr);
-psPolynomial2D* Polynomial2DAlloc(psS32 nXorder, psS32 nYorder, psPolynomialType type);
-void psPolynomial2DDump (psPolynomial2D *poly);
-psPolynomial2D* RobustFit2D_nomask(psPolynomial2D* poly, const psVector* x, const psVector* y, const psVector* z, const psVector* zErr);
-psPolynomial2D* RobustFit2D(psPolynomial2D* poly, psVector* mask, const psVector* x, const psVector* y, const psVector* z, const psVector* zErr);
-psVector *Polynomial2DEvalVector(const psPolynomial2D *myPoly, const psVector *x,const psVector *y);
-psVector *psBuildSums1D(psVector* sums, psF64 x,psS32 nTerm);
-void psPolynomial1DDump (psPolynomial1D *poly);
-
-psS32 psLogArguments (int *argc, char **argv);
-psS32 psTraceArguments (int *argc, char **argv);
-psVector *p_psGetRowVectorFromImage(psImage *image, psU32 row);
-psVector *psGetRowVectorFromImage(psImage *image, psU32 row);
-
-pmPSF *pmPSFAlloc (psModelType type);
-pmPSF_Test *pmPSF_TestAlloc (psArray *stars, char *modelName);
-pmPSF_Test *pmPSF_TestModel (psArray *sources, char *modelName, float radius);
-
-bool pmPSFFromModels (pmPSF *psf, psArray *models, psVector *mask);
-psModel *psModelFromPSF (psModel *model, pmPSF *psf);
-void pmSourceMaskRegion (psSource *source, psRegion *region);
-void pmSourceMaskSaturated (psSource *source, float saturate);
-
-// top-level psphot functions
-psImageData *setup (psMetadata *config);
-psStats *image_stats (psImageData *imdata, psMetadata *config);
-psArray *find_peaks (psImageData *imdata, psMetadata *config, psStats *sky);
-psArray *source_moments (psImageData *imdata, psMetadata *config, psArray *allpeaks);
-pmPSF *choose_psf_model (psMetadata *config, psArray *sources);
-bool apply_psf_model (psImageData *imdata, psMetadata *config, psArray *sources, pmPSF *psf, psStats *sky);
-bool test_psf_scatter (psArray *sources);
-bool mark_psf_sources (psArray *sources, psMetadata *config);
-bool subtract_psf_sources (psArray *sources);
-bool fit_galaxies (psImage *image, psMetadata *config, psArray *sources);
-bool subtract_galaxies (psArray *sources, psMetadata *config);
-
-int by_SN (const void **a, const void **b);
-bool subtract_psf_source (psSource *source);
-bool mark_psf_source (psSource *source, float shapeNsigma);
-bool find_defects (psImage *zapmask, psArray *sources, psMetadata *config, pmPSF *psf);
-
 bool pmSourceDefinePixels(psSource *mySource, const psImageData *imdata, psF32 x, psF32 y, psF32 Radius);
 bool pmSourceLocalSky_EAM (psSource *source, psStatsOptions statsOptions, psF32 Radius);
-psRegion *psRegionSquare (psF32 x, psF32 y, psF32 radius);
+
+// fitsource utilities
+bool onesource (psImageData *imdata, psMetadata *config, char *modelName, float x, float y);
+psMetadata *fs_args (int *argc, char **argv);
+int fs_usage ();
 
 // image mask functions
@@ -102,4 +88,42 @@
 void psImageKeepCircle (psImage *image, double x, double y, double radius, bool logical_and, int maskValue);
 
-# define AND true
-# define OR false
+// basic image functions
+bool psImageInit (psImage *image,...);
+void psImageSmooth (psImage *image, float sigma, float Nsigma);
+psRegion *psRegionForImage (psRegion *out, psImage *image, psRegion *in);
+psRegion *psRegionSquare (psF32 x, psF32 y, psF32 radius);
+
+// misc global functions
+psVector *p_psGetRowVectorFromImage(psImage *image, psU32 row);
+psVector *psGetRowVectorFromImage(psImage *image, psU32 row);
+
+// utilities
+bool psTimerStart (char *name);
+psF64 psTimerMark (char *name);
+psS32 psLogArguments (int *argc, char **argv);
+psS32 psTraceArguments (int *argc, char **argv);
+int get_argument (int argc, char **argv, char *arg);
+int remove_argument (int N, int *argc, char **argv);
+psF32 pmConfigLookupF32 (bool *status, psMetadata *config, psMetadata *header, char *name);
+psVector *psVectorCreate (double lower, double upper, double delta, psElemType type);
+
+// polynomial functions
+psF32 Polynomial2DEval(const psPolynomial2D* myPoly, psF32 x, psF32 y);
+psImage *psBuildSums2D(psImage* sums,psF64 x,psF64 y,psS32 nXterm, psS32 nYterm);
+psPolynomial2D* VectorFitPolynomial2DOrd_EAM(psPolynomial2D* myPoly, psVector* mask, const psVector* x, const psVector* y, const psVector* z, const psVector* zErr);
+psPolynomial2D* Polynomial2DAlloc(psS32 nXorder, psS32 nYorder, psPolynomialType type);
+void psPolynomial2DDump (psPolynomial2D *poly);
+psPolynomial2D* RobustFit2D_nomask(psPolynomial2D* poly, const psVector* x, const psVector* y, const psVector* z, const psVector* zErr);
+psPolynomial2D* RobustFit2D(psPolynomial2D* poly, psVector* mask, const psVector* x, const psVector* y, const psVector* z, const psVector* zErr);
+psVector *Polynomial2DEvalVector(const psPolynomial2D *myPoly, const psVector *x,const psVector *y);
+
+psVector *psBuildSums1D(psVector* sums, psF64 x,psS32 nTerm);
+void psPolynomial1DDump (psPolynomial1D *poly);
+psF32 Polynomial1DEval_EAM(psF32 x, const psPolynomial1D* myPoly);
+psVector *Polynomial1DEvalVector_EAM(const psPolynomial1D *myPoly, const psVector *x);
+psPolynomial1D* Polynomial1DAlloc(psS32 nOrder, psPolynomialType type);
+psPolynomial1D* VectorFitPolynomial1DOrd_EAM(psPolynomial1D* myPoly, psVector* mask, const psVector* x, const psVector* y, const psVector* yErr);
+
+// deprecated
+void pmSourceMaskRegion (psSource *source, psRegion *region);
+void pmSourceMaskSaturated (psSource *source, float saturate);
