Index: /branches/eam_branches/ipp-20130904/ippconfig/recipes/psphot.config
===================================================================
--- /branches/eam_branches/ipp-20130904/ippconfig/recipes/psphot.config	(revision 36350)
+++ /branches/eam_branches/ipp-20130904/ippconfig/recipes/psphot.config	(revision 36351)
@@ -190,4 +190,5 @@
 # extended source aperture-like measurements
 EXTENDED_SOURCE_PETROSIAN           BOOL  FALSE
+EXTENDED_SOURCE_ANNULI              BOOL  FALSE
 EXTENDED_SOURCE_RAW_RADIUS          BOOL  FALSE  # use circular (T) or elliptical (F) contours for petrosians?
 EXTENDED_SOURCE_SN_LIM              F32   20.0
@@ -438,4 +439,5 @@
   EXTENDED_SOURCE_SN_LIM              F32   10.0
   EXTENDED_SOURCE_PETROSIAN           BOOL  TRUE
+  EXTENDED_SOURCE_ANNULI              BOOL  TRUE
 
   PSPHOT.STACK.MATCH.PSF.SOURCE       STR   AUTO # which inputs to convolve? (RAW, CNV, AUTO)
Index: /branches/eam_branches/ipp-20130904/psModules/src/objects/pmSourceIO.c
===================================================================
--- /branches/eam_branches/ipp-20130904/psModules/src/objects/pmSourceIO.c	(revision 36350)
+++ /branches/eam_branches/ipp-20130904/psModules/src/objects/pmSourceIO.c	(revision 36351)
@@ -479,5 +479,7 @@
 
         // if this is not TRUE, the output files only contain the psf measurements.
-        bool XSRC_OUTPUT = psMetadataLookupBool(&status, recipe, "EXTENDED_SOURCE_ANALYSIS");
+	bool doPetrosian = psMetadataLookupBool (&status, recipe, "EXTENDED_SOURCE_PETROSIAN");
+	bool doAnnuli    = psMetadataLookupBool (&status, recipe, "EXTENDED_SOURCE_ANNULI");
+        bool XSRC_OUTPUT = doPetrosian || doAnnuli;
         bool XFIT_OUTPUT = psMetadataLookupBool(&status, recipe, "EXTENDED_SOURCE_FITS");
         bool XRAD_OUTPUT = psMetadataLookupBool(&status, recipe, "RADIAL_APERTURES");
Index: /branches/eam_branches/ipp-20130904/psphot/src/psphotExtendedSourceAnalysis.c
===================================================================
--- /branches/eam_branches/ipp-20130904/psphot/src/psphotExtendedSourceAnalysis.c	(revision 36350)
+++ /branches/eam_branches/ipp-20130904/psphot/src/psphotExtendedSourceAnalysis.c	(revision 36351)
@@ -16,6 +16,9 @@
     psAssert (recipe, "missing recipe?");
 
+    bool doPetrosian = psMetadataLookupBool (&status, recipe, "EXTENDED_SOURCE_PETROSIAN");
+    bool doAnnuli    = psMetadataLookupBool (&status, recipe, "EXTENDED_SOURCE_ANNULI");
+
     // measure petrosians?
-    if (!psMetadataLookupBool (&status, recipe, "EXTENDED_SOURCE_PETROSIAN")) {
+    if (!doPetrosian && !doAnnuli) {
 	psLogMsg ("psphot", PS_LOG_INFO, "skipping extended source measurements\n");
 	return true;
@@ -208,4 +211,6 @@
     float skynoise          = PS_SCALAR_VALUE(job->args->data[4],F32);
 
+    bool doPetrosian    = psMetadataLookupBool (&status, recipe, "EXTENDED_SOURCE_PETROSIAN");
+
     // user-defined masks to test for good/bad pixels (build from recipe list if not yet set)
     psImageMaskType maskVal = psMetadataLookupImageMask(&status, recipe, "MASK.PSPHOT"); // Mask value for bad pixels
@@ -254,10 +259,12 @@
 
 	// Petrosian Mags
-	if (!psphotPetrosian (source, recipe, skynoise, maskVal)) {
-	  psTrace ("psphot", 5, "FAILED petrosian flux & radius for source at %7.1f, %7.1f", source->moments->Mx, source->moments->My);
-	} else {
-	  psTrace ("psphot", 5, "measured petrosian flux & radius for source at %7.1f, %7.1f", source->moments->Mx, source->moments->My);
-	  Npetro ++;
-	  source->mode |= PM_SOURCE_MODE_EXTENDED_STATS;
+	if (doPetrosian) {
+	  if (!psphotPetrosian (source, recipe, skynoise, maskVal)) {
+	    psTrace ("psphot", 5, "FAILED petrosian flux & radius for source at %7.1f, %7.1f", source->moments->Mx, source->moments->My);
+	  } else {
+	    psTrace ("psphot", 5, "measured petrosian flux & radius for source at %7.1f, %7.1f", source->moments->Mx, source->moments->My);
+	    Npetro ++;
+	    source->mode |= PM_SOURCE_MODE_EXTENDED_STATS;
+	  }
 	}
 
