Index: trunk/psModules/src/objects/pmSourceIO.c
===================================================================
--- trunk/psModules/src/objects/pmSourceIO.c	(revision 29546)
+++ trunk/psModules/src/objects/pmSourceIO.c	(revision 30621)
@@ -59,12 +59,13 @@
 
 // lookup the EXTNAME values used for table data and image header segments
-static bool sourceExtensions(psString *headname, // Extension name for header
-                             psString *dataname, // Extension name for data
-                             psString *deteffname, // Extension name for detection efficiency
-                             psString *xsrcname, // Extension name for extended sources
-                             psString *xfitname, // Extension name for extended fits
-                             const pmFPAfile *file, // File of interest
-                             const pmFPAview *view // View to level of interest
-                             )
+bool pmSourceIOextnames(psString *headname,    // Extension name for image header
+			psString *dataname,    // Extension name for PSF table data
+			psString *deteffname,  // Extension name for detection efficiency
+			psString *xsrcname,    // Extension name for extended non-parametric measurements
+			psString *xfitname,    // Extension name for extended fitted measurements
+			psString *xradname,    // Extension name for radial apertures
+			const pmFPAfile *file, // File of interest
+			const pmFPAview *view  // View to level of interest
+    )
 {
     bool status;                        // Status of MD lookup
@@ -87,5 +88,5 @@
     }
 
-    // EXTNAME for table data
+    // EXTNAME for PSF table data
     if (dataname) {
         const char *rule = psMetadataLookupStr(&status, menu, "CMF.DATA");
@@ -107,5 +108,5 @@
     }
 
-    // EXTNAME for extended source data table
+    // EXTNAME for extended source non-parametric measurements
     if (xsrcname) {
         const char *rule = psMetadataLookupStr(&status, menu, "CMF.XSRC");
@@ -117,6 +118,6 @@
     }
 
+    // EXTNAME for extended source fitted measurements
     if (xfitname) {
-        // EXTNAME for extended source data table
         const char *rule = psMetadataLookupStr(&status, menu, "CMF.XFIT");
         if (!rule) {
@@ -125,4 +126,14 @@
         }
         *xfitname = pmFPAfileNameFromRule (rule, file, view);
+    }
+
+    // EXTNAME for radial apertures
+    if (xradname) {
+        const char *rule = psMetadataLookupStr(&status, menu, "CMF.XRAD");
+        if (!rule) {
+            psError(PS_ERR_UNKNOWN, true, "missing entry for CMF.XRAD in EXTNAME.RULES in camera.config");
+            return false;
+        }
+        *xradname = pmFPAfileNameFromRule (rule, file, view);
     }
 
@@ -344,4 +355,7 @@
 	    status &= pmSourcesWrite_##TYPE##_XFIT (file->fits, readout, sources, file->header, xfitname); \
 	}								\
+	if (xradname) {							\
+	    status &= pmSourcesWrite_##TYPE##_XRAD (file->fits, readout, sources, file->header, xradname, recipe); \
+	}								\
     }
 
@@ -449,4 +463,5 @@
         bool XSRC_OUTPUT = psMetadataLookupBool(&status, recipe, "EXTENDED_SOURCE_ANALYSIS");
         bool XFIT_OUTPUT = psMetadataLookupBool(&status, recipe, "EXTENDED_SOURCE_FITS");
+        bool XRAD_OUTPUT = psMetadataLookupBool(&status, recipe, "RADIAL_APERTURES");
 
         // define the EXTNAME values for the different data segments:
@@ -456,8 +471,10 @@
         psString xsrcname = NULL;
         psString xfitname = NULL;
-        if (!sourceExtensions(&headname, &dataname, &deteffname, 
-			      XSRC_OUTPUT ? &xsrcname : NULL,
-                              XFIT_OUTPUT ? &xfitname : NULL, 
-			      file, view)) {
+        psString xradname = NULL;
+        if (!pmSourceIOextnames(&headname, &dataname, &deteffname, 
+				XSRC_OUTPUT ? &xsrcname : NULL,
+				XFIT_OUTPUT ? &xfitname : NULL, 
+				XRAD_OUTPUT ? &xradname : NULL, 
+				file, view)) {
             return false;
         }
@@ -539,5 +556,7 @@
 		psMetadataAddStr (outhead, PS_LIST_TAIL, "XFITNAME", PS_META_REPLACE, "name of XFIT table extension", xfitname);
             }
-    
+            if (xradname) {
+		psMetadataAddStr (outhead, PS_LIST_TAIL, "XRADNAME", PS_META_REPLACE, "name of XRAD table extension", xradname);
+            }
 
             // these are case-sensitive since the EXTYPE is case-sensitive
@@ -563,5 +582,4 @@
         }
 
-
 	// write out the detection efficiency TABLE segments
 	if (deteffname) {
@@ -583,4 +601,5 @@
 	psFree (xsrcname);
 	psFree (xfitname);
+	psFree (xradname);
 	psFree (deteffname);
 
@@ -593,4 +612,5 @@
 	psFree (xsrcname);
 	psFree (xfitname);
+	psFree (xradname);
 	psFree (deteffname);
 	return false;
@@ -939,5 +959,5 @@
         psString dataname = NULL;
         psString deteffname = NULL;
-        if (!sourceExtensions(&headname, &dataname, &deteffname, NULL, NULL, file, view)) {
+        if (!pmSourceIOextnames(&headname, &dataname, &deteffname, NULL, NULL, NULL, file, view)) {
             return false;
         }
