Index: /branches/eam_branches/ipp-20120405/Ohana/src/relphot/src/MosaicOps.c
===================================================================
--- /branches/eam_branches/ipp-20120405/Ohana/src/relphot/src/MosaicOps.c	(revision 33827)
+++ /branches/eam_branches/ipp-20120405/Ohana/src/relphot/src/MosaicOps.c	(revision 33828)
@@ -759,7 +759,9 @@
 }
   
-int setMmos_mosaic (Mosaic *mosaic, off_t Nmos, Image *image, Catalog *catalog, SetMmosInfo *info, FlatCorrectionTable *flatcorr) {
-
-  off_t j;
+// 'mosaic' is a pointer to the current mosaic of interest (Nmos)
+int setMmos_mosaic (Mosaic *myMosaic, off_t Nmos, Image *image, Catalog *catalog, SetMmosInfo *info, FlatCorrectionTable *flatcorr) {
+
+  Image *imageReal;
+  off_t j, NimageReal;
   StatType stats;
 
@@ -769,7 +771,12 @@
   double *dMlist = info->dMlist;
 
+  assert (Nmos >= 0);
+  assert (Nmos < Nmosaic);
+
+  imageReal = getimages (&NimageReal, NULL);
+
   /* on PoorImages run, skip good images */
   if (info->PoorImages) {
-    int bad = mosaic[0].flags & (ID_IMAGE_PHOTOM_FEW | ID_IMAGE_PHOTOM_POOR | ID_IMAGE_PHOTOM_SKIP);
+    int bad = myMosaic[0].flags & (ID_IMAGE_PHOTOM_FEW | ID_IMAGE_PHOTOM_POOR | ID_IMAGE_PHOTOM_SKIP);
     if (!bad) return TRUE;
   }      
@@ -777,10 +784,12 @@
   // UBERCAL image: if this is an ubercal image, set minUbercalDist to 0:
   // we optionally do not recalibrate images with UBERCAL zero points 
-  if (mosaic[0].flags & ID_IMAGE_PHOTOM_UBERCAL) {
-    mosaic[0].ubercalDist = 0;
+  if (myMosaic[0].flags & ID_IMAGE_PHOTOM_UBERCAL) {
+    myMosaic[0].ubercalDist = 0;
     // propagate ubercalDist to the images
     for (j = 0; j < MosaicN_Image[Nmos]; j++) {
       off_t im = MosaicToImage[Nmos][j];
-      image[im].ubercalDist = mosaic[0].ubercalDist;
+      assert (im < NimageReal);
+      assert (im >= 0);
+      image[im].ubercalDist = myMosaic[0].ubercalDist;
       // fprintf (stderr, "%d %d %d\n", (int) i, (int) im, image[im].ubercalDist);
     }
@@ -793,5 +802,5 @@
 
   // do not modify the calibration for mosaics with partial images loaded (skipCal TRUE)
-  if (mosaic[0].skipCal) {
+  if (myMosaic[0].skipCal) {
     info->Nskip ++;
     return TRUE;
@@ -799,16 +808,16 @@
 
   int testImage = FALSE;
-  // testImage |= (abs(mosaic[0].start - 1324104046) < 10);
-  // testImage |= (abs(mosaic[0].start - 1324103823) < 10);
-  // testImage |= (abs(mosaic[0].start - 1323003245) < 10);
-  // testImage |= (abs(mosaic[0].start - 1323003069) < 10);
-  // testImage |= (abs(mosaic[0].start - 1323003125) < 10);
-  // testImage |= (abs(mosaic[0].start - 1323003300) < 10);
-  // testImage |= (abs(mosaic[0].start - 1323003365) < 10);
-  // testImage |= (abs(mosaic[0].start - 1323003191) < 10);
-  // testImage |= (abs(mosaic[0].start - 1323003014) < 10);
-  // testImage |= (abs(mosaic[0].start - 1323003484) < 10);
-  // testImage |= (abs(mosaic[0].start - 1323003419) < 10);
-  // testImage |= (abs(mosaic[0].start - 1323002949) < 10);
+  // testImage |= (abs(myMosaic[0].start - 1324104046) < 10);
+  // testImage |= (abs(myMosaic[0].start - 1324103823) < 10);
+  // testImage |= (abs(myMosaic[0].start - 1323003245) < 10);
+  // testImage |= (abs(myMosaic[0].start - 1323003069) < 10);
+  // testImage |= (abs(myMosaic[0].start - 1323003125) < 10);
+  // testImage |= (abs(myMosaic[0].start - 1323003300) < 10);
+  // testImage |= (abs(myMosaic[0].start - 1323003365) < 10);
+  // testImage |= (abs(myMosaic[0].start - 1323003191) < 10);
+  // testImage |= (abs(myMosaic[0].start - 1323003014) < 10);
+  // testImage |= (abs(myMosaic[0].start - 1323003484) < 10);
+  // testImage |= (abs(myMosaic[0].start - 1323003419) < 10);
+  // testImage |= (abs(myMosaic[0].start - 1323002949) < 10);
 
   FILE *fout = NULL;
@@ -887,4 +896,9 @@
 
   skip:
+    assert (N < info->Nmax);
+    assert (N >= 0);
+    assert (Nbright < info->Nmax);
+    assert (Nbright >= 0);
+
     list[N]  = Msys - Mrel - Mcal - Mgrid + Mflat;
     dlist[N] = MAX (catalog[c].measureT[m].dM, MIN_ERROR);
@@ -907,5 +921,5 @@
     if (mark) {
       if (VERBOSE2) { fprintf (stderr, "marked mosaic %s ("OFF_T_FMT"), (%d < %d) || (%d < %f*"OFF_T_FMT")\n", image[MosaicToImage[Nmos][0]].name,  Nmos,  N, IMAGE_TOOFEW,  N, IMAGE_GOOD_FRACTION,  N_onMosaic[Nmos]); }
-      mosaic[0].flags |= ID_IMAGE_PHOTOM_FEW;
+      myMosaic[0].flags |= ID_IMAGE_PHOTOM_FEW;
       info->Nfew ++;
       if (testImage) {
@@ -913,5 +927,5 @@
       }
     } else {
-      mosaic[0].flags &= ~ID_IMAGE_PHOTOM_FEW;
+      myMosaic[0].flags &= ~ID_IMAGE_PHOTOM_FEW;
     }
   }
@@ -919,11 +933,11 @@
   if (VERBOSE2 && info->PoorImages) fprintf (stderr, "Mmos: %f %f %d %d\n", stats.mean, stats.sigma, stats.Nmeas, N);
 
-  mosaic[0].Mcal  = stats.mean;
-  mosaic[0].dMcal = stats.error;
-  mosaic[0].nFitPhotom = N;
-  mosaic[0].Xm    = 100.0*log10(stats.chisq);
+  myMosaic[0].Mcal  = stats.mean;
+  myMosaic[0].dMcal = stats.error;
+  myMosaic[0].nFitPhotom = N;
+  myMosaic[0].Xm    = 100.0*log10(stats.chisq);
 
   if (testImage) {
-    fprintf (stderr, "test image %d (%d) %f %f %d ... ", (int) Nmos, mosaic[0].start, stats.mean, stats.error, mosaic[0].nFitPhotom);
+    fprintf (stderr, "test image %d (%d) %f %f %d ... ", (int) Nmos, myMosaic[0].start, stats.mean, stats.error, myMosaic[0].nFitPhotom);
   }
 
@@ -932,22 +946,22 @@
   // bright end scatter
   liststats (Mlist, dMlist, Nbright, &stats);
-  mosaic[0].dMsys = stats.sigma;
-
-  if (mosaic[0].Mcal < -CLOUD_TOLERANCE) {
-    mosaic[0].Mcal = 0.0;
+  myMosaic[0].dMsys = stats.sigma;
+
+  if (myMosaic[0].Mcal < -CLOUD_TOLERANCE) {
+    myMosaic[0].Mcal = 0.0;
   }
 
   if (testImage) {
-    fprintf (stderr, "%f %f  :  %d %f\n", mosaic[0].Mcal, mosaic[0].dMsys, mosaic[0].Xm, pow(10.0, 0.01*mosaic[0].Xm));
+    fprintf (stderr, "%f %f  :  %d %f\n", myMosaic[0].Mcal, myMosaic[0].dMsys, myMosaic[0].Xm, pow(10.0, 0.01*myMosaic[0].Xm));
   }
 
   // minUbercalDist calculated here is the min value for any star owned by this image
   // since this particular image is tied to that star, bump its distance by 1
-  mosaic[0].ubercalDist = minUbercalDist + 1;
+  myMosaic[0].ubercalDist = minUbercalDist + 1;
 
   // propagate ubercalDist to the images
   for (j = 0; j < MosaicN_Image[Nmos]; j++) {
     off_t im = MosaicToImage[Nmos][j];
-    image[im].ubercalDist = mosaic[0].ubercalDist;
+    image[im].ubercalDist = myMosaic[0].ubercalDist;
     // fprintf (stderr, "%d %d %d\n", (int) i, (int) im, image[im].ubercalDist);
   }
