Index: /branches/cnb_branch_20090113/psModules/src/astrom/pmAstrometryVisual.c
===================================================================
--- /branches/cnb_branch_20090113/psModules/src/astrom/pmAstrometryVisual.c	(revision 21420)
+++ /branches/cnb_branch_20090113/psModules/src/astrom/pmAstrometryVisual.c	(revision 21421)
@@ -41,4 +41,8 @@
 static int kapa2 = -1;
 
+//helper prototypes
+bool residPlot (psArray *rawstars, psArray *refstars, psArray *match, psMetadata *recipe,
+                char *title);
+
 
 /* Initialization Routines  */
@@ -67,6 +71,8 @@
 
     //set up plot region
-    if (!pmVisualInitWindow (&kapa, "psastro:plots"))
-        return false;
+    if (!pmVisualInitWindow (&kapa, "psastro:plots")){
+        isVisual = false;
+        return false;
+    }
     Graphdata graphdata;
     KapaSection section;
@@ -231,6 +237,8 @@
 
     //set up plotting variables
-    if (!pmVisualInitWindow (&kapa, "psastro:plots"))
-        return false;
+    if (!pmVisualInitWindow (&kapa, "psastro:plots")) {
+        isVisual = false;
+        return false;
+    }
 
     Graphdata graphdata;
@@ -296,6 +304,8 @@
 
     //set up plotting variables
-    if ( !pmVisualInitWindow (&kapa, "psastro:plots"))
-        return false;
+    if ( !pmVisualInitWindow (&kapa, "psastro:plots")){
+        isVisual = false;
+        return false;
+    }
 
     Graphdata graphdata;
@@ -384,5 +394,8 @@
 
     //set up plot variables
-    if ( !pmVisualInitWindow (&kapa, "psastro:plots")) return false;
+    if ( !pmVisualInitWindow (&kapa, "psastro:plots")) {
+        isVisual = false;
+        return false;
+    }
 
     KapaSection section;
@@ -486,7 +499,14 @@
         return true;
 
+    if(!pmVisualInitWindow(&kapa, "psastro:plots") || !pmVisualInitWindow(&kapa2, "psastro:plots")) {
+        isVisual = false;
+        return false;
+    }
+
     //plot the residuals
-    if (!pmVisualResidPlot(rawstars, refstars, match, recipe, "Single Chip Fit Residuals (Chip Coordinates)", &kapa, &kapa2))
-        return false;
+    if (!residPlot(rawstars, refstars, match, recipe, "Single Chip Fit Residuals (Chip Coordinates)")) {
+        plotOneChipFit = false;
+        return false;
+    }
 
     //ask for user input and finish
@@ -504,5 +524,8 @@
     if(!isVisual || !plotFixChips) return true;
 
-    if(!pmVisualInitWindow(&kapa, "psastro:plots")) return false;
+    if(!pmVisualInitWindow(&kapa, "psastro:plots")) {
+        isVisual = false;
+        return false;
+    }
 
     KapaSection section = {"s1", .05, .05, .9, .9};
@@ -586,6 +609,9 @@
 
     //set up graph window
-    if ( !pmVisualInitWindow (&kapa, "psastro:plots"))
-        return false;
+    if ( !pmVisualInitWindow (&kapa, "psastro:plots")) {
+        isVisual = false;
+        return false;
+    }
+
     Graphdata graphdata;
     KapaSection section;
@@ -670,7 +696,10 @@
 {
     //make sure we want to plot this
-    if (!isVisual || !plotCommonScale) return false;
-
-    if (!pmVisualInitWindow(&kapa, "psastro:plots")) return false;
+    if (!isVisual || !plotCommonScale) return true;
+
+    if (!pmVisualInitWindow(&kapa, "psastro:plots")){
+        isVisual = false;
+        return false;
+    }
 
     KapaSection section = {"s1", .05, .05, .9, .9};
@@ -694,4 +723,5 @@
         yVec->data.F32[nobj] = ptFP.y;
         nobj++;
+        if (nobj == oldScale->n) break;
     }
 
@@ -707,4 +737,8 @@
 
     pmVisualAskUser (&plotCommonScale, &isVisual);
+
+    psFree(xVec);
+    psFree(yVec);
+
     return true;
 }
@@ -716,9 +750,16 @@
 
     //make sure we want to plot this
-    if (!isVisual || !plotMosaicOneChip) return false;
+    if (!isVisual || !plotMosaicOneChip) return true;
+
+    if(!pmVisualInitWindow(&kapa, "psastro:plots") || !pmVisualInitWindow(&kapa2, "psastro:plots")) {
+        isVisual = false;
+        return false;
+    }
 
     //plot the residuals
-    if (!pmVisualResidPlot(rawstars, refstars, match, recipe, "Single Chip Fit Residuals - Mosaic Mode", &kapa, &kapa2))
-        return false;
+    if (!residPlot(rawstars, refstars, match, recipe, "Single Chip Fit Residuals - Mosaic Mode")) {
+        isVisual = false;
+        return false;
+    }
 
     //ask for user input and finish
@@ -739,6 +780,14 @@
     sprintf(title, "Matches found during psastroMosaicSetMatch iteration %d", iteration);
 
-    if (!pmVisualResidPlot(rawstars, refstars, match, recipe, title, &kapa, &kapa2))
-        return false;
+
+    if(!pmVisualInitWindow(&kapa, "psastro:plots") || !pmVisualInitWindow(&kapa2, "psastro:plots")) {
+        isVisual = false;
+        return false;
+    }
+
+    if (!residPlot(rawstars, refstars, match, recipe, title)){
+        isVisual = false;
+        return false;
+    }
 
     //ask for user input
@@ -759,6 +808,8 @@
     //make sure we want to plot this
     if (!isVisual || !plotGridMatch) return true;
-    if (!pmVisualInitWindow(&kapa, "pmAstrom:plots"))
-        return false;
+    if (!pmVisualInitWindow(&kapa, "psastro:plots")){
+        isVisual = false;
+        return false;
+    }
 
     KapaSection section = {"s1", 0.05, 0.05, .75, .75};
@@ -768,6 +819,7 @@
     Graphdata graphdata;
     int nplot = raw->n * ref->n;                      // number of points to plot
-    float dXplot[nplot];                              // x data points
-    float dYplot[nplot];                              // y data points
+    psVector *dXplot = psVectorAlloc (nplot, PS_TYPE_F32); // x data points
+    psVector *dYplot = psVectorAlloc (nplot, PS_TYPE_F32); // y data points
+
     pmAstromObj *ob1; pmAstromObj *ob2;               // shortcuts to the data in raw and ref
     psU32 **NP = gridNP->data.U32;                    // shortcut to the gridNP data
@@ -812,6 +864,6 @@
             dX = ob1->FP->x - ob2->FP->x;
             dY = ob1->FP->y - ob2->FP->y;
-            dXplot[(i * ref->n) + j] = dX;
-            dYplot[(i * ref->n) + j] = dY;
+            dXplot->data.F32[(i * ref->n) + j] = dX;
+            dYplot->data.F32[(i * ref->n) + j] = dY;
         }
     }
@@ -835,6 +887,6 @@
     //Plot the offsets
     KapaPrepPlot(kapa, nplot, &graphdata);
-    KapaPlotVector (kapa, nplot, dXplot, "x");
-    KapaPlotVector (kapa, nplot, dYplot, "y");
+    KapaPlotVector (kapa, nplot, dXplot->data.F32, "x");
+    KapaPlotVector (kapa, nplot, dYplot->data.F32, "y");
 
     //Overplot bounding box, peak of distribution
@@ -900,4 +952,6 @@
 
     pmVisualAskUser(&plotGridMatch, &isVisual);
+    psFree(dXplot);
+    psFree(dYplot);
     return true;
 } // end of pmAstromVisualPlotGridMatch
@@ -912,5 +966,6 @@
     //make sure we want to plot this
     if (!isVisual || !plotTweak) return true;
-    if (!pmVisualInitWindow(&kapa, "pmAstrom:plots")) {
+    if (!pmVisualInitWindow(&kapa, "psastro:plots")) {
+        isVisual = false;
         return false;
     }
@@ -1002,4 +1057,285 @@
 } //end of pmAstromPlotTweak
 
+
+bool residPlot (psArray *rawstars, psArray *refstars, psArray *match, psMetadata *recipe,
+                        char *title) {
+
+
+    //initialize graph information
+    Graphdata graphdata;
+    KapaSection section;
+
+    KapaInitGraph (&graphdata);
+    KapaClearPlots (kapa);
+
+    graphdata.color = KapaColorByName ("black");
+    graphdata.ptype = 7;
+    graphdata.size = 0.5;
+    graphdata.style = 2;
+
+    section.dx = 0.4;
+    section.dy = 0.4;
+
+    //initialize and populate the plotting vectors
+    bool status = false;
+    float iMagMin = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.INST.MAG.MIN");
+    float iMagMax = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.INST.MAG.MAX");
+    float rMagMin = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.REF.MAG.MIN");
+    float rMagMax = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.REF.MAG.MAX");
+
+    psVector *xVec = psVectorAlloc (match->n, PS_TYPE_F32);
+    psVector *yVec = psVectorAlloc (match->n, PS_TYPE_F32);
+    psVector *zVec = psVectorAlloc (match->n, PS_TYPE_F32);
+
+    // X vs dX
+    section.x = 0.0;
+    section.y = 0.5;
+    section.name = NULL;
+    psStringAppend (&section.name, "a0");
+    KapaSetSection (kapa, &section);
+    psFree (section.name);
+
+    int n = 0;
+    for (int i = 0; i < match->n; i++) {
+        pmAstromMatch *pair = match->data[i];
+        pmAstromObj *raw = rawstars->data[pair->raw];
+        pmAstromObj *ref = refstars->data[pair->ref];
+
+        if (!isfinite(raw->Mag)) continue;
+        if (raw->Mag < iMagMin) continue;
+        if (raw->Mag > iMagMax) continue;
+        if (ref->Mag < rMagMin) continue;
+        if (ref->Mag > rMagMax) continue;
+
+        xVec->data.F32[n] = raw->chip->x;
+        yVec->data.F32[n] = raw->chip->x - ref->chip->x;
+        zVec->data.F32[n] = raw->Mag;
+        n++;
+    }
+    xVec->n = yVec->n = zVec->n = n;
+
+    KapaSendLabel (kapa, "X", KAPA_LABEL_XM);
+    KapaSendLabel (kapa, "dX", KAPA_LABEL_YM);
+    pmVisualTriplePlot (kapa, &graphdata, xVec, yVec, zVec, false);
+
+    // X vs dY
+    section.x = 0.5;
+    section.y = 0.5;
+    section.name = NULL;
+    psStringAppend (&section.name, "a1");
+    KapaSetSection (kapa, &section);
+    psFree (section.name);
+
+    n = 0;
+    for (int i = 0; i < match->n; i++) {
+        pmAstromMatch *pair = match->data[i];
+        pmAstromObj *raw = rawstars->data[pair->raw];
+        pmAstromObj *ref = refstars->data[pair->ref];
+
+        if (!isfinite(raw->Mag)) continue;
+        if (raw->Mag < iMagMin) continue;
+        if (raw->Mag > iMagMax) continue;
+        if (ref->Mag < rMagMin) continue;
+        if (ref->Mag > rMagMax) continue;
+
+        xVec->data.F32[n] = raw->chip->x;
+        yVec->data.F32[n] = raw->chip->y - ref->chip->y;
+        zVec->data.F32[n] = raw->Mag;
+        n++;
+    }
+    xVec->n = yVec->n = zVec->n = n;
+
+    KapaSendLabel (kapa, "X", KAPA_LABEL_XM);
+    KapaSendLabel (kapa, "dY", KAPA_LABEL_YM);
+    pmVisualTriplePlot (kapa, &graphdata, xVec, yVec, zVec, false);
+
+    // Y vs dX
+    section.x = 0.0;
+    section.y = 0.0;
+    section.name = NULL;
+    psStringAppend (&section.name, "a2");
+    KapaSetSection (kapa, &section);
+    psFree (section.name);
+
+    n = 0;
+    for (int i = 0; i < match->n; i++) {
+        pmAstromMatch *pair = match->data[i];
+        pmAstromObj *raw = rawstars->data[pair->raw];
+        pmAstromObj *ref = refstars->data[pair->ref];
+
+        if (!isfinite(raw->Mag)) continue;
+        if (raw->Mag < iMagMin) continue;
+        if (raw->Mag > iMagMax) continue;
+        if (ref->Mag < rMagMin) continue;
+        if (ref->Mag > rMagMax) continue;
+
+        xVec->data.F32[n] = raw->chip->y;
+        yVec->data.F32[n] = raw->chip->x - ref->chip->x;
+        zVec->data.F32[n] = raw->Mag;
+        n++;
+    }
+    xVec->n = yVec->n = zVec->n = n;
+
+    KapaSendLabel (kapa, "Y", KAPA_LABEL_XM);
+    KapaSendLabel (kapa, "dX", KAPA_LABEL_YM);
+    pmVisualTriplePlot (kapa, &graphdata, xVec, yVec, zVec, false);
+
+    // Y vs dY
+    section.x = 0.5;
+    section.y = 0.0;
+    section.name = NULL;
+    psStringAppend (&section.name, "a3");
+    KapaSetSection (kapa, &section);
+    psFree (section.name);
+
+    n = 0;
+    for (int i = 0; i < match->n; i++) {
+        pmAstromMatch *pair = match->data[i];
+        pmAstromObj *raw = rawstars->data[pair->raw];
+        pmAstromObj *ref = refstars->data[pair->ref];
+
+        if (!isfinite(raw->Mag)) continue;
+        if (raw->Mag < iMagMin) continue;
+        if (raw->Mag > iMagMax) continue;
+        if (ref->Mag < rMagMin) continue;
+        if (ref->Mag > rMagMax) continue;
+
+        xVec->data.F32[n] = raw->chip->y;
+        yVec->data.F32[n] = raw->chip->y - ref->chip->y;
+        zVec->data.F32[n] = raw->Mag;
+        n++;
+    }
+    xVec->n = yVec->n = zVec->n = n;
+
+    KapaSendLabel (kapa, "Y", KAPA_LABEL_XM);
+    KapaSendLabel (kapa, "dY", KAPA_LABEL_YM);
+    pmKapaPlotVectorTriple_AutoLimits_OpenGraph (kapa, &graphdata, xVec, yVec, zVec, false);
+
+    section.x = 0.0;
+    section.y = 0.0;
+    section.dx = 0.95;
+    section.dy = 0.95;
+    section.name = NULL;
+    psStringAppend (&section.name, "a5");
+    KapaSetSection (kapa, &section);
+    KapaSendLabel (kapa, title, KAPA_LABEL_XP);
+    psFree (section.name);
+
+    //second window
+
+    KapaInitGraph (&graphdata);
+    KapaClearPlots (kapa2);
+
+    graphdata.color = KapaColorByName ("black");
+    graphdata.ptype = 2;
+    graphdata.style = 2;
+
+    psFree (xVec);
+    psFree (yVec);
+    psFree (zVec);
+
+    xVec = psVectorAlloc (rawstars->n, PS_TYPE_F32);
+    yVec = psVectorAlloc (rawstars->n, PS_TYPE_F32);
+    zVec = psVectorAlloc (rawstars->n, PS_TYPE_F32);
+
+    // X vs Y by mag (raw)
+    n = 0;
+    for (int i = 0; i < rawstars->n; i++) {
+        pmAstromObj *raw = rawstars->data[i];
+        if (!isfinite(raw->Mag)) continue;
+        if (raw->Mag < iMagMin) continue;
+        if (raw->Mag > iMagMax) continue;
+
+        xVec->data.F32[n] = raw->chip->x;
+        yVec->data.F32[n] = raw->chip->y;
+        zVec->data.F32[n] = raw->Mag;
+        n++;
+    }
+    xVec->n = yVec->n = zVec->n = n;
+
+    KapaSendLabel (kapa2, "X", KAPA_LABEL_XM);
+    KapaSendLabel (kapa2, "Y", KAPA_LABEL_YM);
+    KapaSendLabel (kapa2,
+                   "Chip Coordinates. Black = Raw Stars. Red = Ref Stars. Blue = Matched Stars"
+                   , KAPA_LABEL_XP);
+    pmVisualTriplePlot (kapa2, &graphdata, xVec, yVec, zVec, false);
+
+    // X vs Y by mag (ref)
+    psFree (xVec);
+    psFree (yVec);
+    psFree (zVec);
+
+    xVec = psVectorAlloc (refstars->n, PS_TYPE_F32);
+    yVec = psVectorAlloc (refstars->n, PS_TYPE_F32);
+    zVec = psVectorAlloc (refstars->n, PS_TYPE_F32);
+
+    graphdata.color = KapaColorByName ("red");
+    graphdata.ptype = 7;
+    graphdata.style = 2;
+
+    n = 0;
+    for (int i = 0; i < refstars->n; i++) {
+        pmAstromObj *ref = refstars->data[i];
+        if (!isfinite(ref->Mag)) continue;
+        if (ref->Mag < rMagMin) continue;
+        if (ref->Mag > rMagMax) continue;
+
+        xVec->data.F32[n] = ref->chip->x;
+        yVec->data.F32[n] = ref->chip->y;
+        zVec->data.F32[n] = ref->Mag;
+        n++;
+    }
+    xVec->n = yVec->n = zVec->n = n;
+    pmVisualTripleOverplot (kapa2, &graphdata, xVec, yVec, zVec, false);
+
+    //rescale the graph to include all points
+    float xmin = graphdata.xmin;
+    float ymin = graphdata.ymin;
+    float xmax = graphdata.xmax;
+    float ymax = graphdata.ymax;
+    pmVisualScaleGraphdata(&graphdata, xVec, yVec, true);
+    graphdata.xmin = PS_MIN(xmin, graphdata.xmin);
+    graphdata.ymin = PS_MIN(ymin, graphdata.ymin);
+    graphdata.xmax = PS_MAX(xmax, graphdata.xmax);
+    graphdata.ymax = PS_MAX(ymax, graphdata.ymax);
+    KapaSetLimits (kapa2, &graphdata);
+
+    //overplot matched stars in blue
+    psFree (xVec);
+    psFree (yVec);
+    psFree (zVec);
+
+    xVec = psVectorAlloc (match->n, PS_TYPE_F32);
+    yVec = psVectorAlloc (match->n, PS_TYPE_F32);
+    zVec = psVectorAlloc (match->n, PS_TYPE_F32);
+
+    graphdata.color = KapaColorByName ("blue");
+    n = 0;
+    for (int i = 0; i < match->n; i++) {
+        pmAstromMatch *pair = match->data[i];
+        pmAstromObj *raw = rawstars->data[pair->raw];
+        pmAstromObj *ref = refstars->data[pair->ref];
+        if (raw->Mag < iMagMin) continue;
+        if (raw->Mag > iMagMax) continue;
+        if (ref->Mag < rMagMin) continue;
+        if (ref->Mag > rMagMax) continue;
+
+        xVec->data.F32[n] = raw->chip->x;
+        yVec->data.F32[n] = raw->chip->y;
+        zVec->data.F32[n] = iMagMin;
+        n++;
+    }
+    xVec->n = yVec->n = zVec->n = n;
+    pmVisualTripleOverplot (kapa2, &graphdata, xVec, yVec, zVec, false);
+
+    psFree (xVec);
+    psFree (yVec);
+    psFree (zVec);
+    return true;
+}
+
+
+
+
 # else
 
Index: /branches/cnb_branch_20090113/psModules/src/extras/pmVisual.c
===================================================================
--- /branches/cnb_branch_20090113/psModules/src/extras/pmVisual.c	(revision 21420)
+++ /branches/cnb_branch_20090113/psModules/src/extras/pmVisual.c	(revision 21421)
@@ -33,5 +33,5 @@
         *kapid = KapaOpenNamedSocket("kapa", name);
         if (*kapid == -1) {
-            fprintf (stderr, "failure to open kapa; visual mode disabled.\n");
+            fprintf (stderr, "Failure to open kapa.\n");
             return false;
         }
@@ -181,287 +181,4 @@
 
 
-bool pmVisualResidPlot (psArray *rawstars, psArray *refstars, psArray *match, psMetadata *recipe,
-                        char *title, int *kapa, int *kapa2) {
-
-    //set up the first window
-    if (!pmVisualInitWindow(kapa, "plots")) return false;
-
-    //initialize graph information
-    Graphdata graphdata;
-    KapaSection section;
-
-    KapaInitGraph (&graphdata);
-    KapaClearPlots (*kapa);
-
-    graphdata.color = KapaColorByName ("black");
-    graphdata.ptype = 7;
-    graphdata.size = 0.5;
-    graphdata.style = 2;
-
-    section.dx = 0.4;
-    section.dy = 0.4;
-
-    //initialize and populate the plotting vectors
-    bool status = false;
-    float iMagMin = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.INST.MAG.MIN");
-    float iMagMax = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.INST.MAG.MAX");
-    float rMagMin = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.REF.MAG.MIN");
-    float rMagMax = psMetadataLookupF32 (&status, recipe, "PSASTRO.PLOT.REF.MAG.MAX");
-
-    psVector *xVec = psVectorAlloc (match->n, PS_TYPE_F32);
-    psVector *yVec = psVectorAlloc (match->n, PS_TYPE_F32);
-    psVector *zVec = psVectorAlloc (match->n, PS_TYPE_F32);
-
-    // X vs dX
-    section.x = 0.0;
-    section.y = 0.5;
-    section.name = NULL;
-    psStringAppend (&section.name, "a0");
-    KapaSetSection (*kapa, &section);
-    psFree (section.name);
-
-    int n = 0;
-    for (int i = 0; i < match->n; i++) {
-        pmAstromMatch *pair = match->data[i];
-        pmAstromObj *raw = rawstars->data[pair->raw];
-        pmAstromObj *ref = refstars->data[pair->ref];
-
-        if (!isfinite(raw->Mag)) continue;
-        if (raw->Mag < iMagMin) continue;
-        if (raw->Mag > iMagMax) continue;
-        if (ref->Mag < rMagMin) continue;
-        if (ref->Mag > rMagMax) continue;
-
-        xVec->data.F32[n] = raw->chip->x;
-        yVec->data.F32[n] = raw->chip->x - ref->chip->x;
-        zVec->data.F32[n] = raw->Mag;
-        n++;
-    }
-    xVec->n = yVec->n = zVec->n = n;
-
-    KapaSendLabel (*kapa, "X", KAPA_LABEL_XM);
-    KapaSendLabel (*kapa, "dX", KAPA_LABEL_YM);
-    pmVisualTriplePlot (*kapa, &graphdata, xVec, yVec, zVec, false);
-
-    // X vs dY
-    section.x = 0.5;
-    section.y = 0.5;
-    section.name = NULL;
-    psStringAppend (&section.name, "a1");
-    KapaSetSection (*kapa, &section);
-    psFree (section.name);
-
-    n = 0;
-    for (int i = 0; i < match->n; i++) {
-        pmAstromMatch *pair = match->data[i];
-        pmAstromObj *raw = rawstars->data[pair->raw];
-        pmAstromObj *ref = refstars->data[pair->ref];
-
-        if (!isfinite(raw->Mag)) continue;
-        if (raw->Mag < iMagMin) continue;
-        if (raw->Mag > iMagMax) continue;
-        if (ref->Mag < rMagMin) continue;
-        if (ref->Mag > rMagMax) continue;
-
-        xVec->data.F32[n] = raw->chip->x;
-        yVec->data.F32[n] = raw->chip->y - ref->chip->y;
-        zVec->data.F32[n] = raw->Mag;
-        n++;
-    }
-    xVec->n = yVec->n = zVec->n = n;
-
-    KapaSendLabel (*kapa, "X", KAPA_LABEL_XM);
-    KapaSendLabel (*kapa, "dY", KAPA_LABEL_YM);
-    pmVisualTriplePlot (*kapa, &graphdata, xVec, yVec, zVec, false);
-
-    // Y vs dX
-    section.x = 0.0;
-    section.y = 0.0;
-    section.name = NULL;
-    psStringAppend (&section.name, "a2");
-    KapaSetSection (*kapa, &section);
-    psFree (section.name);
-
-    n = 0;
-    for (int i = 0; i < match->n; i++) {
-        pmAstromMatch *pair = match->data[i];
-        pmAstromObj *raw = rawstars->data[pair->raw];
-        pmAstromObj *ref = refstars->data[pair->ref];
-
-        if (!isfinite(raw->Mag)) continue;
-        if (raw->Mag < iMagMin) continue;
-        if (raw->Mag > iMagMax) continue;
-        if (ref->Mag < rMagMin) continue;
-        if (ref->Mag > rMagMax) continue;
-
-        xVec->data.F32[n] = raw->chip->y;
-        yVec->data.F32[n] = raw->chip->x - ref->chip->x;
-        zVec->data.F32[n] = raw->Mag;
-        n++;
-    }
-    xVec->n = yVec->n = zVec->n = n;
-
-    KapaSendLabel (*kapa, "Y", KAPA_LABEL_XM);
-    KapaSendLabel (*kapa, "dX", KAPA_LABEL_YM);
-    pmVisualTriplePlot (*kapa, &graphdata, xVec, yVec, zVec, false);
-
-    // Y vs dY
-    section.x = 0.5;
-    section.y = 0.0;
-    section.name = NULL;
-    psStringAppend (&section.name, "a3");
-    KapaSetSection (*kapa, &section);
-    psFree (section.name);
-
-    n = 0;
-    for (int i = 0; i < match->n; i++) {
-        pmAstromMatch *pair = match->data[i];
-        pmAstromObj *raw = rawstars->data[pair->raw];
-        pmAstromObj *ref = refstars->data[pair->ref];
-
-        if (!isfinite(raw->Mag)) continue;
-        if (raw->Mag < iMagMin) continue;
-        if (raw->Mag > iMagMax) continue;
-        if (ref->Mag < rMagMin) continue;
-        if (ref->Mag > rMagMax) continue;
-
-        xVec->data.F32[n] = raw->chip->y;
-        yVec->data.F32[n] = raw->chip->y - ref->chip->y;
-        zVec->data.F32[n] = raw->Mag;
-        n++;
-    }
-    xVec->n = yVec->n = zVec->n = n;
-
-    KapaSendLabel (*kapa, "Y", KAPA_LABEL_XM);
-    KapaSendLabel (*kapa, "dY", KAPA_LABEL_YM);
-    pmKapaPlotVectorTriple_AutoLimits_OpenGraph (*kapa, &graphdata, xVec, yVec, zVec, false);
-
-    section.x = 0.0;
-    section.y = 0.0;
-    section.dx = 0.95;
-    section.dy = 0.95;
-    section.name = NULL;
-    psStringAppend (&section.name, "a5");
-    KapaSetSection (*kapa, &section);
-    KapaSendLabel (*kapa, title, KAPA_LABEL_XP);
-    psFree (section.name);
-
-
-    // X vs Y plot (different window)
-    if (!pmVisualInitWindow( kapa2, "psastro:plots"))
-        return false;
-
-    KapaInitGraph (&graphdata);
-    KapaClearPlots (*kapa2);
-
-    graphdata.color = KapaColorByName ("black");
-    graphdata.ptype = 2;
-    graphdata.style = 2;
-
-    psFree (xVec);
-    psFree (yVec);
-    psFree (zVec);
-
-    xVec = psVectorAlloc (rawstars->n, PS_TYPE_F32);
-    yVec = psVectorAlloc (rawstars->n, PS_TYPE_F32);
-    zVec = psVectorAlloc (rawstars->n, PS_TYPE_F32);
-
-    // X vs Y by mag (raw)
-    n = 0;
-    for (int i = 0; i < rawstars->n; i++) {
-        pmAstromObj *raw = rawstars->data[i];
-        if (!isfinite(raw->Mag)) continue;
-        if (raw->Mag < iMagMin) continue;
-        if (raw->Mag > iMagMax) continue;
-
-        xVec->data.F32[n] = raw->chip->x;
-        yVec->data.F32[n] = raw->chip->y;
-        zVec->data.F32[n] = raw->Mag;
-        n++;
-    }
-    xVec->n = yVec->n = zVec->n = n;
-
-    KapaSendLabel (*kapa2, "X", KAPA_LABEL_XM);
-    KapaSendLabel (*kapa2, "Y", KAPA_LABEL_YM);
-    KapaSendLabel (*kapa2,
-                   "Chip Coordinates. Black = Raw Stars. Red = Ref Stars. Blue = Matched Stars"
-                   , KAPA_LABEL_XP);
-    pmVisualTriplePlot (*kapa2, &graphdata, xVec, yVec, zVec, false);
-
-    // X vs Y by mag (ref)
-    psFree (xVec);
-    psFree (yVec);
-    psFree (zVec);
-
-    xVec = psVectorAlloc (refstars->n, PS_TYPE_F32);
-    yVec = psVectorAlloc (refstars->n, PS_TYPE_F32);
-    zVec = psVectorAlloc (refstars->n, PS_TYPE_F32);
-
-    graphdata.color = KapaColorByName ("red");
-    graphdata.ptype = 7;
-    graphdata.style = 2;
-
-    n = 0;
-    for (int i = 0; i < refstars->n; i++) {
-        pmAstromObj *ref = refstars->data[i];
-        if (!isfinite(ref->Mag)) continue;
-        if (ref->Mag < rMagMin) continue;
-        if (ref->Mag > rMagMax) continue;
-
-        xVec->data.F32[n] = ref->chip->x;
-        yVec->data.F32[n] = ref->chip->y;
-        zVec->data.F32[n] = ref->Mag;
-        n++;
-    }
-    xVec->n = yVec->n = zVec->n = n;
-    pmVisualTripleOverplot (*kapa2, &graphdata, xVec, yVec, zVec, false);
-
-    //rescale the graph to include all points
-    float xmin = graphdata.xmin;
-    float ymin = graphdata.ymin;
-    float xmax = graphdata.xmax;
-    float ymax = graphdata.ymax;
-    pmVisualScaleGraphdata(&graphdata, xVec, yVec, true);
-    graphdata.xmin = PS_MIN(xmin, graphdata.xmin);
-    graphdata.ymin = PS_MIN(ymin, graphdata.ymin);
-    graphdata.xmax = PS_MAX(xmax, graphdata.xmax);
-    graphdata.ymax = PS_MAX(ymax, graphdata.ymax);
-    KapaSetLimits (*kapa2, &graphdata);
-
-    //overplot matched stars in blue
-    psFree (xVec);
-    psFree (yVec);
-    psFree (zVec);
-
-    xVec = psVectorAlloc (match->n, PS_TYPE_F32);
-    yVec = psVectorAlloc (match->n, PS_TYPE_F32);
-    zVec = psVectorAlloc (match->n, PS_TYPE_F32);
-
-    graphdata.color = KapaColorByName ("blue");
-    n = 0;
-    for (int i = 0; i < match->n; i++) {
-        pmAstromMatch *pair = match->data[i];
-        pmAstromObj *raw = rawstars->data[pair->raw];
-        pmAstromObj *ref = refstars->data[pair->ref];
-        if (raw->Mag < iMagMin) continue;
-        if (raw->Mag > iMagMax) continue;
-        if (ref->Mag < rMagMin) continue;
-        if (ref->Mag > rMagMax) continue;
-
-        xVec->data.F32[n] = raw->chip->x;
-        yVec->data.F32[n] = raw->chip->y;
-        zVec->data.F32[n] = iMagMin;
-        n++;
-    }
-    xVec->n = yVec->n = zVec->n = n;
-    pmVisualTripleOverplot (*kapa2, &graphdata, xVec, yVec, zVec, false);
-
-    psFree (xVec);
-    psFree (yVec);
-    psFree (zVec);
-    return true;
-}
-
-
 bool pmVisualScaleImage(int kapaFD, psImage *inImage, const char *name, int channel, bool clip) {
 
Index: /branches/cnb_branch_20090113/psModules/src/extras/pmVisual.h
===================================================================
--- /branches/cnb_branch_20090113/psModules/src/extras/pmVisual.h	(revision 21420)
+++ /branches/cnb_branch_20090113/psModules/src/extras/pmVisual.h	(revision 21421)
@@ -77,18 +77,4 @@
 
 
-/** Given a set of matched raw and reference stars, plot the astrometric errors in a number of coordinate systems
- * @param rawStars set or raw stars
- * @param refStars set of reference stars
- * @param match the match between raw and ref stars
- * @param recipe the psastro recipe being used
- * @param title of the plot
- * @param kapa the index of the first kapa window
- * @param kapa2 the index of the second kapa window
- * @returns true for successful completion
- */
-bool pmVisualResidPlot (psArray *rawstars, psArray *refstars, psArray *match,
-                        psMetadata *recipe, char *title, int *kapa, int *kapa2);
-
-
 /** Use x and y data to determine appropriate values for a Graphdata structure.
  * This procedure sets the max and min keywords of a Graphdata structure to encompass
