Index: trunk/psastro/src/psastroAstromGuess.c
===================================================================
--- trunk/psastro/src/psastroAstromGuess.c	(revision 41895)
+++ trunk/psastro/src/psastroAstromGuess.c	(revision 42289)
@@ -320,13 +320,20 @@
         if (!chip->process || !chip->file_exists || !chip->data_exists) { continue; }
 
-	if (!chip->toFPA || !chip->fromFPA) {
+	// if a chip fails during the calibration, the associated readout->data_exists
+	// gets set to false.  This may be the wrong solution, but it does not break this
+	// analysis here.  Note this is not the chip->data_exists field tested above.
+	// chip->data_exists is only false if the chip data is missing.
+
+	// chip->fromFPA can be NULL if the inversion fails, but I'm not sure
+	// chip->toFPA can be NULL unless it was not in the original model
+	if (!chip->toFPA) {
 	  char *name = psMetadataLookupStr (NULL, chip->concepts, "CHIP.NAME");
 	  fprintf (stderr, "no astrom model for %s, skipping\n", name);
 	  continue;
 	}
-
-        // XXX we are currently inconsistent with marking the good vs the bad data
-        // psastroChipAstrom sets data_exists to false if the fit is bad.  this is
-        // probably wrong since it implies there is no data!
+	if (!chip->fromFPA) {
+	  char *name = psMetadataLookupStr (NULL, chip->concepts, "CHIP.NAME");
+	  fprintf (stderr, "inversion faiulre for %s (%d), will be skipped\n", name, view->chip);
+	}
 
         // skip chips for which the astrometry failed (NASTRO == 0)
@@ -350,4 +357,8 @@
         float astError = psMetadataLookupF32 (&status, updates, "CERROR");
         if (fabs(astError) < 1e-6) goto skip_chip;
+
+	// XXX EAM 2022.09.22 : a more robust analysis would put the corner points
+	// on the chip metadata so we can be certain the old and new corner values
+	// are correctly matched.
 
         psPlane ptCH, ptFP, ptTP;
