Index: trunk/ppTranslate/src/ppMops.h
===================================================================
--- trunk/ppTranslate/src/ppMops.h	(revision 34649)
+++ trunk/ppTranslate/src/ppMops.h	(revision 34650)
@@ -59,4 +59,5 @@
   psVector *raExtErr, *decExtErr;     // Error in sky coordinates for RA_EXT and DEC_EXT
   psVector *mask;                     // Mask for detections
+    float platescale; //Plate scale at centroid
 } ppMopsDetections;
 
Index: trunk/ppTranslate/src/ppMopsRead.c
===================================================================
--- trunk/ppTranslate/src/ppMopsRead.c	(revision 34649)
+++ trunk/ppTranslate/src/ppMopsRead.c	(revision 34650)
@@ -37,8 +37,8 @@
  *
  * Look for "DIRTY_BUG_FIX" to know where
- * 
+ *
  * and set the following to 0 to change the code
  */
-#define DIRTY_BUG_FIX 1
+#define DIRTY_BUG_FIX 0
 /*
  *
@@ -145,9 +145,9 @@
     if (skyChipPsfVersion != args->version) {
       if (skyChipPsfVersion > args->version) {
-	psWarning("The FITS data will be downgraded from PS1_DV%d to PS1_DV%d\n",
-		  skyChipPsfVersion, args->version);
+        psWarning("The FITS data will be downgraded from PS1_DV%d to PS1_DV%d\n",
+                  skyChipPsfVersion, args->version);
       } else { // Necessarily: skyChipPsfVersion > args->version
-	psWarning("The FITS data will be upgraded from PS1_DV%d to PS1_DV%d (new values set to default 0, NaN...)\n",
-		  skyChipPsfVersion, args->version);
+        psWarning("The FITS data will be upgraded from PS1_DV%d to PS1_DV%d (new values set to default 0, NaN...)\n",
+                  skyChipPsfVersion, args->version);
       }
     }
@@ -199,63 +199,63 @@
       addDummyValues(det->table, size, args->version);
       if (!psFitsMoveExtName(fits, "SkyChip.xfit")) {
-	psTrace("ppMops.read", 3, "No fitted trails extension");
+        psTrace("ppMops.read", 3, "No fitted trails extension");
       } else {
-	psTrace("ppMops.read", 3, "Fitted trails extension found\n");
-	psTrace("ppMops.read", 10, "Getting size?\n");
-	int fittedTrailsSize = psFitsTableSize(fits);
-	psTrace("ppMops.read", 10, "size = %d\n", fittedTrailsSize);
-	if (fittedTrailsSize <= 0) {
-	  psErrorStackPrint(stderr, "Unable to determine size of fitted trails extension table %d", i);
-	  psTrace("ppMops.read", 3, "No entry in fitted trails extension!!!!\n");
-	  psErrorClear();
-	} else {
-	  psTrace("ppMops.read", 10, "Reading table of interest?\n");
-	  psMetadata* fittedTrails = psFitsReadTableAllColumns(fits); // Table of interest
-	  psTrace("ppMops.read", 10, "OK for table of interest\n");
-	  if (!fittedTrails) {
-	    psError(PS_ERR_IO, false, "Unable to read fittedTrails table in file %d", i);
-	    return NULL;
-	  }
-	  //Iterate on the different names and types expected in the fittedTrails parameters
-	  psTrace("ppMops.read", 10, "Getting IPP_IDET\n");
-	  psVector* idet = psMetadataLookupVector(NULL, fittedTrails, "IPP_IDET");
-	  replaceDummyValuesF32("X_EXT", fittedTrails, det->table, idet);
-	  replaceDummyValuesF32("Y_EXT", fittedTrails, det->table, idet);
-	  replaceDummyValuesF32("X_EXT_SIG", fittedTrails, det->table, idet);
-	  replaceDummyValuesF32("Y_EXT_SIG", fittedTrails, det->table, idet);
-	  replaceDummyValuesF32("EXT_INST_MAG",  fittedTrails, det->table, idet);
-	  replaceDummyValuesF32("EXT_INST_MAG_SIG",  fittedTrails, det->table, idet);
-	  replaceDummyValuesS32("NPARAMS",  fittedTrails, det->table, idet);
-	  replaceDummyValuesF32("EXT_WIDTH_MAJ",  fittedTrails, det->table, idet);
-	  replaceDummyValuesF32("EXT_WIDTH_MIN",  fittedTrails, det->table, idet);
-	  replaceDummyValuesF32("EXT_THETA",  fittedTrails, det->table, idet);
-	  replaceDummyValuesF32("EXT_WIDTH_MAJ_ERR",  fittedTrails, det->table, idet);
-	  // EXT_WIDTH_MIN_ERR is actually undefined but set to 0. in CMF files
-	  // We explicitely let it set to NaN, hence the commented out
-	  // following line
-	  //replaceDummyValuesF32("EXT_WIDTH_MIN_ERR",  fittedTrails, det->table, idet);
-	  replaceDummyValuesF32("EXT_THETA_ERR",  fittedTrails, det->table, idet);
-	  psTrace("ppMops.read", 10, "Got all version 2 values\n");
-	  if (skyChipPsfVersion >= 3) {
-	    psTrace("ppMops.read", 10, "Getting PS1_DV3 data\n");
-	    replaceDummyValuesF32("RA_EXT",  fittedTrails, det->table, idet);
-	    // Note: RA_EXT_SIGMA is computed (see det->raExtErr)
-	    replaceDummyValuesF32("DEC_EXT",  fittedTrails, det->table, idet);
-	    // Note: DEC_EXT_SIGMA is computed (see det->decExtErr)
-	    //Note: POSANG_EXT is POSANGLE in xfit
+        psTrace("ppMops.read", 3, "Fitted trails extension found\n");
+        psTrace("ppMops.read", 10, "Getting size?\n");
+        int fittedTrailsSize = psFitsTableSize(fits);
+        psTrace("ppMops.read", 10, "size = %d\n", fittedTrailsSize);
+        if (fittedTrailsSize <= 0) {
+          psErrorStackPrint(stderr, "Unable to determine size of fitted trails extension table %d", i);
+          psTrace("ppMops.read", 3, "No entry in fitted trails extension!!!!\n");
+          psErrorClear();
+        } else {
+          psTrace("ppMops.read", 10, "Reading table of interest?\n");
+          psMetadata* fittedTrails = psFitsReadTableAllColumns(fits); // Table of interest
+          psTrace("ppMops.read", 10, "OK for table of interest\n");
+          if (!fittedTrails) {
+            psError(PS_ERR_IO, false, "Unable to read fittedTrails table in file %d", i);
+            return NULL;
+          }
+          //Iterate on the different names and types expected in the fittedTrails parameters
+          psTrace("ppMops.read", 10, "Getting IPP_IDET\n");
+          psVector* idet = psMetadataLookupVector(NULL, fittedTrails, "IPP_IDET");
+          replaceDummyValuesF32("X_EXT", fittedTrails, det->table, idet);
+          replaceDummyValuesF32("Y_EXT", fittedTrails, det->table, idet);
+          replaceDummyValuesF32("X_EXT_SIG", fittedTrails, det->table, idet);
+          replaceDummyValuesF32("Y_EXT_SIG", fittedTrails, det->table, idet);
+          replaceDummyValuesF32("EXT_INST_MAG",  fittedTrails, det->table, idet);
+          replaceDummyValuesF32("EXT_INST_MAG_SIG",  fittedTrails, det->table, idet);
+          replaceDummyValuesS32("NPARAMS",  fittedTrails, det->table, idet);
+          replaceDummyValuesF32("EXT_WIDTH_MAJ",  fittedTrails, det->table, idet);
+          replaceDummyValuesF32("EXT_WIDTH_MIN",  fittedTrails, det->table, idet);
+          replaceDummyValuesF32("EXT_THETA",  fittedTrails, det->table, idet);
+          replaceDummyValuesF32("EXT_WIDTH_MAJ_ERR",  fittedTrails, det->table, idet);
+          // EXT_WIDTH_MIN_ERR is actually undefined but set to 0. in CMF files
+          // We explicitely let it set to NaN, hence the commented out
+          // following line
+          //replaceDummyValuesF32("EXT_WIDTH_MIN_ERR",  fittedTrails, det->table, idet);
+          replaceDummyValuesF32("EXT_THETA_ERR",  fittedTrails, det->table, idet);
+          psTrace("ppMops.read", 10, "Got all version 2 values\n");
+          if (skyChipPsfVersion >= 3) {
+            psTrace("ppMops.read", 10, "Getting PS1_DV3 data\n");
+            replaceDummyValuesF32("RA_EXT",  fittedTrails, det->table, idet);
+            // Note: RA_EXT_SIGMA is computed (see det->raExtErr)
+            replaceDummyValuesF32("DEC_EXT",  fittedTrails, det->table, idet);
+            // Note: DEC_EXT_SIGMA is computed (see det->decExtErr)
+            //Note: POSANG_EXT is POSANGLE in xfit
 #if DIRTY_BUG_FIX
 #else
- 	    renameDummyValuesF32("POSANGLE",  fittedTrails, "POSANG_EXT", det->table, idet);
-#endif    
-	    //Note: PLTSCALE_EXT in xfit is PLTSCALE
- 	    renameDummyValuesF32("PLTSCALE", fittedTrails, "PLTSCALE_EXT", det->table, idet);
-	    renameDummyValuesF32("EXT_INST_FLUX", fittedTrails, "EXT_FLUX", det->table, idet);
-	    replaceDummyValuesF32("EXT_CAL_MAG", fittedTrails, det->table, idet);
-	    renameDummyValuesF32("EXT_INST_MAG_SIG", fittedTrails, "EXT_MAG_SIG", det->table, idet);
-	    replaceDummyValuesF32("EXT_CHISQ", fittedTrails, det->table, idet);
-	    replaceDummyValuesS32("EXT_NDOF", fittedTrails, det->table, idet);
-	    psTrace("ppMops.read", 10, "Got all version 3 values\n");
-	  }
-	}
+            renameDummyValuesF32("POSANGLE",  fittedTrails, "POSANG_EXT", det->table, idet);
+#endif
+            //Not written anymore but still used in computation
+            renameDummyValuesF32("PLTSCALE", fittedTrails, "PLTSCALE_EXT", det->table, idet);
+            renameDummyValuesF32("EXT_INST_FLUX", fittedTrails, "EXT_FLUX", det->table, idet);
+            replaceDummyValuesF32("EXT_CAL_MAG", fittedTrails, det->table, idet);
+            renameDummyValuesF32("EXT_INST_MAG_SIG", fittedTrails, "EXT_MAG_SIG", det->table, idet);
+            replaceDummyValuesF32("EXT_CHISQ", fittedTrails, det->table, idet);
+            replaceDummyValuesS32("EXT_NDOF", fittedTrails, det->table, idet);
+            psTrace("ppMops.read", 10, "Got all version 3 values\n");
+          }
+        }
       }
     }
@@ -264,5 +264,5 @@
     if (args->version == 0) {
       if (skyChipPsfVersion < 2) {
-	// XXX: TODO: Do we need to add dummy vectors for the missing columns?
+        // XXX: TODO: Do we need to add dummy vectors for the missing columns?
       }
     }
@@ -324,7 +324,7 @@
       psU32 flags = flagsV->data.U32[row]; // psFitsTableGetU32(NULL, table, row, "FLAGS");
       if (flags & SOURCE_MASK) {
-	psTrace("ppMops.read", 10, "Discarding row %ld from input %d because of flags: %ud", row, i, flags);
-	det->mask->data.U8[row] = 0xFF;
-	continue;
+        psTrace("ppMops.read", 10, "Discarding row %ld from input %d because of flags: %ud", row, i, flags);
+        det->mask->data.U8[row] = 0xFF;
+        continue;
       }
 
@@ -340,17 +340,17 @@
 
       if (!isfinite(det->x->data.F32[row]) || !isfinite(det->y->data.F32[row]) ||
-	  !isfinite(det->ra->data.F64[row]) || !isfinite(det->dec->data.F64[row]) ||
-	  !isfinite(mag->data.F32[row]) || !isfinite(magErr->data.F32[row]) ||
-	  !isfinite(xErr) || !isfinite(yErr) || !isfinite(scale) || !isfinite(angle)) {
-	psTrace("ppMops.read", 10,
-		"Discarding row %ld from input %d because of non-finite values: "
-		"%f %f %lf %lf %f %f %f %f %f %f",
-		row, i,
-		det->x->data.F32[row], det->y->data.F32[row],
-		det->ra->data.F64[row], det->dec->data.F64[row],
-		mag->data.F32[row], magErr->data.F32[row],
-		xErr, yErr, scale, angle);
-	det->mask->data.U8[row] = 0xFF;
-	continue;
+          !isfinite(det->ra->data.F64[row]) || !isfinite(det->dec->data.F64[row]) ||
+          !isfinite(mag->data.F32[row]) || !isfinite(magErr->data.F32[row]) ||
+          !isfinite(xErr) || !isfinite(yErr) || !isfinite(scale) || !isfinite(angle)) {
+        psTrace("ppMops.read", 10,
+                "Discarding row %ld from input %d because of non-finite values: "
+                "%f %f %lf %lf %f %f %f %f %f %f",
+                row, i,
+                det->x->data.F32[row], det->y->data.F32[row],
+                det->ra->data.F64[row], det->dec->data.F64[row],
+                mag->data.F32[row], magErr->data.F32[row],
+                xErr, yErr, scale, angle);
+        det->mask->data.U8[row] = 0xFF;
+        continue;
       }
 
@@ -368,21 +368,23 @@
       // Same for EXT data if version permits
       if (skyChipPsfVersion >= 3) {
-	xErr = xExtErrV->data.F32[row];
-	yErr = yExtErrV->data.F32[row];
-	scale = scaleExtV->data.F32[row]/3600.;
-#if DIRTY_BUG_FIX
-	angle = 0.;
+        xErr = xExtErrV->data.F32[row];
+        yErr = yExtErrV->data.F32[row];
+        scale = scaleExtV->data.F32[row]/3600.;
+#if DIRTY_BUG_FIX
+        angle = 0.;
 #else
-	angle = angleExtV->data.F32[row];
-#endif
-	cosAngle = cos(angle);
-	sinAngle = sin(angle);
-	cosAngle2 = PS_SQR(cosAngle);
-	sinAngle2 = PS_SQR(sinAngle);
-	xErr2 = PS_SQR(xErr);
-	yErr2 = PS_SQR(yErr);
-	errScale = scale / 3600.0;
-	det->raExtErr->data.F64[row] = errScale * sqrt(cosAngle2 * xErr2 + sinAngle2 * yErr2);
-	det->decExtErr->data.F64[row] = errScale * sqrt(sinAngle2 * xErr2 + cosAngle2 * yErr2);
+        angle = angleExtV->data.F32[row];
+#endif
+        cosAngle = cos(angle);
+        sinAngle = sin(angle);
+        cosAngle2 = PS_SQR(cosAngle);
+        sinAngle2 = PS_SQR(sinAngle);
+        xErr2 = PS_SQR(xErr);
+        yErr2 = PS_SQR(yErr);
+        errScale = scale / 3600.0;
+        det->raExtErr->data.F64[row] = errScale * sqrt(cosAngle2 * xErr2 + sinAngle2 * yErr2);
+        det->decExtErr->data.F64[row] = errScale * sqrt(sinAngle2 * xErr2 + cosAngle2 * yErr2);
+        //Update the platescale value (should be a constant)
+        det->platescale = scale;
       }
     }
@@ -413,7 +415,8 @@
 }
 #endif
+
 static psVector* createDummyS32(long size) {
   psVector* dummy = psVectorAlloc(size, PS_TYPE_S32);
-  psVectorInit(dummy, NAN);
+  psVectorInit(dummy, 0);
   return dummy;
 }
Index: trunk/ppTranslate/src/ppMopsWrite.c
===================================================================
--- trunk/ppTranslate/src/ppMopsWrite.c	(revision 34649)
+++ trunk/ppTranslate/src/ppMopsWrite.c	(revision 34650)
@@ -85,4 +85,5 @@
   psMetadataAddF32(header, PS_LIST_TAIL, "SKY", 0, "Exposure avg sky background", args->sky);
   psMetadataAddStr(header, PS_LIST_TAIL, "SHUTOUTC", 0, "Camera exposure shutter open (UTC)", args->shutoutc);
+  psMetadataAddF32(header, PS_LIST_TAIL, "PLTSCALE_EXT", 0, "Plate scale at centroid", det->platescale);
 
   //field in header that tells about the CMF version
@@ -92,5 +93,4 @@
 
   // Find the total number of detections
-
   long total = 0;
   for (long i=0; i<detections->n; i++) {
@@ -191,27 +191,25 @@
                      0);
       if (args->version == 3) {
-	// Write data of version 3 (see ICD)
-	psMetadataAdd (row, PS_LIST_TAIL, "RA_EXT",         PS_DATA_F32, "Fitted centroid RA", 
-		       0);
- 	psMetadataAdd (row, PS_LIST_TAIL, "RA_EXT_SIGMA",   PS_DATA_F32, "Fitted RA sigma", 
-		       0);
-	psMetadataAdd (row, PS_LIST_TAIL, "DEC_EXT",        PS_DATA_F32, "Fitted centroid DEC", 
-		       0);
- 	psMetadataAdd (row, PS_LIST_TAIL, "DEC_EXT_SIGMA",  PS_DATA_F32, "Fitted DEC sigma", 
-		       0);
- 	psMetadataAdd (row, PS_LIST_TAIL, "POSANG_EXT",     PS_DATA_F32, "Fitted position angle", 
-		       0);
- 	psMetadataAdd (row, PS_LIST_TAIL, "PLTSCALE_EXT",   PS_DATA_F32, "Plate scale at centroid", 
-		       0);
- 	psMetadataAdd (row, PS_LIST_TAIL, "EXT_FLUX",       PS_DATA_F32, "Fitted flux", 
-		       0);
- 	psMetadataAdd (row, PS_LIST_TAIL, "EXT_CAL_MAG",    PS_DATA_F32, "Calibrated mag", 
-		       0);
- 	psMetadataAdd (row, PS_LIST_TAIL, "EXT_MAG_SIG",    PS_DATA_F32, "Mag sigma", 
-		       0);
- 	psMetadataAdd (row, PS_LIST_TAIL, "EXT_CHISQ",      PS_DATA_F32, "Chi^2 of fit", 
-		       0);
- 	psMetadataAdd (row, PS_LIST_TAIL, "EXT_NDOF",       PS_DATA_F32, "Fit degrees of freedom", 
-		       0);
+// Write data of version 3 (see ICD)
+        psMetadataAdd (row, PS_LIST_TAIL, "RA_EXT",         PS_DATA_F32, "Fitted centroid RA",
+                       0);
+        psMetadataAdd (row, PS_LIST_TAIL, "RA_EXT_SIGMA",   PS_DATA_F32, "Fitted RA sigma",
+                       0);
+        psMetadataAdd (row, PS_LIST_TAIL, "DEC_EXT",        PS_DATA_F32, "Fitted centroid DEC",
+                       0);
+        psMetadataAdd (row, PS_LIST_TAIL, "DEC_EXT_SIGMA",  PS_DATA_F32, "Fitted DEC sigma",
+                       0);
+        psMetadataAdd (row, PS_LIST_TAIL, "POSANG_EXT",     PS_DATA_F32, "Fitted position angle",
+                       0);
+        psMetadataAdd (row, PS_LIST_TAIL, "EXT_FLUX",       PS_DATA_F32, "Fitted flux",
+                       0);
+        psMetadataAdd (row, PS_LIST_TAIL, "EXT_CAL_MAG",    PS_DATA_F32, "Calibrated mag",
+                       0);
+        psMetadataAdd (row, PS_LIST_TAIL, "EXT_MAG_SIG",    PS_DATA_F32, "Mag sigma",
+                       0);
+        psMetadataAdd (row, PS_LIST_TAIL, "EXT_CHISQ",      PS_DATA_F32, "Chi^2 of fit",
+                       0);
+        psMetadataAdd (row, PS_LIST_TAIL, "EXT_NDOF",       PS_DATA_F32, "Fit degrees of freedom",
+                       0);
       }
     }
@@ -308,5 +306,4 @@
       addColumn("DEC_EXT_SIGMA", NULL, 0);
       addColumn("POSANG_EXT", NULL, 0);
-      addColumn("PLTSCALE_EXT", NULL, 0);
       addColumn("EXT_FLUX", NULL, 0);
       addColumn("EXT_CAL_MAG", NULL, 0);
