Index: trunk/ppViz/src/ppCoord/ppCoord.h
===================================================================
--- trunk/ppViz/src/ppCoord/ppCoord.h	(revision 27604)
+++ trunk/ppViz/src/ppCoord/ppCoord.h	(revision 27605)
@@ -2,6 +2,8 @@
 #define PP_VIZPSF_H
 
+#include <stdio.h>
 #include <pslib.h>
 #include <psmodules.h>
+
 
 #define PPVIZPSF_RECIPE "PPVIZPSF"      // Recipe name
@@ -17,4 +19,8 @@
     bool radians;                       // RA,Dec are in radians?
     bool all;                           // Only all coordinates?
+    psString ds9name;                   // Name of ds9 region file
+    FILE *ds9;                          // ds9 output file handle
+    float ds9radius;                    // Radius of ds9 regions
+    psString ds9color;                  // Color of ds9 regions
 } ppCoordData;
 
Index: trunk/ppViz/src/ppCoord/ppCoordArguments.c
===================================================================
--- trunk/ppViz/src/ppCoord/ppCoordArguments.c	(revision 27604)
+++ trunk/ppViz/src/ppCoord/ppCoordArguments.c	(revision 27605)
@@ -53,4 +53,7 @@
     psMetadataAddBool(arguments, PS_LIST_TAIL, "-radians", 0, "RA,Dec in radians?", NULL);
     psMetadataAddBool(arguments, PS_LIST_TAIL, "-all", 0, "Output all coordinates?", NULL);
+    psMetadataAddStr(arguments, PS_LIST_TAIL, "-ds9", 0, "Output ds9 region file", NULL);
+    psMetadataAddF32(arguments, PS_LIST_TAIL, "-ds9-radius", 0, "ds9 region radii", 5.0);
+    psMetadataAddStr(arguments, PS_LIST_TAIL, "-ds9-color", 0, "ds9 region color", "red");
     if (!psArgumentParse(arguments, &argc, argv) || argc != 1) {
         usage(argv[0], arguments, data);
@@ -65,4 +68,15 @@
     data->all = psMetadataLookupBool(NULL, arguments, "-all");
 //    psMetadataAddStr(data->config->arguments, PS_LIST_TAIL, "OUTPUT", 0, "Output root name", data->outRoot);
+
+    data->ds9name = psMemIncrRefCounter(psMetadataLookupStr(NULL, arguments, "-ds9"));
+    if (data->ds9name) {
+        data->ds9 = fopen(data->ds9name, "w");
+        if (!data->ds9) {
+            psError(PS_ERR_IO, true, "Unable to open region file %s", data->ds9name);
+            return false;
+        }
+    }
+    data->ds9radius = psMetadataLookupF32(NULL, arguments, "-ds9-radius");
+    data->ds9color = psMetadataLookupStr(NULL, arguments, "-ds9-color");
 
     psTrace("ppCoord", 1, "Done reading command-line arguments\n");
Index: trunk/ppViz/src/ppCoord/ppCoordData.c
===================================================================
--- trunk/ppViz/src/ppCoord/ppCoordData.c	(revision 27604)
+++ trunk/ppViz/src/ppCoord/ppCoordData.c	(revision 27605)
@@ -19,4 +19,7 @@
     psFree(data->radecName);
     psFree(data->config);
+    psFree(data->ds9name);
+    fclose(data->ds9);
+    psFree(data->ds9color);
     return;
 }
@@ -34,4 +37,10 @@
     data->radecName = NULL;
     data->config = NULL;
+    data->radians = false;
+    data->all = false;
+    data->ds9name = NULL;
+    data->ds9 = NULL;
+    data->ds9radius = NAN;
+    data->ds9color = NULL;
 
     return data;
Index: trunk/ppViz/src/ppCoord/ppCoordLoop.c
===================================================================
--- trunk/ppViz/src/ppCoord/ppCoordLoop.c	(revision 27604)
+++ trunk/ppViz/src/ppCoord/ppCoordLoop.c	(revision 27605)
@@ -314,4 +314,9 @@
                     rawFile ? " " : "",
                     rawFile && cellName ? cellName : (rawFile ? "UNKNOWN" : ""));
+            if (!rawFile && data->ds9) {
+                // Region file is only appropriate if we're not mapping all the way back to cell coordinates
+                fprintf(data->ds9, "image;circle(%f,%f,%f) # color=%s",
+                        xPix->data.F32[i], yPix->data.F32[i], data->ds9radius, data->ds9color);
+            }
         }
     }
