Index: /trunk/ppSim/src/ppSim.h
===================================================================
--- /trunk/ppSim/src/ppSim.h	(revision 41330)
+++ /trunk/ppSim/src/ppSim.h	(revision 41331)
@@ -188,4 +188,5 @@
 
 float ppSimGetZeroPoint(psMetadata *recipe, const char *filter);
+float ppSimGetSkyRate(psMetadata *recipe);
 
 bool ppSimMergeReadouts (pmConfig *config, pmFPAview *view);
Index: /trunk/ppSim/src/ppSimInsertStars.c
===================================================================
--- /trunk/ppSim/src/ppSimInsertStars.c	(revision 41330)
+++ /trunk/ppSim/src/ppSimInsertStars.c	(revision 41331)
@@ -41,14 +41,9 @@
     }
 
-    float skyRate = psMetadataLookupF32(NULL, recipe, "SKY.RATE"); // Sky rate
-    if (isnan(skyRate)) {
-        float zp      = psMetadataLookupF32(&mdok, recipe, "ZEROPOINT"); assert (mdok);
-        float scale   = psMetadataLookupF32(&mdok, recipe, "PIXEL.SCALE");     assert (mdok);
-        float skyMags = psMetadataLookupF32(&mdok, recipe, "SKY.MAGS");  assert (mdok);
-        skyRate = scale * scale * ppSimMagToFlux (skyMags, zp);
-    }
+    float skyRate = ppSimGetSkyRate (recipe);
 
     // Rough noise estimate, appropriate for entire cell (use for source radius?)
     float roughNoise = sqrtf(PS_SQR(readnoise) + (darkRate + skyRate) * expTime);
+    float skyFlux = skyRate*expTime;
 
     int x0Chip = psMetadataLookupS32(NULL, chip->concepts, "CHIP.X0");
@@ -165,4 +160,7 @@
 	fprintf (outfile, "%8.3f %8.3f %10.5f  %2d  %7.3f %5.3f  %5.3f %5.3f %5.3f %5.3f  :  %f %f\n", star->x, star->y, starFlux, 0, source->psfMag, source->psfMagErr, axes.major, axes.minor, axes.theta, par8, model->params->data.F32[PM_PAR_I0], radius);
 
+	// save the approx sky (exact if sky is flat) for external comparisons
+	source->sky = skyFlux;
+
 	// add the sources to the source array
 	psArrayAdd (sources, 100,source);
Index: /trunk/ppSim/src/ppSimMakeSky.c
===================================================================
--- /trunk/ppSim/src/ppSimMakeSky.c	(revision 41330)
+++ /trunk/ppSim/src/ppSimMakeSky.c	(revision 41331)
@@ -26,14 +26,6 @@
     float shutterTime  = psMetadataLookupF32(&status, recipe, "SHUTTER.TIME"); // Shutter time
     float scatterFrac  = psMetadataLookupF32(&status, recipe, "SCATTER.FRAC"); // scattered light fraction (max)
-    float skyRate      = psMetadataLookupF32(&status, recipe, "SKY.RATE"); // Sky rate
-    float skyMags      = psMetadataLookupF32(&status, recipe, "SKY.MAGS");  assert (status);
-    if (!isnan(skyMags)) {
-        float zp       = psMetadataLookupF32(&status, recipe, "ZEROPOINT"); assert (status);
-        float scale    = psMetadataLookupF32(&status, recipe, "PIXEL.SCALE"); assert (status);
-        skyRate = scale * scale * ppSimMagToFlux (skyMags, zp);
-    }
-    if (type == PPSIM_TYPE_FLAT) {
-      skyRate = flatRate;
-    }
+
+    float skyRate      = (type == PPSIM_TYPE_FLAT) ? flatRate : ppSimGetSkyRate (recipe);
 
     int x0Chip        = psMetadataLookupS32(&status, chip->concepts, "CHIP.X0");
Index: /trunk/ppSim/src/ppSimMakeStars.c
===================================================================
--- /trunk/ppSim/src/ppSimMakeStars.c	(revision 41330)
+++ /trunk/ppSim/src/ppSimMakeStars.c	(revision 41331)
@@ -39,13 +39,8 @@
     if (isnan(scale))    ESCAPE("PIXEL.SCALE is not defined");
 
-    bool flatLum       = psMetadataLookupBool(&status,recipe, "STARS.FLAT.LUM"); // were real stars generated?
-    float flatNum      = psMetadataLookupS32(&status, recipe, "STARS.FLAT.NUM"); // were real stars generated?
+    bool flatLum       = psMetadataLookupBool(&status,recipe, "STARS.FLAT.LUM"); // use a flat luminosity function? (dn/dmag = const)
+    float flatNum      = psMetadataLookupS32(&status, recipe, "STARS.FLAT.NUM"); // amplitude of flat luminosity function
 
-    float skyRate = psMetadataLookupF32(&status, recipe, "SKY.RATE"); // Sky rate
-    if (isnan(skyRate)) {
-	float skyMags = psMetadataLookupF32(&status, recipe, "SKY.MAGS");  assert (status);
-	skyRate = scale * scale * ppSimMagToFlux (skyMags, zp);
-	// skyMags is in mags / square arcsec, so scale must be in arcsec / pixel
-    }
+    float skyRate = ppSimGetSkyRate (recipe);
 
     // Size of FPA
Index: /trunk/ppSim/src/ppSimUtils.c
===================================================================
--- /trunk/ppSim/src/ppSimUtils.c	(revision 41330)
+++ /trunk/ppSim/src/ppSimUtils.c	(revision 41331)
@@ -272,4 +272,18 @@
 }
 
+float ppSimGetSkyRate (psMetadata *recipe) {
+
+  bool status; 
+
+  float skyRate      = psMetadataLookupF32(&status, recipe, "SKY.RATE"); // Sky rate
+  if (!isnan(skyRate)) {
+    float zp       = psMetadataLookupF32(&status, recipe, "ZEROPOINT");   assert (status);
+    float scale    = psMetadataLookupF32(&status, recipe, "PIXEL.SCALE"); assert (status);
+    float skyMags  = psMetadataLookupF32(&status, recipe, "SKY.MAGS");    assert (status);
+    skyRate = scale * scale * ppSimMagToFlux (skyMags, zp);
+  }
+  return skyRate;
+}
+
 psArray *ppSimSelectSources (pmConfig *config, const pmFPAview *view, const char *filename) {
 
