Index: trunk/psphot/src/psphotMagnitudes.c
===================================================================
--- trunk/psphot/src/psphotMagnitudes.c	(revision 21251)
+++ trunk/psphot/src/psphotMagnitudes.c	(revision 21252)
@@ -19,11 +19,7 @@
     // nThreads = 0; // XXX until testing is complete, do not thread this function
 
+    // if backModel or backStdev are missing, the values of sky and/or skyErr will be set to NAN
     pmReadout *backModel = psphotSelectBackground (config, view);
     pmReadout *backStdev = psphotSelectBackgroundStdev (config, view);
-
-    // XXX require that we have a background model, or
-    // allow it to be missing, setting local sky to 0.0?
-    PS_ASSERT (backModel, false);
-    PS_ASSERT (backStdev, false);
 
     // bit-masks to test for good/bad pixels
@@ -42,5 +38,4 @@
     // the binning details are saved on the analysis metadata
     psImageBinning *binning = psMetadataLookupPtr(&status, recipe, "PSPHOT.BACKGROUND.BINNING");
-    PS_ASSERT (status, false);
 
     bool IGNORE_GROWTH = psMetadataLookupBool (&status, recipe, "IGNORE_GROWTH");
@@ -128,13 +123,23 @@
         if (status && isfinite(source->apMag)) Nap ++;
 
-        source->sky = psImageUnbinPixel(source->peak->x, source->peak->y, backModel->image, binning);
-        if (isnan(source->sky) && false) {
-	    psLogMsg ("psphot.magnitudes", PS_LOG_DETAIL, "error setting pmSource.sky");
-        }
+	if (backModel) {
+	    psAssert (binning, "if backModel is defined, so should binning be");
+	    source->sky = psImageUnbinPixel(source->peak->x, source->peak->y, backModel->image, binning);
+	    if (isnan(source->sky) && false) {
+		psLogMsg ("psphot.magnitudes", PS_LOG_DETAIL, "error setting pmSource.sky");
+	    }
+	} else {
+	    source->sky = NAN;
+	}
 
-        source->skyErr = psImageUnbinPixel(source->peak->x, source->peak->y, backStdev->image, binning);
-        if (isnan(source->skyErr) && false) {
-	    psLogMsg ("psphot.magnitudes", PS_LOG_DETAIL, "error setting pmSource.skyErr");
-        }
+	if (backStdev) {
+	    psAssert (binning, "if backStdev is defined, so should binning be");
+	    source->skyErr = psImageUnbinPixel(source->peak->x, source->peak->y, backStdev->image, binning);
+	    if (isnan(source->skyErr) && false) {
+		psLogMsg ("psphot.magnitudes", PS_LOG_DETAIL, "error setting pmSource.skyErr");
+	    }
+	} else {
+	    source->skyErr = NAN;
+	}
     }
 
