Index: trunk/archive/scripts/src/phase2/pmFPAConceptsGet.c
===================================================================
--- trunk/archive/scripts/src/phase2/pmFPAConceptsGet.c	(revision 5564)
+++ trunk/archive/scripts/src/phase2/pmFPAConceptsGet.c	(revision 5621)
@@ -344,4 +344,14 @@
 	  case PS_TYPE_S32:
 	    value = item->data.S32;
+	    break;
+	  case PS_TYPE_F32:
+	    psLogMsg(__func__, PS_LOG_WARN, "Concept %s (%s) should be S32, but is F32 --- converting.\n",
+		     name, comment);
+	    value = (int)item->data.F32;
+	    break;
+	  case PS_TYPE_F64:
+	    psLogMsg(__func__, PS_LOG_WARN, "Concept %s (%s) should be S32, but is F64 --- converting.\n",
+		     name, comment);
+	    value = (int)item->data.F64;
 	    break;
 	  default:
@@ -977,4 +987,29 @@
     }
 
+    // These are new and experimental concepts: CELL.X0 and CELL.Y0
+
+    // CELL.X0
+    p_pmFPAConceptGetS32(fpa, chip, cell, db, cell->concepts, "CELL.X0", "Position of (0,0) on the chip ");
+    // CELL.Y0
+    p_pmFPAConceptGetS32(fpa, chip, cell, db, cell->concepts, "CELL.Y0", "Position of (0,0) on the chip");
+    // Add corrective
+    {
+	const psMetadata *camera = fpa->camera;
+	bool mdok = false;		// Result of MD lookup
+	psMetadata *formats = psMetadataLookupMD(&mdok, camera, "FORMATS");
+	if (mdok && formats) {
+	    psString format = psMetadataLookupString(&mdok, formats, "CELL.X0");
+	    if (mdok && strlen(format) > 0 && strcasecmp(format, "FORTRAN") == 0) {
+		psMetadataItem *cellx0 = psMetadataLookup(cell->concepts, "CELL.X0");
+		cellx0->data.S32 -= 1;
+	    }
+	    format = psMetadataLookupString(&mdok, formats, "CELL.Y0");
+	    if (mdok && strlen(format) > 0 && strcasecmp(format, "FORTRAN") == 0) {
+		psMetadataItem *celly0 = psMetadataLookup(cell->concepts, "CELL.Y0");
+		celly0->data.S32 -= 1;
+	    }
+	}
+    }
+
     // Pau.
 }
