Index: /trunk/Ohana/src/addstar/src/gimages.c
===================================================================
--- /trunk/Ohana/src/addstar/src/gimages.c	(revision 5384)
+++ /trunk/Ohana/src/addstar/src/gimages.c	(revision 5385)
@@ -1,3 +1,4 @@
 # include "addstar.h"
+void SetImageCorners (double *X, double *Y, Image *image);
 
 /* given image, find catalog images which overlap it */
@@ -8,6 +9,6 @@
   Image *timage, *pimage;
   Coords tcoords;
-  double r, d;
-  double Xi[5], Yi[5], Xo[5], Yo[5];  /* image and original corners */
+  double r, d, x, y;
+  double Xb[5], Yb[5], Xi[5], Yi[5], Xo[5], Yo[5];  /* image and original corners */
   double zeropt;
 
@@ -54,9 +55,7 @@
 
   /* define original corners */
-  Xo[0] = 0;           Yo[0] = 0;
-  Xo[1] = image[0].NX; Yo[1] = 0;
-  Xo[2] = image[0].NX; Yo[2] = image[0].NY;
-  Xo[3] = 0;           Yo[3] = image[0].NY;
-  Xo[4] = 0;           Yo[4] = 0;  /* so we can make a loop easily */
+  SetImageCorners (Xo, Yo, &image[0]);
+  Xo[4] = Xo[0]; Yo[4] = Yo[0];  /* so we can make a loop easily */
+
   for (j = 0; j < 5; j++) {
     /* XY-to_RD is two-level if ctype == WRP */
@@ -82,10 +81,8 @@
 
     addtolist = FALSE;
+
     /* define image corners */
-    Xi[0] = 0;            Yi[0] = 0;
-    Xi[1] = timage[i].NX; Yi[1] = 0;
-    Xi[2] = timage[i].NX; Yi[2] = timage[i].NY;
-    Xi[3] = 0;            Yi[3] = timage[i].NY;
-    Xi[4] = 0;            Yi[4] = 0;  /* so we can make a loop easily */
+    SetImageCorners (Xi, Yi, &timage[i]);
+    Xi[4] = Xi[0]; Yi[4] = Yi[0];
     /* transform to tcoords */
     for (j = 0; j < 5; j++) {
@@ -94,5 +91,4 @@
     }
     /* check if any edges cross */
-    /* not every robust - images must be close in size */
     for (j = 0; (j < 4) && !addtolist; j++) {
       for (k = 0; (k < 4) && !addtolist; k++) {
@@ -100,4 +96,30 @@
       }
     }
+    
+    /* note that 0,0 is a valid pixel for both DIS and !DIS */
+    /* if no edges cross, check if 0,0 pixel of timage[i] is inside image[0] */
+    SetImageCorners (Xb, Yb, &image[0]);
+    if (!addtolist) {
+      XY_to_RD (&r, &d, 0.0, 0.0, &timage[i].coords);
+      RD_to_XY (&x, &y, r, d, &image[0].coords);
+      addtolist = TRUE;
+      addtolist &= (x < Xb[0]);
+      addtolist &= (y < Yb[0]);
+      addtolist &= (x > Xb[2]);
+      addtolist &= (y > Yb[2]);
+    }
+
+    /* if no edges cross, check if one corner of image[0] is inside timage[i] */
+    SetImageCorners (Xb, Yb, &timage[i]);
+    if (!addtolist) {
+      XY_to_RD (&r, &d, 0.0, 0.0, &image[0].coords);
+      RD_to_XY (&x, &y, r, d, &timage[i].coords);
+      addtolist = TRUE;
+      addtolist &= (x < Xb[0]);
+      addtolist &= (y < Yb[0]);
+      addtolist &= (x > Xb[2]);
+      addtolist &= (y > Yb[2]);
+    }
+
     if (addtolist) {
       pimage[npimage] = timage[i];
@@ -130,2 +152,17 @@
 
 */
+
+void SetImageCorners (double *X, double *Y, Image *image) {
+
+  if (!strcmp(&image[0].coords.ctype[4], "-DIS")) {
+    X[0] = -0.5*image[0].NX; Y[0] = -0.5*image[0].NY;
+    X[1] = +0.5*image[0].NX; Y[1] = -0.5*image[0].NY;
+    X[2] = +0.5*image[0].NX; Y[2] = +0.5*image[0].NY;
+    X[3] = -0.5*image[0].NX; Y[3] = +0.5*image[0].NY;
+  } else {
+    X[0] = 0;           Y[0] = 0;
+    X[1] = image[0].NX; Y[1] = 0;
+    X[2] = image[0].NX; Y[2] = image[0].NY;
+    X[3] = 0;           Y[3] = image[0].NY;
+  }
+}
