Index: /trunk/psastro/src/psastroMaskUpdates.c
===================================================================
--- /trunk/psastro/src/psastroMaskUpdates.c	(revision 23843)
+++ /trunk/psastro/src/psastroMaskUpdates.c	(revision 23844)
@@ -52,4 +52,7 @@
         return false;
     }
+    bool COUNT_GHOSTS = psMetadataLookupF32 (&status, recipe, "REFSTAR_COUNT_GHOSTS");
+    double GHOST_MAX_MAG = psMetadataLookupF32 (&status, recipe, "GHOST_MAX_MAG");
+    int nGhosts = 0;
 
     psLogMsg ("psastro", PS_LOG_INFO, "generating a bright-star mask");
@@ -88,4 +91,5 @@
     REFSTAR_MASK_SATSPIKE_MAG_MAX += MagOffset;
     REFSTAR_MASK_BLEED_MAG_MAX += MagOffset;
+    GHOST_MAX_MAG += MagOffset;
 
     // select the output mask image :: we mosaic to chip mosaic format
@@ -183,4 +187,11 @@
                 for (int i = 0; i < refstars->n; i++) {
                     pmAstromObj *ref = refstars->data[i];
+		    
+		    if (COUNT_GHOSTS) {
+			if (ref->Mag > GHOST_MAX_MAG) {
+			    nGhosts ++;
+			}
+		    }
+
                     if (ref->Mag > REFSTAR_MASK_MAX_MAG) continue;
 
@@ -274,4 +285,15 @@
     if (!pmFPAfileIOChecks (config, view, PM_FPA_AFTER)) ESCAPE;
 
+    if (COUNT_GHOSTS) {
+	// save nGhosts to update header.
+	psMetadata *updates = psMetadataLookupMetadata (&status, fpa->analysis, "PSASTRO.HEADER");
+	if (!updates) {
+	    updates = psMetadataAlloc ();
+	    psMetadataAddMetadata (fpa->analysis, PS_LIST_TAIL, "PSASTRO.HEADER",  PS_META_REPLACE, "psastro header stats", updates);
+	    psFree (updates);
+	}
+	psMetadataAddS32 (updates, PS_LIST_TAIL, "NGHOSTS", PS_META_REPLACE, "total expected ghosts", nGhosts);
+    }
+
     // deactivate all files
     pmFPAfileActivate (config->files, false, NULL);
