Index: /branches/eam_branches/20091201/psModules/src/objects/pmPSF.c
===================================================================
--- /branches/eam_branches/20091201/psModules/src/objects/pmPSF.c	(revision 26668)
+++ /branches/eam_branches/20091201/psModules/src/objects/pmPSF.c	(revision 26669)
@@ -42,4 +42,7 @@
 #include "pmErrorCodes.h"
 
+
+#define MAX_AXIS_RATIO 20.0             // Maximum axis ratio for PSF model
+
 /*****************************************************************************/
 /* FUNCTION IMPLEMENTATION - PUBLIC                                          */
@@ -405,2 +408,19 @@
     return psf;
 }
+
+
+float pmPSFtoFWHM(const pmPSF *psf, float x, float y)
+{
+    PS_ASSERT_PTR_NON_NULL(psf, NAN);
+
+    pmModel *model = pmModelFromPSFforXY(psf, x, y, 1.0); // Model of source
+    psF32 *params = model->params->data.F32; // Model parameters
+    psEllipseAxes axes = pmPSF_ModelToAxes(params, MAX_AXIS_RATIO); // Ellipse axes
+
+    // Curiously, the minor axis can be larger than the major axis, so need to check.
+    float fwhm = 2.355 * PS_MAX(axes.minor, axes.major); // FWHM, converted from sigma
+
+    psFree(model);
+
+    return fwhm;
+}
Index: /branches/eam_branches/20091201/psModules/src/objects/pmPSF.h
===================================================================
--- /branches/eam_branches/20091201/psModules/src/objects/pmPSF.h	(revision 26668)
+++ /branches/eam_branches/20091201/psModules/src/objects/pmPSF.h	(revision 26669)
@@ -111,4 +111,11 @@
 psEllipseAxes pmPSF_ModelToAxes (psF32 *modelPar, double maxAR);
 
+/// Calculate FWHM value from a PSF
+float pmPSFtoFWHM(
+    const pmPSF *psf,                   // PSF of interest
+    float x, float y                    // Position of interest
+    );
+
+
 /// @}
 # endif
